@feelflow/ffid-sdk 12.2.2 → 13.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -1
- package/dist/agency/index.cjs +7 -43
- package/dist/agency/index.d.cts +71 -79
- package/dist/agency/index.d.ts +71 -79
- package/dist/agency/index.js +7 -43
- package/dist/chunk-5FNSZ5WN.cjs +26 -0
- package/dist/chunk-D6CCHTHL.cjs +26 -0
- package/dist/chunk-HTFNV6DW.js +22 -0
- package/dist/{chunk-4UCL6JN6.cjs → chunk-IA6JV3TN.cjs} +13 -4
- package/dist/chunk-IQSXIOPK.js +22 -0
- package/dist/{chunk-RZCQ22GH.cjs → chunk-LX4RRB44.cjs} +12 -2
- package/dist/{chunk-OQCNCKJ4.js → chunk-TSFGRZLQ.js} +13 -4
- package/dist/{chunk-S2AEBJRX.js → chunk-ZIJ5SM4O.js} +12 -2
- package/dist/components/index.cjs +9 -8
- package/dist/components/index.js +2 -1
- package/dist/consent/index.cjs +64 -63
- package/dist/consent/index.js +2 -1
- package/dist/{ffid-client-C4Mjg70P.d.cts → ffid-client-CW3siYTe.d.cts} +3 -3
- package/dist/{ffid-client-E9ja3Jus.d.ts → ffid-client-CWvm_T2K.d.ts} +3 -3
- package/dist/index.cjs +115 -114
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +4 -3
- package/dist/legal/index.cjs +10 -0
- package/dist/legal/index.js +10 -0
- package/dist/server/index.cjs +18 -4
- package/dist/server/index.d.cts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +18 -4
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -20,6 +20,28 @@ yarn add @feelflow/ffid-sdk
|
|
|
20
20
|
pnpm add @feelflow/ffid-sdk
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
+
### 必要な Node.js のバージョン(13.0.0〜)
|
|
24
|
+
|
|
25
|
+
13.0.0 以降は **Node.js 26.12.1 以上**が必要です(`engines.node: ">=26.12.1"`)。Node 18 / 20 はサポート終了済みで、22 / 24 も外して FeelFlow の全サービスを Node 26 に統一しています。下限の 26.12.1 は 2026 年 10 月の Node セキュリティリリースです。
|
|
26
|
+
|
|
27
|
+
利用側は次の順で移行してください。
|
|
28
|
+
|
|
29
|
+
1. サービスの実行環境(ローカル・CI・Vercel 等の配備先)を Node 26.12.1 以上へ移す
|
|
30
|
+
2. その後に `@feelflow/ffid-sdk` を `^13.0.1` へ上げる(13.0.1 は API キーを載せた要求が 3xx を追従しないようにした修正を含みます。詳細は [CHANGELOG](./CHANGELOG.md) の 13.0.1)
|
|
31
|
+
|
|
32
|
+
Node 26.12.1 未満の環境(26.0〜26.12.0 を含む)で 13 を入れると npm は `EBADENGINE` の警告を出し(`engine-strict=true` ならインストールを拒否します)、動作は保証しません。Node を上げられないサービスは 12.x に留めてください。
|
|
33
|
+
|
|
34
|
+
13.0.0 では、ほかに代理店 API(`@feelflow/ffid-sdk/agency`)から次を外しています。どれも 12.x の時点で非推奨・保存されない・呼ぶと失敗する、のいずれかだったものです。
|
|
35
|
+
|
|
36
|
+
- 非推奨の markup 課金方式: `FFIDAgencyBillingType` の `'markup'` と、`defaultMarkupRate` / `defaultMarkupFixed` / `markupRate` / `markupFixed`(型からは外しましたが、FFID 側で markup の代理店が残っている間は応答に `'markup'` が届きえます。網羅的な `switch` には `default` を残してください)
|
|
37
|
+
- `updateBranding()` の引数の `logoUrl` / `faviconUrl`(引数の型は `FFIDUpdateAgencyBrandingRequest`。ロゴとファビコンは `uploadAsset()` で変える)
|
|
38
|
+
- 代理店クライアントの `getMembers()` / `addMember()` / `updateMember()` / `removeMember()`(FFID 側の route が無く失敗していた)。代理店のロールは代理店の実体である組織でのロールから導出されるので、メンバーは下の「Organization member management」の組織メンバー API に、`getAgency()` の応答の `organizationId`(13.0.0 で型に追加)を渡して管理する。`linkOrganization()` で紐付けた顧客組織の ID ではありません。⚠️ FFID は代理店そのものを応答の `data` に入れて返すので、値は `result.data.organizationId` にあります(SDK の型は `{ agency }` と包んだ形で、実際と食い違っています。#7177 で直します)
|
|
39
|
+
- 代理店クライアントの `createSubAgency()`(FFID が常に `SUB_AGENCY_CREATION_REMOVED` を返し、必ず失敗していた。サブ代理店の新規作成は廃止)
|
|
40
|
+
|
|
41
|
+
また、`FFIDAgencyErrorCode` に FFID の代理店のエラーコード表の全値(`UNKNOWN_SETTINGS_KEY` / `INVALID_FIELD_TYPE` / `MISSING_REQUIRED_FIELD` など 88 個)を加えました。閉じた union への追加なので、網羅的な `switch` や `Record<FFIDAgencyErrorCode, …>` には分岐・キーの追加が要ります。表の外のコード(共通層の `METHOD_NOT_ALLOWED` など)も届きうるので、`default` は残してください。
|
|
42
|
+
|
|
43
|
+
移行手順は [CHANGELOG](./CHANGELOG.md) の 13.0.0 を参照してください。
|
|
44
|
+
|
|
23
45
|
## 統合ガイド
|
|
24
46
|
|
|
25
47
|
### ニュースレター登録・目的別停止(12.2.0)
|
|
@@ -509,7 +531,7 @@ await ffid.updateMemberRole({
|
|
|
509
531
|
|
|
510
532
|
- `addMember` は既存 FFID ユーザーを active member として追加します。招待メール送信や token 発行は行いません。
|
|
511
533
|
- `role` は `admin` / `member` / `viewer` のみ指定可能です。`owner` は追加・昇格 API では扱いません。
|
|
512
|
-
-
|
|
534
|
+
- 位置引数の形 `ffid.addMember(organizationId, { email, role })` も使えます。12.x までの代理店クライアントの `addMember(agencyId, …)` と形は同じですが、第 1 引数は組織の ID(代理店なら `getAgency()` の応答の `data.organizationId`)で、`role` は上の 3 つだけです(旧代理店ロールの `sales` / `support` はありません)。
|
|
513
535
|
- 未登録の人を招待する(招待メールと受諾リンクを FFID が送る)ときは `inviteMember({ organizationId, email, role, inviterUserId })` を使います。`inviterUserId` は、サービスで招待を操作した人の FFID ユーザー ID です。FFID の「保留中の招待」と招待メールに、その人が招待者として出ます。
|
|
514
536
|
- service-key モードでは `inviterUserId` を渡してください。その人が対象の組織の owner / admin でなければ 403 `FORBIDDEN`(`details.reason: 'inviter_not_organization_admin'`)で、招待は作られません。省略すると従来どおり組織の owner が招待者になり、メールの招待者名は `service:<serviceCode>` です。
|
|
515
537
|
- token モードでは省略します(ログイン中の利用者が招待者になります)。別の人の ID を渡すと 400 `VALIDATION_ERROR` です。
|
package/dist/agency/index.cjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var chunkD6CCHTHL_cjs = require('../chunk-D6CCHTHL.cjs');
|
|
3
4
|
var chunkMDHKSVLP_cjs = require('../chunk-MDHKSVLP.cjs');
|
|
4
5
|
|
|
5
6
|
// src/agency/ffid-agency-client.ts
|
|
@@ -113,35 +114,6 @@ function createFFIDAgencyClient(config = {}) {
|
|
|
113
114
|
body: JSON.stringify(data)
|
|
114
115
|
});
|
|
115
116
|
}
|
|
116
|
-
async function getMembers(agencyId) {
|
|
117
|
-
const err = validateIds([agencyId, "agencyId"]);
|
|
118
|
-
if (err) return err;
|
|
119
|
-
return fetchWithCredentials(`/${encodeURIComponent(agencyId)}/members`);
|
|
120
|
-
}
|
|
121
|
-
async function addMember(agencyId, data) {
|
|
122
|
-
const err = validateIds([agencyId, "agencyId"]);
|
|
123
|
-
if (err) return err;
|
|
124
|
-
return fetchWithCredentials(`/${encodeURIComponent(agencyId)}/members`, {
|
|
125
|
-
method: "POST",
|
|
126
|
-
body: JSON.stringify(data)
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
async function updateMember(agencyId, userId, data) {
|
|
130
|
-
const err = validateIds([agencyId, "agencyId"], [userId, "userId"]);
|
|
131
|
-
if (err) return err;
|
|
132
|
-
return fetchWithCredentials(
|
|
133
|
-
`/${encodeURIComponent(agencyId)}/members/${encodeURIComponent(userId)}`,
|
|
134
|
-
{ method: "PUT", body: JSON.stringify(data) }
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
async function removeMember(agencyId, userId) {
|
|
138
|
-
const err = validateIds([agencyId, "agencyId"], [userId, "userId"]);
|
|
139
|
-
if (err) return err;
|
|
140
|
-
return fetchWithCredentials(
|
|
141
|
-
`/${encodeURIComponent(agencyId)}/members/${encodeURIComponent(userId)}`,
|
|
142
|
-
{ method: "DELETE" }
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
117
|
async function getOrganizations(agencyId) {
|
|
146
118
|
const err = validateIds([agencyId, "agencyId"]);
|
|
147
119
|
if (err) return err;
|
|
@@ -176,14 +148,6 @@ function createFFIDAgencyClient(config = {}) {
|
|
|
176
148
|
if (err) return err;
|
|
177
149
|
return fetchWithCredentials(`/${encodeURIComponent(agencyId)}/sub-agencies`);
|
|
178
150
|
}
|
|
179
|
-
async function createSubAgency(agencyId, data) {
|
|
180
|
-
const err = validateIds([agencyId, "agencyId"]);
|
|
181
|
-
if (err) return err;
|
|
182
|
-
return fetchWithCredentials(`/${encodeURIComponent(agencyId)}/sub-agencies`, {
|
|
183
|
-
method: "POST",
|
|
184
|
-
body: JSON.stringify(data)
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
151
|
async function getHierarchy(agencyId) {
|
|
188
152
|
const err = validateIds([agencyId, "agencyId"]);
|
|
189
153
|
if (err) return err;
|
|
@@ -289,11 +253,6 @@ function createFFIDAgencyClient(config = {}) {
|
|
|
289
253
|
getAgencies,
|
|
290
254
|
getAgency,
|
|
291
255
|
updateAgency,
|
|
292
|
-
// Members
|
|
293
|
-
getMembers,
|
|
294
|
-
addMember,
|
|
295
|
-
updateMember,
|
|
296
|
-
removeMember,
|
|
297
256
|
// Organizations
|
|
298
257
|
getOrganizations,
|
|
299
258
|
linkOrganization,
|
|
@@ -301,7 +260,6 @@ function createFFIDAgencyClient(config = {}) {
|
|
|
301
260
|
provisionOrganization,
|
|
302
261
|
// Sub-Agencies
|
|
303
262
|
getSubAgencies,
|
|
304
|
-
createSubAgency,
|
|
305
263
|
// Hierarchy
|
|
306
264
|
getHierarchy,
|
|
307
265
|
// Branding
|
|
@@ -362,6 +320,7 @@ function createFFIDAgencyServerClient(config) {
|
|
|
362
320
|
try {
|
|
363
321
|
response = await fetch(url, {
|
|
364
322
|
method: "POST",
|
|
323
|
+
...chunkD6CCHTHL_cjs.CREDENTIAL_REDIRECT_INIT,
|
|
365
324
|
headers: {
|
|
366
325
|
"Content-Type": "application/json",
|
|
367
326
|
[AGENCY_API_KEY_HEADER]: apiKey
|
|
@@ -379,6 +338,11 @@ function createFFIDAgencyServerClient(config) {
|
|
|
379
338
|
}
|
|
380
339
|
};
|
|
381
340
|
}
|
|
341
|
+
if (chunkD6CCHTHL_cjs.isRedirectResponse(response)) {
|
|
342
|
+
return {
|
|
343
|
+
error: { code: FFID_AGENCY_ERROR_CODES.NETWORK_ERROR, message: chunkD6CCHTHL_cjs.credentialRedirectMessage(response) }
|
|
344
|
+
};
|
|
345
|
+
}
|
|
382
346
|
let payload;
|
|
383
347
|
try {
|
|
384
348
|
payload = await response.json();
|
package/dist/agency/index.d.cts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
export { D as DEFAULT_API_BASE_URL } from '../constants-Ce2eXQtB.cjs';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* FFID の代理店 API が返すエラーコード(13.0.0〜)。
|
|
5
|
+
*
|
|
6
|
+
* FFID 本体の `src/lib/agencies/errors.ts` の `AGENCY_ERROR_CODES` の値を、定義順のまま写したもの。
|
|
7
|
+
* 食い違いは root の `npm run sdk:verify-sync`(`scripts/verify-sdk-constants-sync.ts`)が落とす。
|
|
8
|
+
* サーバーにコードを足したら、同じ PR でここにも足す(足さないと上の同期検査が落ちる)。閉じた union への
|
|
9
|
+
* 追加は網羅的な `switch` / `Record` を書く利用者には破壊的になるので、SDK の版の上げ方は FFID の
|
|
10
|
+
* GIT_WORKFLOW §8.2 に従って判断する。
|
|
11
|
+
*
|
|
12
|
+
* 型(`FFIDAgencyServerErrorCode`)を導くためだけに使い、公開 export にはしない。
|
|
13
|
+
*/
|
|
14
|
+
declare const FFID_AGENCY_SERVER_ERROR_CODES: readonly ["UNAUTHORIZED", "FORBIDDEN", "NOT_AGENCY_MEMBER", "NOT_AGENCY_ADMIN", "NOT_AGENCY_OWNER", "NOT_PLATFORM_OWNER", "SUB_AGENCY_CREATION_REMOVED", "MISSING_REQUIRED_FIELD", "INVALID_AGENCY_NAME", "INVALID_EMAIL", "INVALID_ROLE", "INVALID_AGENCY_ID", "INVALID_MEMBER_ID", "INVALID_ORGANIZATION_ID", "INVALID_COMMISSION_RATE", "INVALID_BILLING_OVERRIDE", "INVALID_STATUS", "INVALID_JSON", "AGENCY_NOT_FOUND", "MEMBER_NOT_FOUND", "USER_NOT_FOUND", "ORGANIZATION_NOT_FOUND", "MAX_HIERARCHY_DEPTH_EXCEEDED", "PARENT_AGENCY_NOT_FOUND", "SUB_AGENCY_NOT_FOUND", "INACTIVE_PARENT_AGENCY", "CIRCULAR_HIERARCHY_DETECTED", "MEMBER_ALREADY_EXISTS", "ORGANIZATION_ALREADY_LINKED", "ORGANIZATION_IS_AGENCY", "ORGANIZATION_LINKED_TO_OTHER_AGENCY", "CANNOT_REMOVE_OWNER", "CANNOT_CHANGE_OWNER_ROLE", "AGENCY_SLUG_EXISTS", "INVALID_BILLING_TYPE", "INVALID_FIELD_TYPE", "INVALID_INVITE_LINK_LABEL", "INVALID_SEARCH_QUERY", "UNKNOWN_SETTINGS_KEY", "BILLING_TYPE_CHANGE_NOT_ALLOWED", "STRIPE_CUSTOMER_REQUIRED", "INVOICE_NOT_FOUND", "INVALID_PAYMENT_TERMS", "INVALID_WHOLESALE_DISCOUNT_RATE", "NO_BILLABLE_ORGANIZATIONS", "INVOICE_FINALIZED_NOT_RECORDED", "INVOICE_SEND_FAILED", "INVALID_PERIOD", "INVALID_INVITE_LINK_LIMIT", "INVITE_LINK_EXPIRED", "INVITE_LINK_NOT_FOUND", "INVITE_LINK_REVOKED", "INVITE_LINK_EXHAUSTED", "ORGANIZATION_SLUG_CONFLICT", "INVALID_ORGANIZATION_SLUG", "INVALID_ORGANIZATION_NAME", "INVALID_BILLING_EMAIL", "INVALID_IDEMPOTENCY_KEY", "IDEMPOTENCY_KEY_REUSED", "ORGANIZATION_SLUG_RESERVED", "OWNER_ACCOUNT_UNAVAILABLE", "OWNER_ALREADY_SIGNED_IN", "OWNER_EMAIL_UNDELIVERABLE", "WELCOME_EMAIL_RECIPIENT_AMBIGUOUS", "WELCOME_EMAIL_COOLDOWN", "WELCOME_EMAIL_SEND_FAILED", "MISSING_API_KEY", "INVALID_API_KEY_FORMAT", "INVALID_API_KEY", "REVOKED_API_KEY", "EXPIRED_API_KEY", "SERVICE_UNAVAILABLE", "API_KEY_NOT_FOUND", "INVALID_API_KEY_ID", "INVALID_API_KEY_NAME", "INVALID_API_KEY_SCOPE", "INVALID_API_KEY_EXPIRY", "INVALID_WEBHOOK_URL", "INVALID_COLOR", "INVALID_DOMAIN", "DOMAIN_ALREADY_IN_USE", "DOMAIN_VERIFICATION_FAILED", "DOMAIN_NOT_CONFIGURED", "INVALID_COMPANY_NAME", "INVALID_FROM_EMAIL", "FILE_TOO_LARGE", "INVALID_FILE_TYPE", "FILE_UPLOAD_FAILED", "VERCEL_API_ERROR", "INTERNAL_ERROR", "SLUG_GENERATION_EXHAUSTED"];
|
|
15
|
+
|
|
3
16
|
/**
|
|
4
17
|
* FFID Agency SDK Type Definitions
|
|
5
18
|
*
|
|
6
19
|
* Types for the FeelFlow ID Agency Management SDK.
|
|
7
|
-
* Used for managing agencies,
|
|
20
|
+
* Used for managing agencies, organizations, branding,
|
|
8
21
|
* domain, email settings, billing, and hierarchy.
|
|
9
22
|
*/
|
|
23
|
+
|
|
10
24
|
/**
|
|
11
25
|
* Configuration for the FFID Agency Client
|
|
12
26
|
*/
|
|
@@ -31,19 +45,28 @@ type FFIDAgencyStatus = 'active' | 'suspended' | 'inactive';
|
|
|
31
45
|
/**
|
|
32
46
|
* 代理店の課金方式。
|
|
33
47
|
*
|
|
34
|
-
* `'markup'`
|
|
35
|
-
*
|
|
36
|
-
*
|
|
48
|
+
* 13.0.0 で非推奨の `'markup'` を外した(FFID #6507 / #6714)。ただし FFID 側の値と列の削除は #6714 で
|
|
49
|
+
* 別に行うので、それまでは markup の代理店の応答に `'markup'` が届きうる(SDK は応答を実行時に検証しない)。
|
|
50
|
+
* 受け取った値を網羅的に扱う箇所(`switch` / `Record<FFIDAgencyBillingType, …>` の参照)では、想定外の
|
|
51
|
+
* 値の分岐(`default`)を残すこと。
|
|
37
52
|
*/
|
|
38
|
-
type FFIDAgencyBillingType = 'direct' | 'consolidated'
|
|
39
|
-
type FFIDAgencyMemberRole = 'owner' | 'admin' | 'sales' | 'support';
|
|
40
|
-
type FFIDAgencyMemberStatus = 'active' | 'invited' | 'suspended';
|
|
53
|
+
type FFIDAgencyBillingType = 'direct' | 'consolidated';
|
|
41
54
|
type FFIDAgencyBillingOverride = 'default' | 'direct' | 'exempt';
|
|
42
55
|
type FFIDSslStatus = 'pending' | 'active' | 'failed';
|
|
43
56
|
interface FFIDAgency {
|
|
44
57
|
id: string;
|
|
45
58
|
name: string;
|
|
46
59
|
slug: string;
|
|
60
|
+
/**
|
|
61
|
+
* この代理店の実体である組織の ID(FFID #5817。13.0.0 で型に追加。FFID は以前から返している)。
|
|
62
|
+
* 代理店のロールはこの組織での利用者のロールから導出されるので、代理店のメンバーは
|
|
63
|
+
* `createFFIDClient()` の組織メンバー API(`listMembers` など)にこの ID を渡して管理する。
|
|
64
|
+
*
|
|
65
|
+
* ⚠️ `getAgency()` の応答では、FFID は代理店そのものを `data` に入れて返す(値は
|
|
66
|
+
* `result.data.organizationId`)。`FFIDAgencyClient.getAgency` の型が宣言する `{ agency }` の形とは
|
|
67
|
+
* 食い違っている(FFID #7177 で直す)。
|
|
68
|
+
*/
|
|
69
|
+
organizationId: string;
|
|
47
70
|
isPlatformOwner: boolean;
|
|
48
71
|
parentAgencyId: string | null;
|
|
49
72
|
status: FFIDAgencyStatus;
|
|
@@ -65,6 +88,13 @@ interface FFIDAgencyBrandingSettings {
|
|
|
65
88
|
secondaryColor?: string;
|
|
66
89
|
companyName?: string;
|
|
67
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* {@link FFIDAgencyClient.updateBranding} の引数。
|
|
93
|
+
*
|
|
94
|
+
* 13.0.0 で `logoUrl` / `faviconUrl` を外した(FFID #6972 / #6714)。FFID は 2 つを保存しないので、
|
|
95
|
+
* ロゴとファビコンは {@link FFIDAgencyClient.uploadAsset} で変える。
|
|
96
|
+
*/
|
|
97
|
+
type FFIDUpdateAgencyBrandingRequest = Omit<FFIDAgencyBrandingSettings, 'logoUrl' | 'faviconUrl'>;
|
|
68
98
|
interface FFIDAgencyDnsRecord {
|
|
69
99
|
type: string;
|
|
70
100
|
name: string;
|
|
@@ -81,23 +111,6 @@ interface FFIDAgencyEmailSettings {
|
|
|
81
111
|
fromEmail?: string;
|
|
82
112
|
replyTo?: string;
|
|
83
113
|
}
|
|
84
|
-
interface FFIDAgencyMember {
|
|
85
|
-
userId: string;
|
|
86
|
-
email: string;
|
|
87
|
-
displayName: string | null;
|
|
88
|
-
avatarUrl: string | null;
|
|
89
|
-
role: FFIDAgencyMemberRole;
|
|
90
|
-
status: FFIDAgencyMemberStatus;
|
|
91
|
-
joinedAt: string | null;
|
|
92
|
-
invitedAt: string | null;
|
|
93
|
-
}
|
|
94
|
-
interface FFIDAddAgencyMemberRequest {
|
|
95
|
-
email: string;
|
|
96
|
-
role?: FFIDAgencyMemberRole;
|
|
97
|
-
}
|
|
98
|
-
interface FFIDUpdateAgencyMemberRequest {
|
|
99
|
-
role: FFIDAgencyMemberRole;
|
|
100
|
-
}
|
|
101
114
|
interface FFIDAgencyOrganization {
|
|
102
115
|
id: string;
|
|
103
116
|
agencyId: string;
|
|
@@ -106,10 +119,6 @@ interface FFIDAgencyOrganization {
|
|
|
106
119
|
organizationSlug: string;
|
|
107
120
|
billingOverride: FFIDAgencyBillingOverride;
|
|
108
121
|
commissionRate: number | null;
|
|
109
|
-
/** @deprecated markup 課金方式は非推奨(FFID #6507)。帳票用の既存値を読むだけで、更新する API は無い。 */
|
|
110
|
-
markupRate: number | null;
|
|
111
|
-
/** @deprecated markup 課金方式は非推奨(FFID #6507)。帳票用の既存値を読むだけで、更新する API は無い。 */
|
|
112
|
-
markupFixed: number | null;
|
|
113
122
|
/** 組織単位の卸割引率 override(%、0〜100)。null = 代理店デフォルトに従う。 */
|
|
114
123
|
wholesaleDiscountRate: number | null;
|
|
115
124
|
notes: string | null;
|
|
@@ -180,11 +189,6 @@ interface FFIDLinkOrganizationRequest {
|
|
|
180
189
|
wholesaleDiscountRate?: number | null;
|
|
181
190
|
notes?: string;
|
|
182
191
|
}
|
|
183
|
-
interface FFIDCreateSubAgencyRequest {
|
|
184
|
-
name: string;
|
|
185
|
-
contactEmail?: string;
|
|
186
|
-
settings?: FFIDAgencySettings;
|
|
187
|
-
}
|
|
188
192
|
interface FFIDAgencyHierarchyNode {
|
|
189
193
|
agency: FFIDAgency;
|
|
190
194
|
children: FFIDAgencyHierarchyNode[];
|
|
@@ -201,10 +205,6 @@ interface FFIDAgencyBillingConfig {
|
|
|
201
205
|
stripeCustomerId: string | null;
|
|
202
206
|
invoiceEmail: string | null;
|
|
203
207
|
paymentTerms: number | null;
|
|
204
|
-
/** @deprecated markup 課金方式は非推奨(FFID #6507)。帳票用の既存値を読むだけで、更新する API は無い。 */
|
|
205
|
-
defaultMarkupRate: number | null;
|
|
206
|
-
/** @deprecated markup 課金方式は非推奨(FFID #6507)。帳票用の既存値を読むだけで、更新する API は無い。 */
|
|
207
|
-
defaultMarkupFixed: number | null;
|
|
208
208
|
/** 代理店デフォルト卸割引率(%、0〜100)。null = 未設定(定価請求)。 */
|
|
209
209
|
wholesaleDiscountRate: number | null;
|
|
210
210
|
}
|
|
@@ -212,16 +212,6 @@ interface FFIDUpdateAgencyBillingRequest {
|
|
|
212
212
|
billingType?: FFIDAgencyBillingType;
|
|
213
213
|
invoiceEmail?: string;
|
|
214
214
|
paymentTerms?: number;
|
|
215
|
-
/**
|
|
216
|
-
* @deprecated FFID はこの項目を受け付けず、送っても黙って捨てる(FFID #6507)。
|
|
217
|
-
* markup 課金方式は非推奨で、値を更新する手段は無い。
|
|
218
|
-
*/
|
|
219
|
-
defaultMarkupRate?: number;
|
|
220
|
-
/**
|
|
221
|
-
* @deprecated FFID はこの項目を受け付けず、送っても黙って捨てる(FFID #6507)。
|
|
222
|
-
* markup 課金方式は非推奨で、値を更新する手段は無い。
|
|
223
|
-
*/
|
|
224
|
-
defaultMarkupFixed?: number;
|
|
225
215
|
/** 代理店デフォルト卸割引率(%、0〜100)。null で未設定に戻す。 */
|
|
226
216
|
wholesaleDiscountRate?: number | null;
|
|
227
217
|
}
|
|
@@ -269,6 +259,10 @@ interface FFIDAgencyClient {
|
|
|
269
259
|
agencies: FFIDAgency[];
|
|
270
260
|
count: number;
|
|
271
261
|
}>>;
|
|
262
|
+
/**
|
|
263
|
+
* ⚠️ FFID は代理店そのものを `data` に入れて返す(`data.agency` ではない)。この型の `{ agency }` は
|
|
264
|
+
* 実際の応答と食い違っている。代理店クライアントの応答型の総点検は FFID #7177 で 13.x として行う。
|
|
265
|
+
*/
|
|
272
266
|
getAgency(agencyId: string): Promise<FFIDAgencyApiResponse<{
|
|
273
267
|
agency: FFIDAgency;
|
|
274
268
|
}>>;
|
|
@@ -281,19 +275,6 @@ interface FFIDAgencyClient {
|
|
|
281
275
|
updateAgency(agencyId: string, data: FFIDUpdateAgencyRequest): Promise<FFIDAgencyApiResponse<{
|
|
282
276
|
agency: FFIDAgency;
|
|
283
277
|
}>>;
|
|
284
|
-
getMembers(agencyId: string): Promise<FFIDAgencyApiResponse<{
|
|
285
|
-
members: FFIDAgencyMember[];
|
|
286
|
-
count: number;
|
|
287
|
-
}>>;
|
|
288
|
-
addMember(agencyId: string, data: FFIDAddAgencyMemberRequest): Promise<FFIDAgencyApiResponse<{
|
|
289
|
-
member: FFIDAgencyMember;
|
|
290
|
-
}>>;
|
|
291
|
-
updateMember(agencyId: string, userId: string, data: FFIDUpdateAgencyMemberRequest): Promise<FFIDAgencyApiResponse<{
|
|
292
|
-
member: FFIDAgencyMember;
|
|
293
|
-
}>>;
|
|
294
|
-
removeMember(agencyId: string, userId: string): Promise<FFIDAgencyApiResponse<{
|
|
295
|
-
message: string;
|
|
296
|
-
}>>;
|
|
297
278
|
getOrganizations(agencyId: string): Promise<FFIDAgencyApiResponse<{
|
|
298
279
|
organizations: FFIDAgencyOrganization[];
|
|
299
280
|
count: number;
|
|
@@ -318,9 +299,6 @@ interface FFIDAgencyClient {
|
|
|
318
299
|
agencies: FFIDAgency[];
|
|
319
300
|
count: number;
|
|
320
301
|
}>>;
|
|
321
|
-
createSubAgency(agencyId: string, data: FFIDCreateSubAgencyRequest): Promise<FFIDAgencyApiResponse<{
|
|
322
|
-
agency: FFIDAgency;
|
|
323
|
-
}>>;
|
|
324
302
|
getHierarchy(agencyId: string): Promise<FFIDAgencyApiResponse<FFIDAgencyHierarchyResponse>>;
|
|
325
303
|
getBranding(agencyId: string): Promise<FFIDAgencyApiResponse<{
|
|
326
304
|
branding: FFIDAgencyBrandingSettings;
|
|
@@ -329,15 +307,13 @@ interface FFIDAgencyClient {
|
|
|
329
307
|
* ブランディング(色 2 種・会社名)を更新する。
|
|
330
308
|
*
|
|
331
309
|
* FFID は型にないキーを 400 `UNKNOWN_SETTINGS_KEY` で拒否する(FFID #6972。`error.details.fields`
|
|
332
|
-
* にキー名)。`logoUrl` / `faviconUrl`
|
|
333
|
-
* ロゴとファビコンは {@link FFIDAgencyClient.uploadAsset} で変える。
|
|
334
|
-
* 引数の型から次の major 版で外す。
|
|
310
|
+
* にキー名)。`logoUrl` / `faviconUrl` は 13.0.0 で引数の型から外した。FFID は既知のキーとして
|
|
311
|
+
* 受け付けるが**保存しない** — ロゴとファビコンは {@link FFIDAgencyClient.uploadAsset} で変える。
|
|
335
312
|
*
|
|
336
|
-
*
|
|
337
|
-
*
|
|
338
|
-
* 比べるときは `(error.code as string) === 'UNKNOWN_SETTINGS_KEY'` とする。
|
|
313
|
+
* `UNKNOWN_SETTINGS_KEY` は 13.0.0 で {@link FFIDAgencyErrorCode} に入ったので、
|
|
314
|
+
* `error.code === 'UNKNOWN_SETTINGS_KEY'` とキャストなしで比べられる。
|
|
339
315
|
*/
|
|
340
|
-
updateBranding(agencyId: string, data:
|
|
316
|
+
updateBranding(agencyId: string, data: FFIDUpdateAgencyBrandingRequest): Promise<FFIDAgencyApiResponse<{
|
|
341
317
|
branding: FFIDAgencyBrandingSettings;
|
|
342
318
|
}>>;
|
|
343
319
|
uploadAsset(agencyId: string, file: File, type: FFIDAgencyAssetType): Promise<FFIDAgencyApiResponse<{
|
|
@@ -377,7 +353,21 @@ interface FFIDAgencyClient {
|
|
|
377
353
|
getRevenue(agencyId: string): Promise<FFIDAgencyApiResponse<FFIDAgencyRevenue>>;
|
|
378
354
|
}
|
|
379
355
|
type FFIDAgencySdkErrorCode = 'NETWORK_ERROR' | 'PARSE_ERROR' | 'UNKNOWN_ERROR' | 'VALIDATION_ERROR';
|
|
380
|
-
|
|
356
|
+
/**
|
|
357
|
+
* FFID の代理店 API が返すエラーコード。
|
|
358
|
+
*
|
|
359
|
+
* 13.0.0 から FFID の代理店のエラーコード表 `AGENCY_ERROR_CODES` の全値(`./server-error-codes`)を含む。
|
|
360
|
+
* 12.x までは 6 個だけで、`UNKNOWN_SETTINGS_KEY`(FFID #6972)や `INVALID_FIELD_TYPE` /
|
|
361
|
+
* `MISSING_REQUIRED_FIELD` など、FFID が実際に返すコードが入っていなかった。
|
|
362
|
+
*
|
|
363
|
+
* ⚠️ 代理店 API の応答に載るのはこの表のコードだけではない。共通層の 405 `METHOD_NOT_ALLOWED` や、
|
|
364
|
+
* 請求書の 500 `invalid_db_timestamp` などは表の外で、SDK はそのまま `error.code` に通す。
|
|
365
|
+
* `error.code` を網羅的に扱う箇所では、想定外の値の分岐(`default`)を残すこと。
|
|
366
|
+
*
|
|
367
|
+
* `NOT_FOUND` / `VALIDATION_ERROR` / `CONFLICT` は 12.x から型にあるが、`AGENCY_ERROR_CODES` に無い
|
|
368
|
+
* (`VALIDATION_ERROR` は SDK 自身の入力検査のコードとしても使う)。互換のため残している。
|
|
369
|
+
*/
|
|
370
|
+
type FFIDAgencyServerErrorCode = (typeof FFID_AGENCY_SERVER_ERROR_CODES)[number] | 'NOT_FOUND' | 'VALIDATION_ERROR' | 'CONFLICT';
|
|
381
371
|
type FFIDAgencyErrorCode = FFIDAgencySdkErrorCode | FFIDAgencyServerErrorCode;
|
|
382
372
|
interface FFIDAgencyServerError {
|
|
383
373
|
code: FFIDAgencyErrorCode;
|
|
@@ -435,10 +425,11 @@ type FFIDAgencyApiResponse<T> = {
|
|
|
435
425
|
/**
|
|
436
426
|
* このクライアントが返しうるエラーコード。
|
|
437
427
|
*
|
|
438
|
-
* `FFIDAgencyErrorCode`(SDK
|
|
439
|
-
*
|
|
440
|
-
* `
|
|
441
|
-
*
|
|
428
|
+
* `FFIDAgencyErrorCode`(SDK 内部で定義した閉じた集合)は 13.0.0 から FFID の
|
|
429
|
+
* `AGENCY_ERROR_CODES` の全値を含む(12.x までは `ORGANIZATION_SLUG_CONFLICT` /
|
|
430
|
+
* `INVALID_ORGANIZATION_SLUG` / `REVOKED_API_KEY` なども欠けていた)。それでも、
|
|
431
|
+
* SDK より新しい FFID が足したコードは SDK を上げるまで届きうる。閉じた union のふりを
|
|
432
|
+
* すると、利用者が書いた exhaustive な `switch` が実行時に `default` に落ちる。
|
|
442
433
|
* **開いた集合であることを型で正直に表す。**
|
|
443
434
|
*
|
|
444
435
|
* ⚠️ `types.ts` の `FFIDAgencyServerErrorCode` とは**別物**。あちらは
|
|
@@ -455,9 +446,10 @@ interface FFIDAgencyServerClientError {
|
|
|
455
446
|
/**
|
|
456
447
|
* サーバークライアントの応答。
|
|
457
448
|
*
|
|
458
|
-
* Cookie クライアントの `FFIDAgencyApiResponse` は `code` が閉じた union
|
|
459
|
-
*
|
|
460
|
-
*
|
|
449
|
+
* Cookie クライアントの `FFIDAgencyApiResponse` は `code` が閉じた union
|
|
450
|
+
* (`FFIDAgencyErrorCode`)だが、実際にはサーバーのコードを素通しするので、表の外の
|
|
451
|
+
* コードも届きうる(`FFIDAgencyServerErrorCode` の注記)。こちらは**サーバーのコードを
|
|
452
|
+
* そのまま通す**ことを型でも表すため、開いておく。
|
|
461
453
|
*/
|
|
462
454
|
type FFIDAgencyServerClientResponse<T> = {
|
|
463
455
|
data: T;
|
|
@@ -555,4 +547,4 @@ declare const FFID_AGENCY_ERROR_CODES: {
|
|
|
555
547
|
declare function createFFIDAgencyClient(config?: FFIDAgencyClientConfig): FFIDAgencyClient;
|
|
556
548
|
|
|
557
549
|
export { FFID_AGENCY_ERROR_CODES, createFFIDAgencyClient, createFFIDAgencyServerClient };
|
|
558
|
-
export type {
|
|
550
|
+
export type { FFIDAgency, FFIDAgencyApiResponse, FFIDAgencyAssetType, FFIDAgencyBillingConfig, FFIDAgencyBillingOverride, FFIDAgencyBillingSummary, FFIDAgencyBillingType, FFIDAgencyBrandingSettings, FFIDAgencyClient, FFIDAgencyClientConfig, FFIDAgencyDnsRecord, FFIDAgencyDomainSettings, FFIDAgencyEmailSettings, FFIDAgencyError, FFIDAgencyErrorCode, FFIDAgencyHierarchyNode, FFIDAgencyHierarchyResponse, FFIDAgencyInvoice, FFIDAgencyInvoiceStatus, FFIDAgencyLogger, FFIDAgencyOrganization, FFIDAgencyRevenue, FFIDAgencySdkErrorCode, FFIDAgencyServerClient, FFIDAgencyServerClientConfig, FFIDAgencyServerClientError, FFIDAgencyServerClientErrorCode, FFIDAgencyServerClientResponse, FFIDAgencyServerError, FFIDAgencyServerErrorCode, FFIDAgencyServerResponse, FFIDAgencySettings, FFIDAgencyStatus, FFIDLinkOrganizationRequest, FFIDProvisionOrganizationRequest, FFIDProvisionedOrganization, FFIDSetupDomainRequest, FFIDSslStatus, FFIDUpdateAgencyBillingRequest, FFIDUpdateAgencyBrandingRequest, FFIDUpdateAgencyRequest, FFIDUpdateEmailSettingsRequest, FFIDWelcomeEmailOutcome };
|