@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.
@@ -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
- /** Subscription status values matching the FFID platform's SubscriptionStatus type */
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 FFIDCacheConfig as f, type FFIDClient as g, type FFIDConfig as h, type FFIDOrganization as i, type FFIDOtpSendResponse as j, type FFIDOtpVerifyResponse as k, type FFIDPasswordResetConfirmResponse as l, type FFIDPasswordResetResponse as m, type FFIDPasswordResetVerifyResponse as n, type FFIDProfileCallOptions as o, type FFIDResetSessionResponse as p, type FFIDSubscription as q, type FFIDUpdateUserProfileRequest as r, type FFIDUser as s, type FFIDUserProfile as t, type TokenStore as u, createFFIDClient as v, createTokenStore as w };
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
- /** Subscription status values matching the FFID platform's SubscriptionStatus type */
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 FFIDCacheConfig as f, type FFIDClient as g, type FFIDConfig as h, type FFIDOrganization as i, type FFIDOtpSendResponse as j, type FFIDOtpVerifyResponse as k, type FFIDPasswordResetConfirmResponse as l, type FFIDPasswordResetResponse as m, type FFIDPasswordResetVerifyResponse as n, type FFIDProfileCallOptions as o, type FFIDResetSessionResponse as p, type FFIDSubscription as q, type FFIDUpdateUserProfileRequest as r, type FFIDUser as s, type FFIDUserProfile as t, type TokenStore as u, createFFIDClient as v, createTokenStore as w };
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
- /** Subscription status values matching the FFID platform's SubscriptionStatus type */
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 FFIDInquiryFormPlaceholderContext as $, type FFIDOrganization as A, type FFIDSubscription as B, type FFIDSubscriptionContextValue as C, type FFIDAnnouncementsClientConfig as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, type FFIDAnnouncementsApiResponse as G, type AnnouncementListResponse as H, type FFIDAnnouncementsLogger as I, type Announcement as J, type AnnouncementStatus as K, type ListAnnouncementsOptions as L, type AnnouncementType as M, FFIDAnnouncementBadge as N, FFIDAnnouncementList as O, type FFIDAnnouncementsError as P, type FFIDAnnouncementsErrorCode as Q, type FFIDAnnouncementsServerResponse as R, type FFIDCacheConfig as S, type FFIDContextValue as T, type FFIDInquiryCategory as U, type FFIDInquiryCategorySite2026 as V, FFIDInquiryForm as W, type FFIDInquiryFormCategoryItem as X, type FFIDInquiryFormClassNames as Y, type FFIDInquiryFormLegalLayout as Z, type FFIDInquiryFormOrganization as _, type FFIDConfig as a, type FFIDInquiryFormPrefill as a0, type FFIDInquiryFormProps as a1, type FFIDInquiryFormSubmitData as a2, type FFIDInquiryFormSubmitResult as a3, type FFIDJwtClaims as a4, FFIDLoginButton as a5, type FFIDMemberStatus as a6, type FFIDOAuthTokenResponse as a7, type FFIDOAuthUserInfoMemberRole as a8, type FFIDOAuthUserInfoSubscription as a9, type FFIDOrganizationMember as aa, FFIDOrganizationSwitcher as ab, type FFIDRedirectErrorCode as ac, type FFIDSeatModel as ad, FFIDSubscriptionBadge as ae, type FFIDTokenIntrospectionResponse as af, FFIDUserMenu as ag, FFID_INQUIRY_CATEGORIES as ah, FFID_INQUIRY_CATEGORIES_SITE_2026 as ai, type UseFFIDAnnouncementsOptions as aj, type UseFFIDAnnouncementsReturn as ak, isFFIDInquiryCategorySite2026 as al, useFFIDAnnouncements as am, type FFIDAnnouncementBadgeClassNames as an, type FFIDAnnouncementBadgeProps as ao, type FFIDAnnouncementListClassNames as ap, type FFIDAnnouncementListProps as aq, type FFIDLoginButtonProps as ar, type FFIDOrganizationSwitcherClassNames as as, type FFIDOrganizationSwitcherProps as at, type FFIDSubscriptionBadgeClassNames as au, type FFIDSubscriptionBadgeProps as av, type FFIDUserMenuClassNames as aw, type FFIDUserMenuProps as ax, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDListMembersResponse as g, type FFIDMemberRole as h, type FFIDUpdateMemberRoleResponse as i, type FFIDRemoveMemberResponse as j, type FFIDProfileCallOptions as k, type FFIDUserProfile as l, type FFIDUpdateUserProfileRequest as m, type FFIDAnalyticsConfig as n, type FFIDCreateCheckoutParams as o, type FFIDCheckoutSessionResponse as p, type FFIDCreatePortalParams as q, type FFIDPortalSessionResponse as r, type FFIDVerifyAccessTokenOptions as s, type FFIDOAuthUserInfo as t, type FFIDInquiryCreateParams as u, type FFIDInquiryCreateResponse as v, type FFIDAuthMode as w, type FFIDLogger as x, type FFIDCacheAdapter as y, type FFIDUser as z };
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
- /** Subscription status values matching the FFID platform's SubscriptionStatus type */
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 FFIDInquiryFormPlaceholderContext as $, type FFIDOrganization as A, type FFIDSubscription as B, type FFIDSubscriptionContextValue as C, type FFIDAnnouncementsClientConfig as D, type EffectiveSubscriptionStatus as E, type FFIDSubscriptionStatus as F, type FFIDAnnouncementsApiResponse as G, type AnnouncementListResponse as H, type FFIDAnnouncementsLogger as I, type Announcement as J, type AnnouncementStatus as K, type ListAnnouncementsOptions as L, type AnnouncementType as M, FFIDAnnouncementBadge as N, FFIDAnnouncementList as O, type FFIDAnnouncementsError as P, type FFIDAnnouncementsErrorCode as Q, type FFIDAnnouncementsServerResponse as R, type FFIDCacheConfig as S, type FFIDContextValue as T, type FFIDInquiryCategory as U, type FFIDInquiryCategorySite2026 as V, FFIDInquiryForm as W, type FFIDInquiryFormCategoryItem as X, type FFIDInquiryFormClassNames as Y, type FFIDInquiryFormLegalLayout as Z, type FFIDInquiryFormOrganization as _, type FFIDConfig as a, type FFIDInquiryFormPrefill as a0, type FFIDInquiryFormProps as a1, type FFIDInquiryFormSubmitData as a2, type FFIDInquiryFormSubmitResult as a3, type FFIDJwtClaims as a4, FFIDLoginButton as a5, type FFIDMemberStatus as a6, type FFIDOAuthTokenResponse as a7, type FFIDOAuthUserInfoMemberRole as a8, type FFIDOAuthUserInfoSubscription as a9, type FFIDOrganizationMember as aa, FFIDOrganizationSwitcher as ab, type FFIDRedirectErrorCode as ac, type FFIDSeatModel as ad, FFIDSubscriptionBadge as ae, type FFIDTokenIntrospectionResponse as af, FFIDUserMenu as ag, FFID_INQUIRY_CATEGORIES as ah, FFID_INQUIRY_CATEGORIES_SITE_2026 as ai, type UseFFIDAnnouncementsOptions as aj, type UseFFIDAnnouncementsReturn as ak, isFFIDInquiryCategorySite2026 as al, useFFIDAnnouncements as am, type FFIDAnnouncementBadgeClassNames as an, type FFIDAnnouncementBadgeProps as ao, type FFIDAnnouncementListClassNames as ap, type FFIDAnnouncementListProps as aq, type FFIDLoginButtonProps as ar, type FFIDOrganizationSwitcherClassNames as as, type FFIDOrganizationSwitcherProps as at, type FFIDSubscriptionBadgeClassNames as au, type FFIDSubscriptionBadgeProps as av, type FFIDUserMenuClassNames as aw, type FFIDUserMenuProps as ax, type FFIDApiResponse as b, type FFIDSessionResponse as c, type FFIDRedirectResult as d, type FFIDError as e, type FFIDSubscriptionCheckResponse as f, type FFIDListMembersResponse as g, type FFIDMemberRole as h, type FFIDUpdateMemberRoleResponse as i, type FFIDRemoveMemberResponse as j, type FFIDProfileCallOptions as k, type FFIDUserProfile as l, type FFIDUpdateUserProfileRequest as m, type FFIDAnalyticsConfig as n, type FFIDCreateCheckoutParams as o, type FFIDCheckoutSessionResponse as p, type FFIDCreatePortalParams as q, type FFIDPortalSessionResponse as r, type FFIDVerifyAccessTokenOptions as s, type FFIDOAuthUserInfo as t, type FFIDInquiryCreateParams as u, type FFIDInquiryCreateResponse as v, type FFIDAuthMode as w, type FFIDLogger as x, type FFIDCacheAdapter as y, type FFIDUser as z };
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 };