@feelflow/ffid-sdk 4.1.0 → 4.3.0
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 +66 -0
- package/dist/{chunk-P7HSNT4U.js → chunk-35UOD62N.js} +156 -3
- package/dist/{chunk-OYCNHBMG.cjs → chunk-5MO7G2JW.cjs} +156 -3
- package/dist/components/index.cjs +8 -8
- package/dist/components/index.d.cts +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.js +1 -1
- package/dist/{ffid-client-ZcJhRbD6.d.cts → ffid-client-BaStAONh.d.ts} +110 -11
- package/dist/{ffid-client-ZcJhRbD6.d.ts → ffid-client-DgprK2ec.d.cts} +110 -11
- package/dist/{index-Cn8-3hgb.d.cts → index-CInGR4I9.d.cts} +102 -11
- package/dist/{index-Cn8-3hgb.d.ts → index-CInGR4I9.d.ts} +102 -11
- package/dist/index.cjs +32 -32
- package/dist/index.d.cts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +2 -2
- package/dist/server/index.cjs +156 -3
- package/dist/server/index.d.cts +3 -2
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.js +156 -3
- package/dist/server/test/index.d.cts +2 -1
- package/dist/server/test/index.d.ts +2 -1
- package/dist/types-5g_Bg6Ey.d.cts +37 -0
- package/dist/types-5g_Bg6Ey.d.ts +37 -0
- package/dist/webhooks/index.d.cts +18 -0
- package/dist/webhooks/index.d.ts +18 -0
- package/package.json +1 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { E as EffectiveSubscriptionStatus } from './types-5g_Bg6Ey.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Inquiry types exposed by the FFID SDK.
|
|
3
5
|
*
|
|
@@ -183,6 +185,91 @@ interface FFIDCacheConfig {
|
|
|
183
185
|
ttl: number;
|
|
184
186
|
}
|
|
185
187
|
|
|
188
|
+
/**
|
|
189
|
+
* Canonical service-access types for subscription lifecycle decisions.
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
/** Subscription status values matching the FFID platform's SubscriptionStatus type */
|
|
193
|
+
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
194
|
+
interface FFIDSubscriptionCheckResponse {
|
|
195
|
+
hasActiveSubscription: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Canonical access decision returned by FFID's `/subscriptions/ext/check`.
|
|
198
|
+
*
|
|
199
|
+
* This is the server-side source of truth for service gates. Consumers
|
|
200
|
+
* should not recompute access from `currentPeriodEnd`, `past_due_since`, or
|
|
201
|
+
* local payment timestamps.
|
|
202
|
+
*/
|
|
203
|
+
hasAccess?: boolean;
|
|
204
|
+
/** True when `effectiveStatus === 'past_due_grace'`. */
|
|
205
|
+
isGrace?: boolean;
|
|
206
|
+
/** True when FFID's canonical effective status denies service access. */
|
|
207
|
+
isBlocked?: boolean;
|
|
208
|
+
organizationId: string | null;
|
|
209
|
+
subscriptionId: string | null;
|
|
210
|
+
status: FFIDSubscriptionStatus | null;
|
|
211
|
+
planCode: string | null;
|
|
212
|
+
currentPeriodEnd: string | null;
|
|
213
|
+
/**
|
|
214
|
+
* Semantic FFID access-control status. `null` means the organization has no
|
|
215
|
+
* subscription row for this service.
|
|
216
|
+
*/
|
|
217
|
+
effectiveStatus?: EffectiveSubscriptionStatus | null;
|
|
218
|
+
/**
|
|
219
|
+
* ISO timestamp at which `past_due_grace` flips to `blocked`; null outside
|
|
220
|
+
* the grace window.
|
|
221
|
+
*/
|
|
222
|
+
gracePeriodEndsAt?: string | null;
|
|
223
|
+
/** Whether a canceled subscription can be resumed via a re-subscription flow. */
|
|
224
|
+
reactivatable?: boolean;
|
|
225
|
+
}
|
|
226
|
+
type FFIDServiceAccessFailPolicy = 'failClosed';
|
|
227
|
+
type FFIDServiceAccessDenialReason = 'no_subscription' | 'grace_disallowed' | 'blocked' | 'canceled' | 'expired' | 'trial_expired' | 'ffid_unreachable';
|
|
228
|
+
interface FFIDCheckServiceAccessParams {
|
|
229
|
+
userId?: string;
|
|
230
|
+
organizationId: string;
|
|
231
|
+
/**
|
|
232
|
+
* Whether `past_due_grace` should keep access open.
|
|
233
|
+
*
|
|
234
|
+
* @default true
|
|
235
|
+
*/
|
|
236
|
+
allowGrace?: boolean;
|
|
237
|
+
/**
|
|
238
|
+
* Error policy when FFID cannot return a canonical decision.
|
|
239
|
+
*
|
|
240
|
+
* Currently only `failClosed` is supported: network/server/parse failures
|
|
241
|
+
* become `hasAccess=false` decisions with `denialReason='ffid_unreachable'`
|
|
242
|
+
* and the root cause in `decision.error`. Treat `hasAccess` as the gate.
|
|
243
|
+
*/
|
|
244
|
+
failPolicy?: FFIDServiceAccessFailPolicy;
|
|
245
|
+
}
|
|
246
|
+
interface FFIDServiceAccessError {
|
|
247
|
+
code: string;
|
|
248
|
+
message: string;
|
|
249
|
+
details?: unknown;
|
|
250
|
+
}
|
|
251
|
+
interface FFIDServiceAccessDecision {
|
|
252
|
+
hasAccess: boolean;
|
|
253
|
+
effectiveStatus: EffectiveSubscriptionStatus | null;
|
|
254
|
+
isGrace: boolean;
|
|
255
|
+
isBlocked: boolean;
|
|
256
|
+
allowGrace: boolean;
|
|
257
|
+
failPolicy: FFIDServiceAccessFailPolicy;
|
|
258
|
+
denialReason: FFIDServiceAccessDenialReason | null;
|
|
259
|
+
organizationId: string | null;
|
|
260
|
+
subscriptionId: string | null;
|
|
261
|
+
status: FFIDSubscriptionStatus | null;
|
|
262
|
+
planCode: string | null;
|
|
263
|
+
currentPeriodEnd: string | null;
|
|
264
|
+
gracePeriodEndsAt: string | null;
|
|
265
|
+
reactivatable: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Present when the decision was produced by the SDK fail-closed policy
|
|
268
|
+
* rather than by a successful FFID response.
|
|
269
|
+
*/
|
|
270
|
+
error?: FFIDServiceAccessError;
|
|
271
|
+
}
|
|
272
|
+
|
|
186
273
|
/** Billing interval for subscriptions */
|
|
187
274
|
type FFIDBillingInterval = 'monthly' | 'yearly';
|
|
188
275
|
/**
|
|
@@ -736,16 +823,7 @@ type FFIDApiResponse<T> = {
|
|
|
736
823
|
data?: undefined;
|
|
737
824
|
error: FFIDError;
|
|
738
825
|
};
|
|
739
|
-
|
|
740
|
-
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
741
|
-
interface FFIDSubscriptionCheckResponse {
|
|
742
|
-
hasActiveSubscription: boolean;
|
|
743
|
-
organizationId: string | null;
|
|
744
|
-
subscriptionId: string | null;
|
|
745
|
-
status: FFIDSubscriptionStatus | null;
|
|
746
|
-
planCode: string | null;
|
|
747
|
-
currentPeriodEnd: string | null;
|
|
748
|
-
}
|
|
826
|
+
|
|
749
827
|
/**
|
|
750
828
|
* Checkout session response from billing checkout endpoint
|
|
751
829
|
*/
|
|
@@ -789,6 +867,8 @@ interface FFIDCreatePortalParams {
|
|
|
789
867
|
|
|
790
868
|
/** Member role in an organization */
|
|
791
869
|
type FFIDMemberRole = 'owner' | 'admin' | 'member' | 'viewer';
|
|
870
|
+
/** Member role assignable through organization member management APIs */
|
|
871
|
+
type FFIDAssignableMemberRole = Exclude<FFIDMemberRole, 'owner'>;
|
|
792
872
|
/** Member status in an organization */
|
|
793
873
|
type FFIDMemberStatus = 'active' | 'invited' | 'suspended';
|
|
794
874
|
/** Organization member returned by the ext members API */
|
|
@@ -817,6 +897,19 @@ interface FFIDListMembersResponse {
|
|
|
817
897
|
organizationId: string;
|
|
818
898
|
members: FFIDOrganizationMember[];
|
|
819
899
|
}
|
|
900
|
+
/** Request body for addMember (ext) */
|
|
901
|
+
interface FFIDAddMemberRequest {
|
|
902
|
+
email: string;
|
|
903
|
+
role?: FFIDAssignableMemberRole;
|
|
904
|
+
}
|
|
905
|
+
/** Params object for addMember (ext), matching the existing organization members methods */
|
|
906
|
+
interface FFIDAddMemberParams extends FFIDAddMemberRequest {
|
|
907
|
+
organizationId: string;
|
|
908
|
+
}
|
|
909
|
+
/** Response from addMember (ext) */
|
|
910
|
+
interface FFIDAddMemberResponse {
|
|
911
|
+
member: FFIDOrganizationMember;
|
|
912
|
+
}
|
|
820
913
|
/** Response from updateMemberRole (ext) */
|
|
821
914
|
interface FFIDUpdateMemberRoleResponse {
|
|
822
915
|
member: FFIDOrganizationMember;
|
|
@@ -1140,9 +1233,15 @@ declare function createFFIDClient(config: FFIDConfig): {
|
|
|
1140
1233
|
userId?: string;
|
|
1141
1234
|
organizationId: string;
|
|
1142
1235
|
}) => Promise<FFIDApiResponse<FFIDSubscriptionCheckResponse>>;
|
|
1236
|
+
checkServiceAccess: (params: FFIDCheckServiceAccessParams) => Promise<FFIDApiResponse<FFIDServiceAccessDecision>>;
|
|
1237
|
+
requireServiceAccess: (params: FFIDCheckServiceAccessParams) => Promise<FFIDApiResponse<FFIDServiceAccessDecision>>;
|
|
1143
1238
|
listMembers: (params: {
|
|
1144
1239
|
organizationId: string;
|
|
1145
1240
|
}) => Promise<FFIDApiResponse<FFIDListMembersResponse>>;
|
|
1241
|
+
addMember: {
|
|
1242
|
+
(params: FFIDAddMemberParams): Promise<FFIDApiResponse<FFIDAddMemberResponse>>;
|
|
1243
|
+
(organizationId: string, data: FFIDAddMemberRequest): Promise<FFIDApiResponse<FFIDAddMemberResponse>>;
|
|
1244
|
+
};
|
|
1146
1245
|
updateMemberRole: (params: {
|
|
1147
1246
|
organizationId: string;
|
|
1148
1247
|
userId: string;
|
|
@@ -1212,4 +1311,4 @@ declare function createFFIDClient(config: FFIDConfig): {
|
|
|
1212
1311
|
/** Type of the FFID client */
|
|
1213
1312
|
type FFIDClient = ReturnType<typeof createFFIDClient>;
|
|
1214
1313
|
|
|
1215
|
-
export { type FFIDLogger as F, type TokenData as T, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type
|
|
1314
|
+
export { type FFIDUpdateUserProfileRequest as A, type FFIDUser as B, type FFIDUserProfile as C, type TokenStore as D, createFFIDClient as E, type FFIDLogger as F, createTokenStore as G, type TokenData as T, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDAddMemberParams as f, type FFIDAddMemberRequest as g, type FFIDAddMemberResponse as h, type FFIDAssignableMemberRole as i, type FFIDCacheConfig as j, type FFIDClient as k, type FFIDConfig as l, type FFIDListMembersResponse as m, type FFIDMemberRole as n, type FFIDOrganization as o, type FFIDOrganizationMember as p, type FFIDOtpSendResponse as q, type FFIDOtpVerifyResponse as r, type FFIDPasswordResetConfirmResponse as s, type FFIDPasswordResetResponse as t, type FFIDPasswordResetVerifyResponse as u, type FFIDProfileCallOptions as v, type FFIDRemoveMemberResponse as w, type FFIDResetSessionResponse as x, type FFIDSubscription as y, type FFIDUpdateMemberRoleResponse as z };
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { E as EffectiveSubscriptionStatus } from './types-5g_Bg6Ey.cjs';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Inquiry types exposed by the FFID SDK.
|
|
3
5
|
*
|
|
@@ -183,6 +185,91 @@ interface FFIDCacheConfig {
|
|
|
183
185
|
ttl: number;
|
|
184
186
|
}
|
|
185
187
|
|
|
188
|
+
/**
|
|
189
|
+
* Canonical service-access types for subscription lifecycle decisions.
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
/** Subscription status values matching the FFID platform's SubscriptionStatus type */
|
|
193
|
+
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
194
|
+
interface FFIDSubscriptionCheckResponse {
|
|
195
|
+
hasActiveSubscription: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* Canonical access decision returned by FFID's `/subscriptions/ext/check`.
|
|
198
|
+
*
|
|
199
|
+
* This is the server-side source of truth for service gates. Consumers
|
|
200
|
+
* should not recompute access from `currentPeriodEnd`, `past_due_since`, or
|
|
201
|
+
* local payment timestamps.
|
|
202
|
+
*/
|
|
203
|
+
hasAccess?: boolean;
|
|
204
|
+
/** True when `effectiveStatus === 'past_due_grace'`. */
|
|
205
|
+
isGrace?: boolean;
|
|
206
|
+
/** True when FFID's canonical effective status denies service access. */
|
|
207
|
+
isBlocked?: boolean;
|
|
208
|
+
organizationId: string | null;
|
|
209
|
+
subscriptionId: string | null;
|
|
210
|
+
status: FFIDSubscriptionStatus | null;
|
|
211
|
+
planCode: string | null;
|
|
212
|
+
currentPeriodEnd: string | null;
|
|
213
|
+
/**
|
|
214
|
+
* Semantic FFID access-control status. `null` means the organization has no
|
|
215
|
+
* subscription row for this service.
|
|
216
|
+
*/
|
|
217
|
+
effectiveStatus?: EffectiveSubscriptionStatus | null;
|
|
218
|
+
/**
|
|
219
|
+
* ISO timestamp at which `past_due_grace` flips to `blocked`; null outside
|
|
220
|
+
* the grace window.
|
|
221
|
+
*/
|
|
222
|
+
gracePeriodEndsAt?: string | null;
|
|
223
|
+
/** Whether a canceled subscription can be resumed via a re-subscription flow. */
|
|
224
|
+
reactivatable?: boolean;
|
|
225
|
+
}
|
|
226
|
+
type FFIDServiceAccessFailPolicy = 'failClosed';
|
|
227
|
+
type FFIDServiceAccessDenialReason = 'no_subscription' | 'grace_disallowed' | 'blocked' | 'canceled' | 'expired' | 'trial_expired' | 'ffid_unreachable';
|
|
228
|
+
interface FFIDCheckServiceAccessParams {
|
|
229
|
+
userId?: string;
|
|
230
|
+
organizationId: string;
|
|
231
|
+
/**
|
|
232
|
+
* Whether `past_due_grace` should keep access open.
|
|
233
|
+
*
|
|
234
|
+
* @default true
|
|
235
|
+
*/
|
|
236
|
+
allowGrace?: boolean;
|
|
237
|
+
/**
|
|
238
|
+
* Error policy when FFID cannot return a canonical decision.
|
|
239
|
+
*
|
|
240
|
+
* Currently only `failClosed` is supported: network/server/parse failures
|
|
241
|
+
* become `hasAccess=false` decisions with `denialReason='ffid_unreachable'`
|
|
242
|
+
* and the root cause in `decision.error`. Treat `hasAccess` as the gate.
|
|
243
|
+
*/
|
|
244
|
+
failPolicy?: FFIDServiceAccessFailPolicy;
|
|
245
|
+
}
|
|
246
|
+
interface FFIDServiceAccessError {
|
|
247
|
+
code: string;
|
|
248
|
+
message: string;
|
|
249
|
+
details?: unknown;
|
|
250
|
+
}
|
|
251
|
+
interface FFIDServiceAccessDecision {
|
|
252
|
+
hasAccess: boolean;
|
|
253
|
+
effectiveStatus: EffectiveSubscriptionStatus | null;
|
|
254
|
+
isGrace: boolean;
|
|
255
|
+
isBlocked: boolean;
|
|
256
|
+
allowGrace: boolean;
|
|
257
|
+
failPolicy: FFIDServiceAccessFailPolicy;
|
|
258
|
+
denialReason: FFIDServiceAccessDenialReason | null;
|
|
259
|
+
organizationId: string | null;
|
|
260
|
+
subscriptionId: string | null;
|
|
261
|
+
status: FFIDSubscriptionStatus | null;
|
|
262
|
+
planCode: string | null;
|
|
263
|
+
currentPeriodEnd: string | null;
|
|
264
|
+
gracePeriodEndsAt: string | null;
|
|
265
|
+
reactivatable: boolean;
|
|
266
|
+
/**
|
|
267
|
+
* Present when the decision was produced by the SDK fail-closed policy
|
|
268
|
+
* rather than by a successful FFID response.
|
|
269
|
+
*/
|
|
270
|
+
error?: FFIDServiceAccessError;
|
|
271
|
+
}
|
|
272
|
+
|
|
186
273
|
/** Billing interval for subscriptions */
|
|
187
274
|
type FFIDBillingInterval = 'monthly' | 'yearly';
|
|
188
275
|
/**
|
|
@@ -736,16 +823,7 @@ type FFIDApiResponse<T> = {
|
|
|
736
823
|
data?: undefined;
|
|
737
824
|
error: FFIDError;
|
|
738
825
|
};
|
|
739
|
-
|
|
740
|
-
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
741
|
-
interface FFIDSubscriptionCheckResponse {
|
|
742
|
-
hasActiveSubscription: boolean;
|
|
743
|
-
organizationId: string | null;
|
|
744
|
-
subscriptionId: string | null;
|
|
745
|
-
status: FFIDSubscriptionStatus | null;
|
|
746
|
-
planCode: string | null;
|
|
747
|
-
currentPeriodEnd: string | null;
|
|
748
|
-
}
|
|
826
|
+
|
|
749
827
|
/**
|
|
750
828
|
* Checkout session response from billing checkout endpoint
|
|
751
829
|
*/
|
|
@@ -789,6 +867,8 @@ interface FFIDCreatePortalParams {
|
|
|
789
867
|
|
|
790
868
|
/** Member role in an organization */
|
|
791
869
|
type FFIDMemberRole = 'owner' | 'admin' | 'member' | 'viewer';
|
|
870
|
+
/** Member role assignable through organization member management APIs */
|
|
871
|
+
type FFIDAssignableMemberRole = Exclude<FFIDMemberRole, 'owner'>;
|
|
792
872
|
/** Member status in an organization */
|
|
793
873
|
type FFIDMemberStatus = 'active' | 'invited' | 'suspended';
|
|
794
874
|
/** Organization member returned by the ext members API */
|
|
@@ -817,6 +897,19 @@ interface FFIDListMembersResponse {
|
|
|
817
897
|
organizationId: string;
|
|
818
898
|
members: FFIDOrganizationMember[];
|
|
819
899
|
}
|
|
900
|
+
/** Request body for addMember (ext) */
|
|
901
|
+
interface FFIDAddMemberRequest {
|
|
902
|
+
email: string;
|
|
903
|
+
role?: FFIDAssignableMemberRole;
|
|
904
|
+
}
|
|
905
|
+
/** Params object for addMember (ext), matching the existing organization members methods */
|
|
906
|
+
interface FFIDAddMemberParams extends FFIDAddMemberRequest {
|
|
907
|
+
organizationId: string;
|
|
908
|
+
}
|
|
909
|
+
/** Response from addMember (ext) */
|
|
910
|
+
interface FFIDAddMemberResponse {
|
|
911
|
+
member: FFIDOrganizationMember;
|
|
912
|
+
}
|
|
820
913
|
/** Response from updateMemberRole (ext) */
|
|
821
914
|
interface FFIDUpdateMemberRoleResponse {
|
|
822
915
|
member: FFIDOrganizationMember;
|
|
@@ -1140,9 +1233,15 @@ declare function createFFIDClient(config: FFIDConfig): {
|
|
|
1140
1233
|
userId?: string;
|
|
1141
1234
|
organizationId: string;
|
|
1142
1235
|
}) => Promise<FFIDApiResponse<FFIDSubscriptionCheckResponse>>;
|
|
1236
|
+
checkServiceAccess: (params: FFIDCheckServiceAccessParams) => Promise<FFIDApiResponse<FFIDServiceAccessDecision>>;
|
|
1237
|
+
requireServiceAccess: (params: FFIDCheckServiceAccessParams) => Promise<FFIDApiResponse<FFIDServiceAccessDecision>>;
|
|
1143
1238
|
listMembers: (params: {
|
|
1144
1239
|
organizationId: string;
|
|
1145
1240
|
}) => Promise<FFIDApiResponse<FFIDListMembersResponse>>;
|
|
1241
|
+
addMember: {
|
|
1242
|
+
(params: FFIDAddMemberParams): Promise<FFIDApiResponse<FFIDAddMemberResponse>>;
|
|
1243
|
+
(organizationId: string, data: FFIDAddMemberRequest): Promise<FFIDApiResponse<FFIDAddMemberResponse>>;
|
|
1244
|
+
};
|
|
1146
1245
|
updateMemberRole: (params: {
|
|
1147
1246
|
organizationId: string;
|
|
1148
1247
|
userId: string;
|
|
@@ -1212,4 +1311,4 @@ declare function createFFIDClient(config: FFIDConfig): {
|
|
|
1212
1311
|
/** Type of the FFID client */
|
|
1213
1312
|
type FFIDClient = ReturnType<typeof createFFIDClient>;
|
|
1214
1313
|
|
|
1215
|
-
export { type FFIDLogger as F, type TokenData as T, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type
|
|
1314
|
+
export { type FFIDUpdateUserProfileRequest as A, type FFIDUser as B, type FFIDUserProfile as C, type TokenStore as D, createFFIDClient as E, type FFIDLogger as F, createTokenStore as G, type TokenData as T, type FFIDError as a, type FFIDCacheAdapter as b, type FFIDVerifyAccessTokenOptions as c, type FFIDApiResponse as d, type FFIDOAuthUserInfo as e, type FFIDAddMemberParams as f, type FFIDAddMemberRequest as g, type FFIDAddMemberResponse as h, type FFIDAssignableMemberRole as i, type FFIDCacheConfig as j, type FFIDClient as k, type FFIDConfig as l, type FFIDListMembersResponse as m, type FFIDMemberRole as n, type FFIDOrganization as o, type FFIDOrganizationMember as p, type FFIDOtpSendResponse as q, type FFIDOtpVerifyResponse as r, type FFIDPasswordResetConfirmResponse as s, type FFIDPasswordResetResponse as t, type FFIDPasswordResetVerifyResponse as u, type FFIDProfileCallOptions as v, type FFIDRemoveMemberResponse as w, type FFIDResetSessionResponse as x, type FFIDSubscription as y, type FFIDUpdateMemberRoleResponse as z };
|
|
@@ -58,6 +58,91 @@ interface FFIDCacheConfig {
|
|
|
58
58
|
*/
|
|
59
59
|
type EffectiveSubscriptionStatus = 'active' | 'past_due_grace' | 'blocked' | 'canceled' | 'trial_expired' | 'expired';
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Canonical service-access types for subscription lifecycle decisions.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/** Subscription status values matching the FFID platform's SubscriptionStatus type */
|
|
66
|
+
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
67
|
+
interface FFIDSubscriptionCheckResponse {
|
|
68
|
+
hasActiveSubscription: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Canonical access decision returned by FFID's `/subscriptions/ext/check`.
|
|
71
|
+
*
|
|
72
|
+
* This is the server-side source of truth for service gates. Consumers
|
|
73
|
+
* should not recompute access from `currentPeriodEnd`, `past_due_since`, or
|
|
74
|
+
* local payment timestamps.
|
|
75
|
+
*/
|
|
76
|
+
hasAccess?: boolean;
|
|
77
|
+
/** True when `effectiveStatus === 'past_due_grace'`. */
|
|
78
|
+
isGrace?: boolean;
|
|
79
|
+
/** True when FFID's canonical effective status denies service access. */
|
|
80
|
+
isBlocked?: boolean;
|
|
81
|
+
organizationId: string | null;
|
|
82
|
+
subscriptionId: string | null;
|
|
83
|
+
status: FFIDSubscriptionStatus | null;
|
|
84
|
+
planCode: string | null;
|
|
85
|
+
currentPeriodEnd: string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Semantic FFID access-control status. `null` means the organization has no
|
|
88
|
+
* subscription row for this service.
|
|
89
|
+
*/
|
|
90
|
+
effectiveStatus?: EffectiveSubscriptionStatus | null;
|
|
91
|
+
/**
|
|
92
|
+
* ISO timestamp at which `past_due_grace` flips to `blocked`; null outside
|
|
93
|
+
* the grace window.
|
|
94
|
+
*/
|
|
95
|
+
gracePeriodEndsAt?: string | null;
|
|
96
|
+
/** Whether a canceled subscription can be resumed via a re-subscription flow. */
|
|
97
|
+
reactivatable?: boolean;
|
|
98
|
+
}
|
|
99
|
+
type FFIDServiceAccessFailPolicy = 'failClosed';
|
|
100
|
+
type FFIDServiceAccessDenialReason = 'no_subscription' | 'grace_disallowed' | 'blocked' | 'canceled' | 'expired' | 'trial_expired' | 'ffid_unreachable';
|
|
101
|
+
interface FFIDCheckServiceAccessParams {
|
|
102
|
+
userId?: string;
|
|
103
|
+
organizationId: string;
|
|
104
|
+
/**
|
|
105
|
+
* Whether `past_due_grace` should keep access open.
|
|
106
|
+
*
|
|
107
|
+
* @default true
|
|
108
|
+
*/
|
|
109
|
+
allowGrace?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Error policy when FFID cannot return a canonical decision.
|
|
112
|
+
*
|
|
113
|
+
* Currently only `failClosed` is supported: network/server/parse failures
|
|
114
|
+
* become `hasAccess=false` decisions with `denialReason='ffid_unreachable'`
|
|
115
|
+
* and the root cause in `decision.error`. Treat `hasAccess` as the gate.
|
|
116
|
+
*/
|
|
117
|
+
failPolicy?: FFIDServiceAccessFailPolicy;
|
|
118
|
+
}
|
|
119
|
+
interface FFIDServiceAccessError {
|
|
120
|
+
code: string;
|
|
121
|
+
message: string;
|
|
122
|
+
details?: unknown;
|
|
123
|
+
}
|
|
124
|
+
interface FFIDServiceAccessDecision {
|
|
125
|
+
hasAccess: boolean;
|
|
126
|
+
effectiveStatus: EffectiveSubscriptionStatus | null;
|
|
127
|
+
isGrace: boolean;
|
|
128
|
+
isBlocked: boolean;
|
|
129
|
+
allowGrace: boolean;
|
|
130
|
+
failPolicy: FFIDServiceAccessFailPolicy;
|
|
131
|
+
denialReason: FFIDServiceAccessDenialReason | null;
|
|
132
|
+
organizationId: string | null;
|
|
133
|
+
subscriptionId: string | null;
|
|
134
|
+
status: FFIDSubscriptionStatus | null;
|
|
135
|
+
planCode: string | null;
|
|
136
|
+
currentPeriodEnd: string | null;
|
|
137
|
+
gracePeriodEndsAt: string | null;
|
|
138
|
+
reactivatable: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Present when the decision was produced by the SDK fail-closed policy
|
|
141
|
+
* rather than by a successful FFID response.
|
|
142
|
+
*/
|
|
143
|
+
error?: FFIDServiceAccessError;
|
|
144
|
+
}
|
|
145
|
+
|
|
61
146
|
/**
|
|
62
147
|
* FFID SDK Type Definitions
|
|
63
148
|
*
|
|
@@ -444,16 +529,7 @@ type FFIDApiResponse<T> = {
|
|
|
444
529
|
data?: undefined;
|
|
445
530
|
error: FFIDError;
|
|
446
531
|
};
|
|
447
|
-
|
|
448
|
-
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
449
|
-
interface FFIDSubscriptionCheckResponse {
|
|
450
|
-
hasActiveSubscription: boolean;
|
|
451
|
-
organizationId: string | null;
|
|
452
|
-
subscriptionId: string | null;
|
|
453
|
-
status: FFIDSubscriptionStatus | null;
|
|
454
|
-
planCode: string | null;
|
|
455
|
-
currentPeriodEnd: string | null;
|
|
456
|
-
}
|
|
532
|
+
|
|
457
533
|
/**
|
|
458
534
|
* Checkout session response from billing checkout endpoint
|
|
459
535
|
*/
|
|
@@ -497,6 +573,8 @@ interface FFIDCreatePortalParams {
|
|
|
497
573
|
|
|
498
574
|
/** Member role in an organization */
|
|
499
575
|
type FFIDMemberRole = 'owner' | 'admin' | 'member' | 'viewer';
|
|
576
|
+
/** Member role assignable through organization member management APIs */
|
|
577
|
+
type FFIDAssignableMemberRole = Exclude<FFIDMemberRole, 'owner'>;
|
|
500
578
|
/** Member status in an organization */
|
|
501
579
|
type FFIDMemberStatus = 'active' | 'invited' | 'suspended';
|
|
502
580
|
/** Organization member returned by the ext members API */
|
|
@@ -525,6 +603,19 @@ interface FFIDListMembersResponse {
|
|
|
525
603
|
organizationId: string;
|
|
526
604
|
members: FFIDOrganizationMember[];
|
|
527
605
|
}
|
|
606
|
+
/** Request body for addMember (ext) */
|
|
607
|
+
interface FFIDAddMemberRequest {
|
|
608
|
+
email: string;
|
|
609
|
+
role?: FFIDAssignableMemberRole;
|
|
610
|
+
}
|
|
611
|
+
/** Params object for addMember (ext), matching the existing organization members methods */
|
|
612
|
+
interface FFIDAddMemberParams extends FFIDAddMemberRequest {
|
|
613
|
+
organizationId: string;
|
|
614
|
+
}
|
|
615
|
+
/** Response from addMember (ext) */
|
|
616
|
+
interface FFIDAddMemberResponse {
|
|
617
|
+
member: FFIDOrganizationMember;
|
|
618
|
+
}
|
|
528
619
|
/** Response from updateMemberRole (ext) */
|
|
529
620
|
interface FFIDUpdateMemberRoleResponse {
|
|
530
621
|
member: FFIDOrganizationMember;
|
|
@@ -1442,4 +1533,4 @@ interface FFIDInquiryFormPlaceholderContext {
|
|
|
1442
1533
|
}
|
|
1443
1534
|
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
|
|
1444
1535
|
|
|
1445
|
-
export { type
|
|
1536
|
+
export { type FFIDInquiryCategorySite2026 as $, type FFIDInquiryCreateResponse as A, type FFIDAuthMode as B, type FFIDLogger as C, type FFIDCacheAdapter as D, type FFIDUser as E, type FFIDSubscriptionStatus as F, type FFIDOrganization as G, type FFIDSubscription as H, type FFIDSubscriptionContextValue as I, type EffectiveSubscriptionStatus as J, type FFIDAnnouncementsClientConfig as K, type ListAnnouncementsOptions as L, type FFIDAnnouncementsApiResponse as M, type AnnouncementListResponse as N, type FFIDAnnouncementsLogger as O, type Announcement as P, type AnnouncementStatus as Q, type AnnouncementType as R, FFIDAnnouncementBadge as S, FFIDAnnouncementList as T, type FFIDAnnouncementsError as U, type FFIDAnnouncementsErrorCode as V, type FFIDAnnouncementsServerResponse as W, type FFIDAssignableMemberRole as X, type FFIDCacheConfig as Y, type FFIDContextValue as Z, type FFIDInquiryCategory as _, type FFIDConfig as a, FFIDInquiryForm as a0, type FFIDInquiryFormCategoryItem as a1, type FFIDInquiryFormClassNames as a2, type FFIDInquiryFormLegalLayout as a3, type FFIDInquiryFormOrganization as a4, type FFIDInquiryFormPlaceholderContext as a5, type FFIDInquiryFormPrefill as a6, type FFIDInquiryFormProps as a7, type FFIDInquiryFormSubmitData as a8, type FFIDInquiryFormSubmitResult as a9, type FFIDOrganizationSwitcherClassNames as aA, type FFIDOrganizationSwitcherProps as aB, type FFIDSubscriptionBadgeClassNames as aC, type FFIDSubscriptionBadgeProps as aD, type FFIDUserMenuClassNames as aE, type FFIDUserMenuProps as aF, type FFIDJwtClaims as aa, FFIDLoginButton as ab, type FFIDMemberStatus as ac, type FFIDOAuthTokenResponse as ad, type FFIDOAuthUserInfoMemberRole as ae, type FFIDOAuthUserInfoSubscription as af, type FFIDOrganizationMember as ag, FFIDOrganizationSwitcher as ah, type FFIDRedirectErrorCode as ai, type FFIDSeatModel as aj, type FFIDServiceAccessDenialReason as ak, type FFIDServiceAccessFailPolicy as al, FFIDSubscriptionBadge as am, type FFIDTokenIntrospectionResponse as an, FFIDUserMenu as ao, FFID_INQUIRY_CATEGORIES as ap, FFID_INQUIRY_CATEGORIES_SITE_2026 as aq, type UseFFIDAnnouncementsOptions as ar, type UseFFIDAnnouncementsReturn as as, isFFIDInquiryCategorySite2026 as at, useFFIDAnnouncements as au, type FFIDAnnouncementBadgeClassNames as av, type FFIDAnnouncementBadgeProps as aw, type FFIDAnnouncementListClassNames as ax, type FFIDAnnouncementListProps as ay, type FFIDLoginButtonProps as az, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDCheckServiceAccessParams as g, type FFIDServiceAccessDecision as h, type FFIDListMembersResponse as i, type FFIDAddMemberParams as j, type FFIDAddMemberResponse as k, type FFIDAddMemberRequest as l, type FFIDMemberRole as m, type FFIDUpdateMemberRoleResponse as n, type FFIDRemoveMemberResponse as o, type FFIDProfileCallOptions as p, type FFIDUserProfile as q, type FFIDUpdateUserProfileRequest as r, type FFIDAnalyticsConfig as s, type FFIDCreateCheckoutParams as t, type FFIDCheckoutSessionResponse as u, type FFIDCreatePortalParams as v, type FFIDPortalSessionResponse as w, type FFIDVerifyAccessTokenOptions as x, type FFIDOAuthUserInfo as y, type FFIDInquiryCreateParams as z };
|
|
@@ -58,6 +58,91 @@ interface FFIDCacheConfig {
|
|
|
58
58
|
*/
|
|
59
59
|
type EffectiveSubscriptionStatus = 'active' | 'past_due_grace' | 'blocked' | 'canceled' | 'trial_expired' | 'expired';
|
|
60
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Canonical service-access types for subscription lifecycle decisions.
|
|
63
|
+
*/
|
|
64
|
+
|
|
65
|
+
/** Subscription status values matching the FFID platform's SubscriptionStatus type */
|
|
66
|
+
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
67
|
+
interface FFIDSubscriptionCheckResponse {
|
|
68
|
+
hasActiveSubscription: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Canonical access decision returned by FFID's `/subscriptions/ext/check`.
|
|
71
|
+
*
|
|
72
|
+
* This is the server-side source of truth for service gates. Consumers
|
|
73
|
+
* should not recompute access from `currentPeriodEnd`, `past_due_since`, or
|
|
74
|
+
* local payment timestamps.
|
|
75
|
+
*/
|
|
76
|
+
hasAccess?: boolean;
|
|
77
|
+
/** True when `effectiveStatus === 'past_due_grace'`. */
|
|
78
|
+
isGrace?: boolean;
|
|
79
|
+
/** True when FFID's canonical effective status denies service access. */
|
|
80
|
+
isBlocked?: boolean;
|
|
81
|
+
organizationId: string | null;
|
|
82
|
+
subscriptionId: string | null;
|
|
83
|
+
status: FFIDSubscriptionStatus | null;
|
|
84
|
+
planCode: string | null;
|
|
85
|
+
currentPeriodEnd: string | null;
|
|
86
|
+
/**
|
|
87
|
+
* Semantic FFID access-control status. `null` means the organization has no
|
|
88
|
+
* subscription row for this service.
|
|
89
|
+
*/
|
|
90
|
+
effectiveStatus?: EffectiveSubscriptionStatus | null;
|
|
91
|
+
/**
|
|
92
|
+
* ISO timestamp at which `past_due_grace` flips to `blocked`; null outside
|
|
93
|
+
* the grace window.
|
|
94
|
+
*/
|
|
95
|
+
gracePeriodEndsAt?: string | null;
|
|
96
|
+
/** Whether a canceled subscription can be resumed via a re-subscription flow. */
|
|
97
|
+
reactivatable?: boolean;
|
|
98
|
+
}
|
|
99
|
+
type FFIDServiceAccessFailPolicy = 'failClosed';
|
|
100
|
+
type FFIDServiceAccessDenialReason = 'no_subscription' | 'grace_disallowed' | 'blocked' | 'canceled' | 'expired' | 'trial_expired' | 'ffid_unreachable';
|
|
101
|
+
interface FFIDCheckServiceAccessParams {
|
|
102
|
+
userId?: string;
|
|
103
|
+
organizationId: string;
|
|
104
|
+
/**
|
|
105
|
+
* Whether `past_due_grace` should keep access open.
|
|
106
|
+
*
|
|
107
|
+
* @default true
|
|
108
|
+
*/
|
|
109
|
+
allowGrace?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Error policy when FFID cannot return a canonical decision.
|
|
112
|
+
*
|
|
113
|
+
* Currently only `failClosed` is supported: network/server/parse failures
|
|
114
|
+
* become `hasAccess=false` decisions with `denialReason='ffid_unreachable'`
|
|
115
|
+
* and the root cause in `decision.error`. Treat `hasAccess` as the gate.
|
|
116
|
+
*/
|
|
117
|
+
failPolicy?: FFIDServiceAccessFailPolicy;
|
|
118
|
+
}
|
|
119
|
+
interface FFIDServiceAccessError {
|
|
120
|
+
code: string;
|
|
121
|
+
message: string;
|
|
122
|
+
details?: unknown;
|
|
123
|
+
}
|
|
124
|
+
interface FFIDServiceAccessDecision {
|
|
125
|
+
hasAccess: boolean;
|
|
126
|
+
effectiveStatus: EffectiveSubscriptionStatus | null;
|
|
127
|
+
isGrace: boolean;
|
|
128
|
+
isBlocked: boolean;
|
|
129
|
+
allowGrace: boolean;
|
|
130
|
+
failPolicy: FFIDServiceAccessFailPolicy;
|
|
131
|
+
denialReason: FFIDServiceAccessDenialReason | null;
|
|
132
|
+
organizationId: string | null;
|
|
133
|
+
subscriptionId: string | null;
|
|
134
|
+
status: FFIDSubscriptionStatus | null;
|
|
135
|
+
planCode: string | null;
|
|
136
|
+
currentPeriodEnd: string | null;
|
|
137
|
+
gracePeriodEndsAt: string | null;
|
|
138
|
+
reactivatable: boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Present when the decision was produced by the SDK fail-closed policy
|
|
141
|
+
* rather than by a successful FFID response.
|
|
142
|
+
*/
|
|
143
|
+
error?: FFIDServiceAccessError;
|
|
144
|
+
}
|
|
145
|
+
|
|
61
146
|
/**
|
|
62
147
|
* FFID SDK Type Definitions
|
|
63
148
|
*
|
|
@@ -444,16 +529,7 @@ type FFIDApiResponse<T> = {
|
|
|
444
529
|
data?: undefined;
|
|
445
530
|
error: FFIDError;
|
|
446
531
|
};
|
|
447
|
-
|
|
448
|
-
type FFIDSubscriptionStatus = 'trialing' | 'active' | 'past_due' | 'canceled' | 'pending_invoice' | 'paused' | 'incomplete' | 'incomplete_expired' | 'unpaid';
|
|
449
|
-
interface FFIDSubscriptionCheckResponse {
|
|
450
|
-
hasActiveSubscription: boolean;
|
|
451
|
-
organizationId: string | null;
|
|
452
|
-
subscriptionId: string | null;
|
|
453
|
-
status: FFIDSubscriptionStatus | null;
|
|
454
|
-
planCode: string | null;
|
|
455
|
-
currentPeriodEnd: string | null;
|
|
456
|
-
}
|
|
532
|
+
|
|
457
533
|
/**
|
|
458
534
|
* Checkout session response from billing checkout endpoint
|
|
459
535
|
*/
|
|
@@ -497,6 +573,8 @@ interface FFIDCreatePortalParams {
|
|
|
497
573
|
|
|
498
574
|
/** Member role in an organization */
|
|
499
575
|
type FFIDMemberRole = 'owner' | 'admin' | 'member' | 'viewer';
|
|
576
|
+
/** Member role assignable through organization member management APIs */
|
|
577
|
+
type FFIDAssignableMemberRole = Exclude<FFIDMemberRole, 'owner'>;
|
|
500
578
|
/** Member status in an organization */
|
|
501
579
|
type FFIDMemberStatus = 'active' | 'invited' | 'suspended';
|
|
502
580
|
/** Organization member returned by the ext members API */
|
|
@@ -525,6 +603,19 @@ interface FFIDListMembersResponse {
|
|
|
525
603
|
organizationId: string;
|
|
526
604
|
members: FFIDOrganizationMember[];
|
|
527
605
|
}
|
|
606
|
+
/** Request body for addMember (ext) */
|
|
607
|
+
interface FFIDAddMemberRequest {
|
|
608
|
+
email: string;
|
|
609
|
+
role?: FFIDAssignableMemberRole;
|
|
610
|
+
}
|
|
611
|
+
/** Params object for addMember (ext), matching the existing organization members methods */
|
|
612
|
+
interface FFIDAddMemberParams extends FFIDAddMemberRequest {
|
|
613
|
+
organizationId: string;
|
|
614
|
+
}
|
|
615
|
+
/** Response from addMember (ext) */
|
|
616
|
+
interface FFIDAddMemberResponse {
|
|
617
|
+
member: FFIDOrganizationMember;
|
|
618
|
+
}
|
|
528
619
|
/** Response from updateMemberRole (ext) */
|
|
529
620
|
interface FFIDUpdateMemberRoleResponse {
|
|
530
621
|
member: FFIDOrganizationMember;
|
|
@@ -1442,4 +1533,4 @@ interface FFIDInquiryFormPlaceholderContext {
|
|
|
1442
1533
|
}
|
|
1443
1534
|
declare function FFIDInquiryForm({ mode, prefill, organizations, preselectedOrganizationId, categories, termsVersion, privacyVersion, termsHref, privacyHref, turnstileToken, turnstileSlot, onSubmit, onChange, legalLayout, messagePlaceholder, requireCategorySelection, unstyled, classNames, locale, className, }: FFIDInquiryFormProps): react_jsx_runtime.JSX.Element;
|
|
1444
1535
|
|
|
1445
|
-
export { type
|
|
1536
|
+
export { type FFIDInquiryCategorySite2026 as $, type FFIDInquiryCreateResponse as A, type FFIDAuthMode as B, type FFIDLogger as C, type FFIDCacheAdapter as D, type FFIDUser as E, type FFIDSubscriptionStatus as F, type FFIDOrganization as G, type FFIDSubscription as H, type FFIDSubscriptionContextValue as I, type EffectiveSubscriptionStatus as J, type FFIDAnnouncementsClientConfig as K, type ListAnnouncementsOptions as L, type FFIDAnnouncementsApiResponse as M, type AnnouncementListResponse as N, type FFIDAnnouncementsLogger as O, type Announcement as P, type AnnouncementStatus as Q, type AnnouncementType as R, FFIDAnnouncementBadge as S, FFIDAnnouncementList as T, type FFIDAnnouncementsError as U, type FFIDAnnouncementsErrorCode as V, type FFIDAnnouncementsServerResponse as W, type FFIDAssignableMemberRole as X, type FFIDCacheConfig as Y, type FFIDContextValue as Z, type FFIDInquiryCategory as _, type FFIDConfig as a, FFIDInquiryForm as a0, type FFIDInquiryFormCategoryItem as a1, type FFIDInquiryFormClassNames as a2, type FFIDInquiryFormLegalLayout as a3, type FFIDInquiryFormOrganization as a4, type FFIDInquiryFormPlaceholderContext as a5, type FFIDInquiryFormPrefill as a6, type FFIDInquiryFormProps as a7, type FFIDInquiryFormSubmitData as a8, type FFIDInquiryFormSubmitResult as a9, type FFIDOrganizationSwitcherClassNames as aA, type FFIDOrganizationSwitcherProps as aB, type FFIDSubscriptionBadgeClassNames as aC, type FFIDSubscriptionBadgeProps as aD, type FFIDUserMenuClassNames as aE, type FFIDUserMenuProps as aF, type FFIDJwtClaims as aa, FFIDLoginButton as ab, type FFIDMemberStatus as ac, type FFIDOAuthTokenResponse as ad, type FFIDOAuthUserInfoMemberRole as ae, type FFIDOAuthUserInfoSubscription as af, type FFIDOrganizationMember as ag, FFIDOrganizationSwitcher as ah, type FFIDRedirectErrorCode as ai, type FFIDSeatModel as aj, type FFIDServiceAccessDenialReason as ak, type FFIDServiceAccessFailPolicy as al, FFIDSubscriptionBadge as am, type FFIDTokenIntrospectionResponse as an, FFIDUserMenu as ao, FFID_INQUIRY_CATEGORIES as ap, FFID_INQUIRY_CATEGORIES_SITE_2026 as aq, type UseFFIDAnnouncementsOptions as ar, type UseFFIDAnnouncementsReturn as as, isFFIDInquiryCategorySite2026 as at, useFFIDAnnouncements as au, type FFIDAnnouncementBadgeClassNames as av, type FFIDAnnouncementBadgeProps as aw, type FFIDAnnouncementListClassNames as ax, type FFIDAnnouncementListProps as ay, type FFIDLoginButtonProps as az, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDCheckServiceAccessParams as g, type FFIDServiceAccessDecision as h, type FFIDListMembersResponse as i, type FFIDAddMemberParams as j, type FFIDAddMemberResponse as k, type FFIDAddMemberRequest as l, type FFIDMemberRole as m, type FFIDUpdateMemberRoleResponse as n, type FFIDRemoveMemberResponse as o, type FFIDProfileCallOptions as p, type FFIDUserProfile as q, type FFIDUpdateUserProfileRequest as r, type FFIDAnalyticsConfig as s, type FFIDCreateCheckoutParams as t, type FFIDCheckoutSessionResponse as u, type FFIDCreatePortalParams as v, type FFIDPortalSessionResponse as w, type FFIDVerifyAccessTokenOptions as x, type FFIDOAuthUserInfo as y, type FFIDInquiryCreateParams as z };
|