@cimplify/sdk 0.59.0 → 0.60.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,4 +1,4 @@
1
- import { encodePkceState, PKCE_COOKIE, PKCE_COOKIE_PATH, PKCE_COOKIE_MAX_AGE_SECONDS } from './chunk-ZKTXRWP6.mjs';
1
+ import { encodePkceState, PKCE_COOKIE, PKCE_COOKIE_PATH, PKCE_COOKIE_MAX_AGE_SECONDS, getAuthorizationEndpoint, DEFAULT_ISSUER } from './chunk-XSOYJLMZ.mjs';
2
2
 
3
3
  // src/gallery.ts
4
4
  function dedupe(urls) {
@@ -190,15 +190,20 @@ function openModalIframe(opts) {
190
190
  }
191
191
 
192
192
  // src/sign-in.ts
193
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
194
193
  var DEFAULT_SCOPE = "openid email phone profile";
194
+ function resolveAuthorizeEndpoint(opts) {
195
+ if (opts.authUrl) {
196
+ return Promise.resolve(`${opts.authUrl.replace(/\/$/, "")}/oauth/authorize`);
197
+ }
198
+ return getAuthorizationEndpoint(opts.issuer ?? DEFAULT_ISSUER);
199
+ }
195
200
  async function startSignIn(opts) {
196
- const authUrl = (opts.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
197
201
  const callbackUri = opts.callbackUri ?? "/auth/callback";
198
202
  const pkce = await generatePkce();
199
203
  const state = generateState();
204
+ const authorizeEndpoint = await resolveAuthorizeEndpoint(opts);
200
205
  if ((opts.mode ?? "redirect") === "redirect") {
201
- startRedirectSignIn(opts, authUrl, pkce, state);
206
+ startRedirectSignIn(opts, authorizeEndpoint, pkce, state);
202
207
  return;
203
208
  }
204
209
  const params = new URLSearchParams({
@@ -213,8 +218,8 @@ async function startSignIn(opts) {
213
218
  });
214
219
  if (opts.loginHint) params.set("login_hint", opts.loginHint);
215
220
  if (opts.prompt) params.set("prompt", opts.prompt);
216
- const src = `${authUrl}/oauth/authorize?${params.toString()}`;
217
- const expectedOrigin = new URL(authUrl).origin;
221
+ const src = `${authorizeEndpoint}?${params.toString()}`;
222
+ const expectedOrigin = new URL(authorizeEndpoint).origin;
218
223
  const modal = openModalIframe({
219
224
  src,
220
225
  onClose: () => {
@@ -259,7 +264,7 @@ async function startSignIn(opts) {
259
264
  };
260
265
  window.addEventListener("message", handler);
261
266
  }
262
- function startRedirectSignIn(opts, authUrl, pkce, state) {
267
+ function startRedirectSignIn(opts, authorizeEndpoint, pkce, state) {
263
268
  const returnTo = opts.returnTo ?? window.location.pathname + window.location.search;
264
269
  const cookieValue = encodePkceState({ verifier: pkce.verifier, state, returnTo });
265
270
  const secure = window.location.protocol === "https:" ? "; Secure" : "";
@@ -276,7 +281,7 @@ function startRedirectSignIn(opts, authUrl, pkce, state) {
276
281
  });
277
282
  if (opts.loginHint) params.set("login_hint", opts.loginHint);
278
283
  if (opts.prompt) params.set("prompt", opts.prompt);
279
- window.location.assign(`${authUrl}/oauth/authorize?${params.toString()}`);
284
+ window.location.assign(`${authorizeEndpoint}?${params.toString()}`);
280
285
  }
281
286
 
282
287
  // src/assets/url.ts
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLA2T2TPA_js = require('./chunk-LA2T2TPA.js');
3
+ var chunkDKT62WQW_js = require('./chunk-DKT62WQW.js');
4
4
 
5
5
  // src/gallery.ts
6
6
  function dedupe(urls) {
@@ -192,15 +192,20 @@ function openModalIframe(opts) {
192
192
  }
193
193
 
194
194
  // src/sign-in.ts
195
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
196
195
  var DEFAULT_SCOPE = "openid email phone profile";
196
+ function resolveAuthorizeEndpoint(opts) {
197
+ if (opts.authUrl) {
198
+ return Promise.resolve(`${opts.authUrl.replace(/\/$/, "")}/oauth/authorize`);
199
+ }
200
+ return chunkDKT62WQW_js.getAuthorizationEndpoint(opts.issuer ?? chunkDKT62WQW_js.DEFAULT_ISSUER);
201
+ }
197
202
  async function startSignIn(opts) {
198
- const authUrl = (opts.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
199
203
  const callbackUri = opts.callbackUri ?? "/auth/callback";
200
204
  const pkce = await generatePkce();
201
205
  const state = generateState();
206
+ const authorizeEndpoint = await resolveAuthorizeEndpoint(opts);
202
207
  if ((opts.mode ?? "redirect") === "redirect") {
203
- startRedirectSignIn(opts, authUrl, pkce, state);
208
+ startRedirectSignIn(opts, authorizeEndpoint, pkce, state);
204
209
  return;
205
210
  }
206
211
  const params = new URLSearchParams({
@@ -215,8 +220,8 @@ async function startSignIn(opts) {
215
220
  });
216
221
  if (opts.loginHint) params.set("login_hint", opts.loginHint);
217
222
  if (opts.prompt) params.set("prompt", opts.prompt);
218
- const src = `${authUrl}/oauth/authorize?${params.toString()}`;
219
- const expectedOrigin = new URL(authUrl).origin;
223
+ const src = `${authorizeEndpoint}?${params.toString()}`;
224
+ const expectedOrigin = new URL(authorizeEndpoint).origin;
220
225
  const modal = openModalIframe({
221
226
  src,
222
227
  onClose: () => {
@@ -261,11 +266,11 @@ async function startSignIn(opts) {
261
266
  };
262
267
  window.addEventListener("message", handler);
263
268
  }
264
- function startRedirectSignIn(opts, authUrl, pkce, state) {
269
+ function startRedirectSignIn(opts, authorizeEndpoint, pkce, state) {
265
270
  const returnTo = opts.returnTo ?? window.location.pathname + window.location.search;
266
- const cookieValue = chunkLA2T2TPA_js.encodePkceState({ verifier: pkce.verifier, state, returnTo });
271
+ const cookieValue = chunkDKT62WQW_js.encodePkceState({ verifier: pkce.verifier, state, returnTo });
267
272
  const secure = window.location.protocol === "https:" ? "; Secure" : "";
268
- document.cookie = `${chunkLA2T2TPA_js.PKCE_COOKIE}=${cookieValue}; Path=${chunkLA2T2TPA_js.PKCE_COOKIE_PATH}; Max-Age=${chunkLA2T2TPA_js.PKCE_COOKIE_MAX_AGE_SECONDS}; SameSite=Lax${secure}`;
273
+ document.cookie = `${chunkDKT62WQW_js.PKCE_COOKIE}=${cookieValue}; Path=${chunkDKT62WQW_js.PKCE_COOKIE_PATH}; Max-Age=${chunkDKT62WQW_js.PKCE_COOKIE_MAX_AGE_SECONDS}; SameSite=Lax${secure}`;
269
274
  const params = new URLSearchParams({
270
275
  response_type: "code",
271
276
  response_mode: "query",
@@ -278,7 +283,7 @@ function startRedirectSignIn(opts, authUrl, pkce, state) {
278
283
  });
279
284
  if (opts.loginHint) params.set("login_hint", opts.loginHint);
280
285
  if (opts.prompt) params.set("prompt", opts.prompt);
281
- window.location.assign(`${authUrl}/oauth/authorize?${params.toString()}`);
286
+ window.location.assign(`${authorizeEndpoint}?${params.toString()}`);
282
287
  }
283
288
 
284
289
  // src/assets/url.ts
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ // src/internal/pkce-cookie.ts
4
+ var PKCE_COOKIE = "cimplify_pkce";
5
+ var PKCE_COOKIE_PATH = "/auth";
6
+ var PKCE_COOKIE_MAX_AGE_SECONDS = 600;
7
+ function encodePkceState(state) {
8
+ return encodeURIComponent(JSON.stringify(state));
9
+ }
10
+ function decodePkceState(raw) {
11
+ try {
12
+ const parsed = JSON.parse(decodeURIComponent(raw));
13
+ if (typeof parsed?.verifier === "string" && typeof parsed.state === "string" && typeof parsed.returnTo === "string") {
14
+ return { verifier: parsed.verifier, state: parsed.state, returnTo: parsed.returnTo };
15
+ }
16
+ } catch {
17
+ }
18
+ return null;
19
+ }
20
+
21
+ // src/internal/discovery.ts
22
+ var DEFAULT_ISSUER = "https://api.cimplify.io";
23
+ var FALLBACK_AUTHORIZATION_ENDPOINT = "https://auth.cimplify.io/oauth/authorize";
24
+ var cache = /* @__PURE__ */ new Map();
25
+ function fetchDiscovery(issuer) {
26
+ const base = issuer.replace(/\/$/, "");
27
+ let pending = cache.get(base);
28
+ if (!pending) {
29
+ pending = fetch(`${base}/.well-known/openid-configuration`).then((res) => {
30
+ if (!res.ok) throw new Error(`oidc discovery failed: ${res.status}`);
31
+ return res.json();
32
+ });
33
+ pending.catch(() => cache.delete(base));
34
+ cache.set(base, pending);
35
+ }
36
+ return pending;
37
+ }
38
+ async function getAuthorizationEndpoint(issuer) {
39
+ try {
40
+ const doc = await fetchDiscovery(issuer);
41
+ if (doc.authorization_endpoint) return doc.authorization_endpoint;
42
+ } catch {
43
+ }
44
+ return FALLBACK_AUTHORIZATION_ENDPOINT;
45
+ }
46
+
47
+ exports.DEFAULT_ISSUER = DEFAULT_ISSUER;
48
+ exports.PKCE_COOKIE = PKCE_COOKIE;
49
+ exports.PKCE_COOKIE_MAX_AGE_SECONDS = PKCE_COOKIE_MAX_AGE_SECONDS;
50
+ exports.PKCE_COOKIE_PATH = PKCE_COOKIE_PATH;
51
+ exports.decodePkceState = decodePkceState;
52
+ exports.encodePkceState = encodePkceState;
53
+ exports.getAuthorizationEndpoint = getAuthorizationEndpoint;
@@ -0,0 +1,45 @@
1
+ // src/internal/pkce-cookie.ts
2
+ var PKCE_COOKIE = "cimplify_pkce";
3
+ var PKCE_COOKIE_PATH = "/auth";
4
+ var PKCE_COOKIE_MAX_AGE_SECONDS = 600;
5
+ function encodePkceState(state) {
6
+ return encodeURIComponent(JSON.stringify(state));
7
+ }
8
+ function decodePkceState(raw) {
9
+ try {
10
+ const parsed = JSON.parse(decodeURIComponent(raw));
11
+ if (typeof parsed?.verifier === "string" && typeof parsed.state === "string" && typeof parsed.returnTo === "string") {
12
+ return { verifier: parsed.verifier, state: parsed.state, returnTo: parsed.returnTo };
13
+ }
14
+ } catch {
15
+ }
16
+ return null;
17
+ }
18
+
19
+ // src/internal/discovery.ts
20
+ var DEFAULT_ISSUER = "https://api.cimplify.io";
21
+ var FALLBACK_AUTHORIZATION_ENDPOINT = "https://auth.cimplify.io/oauth/authorize";
22
+ var cache = /* @__PURE__ */ new Map();
23
+ function fetchDiscovery(issuer) {
24
+ const base = issuer.replace(/\/$/, "");
25
+ let pending = cache.get(base);
26
+ if (!pending) {
27
+ pending = fetch(`${base}/.well-known/openid-configuration`).then((res) => {
28
+ if (!res.ok) throw new Error(`oidc discovery failed: ${res.status}`);
29
+ return res.json();
30
+ });
31
+ pending.catch(() => cache.delete(base));
32
+ cache.set(base, pending);
33
+ }
34
+ return pending;
35
+ }
36
+ async function getAuthorizationEndpoint(issuer) {
37
+ try {
38
+ const doc = await fetchDiscovery(issuer);
39
+ if (doc.authorization_endpoint) return doc.authorization_endpoint;
40
+ } catch {
41
+ }
42
+ return FALLBACK_AUTHORIZATION_ENDPOINT;
43
+ }
44
+
45
+ export { DEFAULT_ISSUER, PKCE_COOKIE, PKCE_COOKIE_MAX_AGE_SECONDS, PKCE_COOKIE_PATH, decodePkceState, encodePkceState, getAuthorizationEndpoint };
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ export { A as AUTHORIZATION_TYPE, a as AUTH_MUTATION, b as AbortablePromise, c a
2
2
  import { b9 as ProductWithDetails, j as ApiError } from './product-B_kS4Oxa.mjs';
3
3
  export { A as AddOn, a as AddOnDetails, b as AddOnGroupDetails, c as AddOnOption, d as AddOnOptionDetails, e as AddOnOptionPrice, f as AddOnWithOptions, g as AddToCartInput, h as AddressValue, i as AdjustmentType, k as AppliedDiscount, l as AttributeAppliesTo, m as AttributeType, n as AttributeValidationRules, o as AttributeVisibility, B as BenefitType, p as BillingFrequency, q as BillingMarkupType, r as BillingPlanType, s as Bundle, t as BundleComponentData, u as BundleComponentInfo, v as BundleComponentVariantView, w as BundleComponentView, x as BundlePriceType, y as BundleProduct, z as BundleSelectionData, C as BundleSelectionInput, D as BundleStoredSelection, E as BundleSummary, F as BundleWithDetails, G as Cart, H as CartAddOn, I as CartChannel, J as CartItem, K as CartItemDetails, L as CartMutationResult, M as CartNotice, N as CartStatus, O as CartSummary, P as CartTotals, Q as Category, R as CategorySummary, S as ChosenPrice, T as CimplifyError, U as Collection, V as CollectionProduct, W as CollectionSummary, X as ComponentGroup, Y as ComponentGroupWithComponents, Z as ComponentPriceBreakdown, _ as ComponentSchedulingData, $ as ComponentSelectionInput, a0 as ComponentSourceType, a1 as Composite, a2 as CompositeComponent, a3 as CompositeComponentView, a4 as CompositeGroupView, a5 as CompositePriceBreakdown, a6 as CompositePriceResult, a7 as CompositePricingMode, a8 as CompositeSelectionData, $ as CompositeSelectionInput, a9 as CompositeStoredSelection, aa as CompositeWithDetails, ab as CurrencyCode, ac as CustomAttributeDefinition, ad as CustomAttributeValue, ae as CustomerInputValue, af as DURATION_UNIT, ag as DateRangeValue, ah as Deal, ai as DealBenefitType, aj as DepositType, ak as DigitalProductType, al as DiscountBreakdown, am as DiscountDetails, an as DiscountValidation, ao as DisplayAddOn, ap as DisplayAddOnOption, aq as DisplayCart, ar as DisplayCartItem, as as DisplayMode, at as DurationUnit, au as ERROR_HINTS, av as EligiblePlansQuery, aw as ErrorCode, ax as ErrorCodeType, ay as ErrorHint, az as FacetValue, aA as FormattedPlanOption, aB as GroupPricingBehavior, aC as INPUT_FIELD_TYPE, aD as IdempotencyMismatchError, aE as InputFieldType, aF as InputFieldValidation, aG as InventoryType, aH as KnowledgeArticle, aI as LineConfiguration, aJ as LocationProductPrice, aK as LocationValue, aL as MeasurementValue, aM as Money, aN as PRODUCT_TYPE, aO as Pagination, aP as PaginationParams, aQ as PhoneValue, aR as Price, aS as PriceAdjustment, aT as PriceDecisionPath, aU as PriceEntryType, aV as PricePathTaxInfo, aW as PriceSource, aX as Product, aY as ProductAddOn, aZ as ProductAvailability, a_ as ProductAvailabilityNow, a$ as ProductBillingPlan, b0 as ProductDealInfo, b1 as ProductInputField, b2 as ProductProperty, b3 as ProductRenderHint, b4 as ProductTaxonomy, b5 as ProductTimeProfile, b6 as ProductType, b7 as ProductVariant, b8 as ProductVariantValue, ba as PropertyFacet, bb as PropertySource, bc as QuantityPricingTier, bd as RENDER_HINT, be as RelatedProductView, bf as SalesChannel, bg as SchedulingMode, bh as SelectedAddOnOption, bi as SemanticKind, bj as SignatureValue, bk as Subscription, bl as SubscriptionInvoice, bm as SubscriptionItem, bn as SubscriptionStatus, bo as SubscriptionWithDetails, bp as Tag, bq as TagsResponse, br as TaxPathComponent, bs as TaxonomyAttributeTemplate, bt as TaxonomyWithChildren, bu as UICart, bv as UICartBusiness, bw as UICartCustomer, bx as UICartLocation, by as UICartPricing, bz as UpdateCartItemInput, bA as VariantAxis, bB as VariantAxisSelection, bC as VariantAxisValue, bD as VariantAxisValueView, bE as VariantAxisView, bF as VariantAxisWithValues, bG as VariantDetails, bH as VariantDetailsDTO, bI as VariantDisplayAttribute, bJ as VariantLocationAvailability, bK as VariantStrategy, bL as VariantView, bM as ZERO, bN as currencyCode, bO as enrichError, bP as getErrorHint, bQ as isCimplifyError, bR as isIdempotencyMismatchError, bS as isQuoteConflictRequiringConsent, bT as isQuoteError, bU as isRetryableError, bV as isSupportedCurrency, bW as money, bX as moneyFromNumber } from './product-B_kS4Oxa.mjs';
4
4
  export { C as CURRENCY_SYMBOLS, M as MOBILE_MONEY_PROVIDERS, c as categorizePaymentError, d as detectMobileMoneyProvider, f as formatMoney, a as formatNumberCompact, b as formatPrice, e as formatPriceAdjustment, g as formatPriceCompact, h as formatPriceRange, i as formatPriceWithTax, j as formatProductPrice, k as getBasePrice, l as getCurrencySymbol, m as getDiscountPercentage, n as getDisplayPrice, o as getMarkupPercentage, p as getPriceRange, q as getProductCurrency, r as getTaxAmount, s as getUnitPriceAtQuantity, t as hasTaxInfo, u as isOnSale, v as isPaymentStatusFailure, w as isPaymentStatusRequiresAction, x as isPaymentStatusSuccess, y as isTaxInclusive, z as isValidPhoneForContext, A as normalizePaymentResponse, B as normalizePhoneToE164, D as normalizeStatusResponse, E as parsePrice, F as resolvePhoneCountryCode } from './index-D8vnKlOQ.mjs';
5
- export { A as AdConfig, a as AdContextValue, b as AdCreative, c as AdPosition, d as AdSlot, e as AdTheme, S as SignInOptions, g as getVariantDisplayName, s as startSignIn } from './sign-in-CZ2ioBAP.mjs';
5
+ export { A as AdConfig, a as AdContextValue, b as AdCreative, c as AdPosition, d as AdSlot, e as AdTheme, S as SignInOptions, g as getVariantDisplayName, s as startSignIn } from './sign-in-dr7m09nm.mjs';
6
6
  export { A as AddressAuthorizationData, a as AuthorizationType, I as InitializePaymentResult, P as Payment, b as PaymentErrorDetails, c as PaymentMethod, d as PaymentMethodType, e as PaymentProcessingState, f as PaymentProvider, g as PaymentResponse, h as PaymentStatus, i as PaymentStatusResponse, S as SubmitAuthorizationInput } from './payment-DVS7ZUEp.mjs';
7
7
  export { F as FormatCompactOptions, a as FormatPriceOptions, P as ProductWithPrice } from './price-Cm0tU0V5.mjs';
8
8
  export { generateIdempotencyKey } from './advanced.mjs';
@@ -95,6 +95,9 @@ interface SilentSignInOptions {
95
95
  callbackUri?: string;
96
96
  sessionUri?: string;
97
97
  scope?: string;
98
+ /** OIDC issuer; the authorize host is resolved from discovery. Defaults to https://api.cimplify.io. */
99
+ issuer?: string;
100
+ /** @deprecated Pass `issuer`. If set, used directly as the authorize host. */
98
101
  authUrl?: string;
99
102
  timeoutMs?: number;
100
103
  }
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { A as AUTHORIZATION_TYPE, a as AUTH_MUTATION, b as AbortablePromise, c a
2
2
  import { b9 as ProductWithDetails, j as ApiError } from './product-B_kS4Oxa.js';
3
3
  export { A as AddOn, a as AddOnDetails, b as AddOnGroupDetails, c as AddOnOption, d as AddOnOptionDetails, e as AddOnOptionPrice, f as AddOnWithOptions, g as AddToCartInput, h as AddressValue, i as AdjustmentType, k as AppliedDiscount, l as AttributeAppliesTo, m as AttributeType, n as AttributeValidationRules, o as AttributeVisibility, B as BenefitType, p as BillingFrequency, q as BillingMarkupType, r as BillingPlanType, s as Bundle, t as BundleComponentData, u as BundleComponentInfo, v as BundleComponentVariantView, w as BundleComponentView, x as BundlePriceType, y as BundleProduct, z as BundleSelectionData, C as BundleSelectionInput, D as BundleStoredSelection, E as BundleSummary, F as BundleWithDetails, G as Cart, H as CartAddOn, I as CartChannel, J as CartItem, K as CartItemDetails, L as CartMutationResult, M as CartNotice, N as CartStatus, O as CartSummary, P as CartTotals, Q as Category, R as CategorySummary, S as ChosenPrice, T as CimplifyError, U as Collection, V as CollectionProduct, W as CollectionSummary, X as ComponentGroup, Y as ComponentGroupWithComponents, Z as ComponentPriceBreakdown, _ as ComponentSchedulingData, $ as ComponentSelectionInput, a0 as ComponentSourceType, a1 as Composite, a2 as CompositeComponent, a3 as CompositeComponentView, a4 as CompositeGroupView, a5 as CompositePriceBreakdown, a6 as CompositePriceResult, a7 as CompositePricingMode, a8 as CompositeSelectionData, $ as CompositeSelectionInput, a9 as CompositeStoredSelection, aa as CompositeWithDetails, ab as CurrencyCode, ac as CustomAttributeDefinition, ad as CustomAttributeValue, ae as CustomerInputValue, af as DURATION_UNIT, ag as DateRangeValue, ah as Deal, ai as DealBenefitType, aj as DepositType, ak as DigitalProductType, al as DiscountBreakdown, am as DiscountDetails, an as DiscountValidation, ao as DisplayAddOn, ap as DisplayAddOnOption, aq as DisplayCart, ar as DisplayCartItem, as as DisplayMode, at as DurationUnit, au as ERROR_HINTS, av as EligiblePlansQuery, aw as ErrorCode, ax as ErrorCodeType, ay as ErrorHint, az as FacetValue, aA as FormattedPlanOption, aB as GroupPricingBehavior, aC as INPUT_FIELD_TYPE, aD as IdempotencyMismatchError, aE as InputFieldType, aF as InputFieldValidation, aG as InventoryType, aH as KnowledgeArticle, aI as LineConfiguration, aJ as LocationProductPrice, aK as LocationValue, aL as MeasurementValue, aM as Money, aN as PRODUCT_TYPE, aO as Pagination, aP as PaginationParams, aQ as PhoneValue, aR as Price, aS as PriceAdjustment, aT as PriceDecisionPath, aU as PriceEntryType, aV as PricePathTaxInfo, aW as PriceSource, aX as Product, aY as ProductAddOn, aZ as ProductAvailability, a_ as ProductAvailabilityNow, a$ as ProductBillingPlan, b0 as ProductDealInfo, b1 as ProductInputField, b2 as ProductProperty, b3 as ProductRenderHint, b4 as ProductTaxonomy, b5 as ProductTimeProfile, b6 as ProductType, b7 as ProductVariant, b8 as ProductVariantValue, ba as PropertyFacet, bb as PropertySource, bc as QuantityPricingTier, bd as RENDER_HINT, be as RelatedProductView, bf as SalesChannel, bg as SchedulingMode, bh as SelectedAddOnOption, bi as SemanticKind, bj as SignatureValue, bk as Subscription, bl as SubscriptionInvoice, bm as SubscriptionItem, bn as SubscriptionStatus, bo as SubscriptionWithDetails, bp as Tag, bq as TagsResponse, br as TaxPathComponent, bs as TaxonomyAttributeTemplate, bt as TaxonomyWithChildren, bu as UICart, bv as UICartBusiness, bw as UICartCustomer, bx as UICartLocation, by as UICartPricing, bz as UpdateCartItemInput, bA as VariantAxis, bB as VariantAxisSelection, bC as VariantAxisValue, bD as VariantAxisValueView, bE as VariantAxisView, bF as VariantAxisWithValues, bG as VariantDetails, bH as VariantDetailsDTO, bI as VariantDisplayAttribute, bJ as VariantLocationAvailability, bK as VariantStrategy, bL as VariantView, bM as ZERO, bN as currencyCode, bO as enrichError, bP as getErrorHint, bQ as isCimplifyError, bR as isIdempotencyMismatchError, bS as isQuoteConflictRequiringConsent, bT as isQuoteError, bU as isRetryableError, bV as isSupportedCurrency, bW as money, bX as moneyFromNumber } from './product-B_kS4Oxa.js';
4
4
  export { C as CURRENCY_SYMBOLS, M as MOBILE_MONEY_PROVIDERS, c as categorizePaymentError, d as detectMobileMoneyProvider, f as formatMoney, a as formatNumberCompact, b as formatPrice, e as formatPriceAdjustment, g as formatPriceCompact, h as formatPriceRange, i as formatPriceWithTax, j as formatProductPrice, k as getBasePrice, l as getCurrencySymbol, m as getDiscountPercentage, n as getDisplayPrice, o as getMarkupPercentage, p as getPriceRange, q as getProductCurrency, r as getTaxAmount, s as getUnitPriceAtQuantity, t as hasTaxInfo, u as isOnSale, v as isPaymentStatusFailure, w as isPaymentStatusRequiresAction, x as isPaymentStatusSuccess, y as isTaxInclusive, z as isValidPhoneForContext, A as normalizePaymentResponse, B as normalizePhoneToE164, D as normalizeStatusResponse, E as parsePrice, F as resolvePhoneCountryCode } from './index-DIIlPUOC.js';
5
- export { A as AdConfig, a as AdContextValue, b as AdCreative, c as AdPosition, d as AdSlot, e as AdTheme, S as SignInOptions, g as getVariantDisplayName, s as startSignIn } from './sign-in-CZ2ioBAP.js';
5
+ export { A as AdConfig, a as AdContextValue, b as AdCreative, c as AdPosition, d as AdSlot, e as AdTheme, S as SignInOptions, g as getVariantDisplayName, s as startSignIn } from './sign-in-dr7m09nm.js';
6
6
  export { A as AddressAuthorizationData, a as AuthorizationType, I as InitializePaymentResult, P as Payment, b as PaymentErrorDetails, c as PaymentMethod, d as PaymentMethodType, e as PaymentProcessingState, f as PaymentProvider, g as PaymentResponse, h as PaymentStatus, i as PaymentStatusResponse, S as SubmitAuthorizationInput } from './payment-sn-yGL7v.js';
7
7
  export { F as FormatCompactOptions, a as FormatPriceOptions, P as ProductWithPrice } from './price-9T1Y47oS.js';
8
8
  export { generateIdempotencyKey } from './advanced.js';
@@ -95,6 +95,9 @@ interface SilentSignInOptions {
95
95
  callbackUri?: string;
96
96
  sessionUri?: string;
97
97
  scope?: string;
98
+ /** OIDC issuer; the authorize host is resolved from discovery. Defaults to https://api.cimplify.io. */
99
+ issuer?: string;
100
+ /** @deprecated Pass `issuer`. If set, used directly as the authorize host. */
98
101
  authUrl?: string;
99
102
  timeoutMs?: number;
100
103
  }
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunk3QPO2UK5_js = require('./chunk-3QPO2UK5.js');
3
+ var chunk6DMHVQ42_js = require('./chunk-6DMHVQ42.js');
4
4
  var chunkL5GKVQVJ_js = require('./chunk-L5GKVQVJ.js');
5
- require('./chunk-LA2T2TPA.js');
5
+ var chunkDKT62WQW_js = require('./chunk-DKT62WQW.js');
6
6
  var chunkMW7ICTVK_js = require('./chunk-MW7ICTVK.js');
7
7
  var chunkJGBDWEPJ_js = require('./chunk-JGBDWEPJ.js');
8
8
  var chunk7Y2O3E4D_js = require('./chunk-7Y2O3E4D.js');
@@ -10,7 +10,6 @@ var chunkXA3ZNR75_js = require('./chunk-XA3ZNR75.js');
10
10
  require('./chunk-OWW5GUSB.js');
11
11
 
12
12
  // src/silent-sign-in.ts
13
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
14
13
  var DEFAULT_SCOPE = "openid email phone profile";
15
14
  var DEFAULT_TIMEOUT_MS = 12e3;
16
15
  async function signInSilent(opts) {
@@ -23,10 +22,10 @@ async function signInSilent(opts) {
23
22
  }
24
23
  } catch {
25
24
  }
26
- const authUrl = (opts.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
27
25
  const callbackUri = opts.callbackUri ?? "/auth/callback";
28
- const pkce = await chunk3QPO2UK5_js.generatePkce();
29
- const state = chunk3QPO2UK5_js.generateState();
26
+ const authorizeEndpoint = opts.authUrl ? `${opts.authUrl.replace(/\/$/, "")}/oauth/authorize` : await chunkDKT62WQW_js.getAuthorizationEndpoint(opts.issuer ?? chunkDKT62WQW_js.DEFAULT_ISSUER);
27
+ const pkce = await chunk6DMHVQ42_js.generatePkce();
28
+ const state = chunk6DMHVQ42_js.generateState();
30
29
  const params = new URLSearchParams({
31
30
  response_type: "code",
32
31
  response_mode: "web_message",
@@ -38,8 +37,8 @@ async function signInSilent(opts) {
38
37
  code_challenge: pkce.challenge,
39
38
  code_challenge_method: pkce.method
40
39
  });
41
- const src = `${authUrl}/oauth/authorize?${params.toString()}`;
42
- const expectedOrigin = new URL(authUrl).origin;
40
+ const src = `${authorizeEndpoint}?${params.toString()}`;
41
+ const expectedOrigin = new URL(authorizeEndpoint).origin;
43
42
  const iframe = document.createElement("iframe");
44
43
  iframe.style.display = "none";
45
44
  iframe.setAttribute("aria-hidden", "true");
@@ -96,51 +95,51 @@ async function signInSilent(opts) {
96
95
 
97
96
  Object.defineProperty(exports, "CIMPLIFY_CDN_HOSTS", {
98
97
  enumerable: true,
99
- get: function () { return chunk3QPO2UK5_js.CIMPLIFY_CDN_HOSTS; }
98
+ get: function () { return chunk6DMHVQ42_js.CIMPLIFY_CDN_HOSTS; }
100
99
  });
101
100
  Object.defineProperty(exports, "DEFAULT_CDN_BASE_URL", {
102
101
  enumerable: true,
103
- get: function () { return chunk3QPO2UK5_js.DEFAULT_CDN_BASE_URL; }
102
+ get: function () { return chunk6DMHVQ42_js.DEFAULT_CDN_BASE_URL; }
104
103
  });
105
104
  Object.defineProperty(exports, "DURATION_UNIT", {
106
105
  enumerable: true,
107
- get: function () { return chunk3QPO2UK5_js.DURATION_UNIT; }
106
+ get: function () { return chunk6DMHVQ42_js.DURATION_UNIT; }
108
107
  });
109
108
  Object.defineProperty(exports, "INPUT_FIELD_TYPE", {
110
109
  enumerable: true,
111
- get: function () { return chunk3QPO2UK5_js.INPUT_FIELD_TYPE; }
110
+ get: function () { return chunk6DMHVQ42_js.INPUT_FIELD_TYPE; }
112
111
  });
113
112
  Object.defineProperty(exports, "PRODUCT_TYPE", {
114
113
  enumerable: true,
115
- get: function () { return chunk3QPO2UK5_js.PRODUCT_TYPE; }
114
+ get: function () { return chunk6DMHVQ42_js.PRODUCT_TYPE; }
116
115
  });
117
116
  Object.defineProperty(exports, "RENDER_HINT", {
118
117
  enumerable: true,
119
- get: function () { return chunk3QPO2UK5_js.RENDER_HINT; }
118
+ get: function () { return chunk6DMHVQ42_js.RENDER_HINT; }
120
119
  });
121
120
  Object.defineProperty(exports, "allGalleryImages", {
122
121
  enumerable: true,
123
- get: function () { return chunk3QPO2UK5_js.allGalleryImages; }
122
+ get: function () { return chunk6DMHVQ42_js.allGalleryImages; }
124
123
  });
125
124
  Object.defineProperty(exports, "assetUrl", {
126
125
  enumerable: true,
127
- get: function () { return chunk3QPO2UK5_js.assetUrl; }
126
+ get: function () { return chunk6DMHVQ42_js.assetUrl; }
128
127
  });
129
128
  Object.defineProperty(exports, "getVariantDisplayName", {
130
129
  enumerable: true,
131
- get: function () { return chunk3QPO2UK5_js.getVariantDisplayName; }
130
+ get: function () { return chunk6DMHVQ42_js.getVariantDisplayName; }
132
131
  });
133
132
  Object.defineProperty(exports, "isCimplifyAsset", {
134
133
  enumerable: true,
135
- get: function () { return chunk3QPO2UK5_js.isCimplifyAsset; }
134
+ get: function () { return chunk6DMHVQ42_js.isCimplifyAsset; }
136
135
  });
137
136
  Object.defineProperty(exports, "resolveGallery", {
138
137
  enumerable: true,
139
- get: function () { return chunk3QPO2UK5_js.resolveGallery; }
138
+ get: function () { return chunk6DMHVQ42_js.resolveGallery; }
140
139
  });
141
140
  Object.defineProperty(exports, "startSignIn", {
142
141
  enumerable: true,
143
- get: function () { return chunk3QPO2UK5_js.startSignIn; }
142
+ get: function () { return chunk6DMHVQ42_js.startSignIn; }
144
143
  });
145
144
  Object.defineProperty(exports, "isValidPhoneForContext", {
146
145
  enumerable: true,
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
- import { generatePkce, generateState } from './chunk-TGAROSXB.mjs';
2
- export { CIMPLIFY_CDN_HOSTS, DEFAULT_CDN_BASE_URL, DURATION_UNIT, INPUT_FIELD_TYPE, PRODUCT_TYPE, RENDER_HINT, allGalleryImages, assetUrl, getVariantDisplayName, isCimplifyAsset, resolveGallery, startSignIn } from './chunk-TGAROSXB.mjs';
1
+ import { generatePkce, generateState } from './chunk-2AU263DK.mjs';
2
+ export { CIMPLIFY_CDN_HOSTS, DEFAULT_CDN_BASE_URL, DURATION_UNIT, INPUT_FIELD_TYPE, PRODUCT_TYPE, RENDER_HINT, allGalleryImages, assetUrl, getVariantDisplayName, isCimplifyAsset, resolveGallery, startSignIn } from './chunk-2AU263DK.mjs';
3
3
  export { isValidPhoneForContext, normalizePhoneToE164, resolvePhoneCountryCode } from './chunk-YOIVZ6OA.mjs';
4
- import './chunk-ZKTXRWP6.mjs';
4
+ import { getAuthorizationEndpoint, DEFAULT_ISSUER } from './chunk-XSOYJLMZ.mjs';
5
5
  export { ActivityService, CimplifyClient, DeliveryService, PlacesService, SubscriptionService, SupportService, UploadService, createCimplifyClient } from './chunk-SQ7U3BWY.mjs';
6
6
  export { AUTHORIZATION_TYPE, AUTH_MUTATION, AuthService, BusinessService, CHECKOUT_MODE, CHECKOUT_MUTATION, CHECKOUT_STEP, CONTACT_TYPE, CartOperations, CatalogueQueries, CheckoutService as CheckoutOperations, CheckoutService, CimplifyElement, CimplifyElements, DEFAULT_COUNTRY, DEFAULT_CURRENCY, DEVICE_TYPE, ELEMENT_TYPES, EVENT_TYPES, FxService, InventoryService, LINK_MUTATION, LINK_QUERY, LinkService, LiteService, MESSAGE_TYPES, MOBILE_MONEY_PROVIDER, ORDER_MUTATION, ORDER_TYPE, OrderQueries, PAYMENT_METHOD, PAYMENT_MUTATION, PAYMENT_STATE, PICKUP_TIME_TYPE, SchedulingService, combine, combineObject, createElements, err, flatMap, fromPromise, generateIdempotencyKey, getOrElse, isErr, isOk, mapError, mapResult, ok, toNullable, tryCatch, unwrap } from './chunk-I4IXPQIX.mjs';
7
7
  export { CURRENCY_SYMBOLS, MOBILE_MONEY_PROVIDERS, categorizePaymentError, detectMobileMoneyProvider, formatMoney, formatNumberCompact, formatPrice, formatPriceAdjustment, formatPriceCompact, formatPriceRange, formatPriceWithTax, formatProductPrice, getBasePrice, getCurrencySymbol, getDiscountPercentage, getDisplayPrice, getMarkupPercentage, getPriceRange, getProductCurrency, getTaxAmount, getUnitPriceAtQuantity, hasTaxInfo, isOnSale, isPaymentStatusFailure, isPaymentStatusRequiresAction, isPaymentStatusSuccess, isTaxInclusive, normalizePaymentResponse, normalizeStatusResponse, parsePrice } from './chunk-TD3AY34U.mjs';
@@ -9,7 +9,6 @@ export { CimplifyError, ERROR_HINTS, ErrorCode, IdempotencyMismatchError, ZERO,
9
9
  import './chunk-3G6RQLXK.mjs';
10
10
 
11
11
  // src/silent-sign-in.ts
12
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
13
12
  var DEFAULT_SCOPE = "openid email phone profile";
14
13
  var DEFAULT_TIMEOUT_MS = 12e3;
15
14
  async function signInSilent(opts) {
@@ -22,8 +21,8 @@ async function signInSilent(opts) {
22
21
  }
23
22
  } catch {
24
23
  }
25
- const authUrl = (opts.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
26
24
  const callbackUri = opts.callbackUri ?? "/auth/callback";
25
+ const authorizeEndpoint = opts.authUrl ? `${opts.authUrl.replace(/\/$/, "")}/oauth/authorize` : await getAuthorizationEndpoint(opts.issuer ?? DEFAULT_ISSUER);
27
26
  const pkce = await generatePkce();
28
27
  const state = generateState();
29
28
  const params = new URLSearchParams({
@@ -37,8 +36,8 @@ async function signInSilent(opts) {
37
36
  code_challenge: pkce.challenge,
38
37
  code_challenge_method: pkce.method
39
38
  });
40
- const src = `${authUrl}/oauth/authorize?${params.toString()}`;
41
- const expectedOrigin = new URL(authUrl).origin;
39
+ const src = `${authorizeEndpoint}?${params.toString()}`;
40
+ const expectedOrigin = new URL(authorizeEndpoint).origin;
42
41
  const iframe = document.createElement("iframe");
43
42
  iframe.style.display = "none";
44
43
  iframe.setAttribute("aria-hidden", "true");
package/dist/react.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React$1, { ReactNode } from 'react';
2
- import { d as AdSlot, c as AdPosition, a as AdContextValue, S as SignInOptions } from './sign-in-CZ2ioBAP.mjs';
3
- export { A as AdConfig, g as getVariantDisplayName } from './sign-in-CZ2ioBAP.mjs';
2
+ import { d as AdSlot, c as AdPosition, a as AdContextValue, S as SignInOptions } from './sign-in-dr7m09nm.mjs';
3
+ export { A as AdConfig, g as getVariantDisplayName } from './sign-in-dr7m09nm.mjs';
4
4
  import { ac as CimplifyClient, c0 as ProcessCheckoutResult, a9 as CheckoutStatus, aa as CheckoutStatusContext, w as Business, bd as Location, ch as ReorderResult, bK as OrderStatus, bt as Order, c2 as QuoteBundleSelectionInput, c3 as QuoteCompositeSelectionInput, bY as PriceQuote, c6 as QuoteUiMessage, cC as Service, r as AvailableSlot, au as DayAvailability, am as CustomerBooking, L as CancelBookingResult, f as ActivityStateResponse, cL as SessionMessage, c as ActivityRecommendation, aw as DeliveryFeeResponse, aX as FxRateResponse, cU as StorefrontBootstrap, X as ChatWidgetStarter, W as ChatMessage, h as AddressInfo, n as AuthenticatedData, aL as ElementsOptions, bS as PaymentMethodInfo, aJ as ElementsCheckoutResult, b$ as ProcessCheckoutOptions, af as CimplifyElements, b4 as LineItem, cO as Staff, cx as Room } from './client-DKg-5OWu.mjs';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import { ab as CurrencyCode, aX as Product, aO as Pagination, T as CimplifyError, b9 as ProductWithDetails, Q as Category, aM as Money, C as BundleSelectionInput, $ as ComponentSelectionInput, z as BundleSelectionData, a8 as CompositeSelectionData, U as Collection, b4 as ProductTaxonomy, bt as TaxonomyWithChildren, b5 as ProductTimeProfile, ah as Deal, b0 as ProductDealInfo, an as DiscountValidation, E as BundleSummary, a6 as CompositePriceResult, bo as SubscriptionWithDetails, bn as SubscriptionStatus, bk as Subscription, ac as CustomAttributeDefinition, ba as PropertyFacet, a$ as ProductBillingPlan, bL as VariantView, bF as VariantAxisWithValues, f as AddOnWithOptions, w as BundleComponentView, x as BundlePriceType, a4 as CompositeGroupView, aq as DisplayCart, b1 as ProductInputField, bg as SchedulingMode, at as DurationUnit, ad as CustomAttributeValue, b2 as ProductProperty, bc as QuantityPricingTier } from './product-B_kS4Oxa.mjs';
package/dist/react.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import React$1, { ReactNode } from 'react';
2
- import { d as AdSlot, c as AdPosition, a as AdContextValue, S as SignInOptions } from './sign-in-CZ2ioBAP.js';
3
- export { A as AdConfig, g as getVariantDisplayName } from './sign-in-CZ2ioBAP.js';
2
+ import { d as AdSlot, c as AdPosition, a as AdContextValue, S as SignInOptions } from './sign-in-dr7m09nm.js';
3
+ export { A as AdConfig, g as getVariantDisplayName } from './sign-in-dr7m09nm.js';
4
4
  import { ac as CimplifyClient, c0 as ProcessCheckoutResult, a9 as CheckoutStatus, aa as CheckoutStatusContext, w as Business, bd as Location, ch as ReorderResult, bK as OrderStatus, bt as Order, c2 as QuoteBundleSelectionInput, c3 as QuoteCompositeSelectionInput, bY as PriceQuote, c6 as QuoteUiMessage, cC as Service, r as AvailableSlot, au as DayAvailability, am as CustomerBooking, L as CancelBookingResult, f as ActivityStateResponse, cL as SessionMessage, c as ActivityRecommendation, aw as DeliveryFeeResponse, aX as FxRateResponse, cU as StorefrontBootstrap, X as ChatWidgetStarter, W as ChatMessage, h as AddressInfo, n as AuthenticatedData, aL as ElementsOptions, bS as PaymentMethodInfo, aJ as ElementsCheckoutResult, b$ as ProcessCheckoutOptions, af as CimplifyElements, b4 as LineItem, cO as Staff, cx as Room } from './client-Dfg_hmkP.js';
5
5
  import * as react_jsx_runtime from 'react/jsx-runtime';
6
6
  import { ab as CurrencyCode, aX as Product, aO as Pagination, T as CimplifyError, b9 as ProductWithDetails, Q as Category, aM as Money, C as BundleSelectionInput, $ as ComponentSelectionInput, z as BundleSelectionData, a8 as CompositeSelectionData, U as Collection, b4 as ProductTaxonomy, bt as TaxonomyWithChildren, b5 as ProductTimeProfile, ah as Deal, b0 as ProductDealInfo, an as DiscountValidation, E as BundleSummary, a6 as CompositePriceResult, bo as SubscriptionWithDetails, bn as SubscriptionStatus, bk as Subscription, ac as CustomAttributeDefinition, ba as PropertyFacet, a$ as ProductBillingPlan, bL as VariantView, bF as VariantAxisWithValues, f as AddOnWithOptions, w as BundleComponentView, x as BundlePriceType, a4 as CompositeGroupView, aq as DisplayCart, b1 as ProductInputField, bg as SchedulingMode, at as DurationUnit, ad as CustomAttributeValue, b2 as ProductProperty, bc as QuantityPricingTier } from './product-B_kS4Oxa.js';
package/dist/react.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk3QPO2UK5_js = require('./chunk-3QPO2UK5.js');
5
- require('./chunk-LA2T2TPA.js');
4
+ var chunk6DMHVQ42_js = require('./chunk-6DMHVQ42.js');
5
+ require('./chunk-DKT62WQW.js');
6
6
  var chunkMW7ICTVK_js = require('./chunk-MW7ICTVK.js');
7
7
  var chunkJGBDWEPJ_js = require('./chunk-JGBDWEPJ.js');
8
8
  var chunk7Y2O3E4D_js = require('./chunk-7Y2O3E4D.js');
@@ -2715,7 +2715,7 @@ function CimplifySignInButton({
2715
2715
  const onClick = async () => {
2716
2716
  if (busy || disabled) return;
2717
2717
  setBusy(true);
2718
- await chunk3QPO2UK5_js.startSignIn({
2718
+ await chunk6DMHVQ42_js.startSignIn({
2719
2719
  ...signInOpts,
2720
2720
  onSuccess: () => {
2721
2721
  setBusy(false);
@@ -5464,7 +5464,7 @@ function VariantSelector({
5464
5464
  {
5465
5465
  "data-cimplify-variant-name": true,
5466
5466
  className: cn("flex-1 min-w-0 text-sm", classNames?.name),
5467
- children: chunk3QPO2UK5_js.getVariantDisplayName(variant, productName)
5467
+ children: chunk6DMHVQ42_js.getVariantDisplayName(variant, productName)
5468
5468
  }
5469
5469
  ),
5470
5470
  /* @__PURE__ */ jsxRuntime.jsxs("span", { "data-cimplify-variant-pricing": true, className: cn("text-sm text-muted-foreground", classNames?.pricing), children: [
@@ -6937,12 +6937,12 @@ function FieldInput({
6937
6937
  classNames?.input
6938
6938
  );
6939
6939
  switch (field.field_type) {
6940
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Text:
6941
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Url:
6940
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Text:
6941
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Url:
6942
6942
  return /* @__PURE__ */ jsxRuntime.jsx(
6943
6943
  "input",
6944
6944
  {
6945
- type: field.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
6945
+ type: field.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Url ? "url" : "text",
6946
6946
  value: typeof value === "string" ? value : "",
6947
6947
  onChange: (e) => onValueChange(e.target.value),
6948
6948
  placeholder: field.placeholder,
@@ -6951,7 +6951,7 @@ function FieldInput({
6951
6951
  className: inputClass
6952
6952
  }
6953
6953
  );
6954
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Textarea:
6954
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Textarea:
6955
6955
  return /* @__PURE__ */ jsxRuntime.jsx(
6956
6956
  "textarea",
6957
6957
  {
@@ -6964,7 +6964,7 @@ function FieldInput({
6964
6964
  className: cn(inputClass, "resize-none", classNames?.textarea)
6965
6965
  }
6966
6966
  );
6967
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Number:
6967
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Number:
6968
6968
  return /* @__PURE__ */ jsxRuntime.jsx(
6969
6969
  "input",
6970
6970
  {
@@ -6978,7 +6978,7 @@ function FieldInput({
6978
6978
  className: inputClass
6979
6979
  }
6980
6980
  );
6981
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Select:
6981
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Select:
6982
6982
  return /* @__PURE__ */ jsxRuntime.jsxs(
6983
6983
  "select",
6984
6984
  {
@@ -6992,7 +6992,7 @@ function FieldInput({
6992
6992
  ]
6993
6993
  }
6994
6994
  );
6995
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Radio:
6995
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Radio:
6996
6996
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.radioGroup), children: (field.options || []).map((opt) => /* @__PURE__ */ jsxRuntime.jsxs(
6997
6997
  "label",
6998
6998
  {
@@ -7017,7 +7017,7 @@ function FieldInput({
7017
7017
  },
7018
7018
  opt
7019
7019
  )) });
7020
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Checkbox:
7020
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Checkbox:
7021
7021
  return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: cn("flex items-center gap-2 text-sm cursor-pointer", classNames?.checkboxLabel), children: [
7022
7022
  /* @__PURE__ */ jsxRuntime.jsx(
7023
7023
  "input",
@@ -7030,7 +7030,7 @@ function FieldInput({
7030
7030
  ),
7031
7031
  field.placeholder || field.name
7032
7032
  ] });
7033
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Color:
7033
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Color:
7034
7034
  return /* @__PURE__ */ jsxRuntime.jsx(
7035
7035
  "input",
7036
7036
  {
@@ -7040,7 +7040,7 @@ function FieldInput({
7040
7040
  className: cn("w-12 h-10 rounded-md border border-input cursor-pointer", classNames?.colorInput)
7041
7041
  }
7042
7042
  );
7043
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Date:
7043
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Date:
7044
7044
  return /* @__PURE__ */ jsxRuntime.jsx(
7045
7045
  DatePicker,
7046
7046
  {
@@ -7051,8 +7051,8 @@ function FieldInput({
7051
7051
  "aria-label": field.name
7052
7052
  }
7053
7053
  );
7054
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.File:
7055
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Image:
7054
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.File:
7055
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Image:
7056
7056
  return /* @__PURE__ */ jsxRuntime.jsx(
7057
7057
  FileUploadInput,
7058
7058
  {
@@ -7063,7 +7063,7 @@ function FieldInput({
7063
7063
  classNames
7064
7064
  }
7065
7065
  );
7066
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Email:
7066
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Email:
7067
7067
  return /* @__PURE__ */ jsxRuntime.jsx(
7068
7068
  "input",
7069
7069
  {
@@ -7075,7 +7075,7 @@ function FieldInput({
7075
7075
  className: inputClass
7076
7076
  }
7077
7077
  );
7078
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.DateTime: {
7078
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.DateTime: {
7079
7079
  const stringValue = typeof value === "string" ? value : "";
7080
7080
  const [datePart, timePartRaw] = stringValue.includes("T") ? stringValue.split("T", 2) : [stringValue, ""];
7081
7081
  const timePart = (timePartRaw ?? "").slice(0, 5);
@@ -7114,7 +7114,7 @@ function FieldInput({
7114
7114
  )
7115
7115
  ] });
7116
7116
  }
7117
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Time:
7117
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Time:
7118
7118
  return /* @__PURE__ */ jsxRuntime.jsx(
7119
7119
  TimePicker,
7120
7120
  {
@@ -7125,7 +7125,7 @@ function FieldInput({
7125
7125
  "aria-label": field.name
7126
7126
  }
7127
7127
  );
7128
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.MultiSelect:
7128
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.MultiSelect:
7129
7129
  return /* @__PURE__ */ jsxRuntime.jsx(
7130
7130
  MultiSelectInput,
7131
7131
  {
@@ -7135,7 +7135,7 @@ function FieldInput({
7135
7135
  classNames
7136
7136
  }
7137
7137
  );
7138
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.DateRange:
7138
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.DateRange:
7139
7139
  return /* @__PURE__ */ jsxRuntime.jsx(
7140
7140
  DateRangeInput,
7141
7141
  {
@@ -7145,7 +7145,7 @@ function FieldInput({
7145
7145
  classNames
7146
7146
  }
7147
7147
  );
7148
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Address:
7148
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Address:
7149
7149
  return /* @__PURE__ */ jsxRuntime.jsx(
7150
7150
  AddressInput,
7151
7151
  {
@@ -7156,7 +7156,7 @@ function FieldInput({
7156
7156
  inputClass
7157
7157
  }
7158
7158
  );
7159
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Location:
7159
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Location:
7160
7160
  return /* @__PURE__ */ jsxRuntime.jsx(
7161
7161
  LocationInput,
7162
7162
  {
@@ -7167,7 +7167,7 @@ function FieldInput({
7167
7167
  inputClass
7168
7168
  }
7169
7169
  );
7170
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Phone:
7170
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Phone:
7171
7171
  return /* @__PURE__ */ jsxRuntime.jsx(
7172
7172
  PhoneInput,
7173
7173
  {
@@ -7178,7 +7178,7 @@ function FieldInput({
7178
7178
  inputClass
7179
7179
  }
7180
7180
  );
7181
- case chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Signature:
7181
+ case chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Signature:
7182
7182
  return /* @__PURE__ */ jsxRuntime.jsx(
7183
7183
  SignatureInput,
7184
7184
  {
@@ -7211,7 +7211,7 @@ function FileUploadInput({
7211
7211
  const [isUploading, setIsUploading] = React12__default.default.useState(false);
7212
7212
  const fileUrl = typeof value === "string" ? value : void 0;
7213
7213
  const acceptedFormats = field.validation?.accepted_formats;
7214
- const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
7214
+ const accept = acceptedFormats ? acceptedFormats.map((f) => `.${f}`).join(",") : field.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Image ? "image/*" : void 0;
7215
7215
  const handleFile = async (file) => {
7216
7216
  if (!onFileUpload) return;
7217
7217
  if (field.validation?.max_size_mb) {
@@ -7229,7 +7229,7 @@ function FileUploadInput({
7229
7229
  }
7230
7230
  };
7231
7231
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("space-y-2", classNames?.fileInput), children: fileUrl ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
7232
- field.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
7232
+ field.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Image && /* @__PURE__ */ jsxRuntime.jsx("img", { src: fileUrl, alt: "Uploaded", className: "w-16 h-16 object-cover rounded-md border border-border" }),
7233
7233
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-foreground truncate", children: fileUrl.split("/").pop() }) }),
7234
7234
  /* @__PURE__ */ jsxRuntime.jsx(
7235
7235
  "button",
@@ -7255,7 +7255,7 @@ function FileUploadInput({
7255
7255
  }
7256
7256
  ),
7257
7257
  isUploading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: "Uploading..." }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7258
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
7258
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: field.placeholder || `Upload ${field.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Image ? "image" : "file"}` }),
7259
7259
  acceptedFormats && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-muted-foreground/60 mt-1", children: [
7260
7260
  acceptedFormats.map((f) => f.toUpperCase()).join(", "),
7261
7261
  field.validation?.max_size_mb && ` \xB7 Max ${field.validation.max_size_mb}MB`
@@ -8877,7 +8877,7 @@ function CartLineItemRow({
8877
8877
  const isOptimistic = item.isOptimistic === true;
8878
8878
  const lineTotal = chunk7Y2O3E4D_js.parsePrice(unitPrice) * item.quantity;
8879
8879
  const imageUrl = item.product.image_url;
8880
- const variantLabel = item.variant ? chunk3QPO2UK5_js.getVariantDisplayName(item.variant, item.product.name) : null;
8880
+ const variantLabel = item.variant ? chunk6DMHVQ42_js.getVariantDisplayName(item.variant, item.product.name) : null;
8881
8881
  return /* @__PURE__ */ jsxRuntime.jsxs(
8882
8882
  "div",
8883
8883
  {
@@ -8977,7 +8977,7 @@ function CartLineItemRow({
8977
8977
  input.field_name,
8978
8978
  ":"
8979
8979
  ] }),
8980
- /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.File || input.field_type === chunk3QPO2UK5_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
8980
+ /* @__PURE__ */ jsxRuntime.jsx("dd", { "data-cimplify-cart-input-value": true, className: "text-foreground m-0 truncate", children: input.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.File || input.field_type === chunk6DMHVQ42_js.INPUT_FIELD_TYPE.Image ? String(input.value).split("/").pop() || "Uploaded file" : String(input.value) })
8981
8981
  ] }, input.field_id)) }),
8982
8982
  (item.lineType === "service" || item.product.type === "service") && item.scheduledStart && /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-cimplify-cart-service-info": true, className: cn("mt-1.5 flex items-center gap-1.5 text-xs text-muted-foreground", classNames?.serviceInfo), children: [
8983
8983
  /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "w-3.5 h-3.5 shrink-0", fill: "none", stroke: "currentColor", strokeWidth: "2", viewBox: "0 0 24 24", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }),
@@ -9533,7 +9533,7 @@ function FoodProductCard({
9533
9533
  const tags = product.tags || [];
9534
9534
  const isSignature = product.metadata?.is_signature === true;
9535
9535
  const isNew = product.metadata?.is_new === true;
9536
- const isComposite = product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Composite;
9536
+ const isComposite = product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Composite;
9537
9537
  return /* @__PURE__ */ jsxRuntime.jsxs(CardShell, { product, renderLink, className, children: [
9538
9538
  /* @__PURE__ */ jsxRuntime.jsxs(CardImage, { src: image, alt: product.name, aspectRatio: "square", renderImage, children: [
9539
9539
  isSignature && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "absolute top-3 left-3 inline-flex items-center gap-1 text-[11px] font-semibold tracking-wide bg-amber-50 text-amber-700 border border-amber-200/60 px-2 py-0.5 rounded-md", children: [
@@ -10286,26 +10286,26 @@ var BUILT_IN_CARDS = {
10286
10286
  ["composite" /* Composite */]: CompositeProductCard,
10287
10287
  ["subscription" /* Subscription */]: SubscriptionCard
10288
10288
  };
10289
- var RENTAL_UNITS = /* @__PURE__ */ new Set([chunk3QPO2UK5_js.DURATION_UNIT.Days, chunk3QPO2UK5_js.DURATION_UNIT.Hours]);
10290
- var LEASE_UNITS = /* @__PURE__ */ new Set([chunk3QPO2UK5_js.DURATION_UNIT.Weeks, chunk3QPO2UK5_js.DURATION_UNIT.Months, chunk3QPO2UK5_js.DURATION_UNIT.Years]);
10289
+ var RENTAL_UNITS = /* @__PURE__ */ new Set([chunk6DMHVQ42_js.DURATION_UNIT.Days, chunk6DMHVQ42_js.DURATION_UNIT.Hours]);
10290
+ var LEASE_UNITS = /* @__PURE__ */ new Set([chunk6DMHVQ42_js.DURATION_UNIT.Weeks, chunk6DMHVQ42_js.DURATION_UNIT.Months, chunk6DMHVQ42_js.DURATION_UNIT.Years]);
10291
10291
  function resolveCardVariant(product) {
10292
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Bundle) {
10292
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Bundle) {
10293
10293
  return "bundle" /* Bundle */;
10294
10294
  }
10295
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Composite) {
10295
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Composite) {
10296
10296
  return "composite" /* Composite */;
10297
10297
  }
10298
10298
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
10299
10299
  return "wholesale" /* Wholesale */;
10300
10300
  }
10301
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Digital) {
10301
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Digital) {
10302
10302
  return "digital" /* Digital */;
10303
10303
  }
10304
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Service) {
10304
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Service) {
10305
10305
  if (product.duration_unit && RENTAL_UNITS.has(product.duration_unit)) {
10306
10306
  return "rental" /* Rental */;
10307
10307
  }
10308
- if (product.duration_unit === chunk3QPO2UK5_js.DURATION_UNIT.Nights) {
10308
+ if (product.duration_unit === chunk6DMHVQ42_js.DURATION_UNIT.Nights) {
10309
10309
  return "accommodation" /* Accommodation */;
10310
10310
  }
10311
10311
  if (product.duration_unit && LEASE_UNITS.has(product.duration_unit)) {
@@ -10316,10 +10316,10 @@ function resolveCardVariant(product) {
10316
10316
  }
10317
10317
  return "standard" /* Standard */;
10318
10318
  }
10319
- if (product.render_hint === chunk3QPO2UK5_js.RENDER_HINT.Food) {
10319
+ if (product.render_hint === chunk6DMHVQ42_js.RENDER_HINT.Food) {
10320
10320
  return "food" /* Food */;
10321
10321
  }
10322
- if (product.render_hint === chunk3QPO2UK5_js.RENDER_HINT.Physical) {
10322
+ if (product.render_hint === chunk6DMHVQ42_js.RENDER_HINT.Physical) {
10323
10323
  return "retail" /* Retail */;
10324
10324
  }
10325
10325
  return "retail" /* Retail */;
@@ -12625,7 +12625,7 @@ function DefaultProductLayout({
12625
12625
  className
12626
12626
  }) {
12627
12627
  const [selectedVariantId, setSelectedVariantId] = React12__default.default.useState();
12628
- const images = chunk3QPO2UK5_js.resolveGallery(product, selectedVariantId);
12628
+ const images = chunk6DMHVQ42_js.resolveGallery(product, selectedVariantId);
12629
12629
  const hasRange = product.quantity_pricing && product.quantity_pricing.length > 1 || product.variants && product.variants.length > 1;
12630
12630
  const onSale = chunk7Y2O3E4D_js.isOnSale(product);
12631
12631
  const hasPhysicalDetails = product.sku || product.vendor || product.material;
@@ -13261,25 +13261,25 @@ function resolveTemplateKey(product) {
13261
13261
  if (typeof metaTemplate === "string" && metaTemplate.trim()) {
13262
13262
  return metaTemplate.trim();
13263
13263
  }
13264
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Bundle) {
13264
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Bundle) {
13265
13265
  return "bundle" /* Bundle */;
13266
13266
  }
13267
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Composite) {
13267
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Composite) {
13268
13268
  return "composite" /* Composite */;
13269
13269
  }
13270
13270
  if (product.quantity_pricing && product.quantity_pricing.length > 1) {
13271
13271
  return "wholesale" /* Wholesale */;
13272
13272
  }
13273
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Service) {
13273
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Service) {
13274
13274
  return "service" /* Service */;
13275
13275
  }
13276
- if (product.type === chunk3QPO2UK5_js.PRODUCT_TYPE.Digital) {
13276
+ if (product.type === chunk6DMHVQ42_js.PRODUCT_TYPE.Digital) {
13277
13277
  return "digital" /* Digital */;
13278
13278
  }
13279
- if (product.render_hint === chunk3QPO2UK5_js.RENDER_HINT.Food) {
13279
+ if (product.render_hint === chunk6DMHVQ42_js.RENDER_HINT.Food) {
13280
13280
  return "food" /* Food */;
13281
13281
  }
13282
- if (product.render_hint === chunk3QPO2UK5_js.RENDER_HINT.Physical) {
13282
+ if (product.render_hint === chunk6DMHVQ42_js.RENDER_HINT.Physical) {
13283
13283
  return "physical" /* Physical */;
13284
13284
  }
13285
13285
  return "default" /* Default */;
@@ -15505,7 +15505,7 @@ function SparkleIcon({ className }) {
15505
15505
 
15506
15506
  Object.defineProperty(exports, "getVariantDisplayName", {
15507
15507
  enumerable: true,
15508
- get: function () { return chunk3QPO2UK5_js.getVariantDisplayName; }
15508
+ get: function () { return chunk6DMHVQ42_js.getVariantDisplayName; }
15509
15509
  });
15510
15510
  exports.AccommodationCard = AccommodationCard;
15511
15511
  exports.AccountContent = AccountContent;
package/dist/react.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { DURATION_UNIT, getVariantDisplayName, INPUT_FIELD_TYPE, PRODUCT_TYPE, resolveGallery, startSignIn, RENDER_HINT } from './chunk-TGAROSXB.mjs';
3
- export { getVariantDisplayName } from './chunk-TGAROSXB.mjs';
4
- import './chunk-ZKTXRWP6.mjs';
2
+ import { DURATION_UNIT, getVariantDisplayName, INPUT_FIELD_TYPE, PRODUCT_TYPE, resolveGallery, startSignIn, RENDER_HINT } from './chunk-2AU263DK.mjs';
3
+ export { getVariantDisplayName } from './chunk-2AU263DK.mjs';
4
+ import './chunk-XSOYJLMZ.mjs';
5
5
  import { createCimplifyClient } from './chunk-SQ7U3BWY.mjs';
6
6
  import { ELEMENT_TYPES, EVENT_TYPES } from './chunk-I4IXPQIX.mjs';
7
7
  import { formatPrice, parsePrice, getUnitPriceAtQuantity, isOnSale, getDiscountPercentage, getBasePrice, getPriceRange, formatPriceRange } from './chunk-TD3AY34U.mjs';
package/dist/server.d.mts CHANGED
@@ -194,6 +194,10 @@ declare function updateByTag(tag: string): Promise<void>;
194
194
  declare function refreshPage(): Promise<void>;
195
195
 
196
196
  interface OidcConfig {
197
+ /** OIDC issuer — the discovery anchor. Every endpoint is read from its
198
+ * /.well-known/openid-configuration. Defaults to https://api.cimplify.io. */
199
+ issuer?: string;
200
+ /** @deprecated Use `issuer`. Kept as an alias for one release. */
197
201
  authUrl?: string;
198
202
  clientId: string;
199
203
  cookieName?: string;
package/dist/server.d.ts CHANGED
@@ -194,6 +194,10 @@ declare function updateByTag(tag: string): Promise<void>;
194
194
  declare function refreshPage(): Promise<void>;
195
195
 
196
196
  interface OidcConfig {
197
+ /** OIDC issuer — the discovery anchor. Every endpoint is read from its
198
+ * /.well-known/openid-configuration. Defaults to https://api.cimplify.io. */
199
+ issuer?: string;
200
+ /** @deprecated Use `issuer`. Kept as an alias for one release. */
197
201
  authUrl?: string;
198
202
  clientId: string;
199
203
  cookieName?: string;
package/dist/server.js CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkLA2T2TPA_js = require('./chunk-LA2T2TPA.js');
3
+ var chunkDKT62WQW_js = require('./chunk-DKT62WQW.js');
4
4
  var chunkMW7ICTVK_js = require('./chunk-MW7ICTVK.js');
5
5
  require('./chunk-JGBDWEPJ.js');
6
6
  require('./chunk-7Y2O3E4D.js');
@@ -238,7 +238,6 @@ async function refreshPage() {
238
238
  const fn = await getRefresh();
239
239
  fn();
240
240
  }
241
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
242
241
  var SESSION_COOKIE = "cimplify_session";
243
242
  var ACCESS_TOKEN_COOKIE = "cimplify_access";
244
243
  var HEADER_LOCATION = "Location";
@@ -248,8 +247,8 @@ var PARAM_ERROR = "error";
248
247
  var QUERY_AUTH_ERROR = "cimplify_auth_error";
249
248
  var discoveryCache = /* @__PURE__ */ new Map();
250
249
  var jwksCache = /* @__PURE__ */ new Map();
251
- function authUrl(cfg) {
252
- return (cfg.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
250
+ function issuerBase(cfg) {
251
+ return (cfg.issuer ?? cfg.authUrl ?? chunkDKT62WQW_js.DEFAULT_ISSUER).replace(/\/$/, "");
253
252
  }
254
253
  function cookieName(cfg) {
255
254
  return cfg.cookieName ?? SESSION_COOKIE;
@@ -258,7 +257,7 @@ function accessTokenCookieName(cfg) {
258
257
  return cfg.accessTokenCookieName ?? ACCESS_TOKEN_COOKIE;
259
258
  }
260
259
  async function discovery(cfg) {
261
- const base = authUrl(cfg);
260
+ const base = issuerBase(cfg);
262
261
  let p = discoveryCache.get(base);
263
262
  if (!p) {
264
263
  p = fetch(`${base}/.well-known/openid-configuration`, {
@@ -423,12 +422,12 @@ async function handleOidcCallback(req, opts) {
423
422
  }
424
423
  function readPkceCookie(cookieHeader) {
425
424
  if (!cookieHeader) return null;
426
- const match = cookieHeader.split(/;\s*/).find((p) => p.startsWith(`${chunkLA2T2TPA_js.PKCE_COOKIE}=`));
425
+ const match = cookieHeader.split(/;\s*/).find((p) => p.startsWith(`${chunkDKT62WQW_js.PKCE_COOKIE}=`));
427
426
  if (!match) return null;
428
- return chunkLA2T2TPA_js.decodePkceState(match.slice(chunkLA2T2TPA_js.PKCE_COOKIE.length + 1));
427
+ return chunkDKT62WQW_js.decodePkceState(match.slice(chunkDKT62WQW_js.PKCE_COOKIE.length + 1));
429
428
  }
430
429
  function buildPkceClearCookie() {
431
- return `${chunkLA2T2TPA_js.PKCE_COOKIE}=; Path=${chunkLA2T2TPA_js.PKCE_COOKIE_PATH}; Max-Age=0; Secure; SameSite=Lax`;
430
+ return `${chunkDKT62WQW_js.PKCE_COOKIE}=; Path=${chunkDKT62WQW_js.PKCE_COOKIE_PATH}; Max-Age=0; Secure; SameSite=Lax`;
432
431
  }
433
432
  function safeReturnPath(returnTo, fallback) {
434
433
  if (returnTo && returnTo.startsWith("/") && !returnTo.startsWith("//")) return returnTo;
package/dist/server.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { PKCE_COOKIE, decodePkceState, PKCE_COOKIE_PATH } from './chunk-ZKTXRWP6.mjs';
1
+ import { PKCE_COOKIE, decodePkceState, PKCE_COOKIE_PATH, DEFAULT_ISSUER } from './chunk-XSOYJLMZ.mjs';
2
2
  import { createCimplifyClient } from './chunk-SQ7U3BWY.mjs';
3
3
  import './chunk-I4IXPQIX.mjs';
4
4
  import './chunk-TD3AY34U.mjs';
@@ -236,7 +236,6 @@ async function refreshPage() {
236
236
  const fn = await getRefresh();
237
237
  fn();
238
238
  }
239
- var DEFAULT_AUTH_URL = "https://auth.cimplify.io";
240
239
  var SESSION_COOKIE = "cimplify_session";
241
240
  var ACCESS_TOKEN_COOKIE = "cimplify_access";
242
241
  var HEADER_LOCATION = "Location";
@@ -246,8 +245,8 @@ var PARAM_ERROR = "error";
246
245
  var QUERY_AUTH_ERROR = "cimplify_auth_error";
247
246
  var discoveryCache = /* @__PURE__ */ new Map();
248
247
  var jwksCache = /* @__PURE__ */ new Map();
249
- function authUrl(cfg) {
250
- return (cfg.authUrl ?? DEFAULT_AUTH_URL).replace(/\/$/, "");
248
+ function issuerBase(cfg) {
249
+ return (cfg.issuer ?? cfg.authUrl ?? DEFAULT_ISSUER).replace(/\/$/, "");
251
250
  }
252
251
  function cookieName(cfg) {
253
252
  return cfg.cookieName ?? SESSION_COOKIE;
@@ -256,7 +255,7 @@ function accessTokenCookieName(cfg) {
256
255
  return cfg.accessTokenCookieName ?? ACCESS_TOKEN_COOKIE;
257
256
  }
258
257
  async function discovery(cfg) {
259
- const base = authUrl(cfg);
258
+ const base = issuerBase(cfg);
260
259
  let p = discoveryCache.get(base);
261
260
  if (!p) {
262
261
  p = fetch(`${base}/.well-known/openid-configuration`, {
@@ -30,6 +30,10 @@ interface SignInOptions {
30
30
  redirectUri: string;
31
31
  callbackUri?: string;
32
32
  scope?: string;
33
+ /** OIDC issuer. The authorize host is resolved from its discovery document.
34
+ * Defaults to https://api.cimplify.io. */
35
+ issuer?: string;
36
+ /** @deprecated Pass `issuer`. If set, used directly as the authorize host. */
33
37
  authUrl?: string;
34
38
  loginHint?: string;
35
39
  prompt?: "none" | "login" | "consent";
@@ -30,6 +30,10 @@ interface SignInOptions {
30
30
  redirectUri: string;
31
31
  callbackUri?: string;
32
32
  scope?: string;
33
+ /** OIDC issuer. The authorize host is resolved from its discovery document.
34
+ * Defaults to https://api.cimplify.io. */
35
+ issuer?: string;
36
+ /** @deprecated Pass `issuer`. If set, used directly as the authorize host. */
33
37
  authUrl?: string;
34
38
  loginHint?: string;
35
39
  prompt?: "none" | "login" | "consent";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cimplify/sdk",
3
- "version": "0.59.0",
3
+ "version": "0.60.0",
4
4
  "description": "Cimplify Commerce SDK for storefronts",
5
5
  "keywords": [
6
6
  "cimplify",
@@ -1,25 +0,0 @@
1
- 'use strict';
2
-
3
- // src/internal/pkce-cookie.ts
4
- var PKCE_COOKIE = "cimplify_pkce";
5
- var PKCE_COOKIE_PATH = "/auth";
6
- var PKCE_COOKIE_MAX_AGE_SECONDS = 600;
7
- function encodePkceState(state) {
8
- return encodeURIComponent(JSON.stringify(state));
9
- }
10
- function decodePkceState(raw) {
11
- try {
12
- const parsed = JSON.parse(decodeURIComponent(raw));
13
- if (typeof parsed?.verifier === "string" && typeof parsed.state === "string" && typeof parsed.returnTo === "string") {
14
- return { verifier: parsed.verifier, state: parsed.state, returnTo: parsed.returnTo };
15
- }
16
- } catch {
17
- }
18
- return null;
19
- }
20
-
21
- exports.PKCE_COOKIE = PKCE_COOKIE;
22
- exports.PKCE_COOKIE_MAX_AGE_SECONDS = PKCE_COOKIE_MAX_AGE_SECONDS;
23
- exports.PKCE_COOKIE_PATH = PKCE_COOKIE_PATH;
24
- exports.decodePkceState = decodePkceState;
25
- exports.encodePkceState = encodePkceState;
@@ -1,19 +0,0 @@
1
- // src/internal/pkce-cookie.ts
2
- var PKCE_COOKIE = "cimplify_pkce";
3
- var PKCE_COOKIE_PATH = "/auth";
4
- var PKCE_COOKIE_MAX_AGE_SECONDS = 600;
5
- function encodePkceState(state) {
6
- return encodeURIComponent(JSON.stringify(state));
7
- }
8
- function decodePkceState(raw) {
9
- try {
10
- const parsed = JSON.parse(decodeURIComponent(raw));
11
- if (typeof parsed?.verifier === "string" && typeof parsed.state === "string" && typeof parsed.returnTo === "string") {
12
- return { verifier: parsed.verifier, state: parsed.state, returnTo: parsed.returnTo };
13
- }
14
- } catch {
15
- }
16
- return null;
17
- }
18
-
19
- export { PKCE_COOKIE, PKCE_COOKIE_MAX_AGE_SECONDS, PKCE_COOKIE_PATH, decodePkceState, encodePkceState };