@vio-live/web-sdk 0.27.0 → 0.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.
@@ -2930,6 +2930,15 @@ function urlOrNull(value) {
2930
2930
  const v = value.trim();
2931
2931
  return v ? v : null;
2932
2932
  }
2933
+ function pageUrlOrNull(value) {
2934
+ const v = urlOrNull(value);
2935
+ if (!v) return null;
2936
+ try {
2937
+ return new URL(v).protocol === "https:" ? v : null;
2938
+ } catch {
2939
+ return null;
2940
+ }
2941
+ }
2933
2942
  function nameOf(value) {
2934
2943
  return typeof value === "string" ? value.trim() : "";
2935
2944
  }
@@ -2958,7 +2967,16 @@ function sponsorIdentityFrom(boot, sponsorId) {
2958
2967
  const name = nameOf(sponsor.name);
2959
2968
  const logoUrl = urlOrNull(sponsor.logoUrl);
2960
2969
  if (!name && !logoUrl) return null;
2961
- return { id, name, logoUrl, avatarUrl: urlOrNull(sponsor.avatarUrl) };
2970
+ const termsUrl = pageUrlOrNull(sponsor.termsUrl);
2971
+ const refundPolicyUrl = pageUrlOrNull(sponsor.refundPolicyUrl);
2972
+ return {
2973
+ id,
2974
+ name,
2975
+ logoUrl,
2976
+ avatarUrl: urlOrNull(sponsor.avatarUrl),
2977
+ ...termsUrl ? { termsUrl } : {},
2978
+ ...refundPolicyUrl ? { refundPolicyUrl } : {}
2979
+ };
2962
2980
  } catch {
2963
2981
  return null;
2964
2982
  }
@@ -3249,7 +3267,7 @@ async function prepareApplePay(config) {
3249
3267
  }
3250
3268
 
3251
3269
  // src/core/version.ts
3252
- var SDK_VERSION = "0.27.0";
3270
+ var SDK_VERSION = "0.28.0";
3253
3271
 
3254
3272
  // src/core/checkout/payments/stripe-embedded.ts
3255
3273
  var CREATE_PAYMENT_INTENT_STRIPE_MUTATION = `
@@ -6150,7 +6168,12 @@ var CheckoutManager = class _CheckoutManager extends EventTarget {
6150
6168
  );
6151
6169
  }
6152
6170
  const buyerRef = normalizeBuyerRef(confirmRes?.[BUYER_REF_FIELD]);
6153
- return { orderId: confirmRes?.order_id, status: confirmRes?.status, ...buyerRef ? { buyerRef } : {} };
6171
+ return {
6172
+ orderId: confirmRes?.order_id,
6173
+ status: confirmRes?.status,
6174
+ checkoutId,
6175
+ ...buyerRef ? { buyerRef } : {}
6176
+ };
6154
6177
  };
6155
6178
  }
6156
6179
  static {
@@ -6979,6 +7002,8 @@ function hasExplicitCampaign(lines) {
6979
7002
  }
6980
7003
 
6981
7004
  // src/core/analytics/analytics-manager.ts
7005
+ var ORDER_NUMBER_BACKOFF_MS = [500, 1e3, 2e3, 3e3, 3e3];
7006
+ var ORDER_NUMBER_MAX_WAIT_MS = 1e4;
6982
7007
  var SESSION_TTL_MS = 30 * 60 * 1e3;
6983
7008
  var FLUSH_INTERVAL_MS = 5e3;
6984
7009
  var FLUSH_AT_COUNT = 20;
@@ -7013,6 +7038,12 @@ var AnalyticsManager = class extends EventTarget {
7013
7038
  this.client = null;
7014
7039
  /** The landing it was read from — persisted later when consent arrives after the first event. */
7015
7040
  this.landing = null;
7041
+ /** Checkouts (`c:<id>`) and orders (`o:<number>`) this page load reported a `purchase` for: one each. */
7042
+ this.purchased = /* @__PURE__ */ new Set();
7043
+ /** Purchases still waiting for Vio's order number: each sends at once, with what it has, when called. */
7044
+ this.pendingPurchases = /* @__PURE__ */ new Set();
7045
+ /** Between `pagehide` and `pageshow` (bfcache): nothing waits, it all goes out now. */
7046
+ this.pageHiding = false;
7016
7047
  this.teardown = [];
7017
7048
  }
7018
7049
  /** The landing this manager resolved on this page load (the first event's), or null before it; read only — for the order's entry context when nothing is stored yet. */
@@ -7062,15 +7093,32 @@ var AnalyticsManager = class extends EventTarget {
7062
7093
  this.ensureSession();
7063
7094
  this.flushTimer = setInterval(() => void this.flush(), FLUSH_INTERVAL_MS);
7064
7095
  const onPageHide = () => {
7096
+ this.pageHiding = true;
7097
+ this.settlePendingPurchases();
7065
7098
  this.trackSessionEnd();
7066
7099
  this.flushWithBeacon();
7067
7100
  };
7101
+ const onPageShow = () => {
7102
+ this.pageHiding = false;
7103
+ };
7068
7104
  window.addEventListener("pagehide", onPageHide);
7105
+ window.addEventListener("pageshow", onPageShow);
7069
7106
  this.teardown.push(() => window.removeEventListener("pagehide", onPageHide));
7107
+ this.teardown.push(() => window.removeEventListener("pageshow", onPageShow));
7108
+ if (typeof document !== "undefined" && typeof document.addEventListener === "function") {
7109
+ const onVisibility = () => {
7110
+ if (document.visibilityState !== "hidden" || this.pendingPurchases.size === 0) return;
7111
+ this.settlePendingPurchases();
7112
+ this.flushWithBeacon();
7113
+ };
7114
+ document.addEventListener("visibilitychange", onVisibility);
7115
+ this.teardown.push(() => document.removeEventListener("visibilitychange", onVisibility));
7116
+ }
7070
7117
  if (this.options.autoTrack) this.installAutoListeners();
7071
7118
  }
7072
- /** Stop timers + listeners (tests / SPA unmount). Queue survives. */
7119
+ /** Stop timers + listeners (tests / SPA unmount). Queue survives — a purchase still waiting for its order number joins it now. */
7073
7120
  stop() {
7121
+ this.settlePendingPurchases();
7074
7122
  if (this.flushTimer) clearInterval(this.flushTimer);
7075
7123
  this.flushTimer = null;
7076
7124
  for (const fn of this.teardown.splice(0)) fn();
@@ -7083,7 +7131,10 @@ var AnalyticsManager = class extends EventTarget {
7083
7131
  /** Queue one event. Works pre-init and pre-start (SSR: no-op). */
7084
7132
  track(name, opts = {}) {
7085
7133
  if (!hasDom()) return;
7086
- const event = this.buildEvent(name, opts);
7134
+ this.record(this.buildEvent(name, opts));
7135
+ }
7136
+ /** The sinks and the queue for one built event — `track`'s second half. */
7137
+ record(event) {
7087
7138
  if (!event) return;
7088
7139
  if (this.options.debug) {
7089
7140
  console.debug("[Vio.analytics]", event.name, event);
@@ -7230,6 +7281,8 @@ var AnalyticsManager = class extends EventTarget {
7230
7281
  value: com.value,
7231
7282
  currency: com.currency,
7232
7283
  order_id: com.orderId,
7284
+ // A uuid always fits; anything over the collector's 128 is left out, not cut.
7285
+ checkout_id: fitsId(com.checkoutId),
7233
7286
  payment_method: com.paymentMethod,
7234
7287
  // Only a reference survives — never an email, whatever a host passes —
7235
7288
  // and only with consent to persist: a visit measured with ephemeral
@@ -7469,32 +7522,135 @@ var AnalyticsManager = class extends EventTarget {
7469
7522
  });
7470
7523
  on("vio:payment-success", (ev) => {
7471
7524
  const d = ev.detail ?? {};
7525
+ const ids = purchaseIdsOf(d);
7526
+ if (!this.claimPurchase(ids)) return;
7472
7527
  const sponsorId = d.sponsorId !== void 0 ? Number(d.sponsorId) : void 0;
7473
7528
  const base = { sponsorId, campaignId: campaignOf(d), slot: slotOf(d), ...contentOf(d) };
7474
7529
  const { slices, explicit } = this.cartSlices(sponsorId);
7475
- if (slices.length > 1) {
7476
- for (const slice of slices) {
7477
- this.track("purchase", {
7478
- context: this.sliceContext(slice, base),
7479
- commerce: { ...sliceCommerce(slice), ...purchaseFromPaymentSuccess(d), paymentMethod: d.method },
7480
- props: { slice: slice.slice, slices: slice.slices }
7481
- });
7482
- }
7483
- return;
7484
- }
7485
- const snap = this.cartCommerce(sponsorId);
7486
- this.track("purchase", {
7487
- context: this.singleSliceContext(slices[0], explicit, base),
7488
- commerce: {
7530
+ const parts = slices.length > 1 ? (
7531
+ // Several campaigns paid in one go: one purchase per campaign — its
7532
+ // items and value, the SAME order_id — so each campaign's revenue is
7533
+ // its own and the order still adds up. `props.slice/slices` lets the
7534
+ // collector count the order once.
7535
+ slices.map((slice) => ({
7536
+ context: this.sliceContext(slice, base),
7537
+ commerce: { ...sliceCommerce(slice), paymentMethod: d.method },
7538
+ props: { slice: slice.slice, slices: slice.slices }
7539
+ }))
7540
+ ) : [
7541
+ {
7542
+ context: this.singleSliceContext(slices[0], explicit, base),
7489
7543
  // value / currency / items: the cart snapshot, on every path.
7490
- ...snap ?? {},
7491
- // order_id: Vio's id for the purchase (never the provider's).
7492
- ...purchaseFromPaymentSuccess(d),
7493
- paymentMethod: d.method
7544
+ commerce: { ...this.cartCommerce(sponsorId) ?? {}, paymentMethod: d.method }
7494
7545
  }
7495
- });
7546
+ ];
7547
+ this.reportPurchase(parts, ids, buyerRefOf(d), sponsorId);
7496
7548
  });
7497
7549
  }
7550
+ /**
7551
+ * Claims the purchase of a payment for this page load: false when its
7552
+ * checkout (or its order) already has one, reported or waiting.
7553
+ */
7554
+ claimPurchase(ids) {
7555
+ const keys = [];
7556
+ if (ids.checkoutId) keys.push(`c:${ids.checkoutId}`);
7557
+ if (ids.orderIdKind === "order" && ids.orderId) keys.push(`o:${ids.orderId}`);
7558
+ if (keys.some((key) => this.purchased.has(key))) return false;
7559
+ for (const key of keys) this.purchased.add(key);
7560
+ return true;
7561
+ }
7562
+ /**
7563
+ * Sends the `purchase` event(s) of one payment — ONCE, with Vio's order
7564
+ * number as `order_id` (`props.order_id_kind: 'order'`) and the checkout id
7565
+ * as `checkout_id`. When the payment event did not bring the number (a
7566
+ * redirect return, an order a webhook creates) the checkout is asked for it
7567
+ * — the receipt's own path, `Vio.checkout.getOrderReference` — at once and
7568
+ * after 0.5 / 1 / 2 / 3 / 3 s, for at most 10 s; nothing else waits for it.
7569
+ * Unanswered, or when the page hides or `stop()` comes first, the events go
7570
+ * out with what they have: the checkout id as `order_id`
7571
+ * (`order_id_kind: 'checkout'`), as before — and the late number adds no
7572
+ * second event. The events are BUILT at the payment — its moment (`ts`),
7573
+ * `event_id`, session, page and content — and only the order number (and a
7574
+ * buyer reference the payment did not bring) is filled in when it comes.
7575
+ */
7576
+ reportPurchase(parts, ids, buyerId, sponsorId) {
7577
+ const events = parts.map(
7578
+ (part) => this.buildEvent("purchase", {
7579
+ ...part,
7580
+ commerce: {
7581
+ ...part.commerce,
7582
+ ...ids.orderId !== void 0 ? { orderId: ids.orderId } : {},
7583
+ ...ids.checkoutId !== void 0 ? { checkoutId: ids.checkoutId } : {},
7584
+ ...buyerId !== void 0 ? { buyerId } : {}
7585
+ },
7586
+ ...ids.orderIdKind ? { props: { ...part.props, order_id_kind: ids.orderIdKind } } : {}
7587
+ })
7588
+ );
7589
+ const send = (found = {}) => {
7590
+ if (found.orderNumber) this.purchased.add(`o:${found.orderNumber}`);
7591
+ const lateBuyer = this.canPersist ? normalizeBuyerRef(found.buyerRef) : void 0;
7592
+ for (const event of events) {
7593
+ if (!event) continue;
7594
+ if (found.orderNumber) {
7595
+ event.commerce = { ...event.commerce, order_id: found.orderNumber };
7596
+ event.props = { ...event.props, order_id_kind: "order" };
7597
+ }
7598
+ if (lateBuyer && event.commerce && event.commerce.buyer_id === void 0) {
7599
+ event.commerce = { ...event.commerce, buyer_id: lateBuyer };
7600
+ }
7601
+ this.record(event);
7602
+ }
7603
+ };
7604
+ const ask = ids.orderIdKind === "checkout" ? this.orderReferenceAsker(ids.checkoutId, sponsorId) : null;
7605
+ if (!ask) {
7606
+ send();
7607
+ return;
7608
+ }
7609
+ if (this.isPageHidden()) {
7610
+ send();
7611
+ this.flushWithBeacon();
7612
+ return;
7613
+ }
7614
+ let done = false;
7615
+ const settle = (found) => {
7616
+ if (done) return;
7617
+ done = true;
7618
+ this.pendingPurchases.delete(settleNow);
7619
+ send(found);
7620
+ };
7621
+ const settleNow = () => settle();
7622
+ this.pendingPurchases.add(settleNow);
7623
+ void waitForOrderNumber(ask, () => done).then(settle, () => settle());
7624
+ }
7625
+ /** Sends every purchase still waiting for its order number, at once, with what it has. */
7626
+ settlePendingPurchases() {
7627
+ for (const settle of [...this.pendingPurchases]) settle();
7628
+ }
7629
+ /** Whether the page is hidden or going away (`pagehide` until `pageshow`). */
7630
+ isPageHidden() {
7631
+ if (this.pageHiding) return true;
7632
+ try {
7633
+ return typeof document !== "undefined" && document.visibilityState === "hidden";
7634
+ } catch {
7635
+ return false;
7636
+ }
7637
+ }
7638
+ /**
7639
+ * How a purchase asks a checkout for Vio's order number: through the SDK's
7640
+ * checkout manager (`getOrderReference`, which never throws and shares its
7641
+ * in-flight ask with the receipt's). `null` when there is nothing to ask —
7642
+ * no checkout id, or no checkout manager on this page.
7643
+ */
7644
+ orderReferenceAsker(checkoutId, sponsorId) {
7645
+ if (!checkoutId) return null;
7646
+ try {
7647
+ const checkout = vioFacade()?.checkout;
7648
+ if (!checkout || typeof checkout.getOrderReference !== "function") return null;
7649
+ return () => checkout.getOrderReference(checkoutId, sponsorId || void 0);
7650
+ } catch {
7651
+ return null;
7652
+ }
7653
+ }
7498
7654
  /** The lines of the cart (current, else the pre-clear snapshot), optionally one sponsor's. */
7499
7655
  cartLines(sponsorId) {
7500
7656
  let items = [];
@@ -7728,15 +7884,63 @@ function buyerRefOf(d) {
7728
7884
  }
7729
7885
  return void 0;
7730
7886
  }
7731
- function purchaseFromPaymentSuccess(d) {
7887
+ function purchaseIdsOf(d) {
7888
+ if (!d) return {};
7732
7889
  const r = d.result ?? {};
7733
- const orderId = firstId(d.orderId, r.confirmation?.orderId, d.checkoutId);
7890
+ const legacy = firstId(d.orderId);
7891
+ const legacyIsNumber = legacy !== void 0 && isOrderNumber(legacy);
7892
+ const orderNumber = firstId(d.orderNumber, r.confirmation?.orderId, legacyIsNumber ? legacy : void 0);
7893
+ const checkoutId = firstId(legacyIsNumber ? void 0 : legacy, d.checkoutId, r.confirmation?.checkoutId);
7894
+ if (orderNumber !== void 0) {
7895
+ return { orderId: orderNumber, ...checkoutId !== void 0 ? { checkoutId } : {}, orderIdKind: "order" };
7896
+ }
7897
+ if (checkoutId !== void 0) return { orderId: checkoutId, checkoutId, orderIdKind: "checkout" };
7898
+ return {};
7899
+ }
7900
+ function purchaseFromPaymentSuccess(d) {
7901
+ const { orderId, checkoutId } = purchaseIdsOf(d);
7734
7902
  const buyerId = buyerRefOf(d);
7735
7903
  return {
7736
7904
  ...orderId !== void 0 ? { orderId } : {},
7905
+ ...checkoutId !== void 0 ? { checkoutId } : {},
7737
7906
  ...buyerId !== void 0 ? { buyerId } : {}
7738
7907
  };
7739
7908
  }
7909
+ function isOrderNumber(value) {
7910
+ return /^[1-9][0-9]*$/.test(value);
7911
+ }
7912
+ async function waitForOrderNumber(ask, stopped) {
7913
+ let deadline;
7914
+ const timeUp = new Promise((resolve) => {
7915
+ deadline = setTimeout(() => resolve(null), ORDER_NUMBER_MAX_WAIT_MS);
7916
+ });
7917
+ let buyerRef;
7918
+ const found = (orderNumber) => ({
7919
+ ...orderNumber ? { orderNumber } : {},
7920
+ ...buyerRef ? { buyerRef } : {}
7921
+ });
7922
+ try {
7923
+ for (let attempt = 0; attempt <= ORDER_NUMBER_BACKOFF_MS.length; attempt++) {
7924
+ if (attempt > 0) {
7925
+ const wait = ORDER_NUMBER_BACKOFF_MS[attempt - 1];
7926
+ const slept = await Promise.race([new Promise((resolve) => setTimeout(() => resolve(true), wait)), timeUp]);
7927
+ if (slept === null) break;
7928
+ }
7929
+ if (stopped()) break;
7930
+ try {
7931
+ const reference = await Promise.race([ask(), timeUp]);
7932
+ if (reference === null) break;
7933
+ buyerRef ??= normalizeBuyerRef(reference?.buyerRef);
7934
+ const orderNumber = firstId(reference?.orderNumber);
7935
+ if (orderNumber !== void 0 && isOrderNumber(orderNumber)) return found(orderNumber);
7936
+ } catch {
7937
+ }
7938
+ }
7939
+ return found();
7940
+ } finally {
7941
+ clearTimeout(deadline);
7942
+ }
7943
+ }
7740
7944
  function firstId(...candidates) {
7741
7945
  for (const c of candidates) {
7742
7946
  if (c === void 0 || c === null) continue;
@@ -8589,6 +8793,6 @@ function vippsButtonAttributes(verb = "buy", opts = {}) {
8589
8793
  };
8590
8794
  }
8591
8795
 
8592
- export { ADD_ITEM_MUTATION, ADYEN_RETURN_METHOD, ADYEN_RETURN_QUERY_KEYS, AdyenOriginError, AnalyticsManager, BUYER_REF_MAX_LENGTH, CHECKOUT_ATTRIBUTION_CAPS, CHECKOUT_SPONSOR_STORAGE_KEY, CLIENT_LANDING_URL_MAX_LENGTH, CONTENT_URL_MAX_LENGTH, CREATE_CART_MUTATION, CREATE_CHECKOUT_MUTATION, CREATE_CHECKOUT_WITH_ATTRIBUTION_MUTATION, CREATE_PAYMENT_STRIPE_MUTATION, CREATE_PAYMENT_VIPPS_MUTATION, CartManager, CheckoutManager, CommerceClient, Configuration, DELETE_ITEM_MUTATION, GET_AVAILABLE_PAYMENT_METHODS_QUERY, GET_CART_QUERY, GET_CHECKOUT_QUERY, GET_LINE_ITEMS_BY_SUPPLIER_QUERY, GET_VIPPS_STATUS_QUERY, GRAPHQL_INT_MAX, KUSTOM_RETURN_QUERY_KEYS, LINE_ORIGIN_CAPS, SDK_VERSION, UPDATE_CHECKOUT_MUTATION, UPDATE_CHECKOUT_WITH_ATTRIBUTION_MUTATION, UPDATE_ITEM_MUTATION, UPDATE_ITEM_WITH_ORIGIN_MUTATION, UPDATE_SHIPPINGS_BY_SUPPLIER_MUTATION, VIPPS_BUTTON_SCRIPT, VIPPS_BUTTON_TAG, Vio, VioApi, VioApiError, __decorateClass, activeCampaignEntry, addItem, adyenReturnOutcome, adyenReturnParams, autoSlotDisplayName, autoSlotId, buyerRefOf, campaignCandidates, capContentUrl, cartSlicesFrom, checkApplePayAvailability, checkoutAttributionOf, checkoutSponsorOf, componentKindOf, createCart, createCheckout, createCommerceClient, createPaymentStripe, createPaymentVipps, createVioApi, deleteItem, displayPrice, dominantCampaignOf, ensureVippsButton, entryContextOf, executeCartGraphQL, formatPrice, gatewayHas, gatewayHasBuyerRef, getAvailablePaymentMethods, getCart, getCartGraphQLOptions, getCheckout, getCheckoutReference, getCustomerSessionId, getGlobalCurrency, getLineItemsBySupplier, getVippsStatus, isUnknownFeatureError, isUnknownTokenError, kustomReturnOutcome, landingUrl, lineOriginWire, lineOrigins, nexiReturnPaymentId, normalizeBuyerRef, normalizeOrigin, normalizeScope, normalizeSlotId, normalizeSlotKind, originAndPath, primaryImageUrl, purchaseFromPaymentSuccess, readNexiPending, rememberedCheckoutSponsor, resetGatewayFeatures, resolveCampaignId, resolveClientContext, resolveContent, resolveLanding, resolveSlotCampaign, sameOrigin, showApplePaySheet, sponsorCampaignEntry, sponsorIdentityFrom, storedLanding, toCampaignId, updateCheckout, updateItem, updateShippingsBySupplier, vippsButtonAttributes, withGatewayFeature };
8593
- //# sourceMappingURL=chunk-HJRIPCWB.js.map
8594
- //# sourceMappingURL=chunk-HJRIPCWB.js.map
8796
+ export { ADD_ITEM_MUTATION, ADYEN_RETURN_METHOD, ADYEN_RETURN_QUERY_KEYS, AdyenOriginError, AnalyticsManager, BUYER_REF_MAX_LENGTH, CHECKOUT_ATTRIBUTION_CAPS, CHECKOUT_SPONSOR_STORAGE_KEY, CLIENT_LANDING_URL_MAX_LENGTH, CONTENT_URL_MAX_LENGTH, CREATE_CART_MUTATION, CREATE_CHECKOUT_MUTATION, CREATE_CHECKOUT_WITH_ATTRIBUTION_MUTATION, CREATE_PAYMENT_STRIPE_MUTATION, CREATE_PAYMENT_VIPPS_MUTATION, CartManager, CheckoutManager, CommerceClient, Configuration, DELETE_ITEM_MUTATION, GET_AVAILABLE_PAYMENT_METHODS_QUERY, GET_CART_QUERY, GET_CHECKOUT_QUERY, GET_LINE_ITEMS_BY_SUPPLIER_QUERY, GET_VIPPS_STATUS_QUERY, GRAPHQL_INT_MAX, KUSTOM_RETURN_QUERY_KEYS, LINE_ORIGIN_CAPS, SDK_VERSION, UPDATE_CHECKOUT_MUTATION, UPDATE_CHECKOUT_WITH_ATTRIBUTION_MUTATION, UPDATE_ITEM_MUTATION, UPDATE_ITEM_WITH_ORIGIN_MUTATION, UPDATE_SHIPPINGS_BY_SUPPLIER_MUTATION, VIPPS_BUTTON_SCRIPT, VIPPS_BUTTON_TAG, Vio, VioApi, VioApiError, __decorateClass, activeCampaignEntry, addItem, adyenReturnOutcome, adyenReturnParams, autoSlotDisplayName, autoSlotId, buyerRefOf, campaignCandidates, capContentUrl, cartSlicesFrom, checkApplePayAvailability, checkoutAttributionOf, checkoutSponsorOf, componentKindOf, createCart, createCheckout, createCommerceClient, createPaymentStripe, createPaymentVipps, createVioApi, deleteItem, displayPrice, dominantCampaignOf, ensureVippsButton, entryContextOf, executeCartGraphQL, formatPrice, gatewayHas, gatewayHasBuyerRef, getAvailablePaymentMethods, getCart, getCartGraphQLOptions, getCheckout, getCheckoutReference, getCustomerSessionId, getGlobalCurrency, getLineItemsBySupplier, getVippsStatus, isUnknownFeatureError, isUnknownTokenError, kustomReturnOutcome, landingUrl, lineOriginWire, lineOrigins, nexiReturnPaymentId, normalizeBuyerRef, normalizeOrigin, normalizeScope, normalizeSlotId, normalizeSlotKind, originAndPath, primaryImageUrl, purchaseFromPaymentSuccess, purchaseIdsOf, readNexiPending, rememberedCheckoutSponsor, resetGatewayFeatures, resolveCampaignId, resolveClientContext, resolveContent, resolveLanding, resolveSlotCampaign, sameOrigin, showApplePaySheet, sponsorCampaignEntry, sponsorIdentityFrom, storedLanding, toCampaignId, updateCheckout, updateItem, updateShippingsBySupplier, vippsButtonAttributes, withGatewayFeature };
8797
+ //# sourceMappingURL=chunk-AFJ5M53F.js.map
8798
+ //# sourceMappingURL=chunk-AFJ5M53F.js.map