@feelflow/ffid-sdk 5.27.0 → 5.28.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/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkR4KUHR4S_cjs = require('./chunk-R4KUHR4S.cjs');
3
+ var chunkS5FV6H2U_cjs = require('./chunk-S5FV6H2U.cjs');
4
4
  var chunkH5O2CCAY_cjs = require('./chunk-H5O2CCAY.cjs');
5
5
  var react = require('react');
6
6
  var jsxRuntime = require('react/jsx-runtime');
@@ -54,8 +54,8 @@ function defaultRedirect(url) {
54
54
  }
55
55
  function useRequireActiveSubscription(options) {
56
56
  const { redirectTo, allowGrace = true, onRedirect } = options;
57
- const { isLoading, error } = chunkR4KUHR4S_cjs.useFFIDContext();
58
- const { effectiveStatus, isBlocked, isGrace } = chunkR4KUHR4S_cjs.useSubscription();
57
+ const { isLoading, error } = chunkS5FV6H2U_cjs.useFFIDContext();
58
+ const { effectiveStatus, isBlocked, isGrace } = chunkS5FV6H2U_cjs.useSubscription();
59
59
  const hasFetchError = error !== null && effectiveStatus === null;
60
60
  const shouldRedirect = !isLoading && !hasFetchError && (isBlocked || !allowGrace && isGrace || effectiveStatus === null);
61
61
  react.useEffect(() => {
@@ -76,7 +76,7 @@ function useRequireActiveSubscription(options) {
76
76
  }
77
77
  function withFFIDAuth(Component, options = {}) {
78
78
  const WrappedComponent = (props) => {
79
- const { isLoading, isAuthenticated, login } = chunkR4KUHR4S_cjs.useFFIDContext();
79
+ const { isLoading, isAuthenticated, login } = chunkS5FV6H2U_cjs.useFFIDContext();
80
80
  const hasRedirected = react.useRef(false);
81
81
  react.useEffect(() => {
82
82
  if (!isLoading && !isAuthenticated && options.redirectToLogin && !hasRedirected.current) {
@@ -105,211 +105,219 @@ var FFID_NEWSLETTER_DISPATCH_MAX_RECIPIENTS = 1e3;
105
105
 
106
106
  Object.defineProperty(exports, "ACCESS_GRANTING_EFFECTIVE_STATUSES", {
107
107
  enumerable: true,
108
- get: function () { return chunkR4KUHR4S_cjs.ACCESS_GRANTING_EFFECTIVE_STATUSES; }
108
+ get: function () { return chunkS5FV6H2U_cjs.ACCESS_GRANTING_EFFECTIVE_STATUSES; }
109
109
  });
110
110
  Object.defineProperty(exports, "BLOCKING_EFFECTIVE_STATUSES", {
111
111
  enumerable: true,
112
- get: function () { return chunkR4KUHR4S_cjs.BLOCKING_EFFECTIVE_STATUSES; }
112
+ get: function () { return chunkS5FV6H2U_cjs.BLOCKING_EFFECTIVE_STATUSES; }
113
113
  });
114
114
  Object.defineProperty(exports, "CATALOG_HASH_PATTERN", {
115
115
  enumerable: true,
116
- get: function () { return chunkR4KUHR4S_cjs.CATALOG_HASH_PATTERN; }
116
+ get: function () { return chunkS5FV6H2U_cjs.CATALOG_HASH_PATTERN; }
117
117
  });
118
118
  Object.defineProperty(exports, "DEFAULT_API_BASE_URL", {
119
119
  enumerable: true,
120
- get: function () { return chunkR4KUHR4S_cjs.DEFAULT_API_BASE_URL; }
120
+ get: function () { return chunkS5FV6H2U_cjs.DEFAULT_API_BASE_URL; }
121
121
  });
122
122
  Object.defineProperty(exports, "DEFAULT_OAUTH_SCOPES", {
123
123
  enumerable: true,
124
- get: function () { return chunkR4KUHR4S_cjs.DEFAULT_OAUTH_SCOPES; }
124
+ get: function () { return chunkS5FV6H2U_cjs.DEFAULT_OAUTH_SCOPES; }
125
125
  });
126
126
  Object.defineProperty(exports, "EFFECTIVE_SUBSCRIPTION_STATUSES", {
127
127
  enumerable: true,
128
- get: function () { return chunkR4KUHR4S_cjs.EFFECTIVE_SUBSCRIPTION_STATUSES; }
128
+ get: function () { return chunkS5FV6H2U_cjs.EFFECTIVE_SUBSCRIPTION_STATUSES; }
129
129
  });
130
130
  Object.defineProperty(exports, "FFIDAnnouncementBadge", {
131
131
  enumerable: true,
132
- get: function () { return chunkR4KUHR4S_cjs.FFIDAnnouncementBadge; }
132
+ get: function () { return chunkS5FV6H2U_cjs.FFIDAnnouncementBadge; }
133
133
  });
134
134
  Object.defineProperty(exports, "FFIDAnnouncementList", {
135
135
  enumerable: true,
136
- get: function () { return chunkR4KUHR4S_cjs.FFIDAnnouncementList; }
136
+ get: function () { return chunkS5FV6H2U_cjs.FFIDAnnouncementList; }
137
137
  });
138
138
  Object.defineProperty(exports, "FFIDCatalogHashError", {
139
139
  enumerable: true,
140
- get: function () { return chunkR4KUHR4S_cjs.FFIDCatalogHashError; }
140
+ get: function () { return chunkS5FV6H2U_cjs.FFIDCatalogHashError; }
141
141
  });
142
142
  Object.defineProperty(exports, "FFIDInquiryForm", {
143
143
  enumerable: true,
144
- get: function () { return chunkR4KUHR4S_cjs.FFIDInquiryForm; }
144
+ get: function () { return chunkS5FV6H2U_cjs.FFIDInquiryForm; }
145
145
  });
146
146
  Object.defineProperty(exports, "FFIDLoginButton", {
147
147
  enumerable: true,
148
- get: function () { return chunkR4KUHR4S_cjs.FFIDLoginButton; }
148
+ get: function () { return chunkS5FV6H2U_cjs.FFIDLoginButton; }
149
149
  });
150
150
  Object.defineProperty(exports, "FFIDOrganizationSwitcher", {
151
151
  enumerable: true,
152
- get: function () { return chunkR4KUHR4S_cjs.FFIDOrganizationSwitcher; }
152
+ get: function () { return chunkS5FV6H2U_cjs.FFIDOrganizationSwitcher; }
153
153
  });
154
154
  Object.defineProperty(exports, "FFIDProvider", {
155
155
  enumerable: true,
156
- get: function () { return chunkR4KUHR4S_cjs.FFIDProvider; }
156
+ get: function () { return chunkS5FV6H2U_cjs.FFIDProvider; }
157
157
  });
158
158
  Object.defineProperty(exports, "FFIDSDKError", {
159
159
  enumerable: true,
160
- get: function () { return chunkR4KUHR4S_cjs.FFIDSDKError; }
160
+ get: function () { return chunkS5FV6H2U_cjs.FFIDSDKError; }
161
161
  });
162
162
  Object.defineProperty(exports, "FFIDSubscriptionBadge", {
163
163
  enumerable: true,
164
- get: function () { return chunkR4KUHR4S_cjs.FFIDSubscriptionBadge; }
164
+ get: function () { return chunkS5FV6H2U_cjs.FFIDSubscriptionBadge; }
165
165
  });
166
166
  Object.defineProperty(exports, "FFIDUserMenu", {
167
167
  enumerable: true,
168
- get: function () { return chunkR4KUHR4S_cjs.FFIDUserMenu; }
168
+ get: function () { return chunkS5FV6H2U_cjs.FFIDUserMenu; }
169
169
  });
170
170
  Object.defineProperty(exports, "FFID_ANNOUNCEMENTS_ERROR_CODES", {
171
171
  enumerable: true,
172
- get: function () { return chunkR4KUHR4S_cjs.FFID_ANNOUNCEMENTS_ERROR_CODES; }
172
+ get: function () { return chunkS5FV6H2U_cjs.FFID_ANNOUNCEMENTS_ERROR_CODES; }
173
173
  });
174
174
  Object.defineProperty(exports, "FFID_CATALOG_ENVIRONMENTS", {
175
175
  enumerable: true,
176
- get: function () { return chunkR4KUHR4S_cjs.FFID_CATALOG_ENVIRONMENTS; }
176
+ get: function () { return chunkS5FV6H2U_cjs.FFID_CATALOG_ENVIRONMENTS; }
177
177
  });
178
178
  Object.defineProperty(exports, "FFID_CATALOG_PUBLICATION_STATUSES", {
179
179
  enumerable: true,
180
- get: function () { return chunkR4KUHR4S_cjs.FFID_CATALOG_PUBLICATION_STATUSES; }
180
+ get: function () { return chunkS5FV6H2U_cjs.FFID_CATALOG_PUBLICATION_STATUSES; }
181
181
  });
182
182
  Object.defineProperty(exports, "FFID_ERROR_CODES", {
183
183
  enumerable: true,
184
- get: function () { return chunkR4KUHR4S_cjs.FFID_ERROR_CODES; }
184
+ get: function () { return chunkS5FV6H2U_cjs.FFID_ERROR_CODES; }
185
+ });
186
+ Object.defineProperty(exports, "FFID_INQUIRY_ACQUISITION_SOURCES", {
187
+ enumerable: true,
188
+ get: function () { return chunkS5FV6H2U_cjs.FFID_INQUIRY_ACQUISITION_SOURCES; }
185
189
  });
186
190
  Object.defineProperty(exports, "FFID_INQUIRY_CATEGORIES", {
187
191
  enumerable: true,
188
- get: function () { return chunkR4KUHR4S_cjs.FFID_INQUIRY_CATEGORIES; }
192
+ get: function () { return chunkS5FV6H2U_cjs.FFID_INQUIRY_CATEGORIES; }
189
193
  });
190
194
  Object.defineProperty(exports, "FFID_INQUIRY_CATEGORIES_SITE_2026", {
191
195
  enumerable: true,
192
- get: function () { return chunkR4KUHR4S_cjs.FFID_INQUIRY_CATEGORIES_SITE_2026; }
196
+ get: function () { return chunkS5FV6H2U_cjs.FFID_INQUIRY_CATEGORIES_SITE_2026; }
193
197
  });
194
198
  Object.defineProperty(exports, "canonicalizeCatalogValue", {
195
199
  enumerable: true,
196
- get: function () { return chunkR4KUHR4S_cjs.canonicalizeCatalogValue; }
200
+ get: function () { return chunkS5FV6H2U_cjs.canonicalizeCatalogValue; }
197
201
  });
198
202
  Object.defineProperty(exports, "clearState", {
199
203
  enumerable: true,
200
- get: function () { return chunkR4KUHR4S_cjs.cleanupStateStorage; }
204
+ get: function () { return chunkS5FV6H2U_cjs.cleanupStateStorage; }
201
205
  });
202
206
  Object.defineProperty(exports, "computeEffectiveStatusFromSession", {
203
207
  enumerable: true,
204
- get: function () { return chunkR4KUHR4S_cjs.computeEffectiveStatusFromSession; }
208
+ get: function () { return chunkS5FV6H2U_cjs.computeEffectiveStatusFromSession; }
205
209
  });
206
210
  Object.defineProperty(exports, "computeFFIDCheckoutCopyHash", {
207
211
  enumerable: true,
208
- get: function () { return chunkR4KUHR4S_cjs.computeFFIDCheckoutCopyHash; }
212
+ get: function () { return chunkS5FV6H2U_cjs.computeFFIDCheckoutCopyHash; }
209
213
  });
210
214
  Object.defineProperty(exports, "computeLegalDisclosureHash", {
211
215
  enumerable: true,
212
- get: function () { return chunkR4KUHR4S_cjs.computeLegalDisclosureHash; }
216
+ get: function () { return chunkS5FV6H2U_cjs.computeLegalDisclosureHash; }
213
217
  });
214
218
  Object.defineProperty(exports, "computePaymentConfigurationHash", {
215
219
  enumerable: true,
216
- get: function () { return chunkR4KUHR4S_cjs.computePaymentConfigurationHash; }
220
+ get: function () { return chunkS5FV6H2U_cjs.computePaymentConfigurationHash; }
217
221
  });
218
222
  Object.defineProperty(exports, "computePraxisCopyHash", {
219
223
  enumerable: true,
220
- get: function () { return chunkR4KUHR4S_cjs.computePraxisCopyHash; }
224
+ get: function () { return chunkS5FV6H2U_cjs.computePraxisCopyHash; }
221
225
  });
222
226
  Object.defineProperty(exports, "computeScopeHash", {
223
227
  enumerable: true,
224
- get: function () { return chunkR4KUHR4S_cjs.computeScopeHash; }
228
+ get: function () { return chunkS5FV6H2U_cjs.computeScopeHash; }
225
229
  });
226
230
  Object.defineProperty(exports, "computeTaxConfigurationHash", {
227
231
  enumerable: true,
228
- get: function () { return chunkR4KUHR4S_cjs.computeTaxConfigurationHash; }
232
+ get: function () { return chunkS5FV6H2U_cjs.computeTaxConfigurationHash; }
229
233
  });
230
234
  Object.defineProperty(exports, "createFFIDAnnouncementsClient", {
231
235
  enumerable: true,
232
- get: function () { return chunkR4KUHR4S_cjs.createFFIDAnnouncementsClient; }
236
+ get: function () { return chunkS5FV6H2U_cjs.createFFIDAnnouncementsClient; }
233
237
  });
234
238
  Object.defineProperty(exports, "createFFIDClient", {
235
239
  enumerable: true,
236
- get: function () { return chunkR4KUHR4S_cjs.createFFIDClient; }
240
+ get: function () { return chunkS5FV6H2U_cjs.createFFIDClient; }
237
241
  });
238
242
  Object.defineProperty(exports, "createTokenStore", {
239
243
  enumerable: true,
240
- get: function () { return chunkR4KUHR4S_cjs.createTokenStore; }
244
+ get: function () { return chunkS5FV6H2U_cjs.createTokenStore; }
241
245
  });
242
246
  Object.defineProperty(exports, "generateCodeChallenge", {
243
247
  enumerable: true,
244
- get: function () { return chunkR4KUHR4S_cjs.generateCodeChallenge; }
248
+ get: function () { return chunkS5FV6H2U_cjs.generateCodeChallenge; }
245
249
  });
246
250
  Object.defineProperty(exports, "generateCodeVerifier", {
247
251
  enumerable: true,
248
- get: function () { return chunkR4KUHR4S_cjs.generateCodeVerifier; }
252
+ get: function () { return chunkS5FV6H2U_cjs.generateCodeVerifier; }
249
253
  });
250
254
  Object.defineProperty(exports, "handleRedirectCallback", {
251
255
  enumerable: true,
252
- get: function () { return chunkR4KUHR4S_cjs.handleRedirectCallback; }
256
+ get: function () { return chunkS5FV6H2U_cjs.handleRedirectCallback; }
253
257
  });
254
258
  Object.defineProperty(exports, "hasAccessFromUserinfo", {
255
259
  enumerable: true,
256
- get: function () { return chunkR4KUHR4S_cjs.hasAccessFromUserinfo; }
260
+ get: function () { return chunkS5FV6H2U_cjs.hasAccessFromUserinfo; }
257
261
  });
258
262
  Object.defineProperty(exports, "hashCanonicalJson", {
259
263
  enumerable: true,
260
- get: function () { return chunkR4KUHR4S_cjs.hashCanonicalJson; }
264
+ get: function () { return chunkS5FV6H2U_cjs.hashCanonicalJson; }
261
265
  });
262
266
  Object.defineProperty(exports, "isBlockedFromUserinfo", {
263
267
  enumerable: true,
264
- get: function () { return chunkR4KUHR4S_cjs.isBlockedFromUserinfo; }
268
+ get: function () { return chunkS5FV6H2U_cjs.isBlockedFromUserinfo; }
269
+ });
270
+ Object.defineProperty(exports, "isFFIDInquiryAcquisitionSource", {
271
+ enumerable: true,
272
+ get: function () { return chunkS5FV6H2U_cjs.isFFIDInquiryAcquisitionSource; }
265
273
  });
266
274
  Object.defineProperty(exports, "isFFIDInquiryCategorySite2026", {
267
275
  enumerable: true,
268
- get: function () { return chunkR4KUHR4S_cjs.isFFIDInquiryCategorySite2026; }
276
+ get: function () { return chunkS5FV6H2U_cjs.isFFIDInquiryCategorySite2026; }
269
277
  });
270
278
  Object.defineProperty(exports, "normalizeRedirectUri", {
271
279
  enumerable: true,
272
- get: function () { return chunkR4KUHR4S_cjs.normalizeRedirectUri; }
280
+ get: function () { return chunkS5FV6H2U_cjs.normalizeRedirectUri; }
273
281
  });
274
282
  Object.defineProperty(exports, "retrieveCodeVerifier", {
275
283
  enumerable: true,
276
- get: function () { return chunkR4KUHR4S_cjs.retrieveCodeVerifier; }
284
+ get: function () { return chunkS5FV6H2U_cjs.retrieveCodeVerifier; }
277
285
  });
278
286
  Object.defineProperty(exports, "retrieveState", {
279
287
  enumerable: true,
280
- get: function () { return chunkR4KUHR4S_cjs.retrieveState; }
288
+ get: function () { return chunkS5FV6H2U_cjs.retrieveState; }
281
289
  });
282
290
  Object.defineProperty(exports, "sha256Hex", {
283
291
  enumerable: true,
284
- get: function () { return chunkR4KUHR4S_cjs.sha256Hex; }
292
+ get: function () { return chunkS5FV6H2U_cjs.sha256Hex; }
285
293
  });
286
294
  Object.defineProperty(exports, "storeCodeVerifier", {
287
295
  enumerable: true,
288
- get: function () { return chunkR4KUHR4S_cjs.storeCodeVerifier; }
296
+ get: function () { return chunkS5FV6H2U_cjs.storeCodeVerifier; }
289
297
  });
290
298
  Object.defineProperty(exports, "storeState", {
291
299
  enumerable: true,
292
- get: function () { return chunkR4KUHR4S_cjs.storeState; }
300
+ get: function () { return chunkS5FV6H2U_cjs.storeState; }
293
301
  });
294
302
  Object.defineProperty(exports, "useFFID", {
295
303
  enumerable: true,
296
- get: function () { return chunkR4KUHR4S_cjs.useFFID; }
304
+ get: function () { return chunkS5FV6H2U_cjs.useFFID; }
297
305
  });
298
306
  Object.defineProperty(exports, "useFFIDAnnouncements", {
299
307
  enumerable: true,
300
- get: function () { return chunkR4KUHR4S_cjs.useFFIDAnnouncements; }
308
+ get: function () { return chunkS5FV6H2U_cjs.useFFIDAnnouncements; }
301
309
  });
302
310
  Object.defineProperty(exports, "useSubscription", {
303
311
  enumerable: true,
304
- get: function () { return chunkR4KUHR4S_cjs.useSubscription; }
312
+ get: function () { return chunkS5FV6H2U_cjs.useSubscription; }
305
313
  });
306
314
  Object.defineProperty(exports, "validatePublishedCatalog", {
307
315
  enumerable: true,
308
- get: function () { return chunkR4KUHR4S_cjs.validatePublishedCatalog; }
316
+ get: function () { return chunkS5FV6H2U_cjs.validatePublishedCatalog; }
309
317
  });
310
318
  Object.defineProperty(exports, "withSubscription", {
311
319
  enumerable: true,
312
- get: function () { return chunkR4KUHR4S_cjs.withSubscription; }
320
+ get: function () { return chunkS5FV6H2U_cjs.withSubscription; }
313
321
  });
314
322
  Object.defineProperty(exports, "ALL_DENIED_EXCEPT_NECESSARY", {
315
323
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FFIDSubscriptionStatus, a as FFIDOAuthUserInfoSubscription, b as FFIDPrompt, c as FFIDConfig, d as FFIDApiResponse, e as FFIDSessionResponse, f as FFIDSignOutResult, g as FFIDError, h as FFIDSubscriptionCheckResponse, i as FFIDCheckServiceAccessParams, j as FFIDServiceAccessDecision, k as FFIDAnalyticsConfig, l as FFIDVerifyAccessTokenOptions, m as FFIDOAuthUserInfo, n as FFIDInquiryCreateParams, o as FFIDInquiryCreateResponse, T as TokenStore, p as FFIDAuthMode, q as FFIDLogger, r as FFIDCacheAdapter, s as FFIDUser, t as FFIDOrganization, u as FFIDSubscription, v as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, w as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, x as FFIDAnnouncementsApiResponse, A as AnnouncementListResponse, y as FFIDAnnouncementsLogger } from './index-D3S_Pkkv.cjs';
2
- export { z as Announcement, B as AnnouncementStatus, C as AnnouncementType, D as EFFECTIVE_SUBSCRIPTION_STATUSES, G as FFIDAnnouncementBadge, H as FFIDAnnouncementList, I as FFIDAnnouncementsError, J as FFIDAnnouncementsErrorCode, K as FFIDAnnouncementsServerResponse, M as FFIDApiResponseMeta, N as FFIDCacheConfig, O as FFIDContextValue, P as FFIDInquiryCategory, Q as FFIDInquiryCategorySite2026, R as FFIDInquiryForm, S as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a0 as FFIDJwtClaims, a1 as FFIDLoginButton, a2 as FFIDOAuthUserInfoMemberRole, a3 as FFIDOrganizationSwitcher, a4 as FFIDSeatAssignmentClaim, a5 as FFIDSeatAssignmentStatus, a6 as FFIDSeatModel, a7 as FFIDServiceAccessDenialReason, a8 as FFIDServiceAccessFailPolicy, a9 as FFIDSubscriptionBadge, aa as FFIDUserMenu, ab as FFID_INQUIRY_CATEGORIES, ac as FFID_INQUIRY_CATEGORIES_SITE_2026, ad as TokenData, ae as UseFFIDAnnouncementsOptions, af as UseFFIDAnnouncementsReturn, ag as createTokenStore, ah as isFFIDInquiryCategorySite2026, ai as useFFIDAnnouncements } from './index-D3S_Pkkv.cjs';
1
+ import { F as FFIDSubscriptionStatus, a as FFIDOAuthUserInfoSubscription, b as FFIDPrompt, c as FFIDConfig, d as FFIDApiResponse, e as FFIDSessionResponse, f as FFIDSignOutResult, g as FFIDError, h as FFIDSubscriptionCheckResponse, i as FFIDCheckServiceAccessParams, j as FFIDServiceAccessDecision, k as FFIDAnalyticsConfig, l as FFIDVerifyAccessTokenOptions, m as FFIDOAuthUserInfo, n as FFIDInquiryCreateParams, o as FFIDInquiryCreateResponse, T as TokenStore, p as FFIDAuthMode, q as FFIDLogger, r as FFIDCacheAdapter, s as FFIDUser, t as FFIDOrganization, u as FFIDSubscription, v as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, w as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, x as FFIDAnnouncementsApiResponse, A as AnnouncementListResponse, y as FFIDAnnouncementsLogger } from './index-_-MqJCN3.cjs';
2
+ export { z as Announcement, B as AnnouncementStatus, C as AnnouncementType, D as EFFECTIVE_SUBSCRIPTION_STATUSES, G as FFIDAnnouncementBadge, H as FFIDAnnouncementList, I as FFIDAnnouncementsError, J as FFIDAnnouncementsErrorCode, K as FFIDAnnouncementsServerResponse, M as FFIDApiResponseMeta, N as FFIDCacheConfig, O as FFIDContextValue, P as FFIDInquiryAcquisitionSource, Q as FFIDInquiryCategory, R as FFIDInquiryCategorySite2026, S as FFIDInquiryForm, U as FFIDInquiryFormCategoryItem, V as FFIDInquiryFormClassNames, W as FFIDInquiryFormLegalLayout, X as FFIDInquiryFormOrganization, Y as FFIDInquiryFormPlaceholderContext, Z as FFIDInquiryFormPrefill, _ as FFIDInquiryFormProps, $ as FFIDInquiryFormSubmitData, a0 as FFIDInquiryFormSubmitResult, a1 as FFIDJwtClaims, a2 as FFIDLoginButton, a3 as FFIDOAuthUserInfoMemberRole, a4 as FFIDOrganizationSwitcher, a5 as FFIDSeatAssignmentClaim, a6 as FFIDSeatAssignmentStatus, a7 as FFIDSeatModel, a8 as FFIDServiceAccessDenialReason, a9 as FFIDServiceAccessFailPolicy, aa as FFIDSubscriptionBadge, ab as FFIDUserMenu, ac as FFID_INQUIRY_ACQUISITION_SOURCES, ad as FFID_INQUIRY_CATEGORIES, ae as FFID_INQUIRY_CATEGORIES_SITE_2026, af as TokenData, ag as UseFFIDAnnouncementsOptions, ah as UseFFIDAnnouncementsReturn, ai as createTokenStore, aj as isFFIDInquiryAcquisitionSource, ak as isFFIDInquiryCategorySite2026, al as useFFIDAnnouncements } from './index-_-MqJCN3.cjs';
3
3
  export { A as ALL_DENIED_EXCEPT_NECESSARY, i as CONSENT_COOKIE_NAME, j as CONSENT_DISMISSAL_TIMESTAMP_KEY, l as COOKIE_VERSION, D as DEFAULT_CONSENT_ERROR_MESSAGES, o as FFIDAnalyticsProvider, p as FFIDAnalyticsProviderProps, c as FFIDConsentCategories, r as FFIDConsentCategoryCode, e as FFIDConsentCategoryMetadata, w as FFIDConsentError, x as FFIDConsentErrorCode, y as FFIDConsentMergeStrategy, B as FFIDConsentMergeWarning, E as FFIDConsentMergeWarningEvent, F as FFIDConsentResult, I as FFIDConsentSource, a as FFIDConsentState, d as FFIDConsentSyncResult, M as FFIDCookieBanner, N as FFIDCookieBannerClassNames, O as FFIDCookieBannerProps, Q as FFIDCookieLink, R as FFIDCookieLinkProps, f as FFIDCookiePolicy, T as FFIDCookieSettings, U as FFIDCookieSettingsClassNames, V as FFIDCookieSettingsProps, _ as FFID_CONSENT_ERROR_CODES, ae as UseFFIDConsentPreferencesReturn, af as UseFFIDConsentReturn, ag as clearConsentDismissalTimestamp, aj as decodeConsentCookie, al as encodeConsentCookie, an as readConsentCookie, ao as readConsentDismissalTimestamp, aq as useFFIDConsent, ar as useFFIDConsentPreferences, as as writeConsentCookie, at as writeConsentDismissalTimestamp } from './FFIDCookieLink-BJgVcJyw.cjs';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ReactNode, ComponentType, FC } from 'react';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { F as FFIDSubscriptionStatus, a as FFIDOAuthUserInfoSubscription, b as FFIDPrompt, c as FFIDConfig, d as FFIDApiResponse, e as FFIDSessionResponse, f as FFIDSignOutResult, g as FFIDError, h as FFIDSubscriptionCheckResponse, i as FFIDCheckServiceAccessParams, j as FFIDServiceAccessDecision, k as FFIDAnalyticsConfig, l as FFIDVerifyAccessTokenOptions, m as FFIDOAuthUserInfo, n as FFIDInquiryCreateParams, o as FFIDInquiryCreateResponse, T as TokenStore, p as FFIDAuthMode, q as FFIDLogger, r as FFIDCacheAdapter, s as FFIDUser, t as FFIDOrganization, u as FFIDSubscription, v as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, w as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, x as FFIDAnnouncementsApiResponse, A as AnnouncementListResponse, y as FFIDAnnouncementsLogger } from './index-D3S_Pkkv.js';
2
- export { z as Announcement, B as AnnouncementStatus, C as AnnouncementType, D as EFFECTIVE_SUBSCRIPTION_STATUSES, G as FFIDAnnouncementBadge, H as FFIDAnnouncementList, I as FFIDAnnouncementsError, J as FFIDAnnouncementsErrorCode, K as FFIDAnnouncementsServerResponse, M as FFIDApiResponseMeta, N as FFIDCacheConfig, O as FFIDContextValue, P as FFIDInquiryCategory, Q as FFIDInquiryCategorySite2026, R as FFIDInquiryForm, S as FFIDInquiryFormCategoryItem, U as FFIDInquiryFormClassNames, V as FFIDInquiryFormLegalLayout, W as FFIDInquiryFormOrganization, X as FFIDInquiryFormPlaceholderContext, Y as FFIDInquiryFormPrefill, Z as FFIDInquiryFormProps, _ as FFIDInquiryFormSubmitData, $ as FFIDInquiryFormSubmitResult, a0 as FFIDJwtClaims, a1 as FFIDLoginButton, a2 as FFIDOAuthUserInfoMemberRole, a3 as FFIDOrganizationSwitcher, a4 as FFIDSeatAssignmentClaim, a5 as FFIDSeatAssignmentStatus, a6 as FFIDSeatModel, a7 as FFIDServiceAccessDenialReason, a8 as FFIDServiceAccessFailPolicy, a9 as FFIDSubscriptionBadge, aa as FFIDUserMenu, ab as FFID_INQUIRY_CATEGORIES, ac as FFID_INQUIRY_CATEGORIES_SITE_2026, ad as TokenData, ae as UseFFIDAnnouncementsOptions, af as UseFFIDAnnouncementsReturn, ag as createTokenStore, ah as isFFIDInquiryCategorySite2026, ai as useFFIDAnnouncements } from './index-D3S_Pkkv.js';
1
+ import { F as FFIDSubscriptionStatus, a as FFIDOAuthUserInfoSubscription, b as FFIDPrompt, c as FFIDConfig, d as FFIDApiResponse, e as FFIDSessionResponse, f as FFIDSignOutResult, g as FFIDError, h as FFIDSubscriptionCheckResponse, i as FFIDCheckServiceAccessParams, j as FFIDServiceAccessDecision, k as FFIDAnalyticsConfig, l as FFIDVerifyAccessTokenOptions, m as FFIDOAuthUserInfo, n as FFIDInquiryCreateParams, o as FFIDInquiryCreateResponse, T as TokenStore, p as FFIDAuthMode, q as FFIDLogger, r as FFIDCacheAdapter, s as FFIDUser, t as FFIDOrganization, u as FFIDSubscription, v as FFIDSubscriptionContextValue, E as EffectiveSubscriptionStatus, w as FFIDAnnouncementsClientConfig, L as ListAnnouncementsOptions, x as FFIDAnnouncementsApiResponse, A as AnnouncementListResponse, y as FFIDAnnouncementsLogger } from './index-_-MqJCN3.js';
2
+ export { z as Announcement, B as AnnouncementStatus, C as AnnouncementType, D as EFFECTIVE_SUBSCRIPTION_STATUSES, G as FFIDAnnouncementBadge, H as FFIDAnnouncementList, I as FFIDAnnouncementsError, J as FFIDAnnouncementsErrorCode, K as FFIDAnnouncementsServerResponse, M as FFIDApiResponseMeta, N as FFIDCacheConfig, O as FFIDContextValue, P as FFIDInquiryAcquisitionSource, Q as FFIDInquiryCategory, R as FFIDInquiryCategorySite2026, S as FFIDInquiryForm, U as FFIDInquiryFormCategoryItem, V as FFIDInquiryFormClassNames, W as FFIDInquiryFormLegalLayout, X as FFIDInquiryFormOrganization, Y as FFIDInquiryFormPlaceholderContext, Z as FFIDInquiryFormPrefill, _ as FFIDInquiryFormProps, $ as FFIDInquiryFormSubmitData, a0 as FFIDInquiryFormSubmitResult, a1 as FFIDJwtClaims, a2 as FFIDLoginButton, a3 as FFIDOAuthUserInfoMemberRole, a4 as FFIDOrganizationSwitcher, a5 as FFIDSeatAssignmentClaim, a6 as FFIDSeatAssignmentStatus, a7 as FFIDSeatModel, a8 as FFIDServiceAccessDenialReason, a9 as FFIDServiceAccessFailPolicy, aa as FFIDSubscriptionBadge, ab as FFIDUserMenu, ac as FFID_INQUIRY_ACQUISITION_SOURCES, ad as FFID_INQUIRY_CATEGORIES, ae as FFID_INQUIRY_CATEGORIES_SITE_2026, af as TokenData, ag as UseFFIDAnnouncementsOptions, ah as UseFFIDAnnouncementsReturn, ai as createTokenStore, aj as isFFIDInquiryAcquisitionSource, ak as isFFIDInquiryCategorySite2026, al as useFFIDAnnouncements } from './index-_-MqJCN3.js';
3
3
  export { A as ALL_DENIED_EXCEPT_NECESSARY, i as CONSENT_COOKIE_NAME, j as CONSENT_DISMISSAL_TIMESTAMP_KEY, l as COOKIE_VERSION, D as DEFAULT_CONSENT_ERROR_MESSAGES, o as FFIDAnalyticsProvider, p as FFIDAnalyticsProviderProps, c as FFIDConsentCategories, r as FFIDConsentCategoryCode, e as FFIDConsentCategoryMetadata, w as FFIDConsentError, x as FFIDConsentErrorCode, y as FFIDConsentMergeStrategy, B as FFIDConsentMergeWarning, E as FFIDConsentMergeWarningEvent, F as FFIDConsentResult, I as FFIDConsentSource, a as FFIDConsentState, d as FFIDConsentSyncResult, M as FFIDCookieBanner, N as FFIDCookieBannerClassNames, O as FFIDCookieBannerProps, Q as FFIDCookieLink, R as FFIDCookieLinkProps, f as FFIDCookiePolicy, T as FFIDCookieSettings, U as FFIDCookieSettingsClassNames, V as FFIDCookieSettingsProps, _ as FFID_CONSENT_ERROR_CODES, ae as UseFFIDConsentPreferencesReturn, af as UseFFIDConsentReturn, ag as clearConsentDismissalTimestamp, aj as decodeConsentCookie, al as encodeConsentCookie, an as readConsentCookie, ao as readConsentDismissalTimestamp, aq as useFFIDConsent, ar as useFFIDConsentPreferences, as as writeConsentCookie, at as writeConsentDismissalTimestamp } from './FFIDCookieLink-BJgVcJyw.js';
4
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
5
5
  import { ReactNode, ComponentType, FC } from 'react';
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { useFFIDContext, useSubscription } from './chunk-JZB2IM7Y.js';
2
- export { ACCESS_GRANTING_EFFECTIVE_STATUSES, BLOCKING_EFFECTIVE_STATUSES, CATALOG_HASH_PATTERN, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, EFFECTIVE_SUBSCRIPTION_STATUSES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDCatalogHashError, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_ERROR_CODES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, canonicalizeCatalogValue, cleanupStateStorage as clearState, computeEffectiveStatusFromSession, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, handleRedirectCallback, hasAccessFromUserinfo, hashCanonicalJson, isBlockedFromUserinfo, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, retrieveState, sha256Hex, storeCodeVerifier, storeState, useFFID, useFFIDAnnouncements, useSubscription, validatePublishedCatalog, withSubscription } from './chunk-JZB2IM7Y.js';
1
+ import { useFFIDContext, useSubscription } from './chunk-75UNNOLV.js';
2
+ export { ACCESS_GRANTING_EFFECTIVE_STATUSES, BLOCKING_EFFECTIVE_STATUSES, CATALOG_HASH_PATTERN, DEFAULT_API_BASE_URL, DEFAULT_OAUTH_SCOPES, EFFECTIVE_SUBSCRIPTION_STATUSES, FFIDAnnouncementBadge, FFIDAnnouncementList, FFIDCatalogHashError, FFIDInquiryForm, FFIDLoginButton, FFIDOrganizationSwitcher, FFIDProvider, FFIDSDKError, FFIDSubscriptionBadge, FFIDUserMenu, FFID_ANNOUNCEMENTS_ERROR_CODES, FFID_CATALOG_ENVIRONMENTS, FFID_CATALOG_PUBLICATION_STATUSES, FFID_ERROR_CODES, FFID_INQUIRY_ACQUISITION_SOURCES, FFID_INQUIRY_CATEGORIES, FFID_INQUIRY_CATEGORIES_SITE_2026, canonicalizeCatalogValue, cleanupStateStorage as clearState, computeEffectiveStatusFromSession, computeFFIDCheckoutCopyHash, computeLegalDisclosureHash, computePaymentConfigurationHash, computePraxisCopyHash, computeScopeHash, computeTaxConfigurationHash, createFFIDAnnouncementsClient, createFFIDClient, createTokenStore, generateCodeChallenge, generateCodeVerifier, handleRedirectCallback, hasAccessFromUserinfo, hashCanonicalJson, isBlockedFromUserinfo, isFFIDInquiryAcquisitionSource, isFFIDInquiryCategorySite2026, normalizeRedirectUri, retrieveCodeVerifier, retrieveState, sha256Hex, storeCodeVerifier, storeState, useFFID, useFFIDAnnouncements, useSubscription, validatePublishedCatalog, withSubscription } from './chunk-75UNNOLV.js';
3
3
  export { ALL_DENIED_EXCEPT_NECESSARY, CONSENT_COOKIE_NAME, CONSENT_DISMISSAL_TIMESTAMP_KEY, COOKIE_VERSION, DEFAULT_CONSENT_ERROR_MESSAGES, FFIDAnalyticsProvider, FFIDConsentError, FFIDCookieBanner, FFIDCookieLink, FFIDCookieSettings, FFID_CONSENT_ERROR_CODES, clearConsentDismissalTimestamp, decodeConsentCookie, encodeConsentCookie, readConsentCookie, readConsentDismissalTimestamp, useFFIDConsent, useFFIDConsentPreferences, writeConsentCookie, writeConsentDismissalTimestamp } from './chunk-G7VOX64X.js';
4
4
  import { useEffect, useRef } from 'react';
5
5
  import { jsx, Fragment } from 'react/jsx-runtime';
@@ -851,6 +851,157 @@ var FFID_CATALOG_PUBLICATION_STATUSES = [
851
851
 
852
852
  // src/shared/catalog-hash.ts
853
853
  var CATALOG_HASH_PATTERN = /^[0-9a-f]{64}$/;
854
+ var HEX_RADIX = 16;
855
+ var HEX_DIGITS_PER_BYTE = 2;
856
+ var FFIDCatalogHashError = class extends Error {
857
+ constructor(message) {
858
+ super(message);
859
+ this.name = "FFIDCatalogHashError";
860
+ }
861
+ };
862
+ function isPlainObject(value) {
863
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
864
+ return false;
865
+ }
866
+ const proto = Object.getPrototypeOf(value);
867
+ return proto === Object.prototype || proto === null;
868
+ }
869
+ function canonicalize(value, path) {
870
+ if (value === null) return "null";
871
+ switch (typeof value) {
872
+ case "string":
873
+ return JSON.stringify(value);
874
+ case "boolean":
875
+ return value ? "true" : "false";
876
+ case "number":
877
+ if (!Number.isFinite(value)) {
878
+ throw new FFIDCatalogHashError(
879
+ `canonicalize: non-finite number at ${path} \u2014 hashes require finite numbers`
880
+ );
881
+ }
882
+ return JSON.stringify(value);
883
+ case "undefined":
884
+ throw new FFIDCatalogHashError(
885
+ `canonicalize: undefined at ${path} \u2014 omit the key entirely or use null`
886
+ );
887
+ }
888
+ if (Array.isArray(value)) {
889
+ const items = value.map((item, index) => canonicalize(item, `${path}[${index}]`));
890
+ return `[${items.join(",")}]`;
891
+ }
892
+ if (isPlainObject(value)) {
893
+ const keys = Object.keys(value).sort();
894
+ const entries = [];
895
+ for (const key of keys) {
896
+ const child = value[key];
897
+ if (child === void 0) {
898
+ throw new FFIDCatalogHashError(
899
+ `canonicalize: undefined at ${path}.${key} \u2014 omit the key entirely or use null`
900
+ );
901
+ }
902
+ entries.push(`${JSON.stringify(key)}:${canonicalize(child, `${path}.${key}`)}`);
903
+ }
904
+ return `{${entries.join(",")}}`;
905
+ }
906
+ throw new FFIDCatalogHashError(
907
+ `canonicalize: unsupported value type (${typeof value}${typeof value === "object" ? `: ${Object.prototype.toString.call(value)}` : ""}) at ${path} \u2014 only JSON-plain values are hashable`
908
+ );
909
+ }
910
+ function canonicalizeCatalogValue(value) {
911
+ return canonicalize(value, "$");
912
+ }
913
+ async function sha256Hex(text) {
914
+ const subtle = globalThis.crypto?.subtle;
915
+ if (!subtle) {
916
+ throw new FFIDCatalogHashError(
917
+ "sha256Hex: Web Crypto (crypto.subtle) is not available in this runtime"
918
+ );
919
+ }
920
+ const digest = await subtle.digest("SHA-256", new TextEncoder().encode(text));
921
+ return Array.from(new Uint8Array(digest)).map((byte) => byte.toString(HEX_RADIX).padStart(HEX_DIGITS_PER_BYTE, "0")).join("");
922
+ }
923
+ async function hashCanonicalJson(value) {
924
+ return sha256Hex(canonicalizeCatalogValue(value));
925
+ }
926
+ function assertHashFormat(hash, field) {
927
+ if (!CATALOG_HASH_PATTERN.test(hash)) {
928
+ throw new FFIDCatalogHashError(
929
+ `${field} must be lowercase SHA-256 hex (64 chars), got: ${JSON.stringify(hash)}`
930
+ );
931
+ }
932
+ }
933
+ function normalizeStringSet(values) {
934
+ return [...new Set(values)].sort();
935
+ }
936
+ function compareByCodeUnits(a, b) {
937
+ if (a.code < b.code) return -1;
938
+ if (a.code > b.code) return 1;
939
+ return 0;
940
+ }
941
+ async function computePraxisCopyHash(presentation) {
942
+ return hashCanonicalJson(presentation);
943
+ }
944
+ async function computeFFIDCheckoutCopyHash(checkoutCopy) {
945
+ return hashCanonicalJson(checkoutCopy);
946
+ }
947
+ async function computeLegalDisclosureHash(canonicalText) {
948
+ return sha256Hex(canonicalText.replace(/\r\n?/g, "\n"));
949
+ }
950
+ async function computeTaxConfigurationHash(config) {
951
+ return hashCanonicalJson({
952
+ allowedCountries: normalizeStringSet(config.allowedCountries),
953
+ stripeTaxRegistrations: normalizeStringSet(config.stripeTaxRegistrations),
954
+ billingAddressRequired: config.billingAddressRequired,
955
+ planTaxCodes: config.planTaxCodes,
956
+ planTaxBehaviors: config.planTaxBehaviors
957
+ });
958
+ }
959
+ async function computePaymentConfigurationHash(config) {
960
+ return hashCanonicalJson({
961
+ environment: config.environment,
962
+ currency: config.currency,
963
+ paymentMethodTypes: normalizeStringSet(config.paymentMethodTypes),
964
+ dynamicPaymentMethodsEnabled: config.dynamicPaymentMethodsEnabled,
965
+ manualInvoiceAllowed: config.manualInvoiceAllowed,
966
+ customerBalanceAllowed: config.customerBalanceAllowed,
967
+ delayedPaymentMethodsAllowed: config.delayedPaymentMethodsAllowed,
968
+ customerInvoiceBalanceRequired: config.customerInvoiceBalanceRequired
969
+ });
970
+ }
971
+ async function computeScopeHash(input) {
972
+ assertHashFormat(input.praxisCopyHash, "praxisCopyHash");
973
+ assertHashFormat(input.ffidCheckoutCopyHash, "ffidCheckoutCopyHash");
974
+ assertHashFormat(input.legalDisclosureHash, "legalDisclosureHash");
975
+ assertHashFormat(input.taxConfigurationHash, "taxConfigurationHash");
976
+ assertHashFormat(input.paymentConfigurationHash, "paymentConfigurationHash");
977
+ const seenCodes = /* @__PURE__ */ new Set();
978
+ for (const plan of input.plans) {
979
+ if (seenCodes.has(plan.code)) {
980
+ throw new FFIDCatalogHashError(
981
+ `computeScopeHash: duplicate plan code ${JSON.stringify(plan.code)}`
982
+ );
983
+ }
984
+ seenCodes.add(plan.code);
985
+ }
986
+ const plans = [...input.plans].sort(compareByCodeUnits).map((plan) => ({
987
+ code: plan.code,
988
+ priceMonthly: plan.priceMonthly,
989
+ priceYearly: plan.priceYearly,
990
+ currency: plan.currency,
991
+ // Set semantics — interval order must not flip the digest.
992
+ billingIntervals: normalizeStringSet(plan.billingIntervals),
993
+ taxBehavior: plan.taxBehavior,
994
+ minSeats: plan.minSeats
995
+ }));
996
+ return hashCanonicalJson({
997
+ plans,
998
+ praxisCopyHash: input.praxisCopyHash,
999
+ ffidCheckoutCopyHash: input.ffidCheckoutCopyHash,
1000
+ legalDisclosureHash: input.legalDisclosureHash,
1001
+ taxConfigurationHash: input.taxConfigurationHash,
1002
+ paymentConfigurationHash: input.paymentConfigurationHash
1003
+ });
1004
+ }
854
1005
 
855
1006
  // src/client/catalog-methods.ts
856
1007
  var EXT_CATALOG_ENDPOINT = "/api/v1/subscriptions/ext/catalog";
@@ -1489,7 +1640,7 @@ function validateTokenResponse(tokenResponse) {
1489
1640
  }
1490
1641
 
1491
1642
  // src/client/version-check.ts
1492
- var SDK_VERSION = "5.27.0";
1643
+ var SDK_VERSION = "5.28.0";
1493
1644
  var SDK_USER_AGENT = `FFID-SDK/${SDK_VERSION} (TypeScript)`;
1494
1645
  var SDK_VERSION_HEADER = "X-FFID-SDK-Version";
1495
1646
  function sdkHeaders() {
@@ -2901,6 +3052,11 @@ function createInquiryMethods(deps) {
2901
3052
  name,
2902
3053
  message,
2903
3054
  category: params.category,
3055
+ // Normalize null ("survey not collected", e.g. forwarded verbatim
3056
+ // from FFIDInquiryFormSubmitData) to undefined so JSON.stringify
3057
+ // drops the key entirely — older FFID deployments never see it and
3058
+ // current ones treat the omission as NULL.
3059
+ acquisitionSource: params.acquisitionSource ?? void 0,
2904
3060
  company: params.company,
2905
3061
  phone: params.phone,
2906
3062
  locale: params.locale,
@@ -3662,11 +3818,11 @@ function getFFIDConsentFromCookieHeader(cookieHeader) {
3662
3818
 
3663
3819
  // src/server/auth/server-state.ts
3664
3820
  var STATE_RANDOM_BYTES2 = 16;
3665
- var HEX_RADIX = 16;
3821
+ var HEX_RADIX2 = 16;
3666
3822
  function generateServerState() {
3667
3823
  const bytes = new Uint8Array(STATE_RANDOM_BYTES2);
3668
3824
  globalThis.crypto.getRandomValues(bytes);
3669
- return Array.from(bytes, (b) => b.toString(HEX_RADIX).padStart(2, "0")).join("");
3825
+ return Array.from(bytes, (b) => b.toString(HEX_RADIX2).padStart(2, "0")).join("");
3670
3826
  }
3671
3827
 
3672
3828
  // src/server/auth/server-oauth-token.ts
@@ -3925,10 +4081,21 @@ Object.defineProperty(exports, "DEFAULT_OAUTH_SCOPES", {
3925
4081
  get: function () { return chunkMDHKSVLP_cjs.DEFAULT_OAUTH_SCOPES; }
3926
4082
  });
3927
4083
  exports.ALL_DENIED_EXCEPT_NECESSARY = ALL_DENIED_EXCEPT_NECESSARY;
4084
+ exports.CATALOG_HASH_PATTERN = CATALOG_HASH_PATTERN;
3928
4085
  exports.CONSENT_COOKIE_NAME = CONSENT_COOKIE_NAME;
3929
4086
  exports.COOKIE_VERSION = COOKIE_VERSION;
4087
+ exports.FFIDCatalogHashError = FFIDCatalogHashError;
4088
+ exports.FFID_CATALOG_ENVIRONMENTS = FFID_CATALOG_ENVIRONMENTS;
4089
+ exports.FFID_CATALOG_PUBLICATION_STATUSES = FFID_CATALOG_PUBLICATION_STATUSES;
3930
4090
  exports.FFID_ERROR_CODES = FFID_ERROR_CODES;
3931
4091
  exports.FFID_SESSION_COOKIE_NAME = FFID_SESSION_COOKIE_NAME;
4092
+ exports.canonicalizeCatalogValue = canonicalizeCatalogValue;
4093
+ exports.computeFFIDCheckoutCopyHash = computeFFIDCheckoutCopyHash;
4094
+ exports.computeLegalDisclosureHash = computeLegalDisclosureHash;
4095
+ exports.computePaymentConfigurationHash = computePaymentConfigurationHash;
4096
+ exports.computePraxisCopyHash = computePraxisCopyHash;
4097
+ exports.computeScopeHash = computeScopeHash;
4098
+ exports.computeTaxConfigurationHash = computeTaxConfigurationHash;
3932
4099
  exports.createFFIDClient = createFFIDClient;
3933
4100
  exports.createKVCacheAdapter = createKVCacheAdapter;
3934
4101
  exports.createMemoryCacheAdapter = createMemoryCacheAdapter;
@@ -3940,4 +4107,7 @@ exports.encodeConsentCookie = encodeConsentCookie;
3940
4107
  exports.generateServerState = generateServerState;
3941
4108
  exports.getFFIDConsentFromCookieHeader = getFFIDConsentFromCookieHeader;
3942
4109
  exports.getFFIDConsentFromCookies = getFFIDConsentFromCookies;
4110
+ exports.hashCanonicalJson = hashCanonicalJson;
3943
4111
  exports.sessionCookies = sessionCookies;
4112
+ exports.sha256Hex = sha256Hex;
4113
+ exports.validatePublishedCatalog = validatePublishedCatalog;