@rechargeapps/storefront-client 2.6.0 → 2.7.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.
Files changed (94) hide show
  1. package/dist/cjs/api/address.js.map +1 -1
  2. package/dist/cjs/api/auth.js +1 -1
  3. package/dist/cjs/api/auth.js.map +1 -1
  4. package/dist/cjs/api/bundle.js +0 -1
  5. package/dist/cjs/api/bundle.js.map +1 -1
  6. package/dist/cjs/api/bundleData.js +1 -1
  7. package/dist/cjs/api/bundleData.js.map +1 -1
  8. package/dist/cjs/api/cdn.js.map +1 -1
  9. package/dist/cjs/api/charge.js.map +1 -1
  10. package/dist/cjs/api/collection.js.map +1 -1
  11. package/dist/cjs/api/credit.js.map +1 -1
  12. package/dist/cjs/api/customer.js +8 -7
  13. package/dist/cjs/api/customer.js.map +1 -1
  14. package/dist/cjs/api/customerSurveys.js.map +1 -1
  15. package/dist/cjs/api/flow.js.map +1 -1
  16. package/dist/cjs/api/gift.js.map +1 -1
  17. package/dist/cjs/api/membership.js.map +1 -1
  18. package/dist/cjs/api/membershipProgram.js.map +1 -1
  19. package/dist/cjs/api/metafield.js.map +1 -1
  20. package/dist/cjs/api/onetime.js.map +1 -1
  21. package/dist/cjs/api/order.js.map +1 -1
  22. package/dist/cjs/api/paymentMethod.js.map +1 -1
  23. package/dist/cjs/api/plan.js.map +1 -1
  24. package/dist/cjs/api/product.js.map +1 -1
  25. package/dist/cjs/api/store.js.map +1 -1
  26. package/dist/cjs/api/subscription.js.map +1 -1
  27. package/dist/cjs/api/tieredDiscount.js +0 -6
  28. package/dist/cjs/api/tieredDiscount.js.map +1 -1
  29. package/dist/cjs/constants/api.js.map +1 -1
  30. package/dist/cjs/mappers/cdn.js.map +1 -1
  31. package/dist/cjs/mappers/subscription.js.map +1 -1
  32. package/dist/cjs/mappers/utils.js.map +1 -1
  33. package/dist/cjs/utils/bundle.js +28 -51
  34. package/dist/cjs/utils/bundle.js.map +1 -1
  35. package/dist/cjs/utils/bundleData.js +4 -8
  36. package/dist/cjs/utils/bundleData.js.map +1 -1
  37. package/dist/cjs/utils/error.js.map +1 -1
  38. package/dist/cjs/utils/id.js.map +1 -1
  39. package/dist/cjs/utils/init.js.map +1 -1
  40. package/dist/cjs/utils/loadSpreedlyScript.js +34 -20
  41. package/dist/cjs/utils/loadSpreedlyScript.js.map +1 -1
  42. package/dist/cjs/utils/options.js.map +1 -1
  43. package/dist/cjs/utils/request.js +1 -1
  44. package/dist/cjs/utils/request.js.map +1 -1
  45. package/dist/cjs/utils/url.js.map +1 -1
  46. package/dist/esm/api/address.js +1 -1
  47. package/dist/esm/api/address.js.map +1 -1
  48. package/dist/esm/api/auth.js +1 -1
  49. package/dist/esm/api/auth.js.map +1 -1
  50. package/dist/esm/api/bundle.js +1 -2
  51. package/dist/esm/api/bundle.js.map +1 -1
  52. package/dist/esm/api/bundleData.js +1 -1
  53. package/dist/esm/api/bundleData.js.map +1 -1
  54. package/dist/esm/api/cdn.js.map +1 -1
  55. package/dist/esm/api/charge.js.map +1 -1
  56. package/dist/esm/api/collection.js.map +1 -1
  57. package/dist/esm/api/credit.js.map +1 -1
  58. package/dist/esm/api/customer.js +9 -8
  59. package/dist/esm/api/customer.js.map +1 -1
  60. package/dist/esm/api/customerSurveys.js.map +1 -1
  61. package/dist/esm/api/flow.js.map +1 -1
  62. package/dist/esm/api/gift.js.map +1 -1
  63. package/dist/esm/api/membership.js.map +1 -1
  64. package/dist/esm/api/membershipProgram.js.map +1 -1
  65. package/dist/esm/api/metafield.js.map +1 -1
  66. package/dist/esm/api/onetime.js.map +1 -1
  67. package/dist/esm/api/order.js.map +1 -1
  68. package/dist/esm/api/paymentMethod.js.map +1 -1
  69. package/dist/esm/api/plan.js.map +1 -1
  70. package/dist/esm/api/product.js.map +1 -1
  71. package/dist/esm/api/store.js.map +1 -1
  72. package/dist/esm/api/subscription.js.map +1 -1
  73. package/dist/esm/api/tieredDiscount.js +0 -6
  74. package/dist/esm/api/tieredDiscount.js.map +1 -1
  75. package/dist/esm/constants/api.js.map +1 -1
  76. package/dist/esm/mappers/cdn.js.map +1 -1
  77. package/dist/esm/mappers/subscription.js.map +1 -1
  78. package/dist/esm/mappers/utils.js.map +1 -1
  79. package/dist/esm/utils/bundle.js +29 -52
  80. package/dist/esm/utils/bundle.js.map +1 -1
  81. package/dist/esm/utils/bundleData.js +4 -8
  82. package/dist/esm/utils/bundleData.js.map +1 -1
  83. package/dist/esm/utils/error.js.map +1 -1
  84. package/dist/esm/utils/id.js.map +1 -1
  85. package/dist/esm/utils/init.js.map +1 -1
  86. package/dist/esm/utils/loadSpreedlyScript.js +34 -20
  87. package/dist/esm/utils/loadSpreedlyScript.js.map +1 -1
  88. package/dist/esm/utils/options.js.map +1 -1
  89. package/dist/esm/utils/request.js +2 -2
  90. package/dist/esm/utils/request.js.map +1 -1
  91. package/dist/esm/utils/url.js.map +1 -1
  92. package/dist/index.d.ts +3 -7
  93. package/dist/umd/recharge-client.min.js +2 -2
  94. package/package.json +11 -10
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.js","sources":["../../../src/mappers/subscription.ts"],"sourcesContent":["import {\n CreateSubscriptionRequest,\n Subscription,\n SubscriptionStatus,\n Subscription_2021_01,\n UpdateSubscriptionsRequest,\n} from '../types';\nimport { convertToBool, omit } from './utils';\n\nexport function bulkSubscriptionCreateMapper(customer_id: string, createRequest: CreateSubscriptionRequest) {\n return {\n ...omit(createRequest, [\n 'address_id',\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'status',\n ]),\n customer_id: parseInt(customer_id, 10),\n shopify_variant_id: createRequest.external_variant_id.ecommerce\n ? parseInt(createRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(createRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${createRequest.charge_interval_frequency}` }\n : {}),\n ...(createRequest.order_interval_frequency\n ? { order_interval_frequency: `${createRequest.order_interval_frequency}` }\n : {}),\n status: createRequest.status ? createRequest.status.toUpperCase() : undefined,\n };\n}\n\nexport function bulkSubscriptionUpdateMapper(force_update: boolean, updateRequest: UpdateSubscriptionsRequest) {\n return {\n ...omit(updateRequest, [\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'use_external_variant_defaults',\n ]),\n shopify_variant_id: updateRequest.external_variant_id?.ecommerce\n ? parseInt(updateRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(updateRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${updateRequest.charge_interval_frequency}` }\n : undefined),\n ...(updateRequest.order_interval_frequency\n ? { order_interval_frequency: `${updateRequest.order_interval_frequency}` }\n : undefined),\n force_update,\n };\n}\n\nexport function subscriptionMapperOldToNew(old: Subscription_2021_01): Subscription {\n const {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency,\n created_at,\n expire_after_specific_number_of_charges,\n shopify_product_id,\n shopify_variant_id,\n has_queued_charges,\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached,\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency,\n order_interval_unit,\n presentment_currency,\n price,\n product_title,\n properties,\n quantity,\n sku,\n sku_override,\n status,\n updated_at,\n variant_title,\n } = old;\n return {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency: parseInt(charge_interval_frequency, 10),\n created_at,\n expire_after_specific_number_of_charges,\n external_product_id: { ecommerce: `${shopify_product_id}` },\n external_variant_id: { ecommerce: `${shopify_variant_id}` },\n has_queued_charges: convertToBool(has_queued_charges),\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached: convertToBool(max_retries_reached),\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency: parseInt(order_interval_frequency, 10),\n order_interval_unit,\n presentment_currency,\n price: `${price}`,\n product_title: product_title ?? '',\n properties,\n quantity,\n sku,\n sku_override,\n status: status.toLowerCase() as SubscriptionStatus,\n updated_at,\n variant_title,\n } as Subscription;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscription.js","sources":["../../../src/mappers/subscription.ts"],"sourcesContent":["import {\n CreateSubscriptionRequest,\n Subscription,\n SubscriptionStatus,\n Subscription_2021_01,\n UpdateSubscriptionsRequest,\n} from '../types';\nimport { convertToBool, omit } from './utils';\n\nexport function bulkSubscriptionCreateMapper(customer_id: string, createRequest: CreateSubscriptionRequest) {\n return {\n ...omit(createRequest, [\n 'address_id',\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'status',\n ]),\n customer_id: parseInt(customer_id, 10),\n shopify_variant_id: createRequest.external_variant_id.ecommerce\n ? parseInt(createRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(createRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${createRequest.charge_interval_frequency}` }\n : {}),\n ...(createRequest.order_interval_frequency\n ? { order_interval_frequency: `${createRequest.order_interval_frequency}` }\n : {}),\n status: createRequest.status ? createRequest.status.toUpperCase() : undefined,\n };\n}\n\nexport function bulkSubscriptionUpdateMapper(force_update: boolean, updateRequest: UpdateSubscriptionsRequest) {\n return {\n ...omit(updateRequest, [\n 'external_variant_id',\n 'external_product_id',\n 'charge_interval_frequency',\n 'order_interval_frequency',\n 'price',\n 'use_external_variant_defaults',\n ]),\n shopify_variant_id: updateRequest.external_variant_id?.ecommerce\n ? parseInt(updateRequest.external_variant_id.ecommerce, 10)\n : undefined,\n ...(updateRequest.charge_interval_frequency\n ? { charge_interval_frequency: `${updateRequest.charge_interval_frequency}` }\n : undefined),\n ...(updateRequest.order_interval_frequency\n ? { order_interval_frequency: `${updateRequest.order_interval_frequency}` }\n : undefined),\n force_update,\n };\n}\n\nexport function subscriptionMapperOldToNew(old: Subscription_2021_01): Subscription {\n const {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency,\n created_at,\n expire_after_specific_number_of_charges,\n shopify_product_id,\n shopify_variant_id,\n has_queued_charges,\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached,\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency,\n order_interval_unit,\n presentment_currency,\n price,\n product_title,\n properties,\n quantity,\n sku,\n sku_override,\n status,\n updated_at,\n variant_title,\n } = old;\n return {\n id,\n address_id,\n customer_id,\n analytics_data,\n cancellation_reason,\n cancellation_reason_comments,\n cancelled_at,\n charge_interval_frequency: parseInt(charge_interval_frequency, 10),\n created_at,\n expire_after_specific_number_of_charges,\n external_product_id: { ecommerce: `${shopify_product_id}` },\n external_variant_id: { ecommerce: `${shopify_variant_id}` },\n has_queued_charges: convertToBool(has_queued_charges),\n is_prepaid,\n is_skippable,\n is_swappable,\n max_retries_reached: convertToBool(max_retries_reached),\n next_charge_scheduled_at,\n order_day_of_month,\n order_day_of_week,\n order_interval_frequency: parseInt(order_interval_frequency, 10),\n order_interval_unit,\n presentment_currency,\n price: `${price}`,\n product_title: product_title ?? '',\n properties,\n quantity,\n sku,\n sku_override,\n status: status.toLowerCase() as SubscriptionStatus,\n updated_at,\n variant_title,\n } as Subscription;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/mappers/utils.ts"],"sourcesContent":["import { BooleanLike } from '../types';\n\n/** Trys to parse passed in value. If it doesn't work returns the same passed in value */\nfunction parseValue(value: unknown): any {\n try {\n return JSON.parse(value as string);\n } catch {\n return value;\n }\n}\n\n/** Returns a new object that updates \"string\" values into their correct data type. */\nexport function parseValues<T = any>(json: Record<string, unknown>): T {\n return Object.entries(json).reduce((memo, [key, value]) => {\n return { ...memo, [key]: parseValue(value) };\n }, {}) as T;\n}\n\nexport const convertToBool = (val: BooleanLike) => {\n if (typeof val === 'string') {\n return val !== '0' && val !== 'false';\n }\n\n return !!val;\n};\n\n/**\n * Returns a shallow copy of `obj` with the given keys removed.\n *\n * Reference: lodash.omit\n */\nexport function omit<T extends object, K extends PropertyKey>(obj: T, keys: K[]): Omit<T, Extract<keyof T, K>> {\n const excluded = new Set<PropertyKey>(keys);\n const clone = {} as Record<PropertyKey, unknown>;\n for (const key of Object.keys(obj)) {\n if (!excluded.has(key)) {\n clone[key] = (obj as Record<PropertyKey, unknown>)[key];\n }\n }\n return clone as Omit<T, Extract<keyof T, K>>;\n}\n"],"names":[],"mappings":"AAGA,SAAS,WAAW,KAAqB,EAAA;AACvC,EAAI,IAAA;AACF,IAAO,OAAA,IAAA,CAAK,MAAM,KAAe,CAAA,CAAA;AAAA,GAC3B,CAAA,MAAA;AACN,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAGO,SAAS,YAAqB,IAAkC,EAAA;AACrE,EAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,CAAC,IAAM,EAAA,CAAC,GAAK,EAAA,KAAK,CAAM,KAAA;AACzD,IAAO,OAAA,EAAE,GAAG,IAAM,EAAA,CAAC,GAAG,GAAG,UAAA,CAAW,KAAK,CAAE,EAAA,CAAA;AAAA,GAC7C,EAAG,EAAE,CAAA,CAAA;AACP,CAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,GAAqB,KAAA;AACjD,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAO,OAAA,GAAA,KAAQ,OAAO,GAAQ,KAAA,OAAA,CAAA;AAAA,GAChC;AAEA,EAAA,OAAO,CAAC,CAAC,GAAA,CAAA;AACX,EAAA;AAOgB,SAAA,IAAA,CAA8C,KAAQ,IAAyC,EAAA;AAC7G,EAAM,MAAA,QAAA,GAAW,IAAI,GAAA,CAAiB,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,QAAQ,EAAC,CAAA;AACf,EAAA,KAAA,MAAW,GAAO,IAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAG,EAAA;AAClC,IAAA,IAAI,CAAC,QAAA,CAAS,GAAI,CAAA,GAAG,CAAG,EAAA;AACtB,MAAM,KAAA,CAAA,GAAG,CAAK,GAAA,GAAA,CAAqC,GAAG,CAAA,CAAA;AAAA,KACxD;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/mappers/utils.ts"],"sourcesContent":["import { BooleanLike } from '../types';\n\n/** Trys to parse passed in value. If it doesn't work returns the same passed in value */\nfunction parseValue(value: unknown): any {\n try {\n return JSON.parse(value as string);\n } catch {\n return value;\n }\n}\n\n/** Returns a new object that updates \"string\" values into their correct data type. */\nexport function parseValues<T = any>(json: Record<string, unknown>): T {\n return Object.entries(json).reduce((memo, [key, value]) => {\n return { ...memo, [key]: parseValue(value) };\n }, {}) as T;\n}\n\nexport const convertToBool = (val: BooleanLike) => {\n if (typeof val === 'string') {\n return val !== '0' && val !== 'false';\n }\n\n return !!val;\n};\n\n/**\n * Returns a shallow copy of `obj` with the given keys removed.\n *\n * Reference: lodash.omit\n */\nexport function omit<T extends object, K extends PropertyKey>(obj: T, keys: K[]): Omit<T, Extract<keyof T, K>> {\n const excluded = new Set<PropertyKey>(keys);\n const clone = {} as Record<PropertyKey, unknown>;\n for (const key of Object.keys(obj)) {\n if (!excluded.has(key)) {\n clone[key] = (obj as Record<PropertyKey, unknown>)[key];\n }\n }\n return clone as Omit<T, Extract<keyof T, K>>;\n}\n"],"names":[],"mappings":"AAGA,SAAS,WAAW,KAAA,EAAqB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,KAAe,CAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAGO,SAAS,YAAqB,IAAA,EAAkC;AACrE,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,MAAA,CAAO,CAAC,IAAA,EAAM,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACzD,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,UAAA,CAAW,KAAK,CAAA,EAAE;AAAA,EAC7C,CAAA,EAAG,EAAE,CAAA;AACP;AAEO,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAqB;AACjD,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,OAAO,GAAA,KAAQ,OAAO,GAAA,KAAQ,OAAA;AAAA,EAChC;AAEA,EAAA,OAAO,CAAC,CAAC,GAAA;AACX;AAOO,SAAS,IAAA,CAA8C,KAAQ,IAAA,EAAyC;AAC7G,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAiB,IAAI,CAAA;AAC1C,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG;AAClC,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AACtB,MAAA,KAAA,CAAM,GAAG,CAAA,GAAK,GAAA,CAAqC,GAAG,CAAA;AAAA,IACxD;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;;"}
@@ -1,28 +1,14 @@
1
- import { enumType, union, int32, unionCase, voidType, struct, uint64, string, UNBOUNDED_MAX_LENGTH, uint32, array, field } from '@stellar/js-xdr';
1
+ import { enumType, union, unionCase, voidType, int32, struct, uint32, string, UNBOUNDED_MAX_LENGTH, uint64, array, field } from '@stellar/js-xdr';
2
2
 
3
- var __accessCheck = (obj, member, msg) => {
4
- if (!member.has(obj))
5
- throw TypeError("Cannot " + msg);
3
+ var __typeError = (msg) => {
4
+ throw TypeError(msg);
6
5
  };
7
- var __privateGet = (obj, member, getter) => {
8
- __accessCheck(obj, member, "read from private field");
9
- return getter ? getter.call(obj) : member.get(obj);
10
- };
11
- var __privateAdd = (obj, member, value) => {
12
- if (member.has(obj))
13
- throw TypeError("Cannot add the same private member more than once");
14
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
15
- };
16
- var __privateSet = (obj, member, value, setter) => {
17
- __accessCheck(obj, member, "write to private field");
18
- setter ? setter.call(obj, value) : member.set(obj, value);
19
- return value;
20
- };
21
- var __privateMethod = (obj, member, method) => {
22
- __accessCheck(obj, member, "access private method");
23
- return method;
24
- };
25
- var _bundleSettings, _items, _bundleData, _formatBundleSettings, formatBundleSettings_fn, _formatBundleData, formatBundleData_fn, _isValueInRange, isValueInRange_fn, _unique, unique_fn, _hasOwn, hasOwn_fn;
6
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
7
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
8
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
9
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
10
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
11
+ var _bundleSettings, _items, _bundleData, _BundleSelectionValidator_instances, formatBundleSettings_fn, formatBundleData_fn, isValueInRange_fn, unique_fn, hasOwn_fn;
26
12
  const textEncoder = new TextEncoder();
27
13
  const emptyExt = { v: 0 };
28
14
  function toBase64(bytes) {
@@ -77,7 +63,7 @@ function toLineItemProperty(bundle) {
77
63
  quantity: item.quantity,
78
64
  ext: emptyExt
79
65
  })),
80
- version: bundle.version || Math.floor(Date.now() / 1e3),
66
+ version: Math.floor(Date.now() / 1e3),
81
67
  ext: emptyExt
82
68
  }
83
69
  };
@@ -85,18 +71,12 @@ function toLineItemProperty(bundle) {
85
71
  }
86
72
  class BundleSelectionValidator {
87
73
  constructor(selectionItems, bundleData) {
88
- __privateAdd(this, _formatBundleSettings);
89
- __privateAdd(this, _formatBundleData);
90
- __privateAdd(this, _isValueInRange);
91
- __privateAdd(this, _unique);
92
- // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,
93
- // `constructor`, `toString`) resolving to truthy values on plain-object maps.
94
- __privateAdd(this, _hasOwn);
95
- __privateAdd(this, _bundleSettings, void 0);
96
- __privateAdd(this, _items, void 0);
97
- __privateAdd(this, _bundleData, void 0);
98
- __privateSet(this, _bundleSettings, __privateMethod(this, _formatBundleSettings, formatBundleSettings_fn).call(this, bundleData));
99
- __privateSet(this, _bundleData, __privateMethod(this, _formatBundleData, formatBundleData_fn).call(this, bundleData));
74
+ __privateAdd(this, _BundleSelectionValidator_instances);
75
+ __privateAdd(this, _bundleSettings);
76
+ __privateAdd(this, _items);
77
+ __privateAdd(this, _bundleData);
78
+ __privateSet(this, _bundleSettings, __privateMethod(this, _BundleSelectionValidator_instances, formatBundleSettings_fn).call(this, bundleData));
79
+ __privateSet(this, _bundleData, __privateMethod(this, _BundleSelectionValidator_instances, formatBundleData_fn).call(this, bundleData));
100
80
  __privateSet(this, _items, selectionItems);
101
81
  }
102
82
  isInitialDataValid() {
@@ -120,7 +100,7 @@ class BundleSelectionValidator {
120
100
  isSelectionInVariantRange(externalVariantId) {
121
101
  const total = __privateGet(this, _items).reduce((acc, current) => acc + current.quantity, 0);
122
102
  const ranges = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId].ranges || [];
123
- if (!__privateMethod(this, _isValueInRange, isValueInRange_fn).call(this, ranges, total)) {
103
+ if (!__privateMethod(this, _BundleSelectionValidator_instances, isValueInRange_fn).call(this, ranges, total)) {
124
104
  throw "The total number of products does not fall within the required variant range.";
125
105
  }
126
106
  return true;
@@ -129,7 +109,7 @@ class BundleSelectionValidator {
129
109
  const maxPerItem = __privateGet(this, _bundleSettings)?.bundleSettings.maxPerItem || 0;
130
110
  const invalidProducts = __privateGet(this, _items).filter(({ quantity }) => quantity > maxPerItem);
131
111
  if (maxPerItem && invalidProducts.length) {
132
- const invalidIds = __privateMethod(this, _unique, unique_fn).call(this, invalidProducts.map(({ externalProductId }) => externalProductId)).join(", ");
112
+ const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidProducts.map(({ externalProductId }) => externalProductId)).join(", ");
133
113
  throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;
134
114
  }
135
115
  return true;
@@ -138,10 +118,10 @@ class BundleSelectionValidator {
138
118
  const variantSettings = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId];
139
119
  const optionSources = variantSettings?.optionSources;
140
120
  const invalidCollections = __privateGet(this, _items).filter(
141
- ({ collectionId }) => !optionSources || !__privateMethod(this, _hasOwn, hasOwn_fn).call(this, optionSources, collectionId)
121
+ ({ collectionId }) => !optionSources || !__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, optionSources, collectionId)
142
122
  );
143
123
  if (invalidCollections.length) {
144
- const invalidIds = __privateMethod(this, _unique, unique_fn).call(this, invalidCollections.map(({ collectionId }) => collectionId)).join(", ");
124
+ const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidCollections.map(({ collectionId }) => collectionId)).join(", ");
145
125
  throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;
146
126
  }
147
127
  return true;
@@ -154,10 +134,10 @@ class BundleSelectionValidator {
154
134
  const variantSettings = __privateGet(this, _bundleSettings)?.variantsSettings[externalVariantId];
155
135
  const invalidItems = Object.values(variantSettings?.optionSources || {}).filter((collection) => {
156
136
  const quantity = totalSelectedByCollection[collection.collectionId] || 0;
157
- return !__privateMethod(this, _isValueInRange, isValueInRange_fn).call(this, [collection], quantity);
137
+ return !__privateMethod(this, _BundleSelectionValidator_instances, isValueInRange_fn).call(this, [collection], quantity);
158
138
  });
159
139
  if (!variantSettings || invalidItems.length) {
160
- const invalidIds = __privateMethod(this, _unique, unique_fn).call(this, invalidItems.map(({ collectionId }) => collectionId)).join(", ");
140
+ const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, invalidItems.map(({ collectionId }) => collectionId)).join(", ");
161
141
  throw `The selection exceeds the limits for the collections (${invalidIds}).`;
162
142
  }
163
143
  return true;
@@ -178,13 +158,13 @@ class BundleSelectionValidator {
178
158
  throw `No collections found for the bundle variant (${externalVariantId}).`;
179
159
  }
180
160
  const missingProducts = __privateGet(this, _items).filter(({ externalProductId, collectionId }) => {
181
- if (!__privateMethod(this, _hasOwn, hasOwn_fn).call(this, variantCollections, collectionId)) {
161
+ if (!__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, variantCollections, collectionId)) {
182
162
  return true;
183
163
  }
184
- return !__privateMethod(this, _hasOwn, hasOwn_fn).call(this, variantCollections[collectionId].products, externalProductId);
164
+ return !__privateMethod(this, _BundleSelectionValidator_instances, hasOwn_fn).call(this, variantCollections[collectionId].products, externalProductId);
185
165
  });
186
166
  if (missingProducts.length) {
187
- const invalidIds = __privateMethod(this, _unique, unique_fn).call(this, missingProducts.map(({ externalProductId }) => externalProductId)).join(", ");
167
+ const invalidIds = __privateMethod(this, _BundleSelectionValidator_instances, unique_fn).call(this, missingProducts.map(({ externalProductId }) => externalProductId)).join(", ");
188
168
  throw `The products (${invalidIds}) are no longer valid for the bundle product.`;
189
169
  }
190
170
  return true;
@@ -203,7 +183,7 @@ class BundleSelectionValidator {
203
183
  _bundleSettings = new WeakMap();
204
184
  _items = new WeakMap();
205
185
  _bundleData = new WeakMap();
206
- _formatBundleSettings = new WeakSet();
186
+ _BundleSelectionValidator_instances = new WeakSet();
207
187
  formatBundleSettings_fn = function(bundleData) {
208
188
  try {
209
189
  const bundleSettings = bundleData.bundle_settings;
@@ -214,8 +194,7 @@ formatBundleSettings_fn = function(bundleData) {
214
194
  },
215
195
  // null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution
216
196
  variantsSettings: bundleSettings.variants.reduce((acc, variant) => {
217
- if (!variant.enabled)
218
- return acc;
197
+ if (!variant.enabled) return acc;
219
198
  let ranges = [{ min: variant.items_count, max: variant.items_count }];
220
199
  if (!variant.items_count) {
221
200
  ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({
@@ -242,7 +221,6 @@ formatBundleSettings_fn = function(bundleData) {
242
221
  return null;
243
222
  }
244
223
  };
245
- _formatBundleData = new WeakSet();
246
224
  formatBundleData_fn = function(bundleData) {
247
225
  try {
248
226
  const collections = Object.values(bundleData.collections).reduce((acc, current) => {
@@ -260,7 +238,6 @@ formatBundleData_fn = function(bundleData) {
260
238
  return null;
261
239
  }
262
240
  };
263
- _isValueInRange = new WeakSet();
264
241
  isValueInRange_fn = function(ranges, value) {
265
242
  const matchedRanges = ranges.filter(({ min, max }) => {
266
243
  const minValue = min ?? value;
@@ -269,11 +246,11 @@ isValueInRange_fn = function(ranges, value) {
269
246
  });
270
247
  return !!matchedRanges.length;
271
248
  };
272
- _unique = new WeakSet();
273
249
  unique_fn = function(ids) {
274
250
  return Array.from(new Set(ids));
275
251
  };
276
- _hasOwn = new WeakSet();
252
+ // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,
253
+ // `constructor`, `toString`) resolving to truthy values on plain-object maps.
277
254
  hasOwn_fn = function(target, key) {
278
255
  return Object.prototype.hasOwnProperty.call(target, key);
279
256
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.js","sources":["../../../src/utils/bundle.ts"],"sourcesContent":["import {\n array,\n enumType,\n field,\n int32,\n string as xdrString,\n struct,\n uint32,\n uint64,\n union,\n unionCase,\n voidType,\n UNBOUNDED_MAX_LENGTH,\n} from '@stellar/js-xdr';\nimport { BundleData as StorefrontBundleData, CDNBundleSettings } from '../types';\n\nconst textEncoder = new TextEncoder();\n\nconst emptyExt = { v: 0 } as const;\n\nfunction toBase64(bytes: Uint8Array) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nconst EnvelopeType = enumType('EnvelopeType', {\n envelopeTypeBundle: 0,\n});\n\nconst BundleItemExt = union('BundleItemExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst BundleItem = struct('BundleItem', {\n collectionId: uint64(),\n productId: uint64(),\n variantId: uint64(),\n sku: xdrString(UNBOUNDED_MAX_LENGTH),\n quantity: uint32(),\n ext: BundleItemExt,\n});\n\nconst BundleExt = union('BundleExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst Bundle = struct('Bundle', {\n variantId: uint64(),\n items: array(BundleItem, 500),\n version: uint32(),\n ext: BundleExt,\n});\n\nconst BundleEnvelope = union('BundleEnvelope', {\n switchOn: EnvelopeType,\n switchKey: 'type',\n cases: [unionCase('envelopeTypeBundle', EnvelopeType.envelopeTypeBundle, field('v1', Bundle))],\n});\n\nexport function toLineItemProperty(bundle: { variantId: string; version: number; items: any[] }) {\n const value = {\n type: EnvelopeType.envelopeTypeBundle,\n v1: {\n variantId: BigInt(bundle.variantId.toString()),\n items: bundle.items.map(item => ({\n collectionId: BigInt(item.collectionId.toString()),\n productId: BigInt(item.productId.toString()),\n variantId: BigInt(item.variantId.toString()),\n sku: textEncoder.encode(item.sku || ''),\n quantity: item.quantity as number,\n ext: emptyExt,\n })),\n version: bundle.version || Math.floor(Date.now() / 1000),\n ext: emptyExt,\n },\n };\n\n return toBase64(BundleEnvelope.encode(value));\n}\n\nexport interface BundleSelectionItems {\n collectionId: string;\n externalProductId: string;\n externalVariantId: string;\n quantity: number;\n}\n\ninterface VariantSettings {\n externalVariantId: string;\n optionSources: Record<string, { collectionId: string; min: number | null; max: number | null }>;\n ranges: { min: number; max: number | null }[];\n}\n\ninterface BundleSettings {\n bundleSettings: { maxPerItem: number | null; isCustomizable: boolean };\n variantsSettings: Record<string, VariantSettings>;\n}\n\ntype BundleDataCollection = StorefrontBundleData['collections'][string];\n\ninterface BundleData extends Omit<StorefrontBundleData, 'collections'> {\n collections: Record<\n string,\n Omit<BundleDataCollection, 'products'> & {\n products: Record<string, BundleDataCollection['products'][number]>;\n }\n >;\n}\n\nexport class BundleSelectionValidator {\n #bundleSettings: BundleSettings | null;\n #items: BundleSelectionItems[];\n #bundleData: BundleData | null;\n\n constructor(selectionItems: BundleSelectionItems[], bundleData: StorefrontBundleData) {\n this.#bundleSettings = this.#formatBundleSettings(bundleData);\n this.#bundleData = this.#formatBundleData(bundleData);\n this.#items = selectionItems;\n }\n\n #formatBundleSettings(bundleData: StorefrontBundleData) {\n try {\n const bundleSettings = bundleData.bundle_settings;\n return {\n bundleSettings: {\n maxPerItem: bundleSettings.max_quantity_per_variant,\n isCustomizable: bundleSettings.is_customizable,\n },\n // null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution\n variantsSettings: bundleSettings.variants.reduce<BundleSettings['variantsSettings']>((acc, variant) => {\n if (!variant.enabled) return acc;\n\n let ranges: VariantSettings['ranges'] = [{ min: variant.items_count, max: variant.items_count }];\n if (!variant.items_count) {\n ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({\n min: quantity_min,\n max: quantity_max,\n }));\n }\n\n acc[variant.external_variant_id] = {\n externalVariantId: variant.external_variant_id,\n optionSources: variant.option_sources.reduce<VariantSettings['optionSources']>((acc, optionSource) => {\n acc[optionSource.option_source_id] = {\n min: optionSource.quantity_min,\n max: optionSource.quantity_max,\n collectionId: optionSource.option_source_id,\n };\n return acc;\n }, Object.create(null)),\n ranges,\n };\n return acc;\n }, Object.create(null)),\n };\n } catch (error) {\n return null;\n }\n }\n\n #formatBundleData(bundleData: StorefrontBundleData) {\n try {\n // null-proto seeds so external collection/product ids become real own keys, not prototype pollution\n const collections = Object.values(bundleData.collections).reduce<BundleData['collections']>((acc, current) => {\n acc[current.id] = {\n ...current,\n products: current.products.reduce<BundleData['collections'][string]['products']>((productAcc, product) => {\n productAcc[product.id] = product;\n return productAcc;\n }, Object.create(null)),\n };\n\n return acc;\n }, Object.create(null));\n\n return { ...bundleData, collections };\n } catch (error) {\n return null;\n }\n }\n\n #isValueInRange(ranges: { min: number | null; max: number | null }[], value: number) {\n const matchedRanges = ranges.filter(({ min, max }) => {\n const minValue = min ?? value;\n const maxValue = max ?? value;\n\n return minValue <= value && value <= maxValue;\n });\n\n return !!matchedRanges.length;\n }\n\n #unique(ids: string[]) {\n return Array.from(new Set(ids));\n }\n\n // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,\n // `constructor`, `toString`) resolving to truthy values on plain-object maps.\n #hasOwn(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key);\n }\n\n isInitialDataValid() {\n if (!this.#bundleData) {\n throw 'Bundle data does not exist for the given product.';\n }\n\n if (!this.#bundleSettings) {\n throw 'Bundle settings do not exist for the given product.';\n }\n\n if (!Array.isArray(this.#items) || !this.#items.length) {\n throw 'No bundle selection items provided.';\n }\n\n return true;\n }\n\n isValidVariant(externalVariantId: string) {\n if (!this.#bundleSettings?.variantsSettings[externalVariantId]) {\n throw `The ${externalVariantId} bundle variant is invalid.`;\n }\n\n return true;\n }\n\n isSelectionInVariantRange(externalVariantId: string) {\n const total = this.#items.reduce((acc, current) => acc + current.quantity, 0);\n const ranges = this.#bundleSettings?.variantsSettings[externalVariantId].ranges || [];\n\n if (!this.#isValueInRange(ranges, total)) {\n throw 'The total number of products does not fall within the required variant range.';\n }\n\n return true;\n }\n\n areItemsInMaxPerItemBound() {\n const maxPerItem = this.#bundleSettings?.bundleSettings.maxPerItem || 0;\n const invalidProducts = this.#items.filter(({ quantity }) => quantity > maxPerItem);\n\n if (maxPerItem && invalidProducts.length) {\n const invalidIds = this.#unique(invalidProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;\n }\n\n return true;\n }\n\n areSelectedCollectionsValid(externalVariantId: string) {\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const optionSources = variantSettings?.optionSources;\n const invalidCollections = this.#items.filter(\n ({ collectionId }) => !optionSources || !this.#hasOwn(optionSources, collectionId)\n );\n if (invalidCollections.length) {\n const invalidIds = this.#unique(invalidCollections.map(({ collectionId }) => collectionId)).join(', ');\n throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;\n }\n\n return true;\n }\n\n areItemsQuantitiesValidForTheCollection(externalVariantId: string) {\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const totalSelectedByCollection = this.#items.reduce<Record<string, number>>((acc, current) => {\n acc[current.collectionId] = current.quantity + (acc[current.collectionId] || 0);\n return acc;\n }, Object.create(null));\n\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const invalidItems = Object.values(variantSettings?.optionSources || {}).filter(collection => {\n const quantity = totalSelectedByCollection[collection.collectionId] || 0;\n return !this.#isValueInRange([collection], quantity);\n });\n\n if (!variantSettings || invalidItems.length) {\n const invalidIds = this.#unique(invalidItems.map(({ collectionId }) => collectionId)).join(', ');\n throw `The selection exceeds the limits for the collections (${invalidIds}).`;\n }\n\n return true;\n }\n\n areSelectedProductsValid(externalVariantId: string) {\n const bundleVariantCollections = this.#bundleSettings?.variantsSettings[externalVariantId]?.optionSources || {};\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const variantCollections = Object.values(bundleVariantCollections).reduce<BundleData['collections']>(\n (acc, optionSource) => {\n const collection = this.#bundleData?.collections[optionSource.collectionId];\n if (collection) {\n acc[optionSource.collectionId] = collection;\n }\n return acc;\n },\n Object.create(null)\n );\n\n if (!Object.values(variantCollections).length) {\n throw `No collections found for the bundle variant (${externalVariantId}).`;\n }\n\n const missingProducts = this.#items.filter(({ externalProductId, collectionId }) => {\n if (!this.#hasOwn(variantCollections, collectionId)) {\n return true;\n }\n return !this.#hasOwn(variantCollections[collectionId].products, externalProductId);\n });\n\n if (missingProducts.length) {\n const invalidIds = this.#unique(missingProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The products (${invalidIds}) are no longer valid for the bundle product.`;\n }\n\n return true;\n }\n\n isBundleSelectionValid(externalVariantId: string) {\n this.isInitialDataValid();\n this.isValidVariant(externalVariantId);\n this.isSelectionInVariantRange(externalVariantId);\n this.areItemsInMaxPerItemBound();\n this.areSelectedCollectionsValid(externalVariantId);\n this.areItemsQuantitiesValidForTheCollection(externalVariantId);\n this.areSelectedProductsValid(externalVariantId);\n\n return true;\n }\n}\n"],"names":["xdrString","acc"],"mappings":"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"}
1
+ {"version":3,"file":"bundle.js","sources":["../../../src/utils/bundle.ts"],"sourcesContent":["import {\n array,\n enumType,\n field,\n int32,\n string as xdrString,\n struct,\n uint32,\n uint64,\n union,\n unionCase,\n voidType,\n UNBOUNDED_MAX_LENGTH,\n} from '@stellar/js-xdr';\nimport { BundleData as StorefrontBundleData, CDNBundleSettings } from '../types';\n\nconst textEncoder = new TextEncoder();\n\nconst emptyExt = { v: 0 } as const;\n\nfunction toBase64(bytes: Uint8Array) {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\nconst EnvelopeType = enumType('EnvelopeType', {\n envelopeTypeBundle: 0,\n});\n\nconst BundleItemExt = union('BundleItemExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst BundleItem = struct('BundleItem', {\n collectionId: uint64(),\n productId: uint64(),\n variantId: uint64(),\n sku: xdrString(UNBOUNDED_MAX_LENGTH),\n quantity: uint32(),\n ext: BundleItemExt,\n});\n\nconst BundleExt = union('BundleExt', {\n switchOn: int32(),\n switchKey: 'v',\n cases: [unionCase('v0', 0, voidType())],\n});\n\nconst Bundle = struct('Bundle', {\n variantId: uint64(),\n items: array(BundleItem, 500),\n version: uint32(),\n ext: BundleExt,\n});\n\nconst BundleEnvelope = union('BundleEnvelope', {\n switchOn: EnvelopeType,\n switchKey: 'type',\n cases: [unionCase('envelopeTypeBundle', EnvelopeType.envelopeTypeBundle, field('v1', Bundle))],\n});\n\nexport function toLineItemProperty(bundle: { variantId: string; version: number; items: any[] }) {\n const value = {\n type: EnvelopeType.envelopeTypeBundle,\n v1: {\n variantId: BigInt(bundle.variantId.toString()),\n items: bundle.items.map(item => ({\n collectionId: BigInt(item.collectionId.toString()),\n productId: BigInt(item.productId.toString()),\n variantId: BigInt(item.variantId.toString()),\n sku: textEncoder.encode(item.sku || ''),\n quantity: item.quantity as number,\n ext: emptyExt,\n })),\n version: bundle.version || Math.floor(Date.now() / 1000),\n ext: emptyExt,\n },\n };\n\n return toBase64(BundleEnvelope.encode(value));\n}\n\nexport interface BundleSelectionItems {\n collectionId: string;\n externalProductId: string;\n externalVariantId: string;\n quantity: number;\n}\n\ninterface VariantSettings {\n externalVariantId: string;\n optionSources: Record<string, { collectionId: string; min: number | null; max: number | null }>;\n ranges: { min: number; max: number | null }[];\n}\n\ninterface BundleSettings {\n bundleSettings: { maxPerItem: number | null; isCustomizable: boolean };\n variantsSettings: Record<string, VariantSettings>;\n}\n\ntype BundleDataCollection = StorefrontBundleData['collections'][string];\n\ninterface BundleData extends Omit<StorefrontBundleData, 'collections'> {\n collections: Record<\n string,\n Omit<BundleDataCollection, 'products'> & {\n products: Record<string, BundleDataCollection['products'][number]>;\n }\n >;\n}\n\nexport class BundleSelectionValidator {\n #bundleSettings: BundleSettings | null;\n #items: BundleSelectionItems[];\n #bundleData: BundleData | null;\n\n constructor(selectionItems: BundleSelectionItems[], bundleData: StorefrontBundleData) {\n this.#bundleSettings = this.#formatBundleSettings(bundleData);\n this.#bundleData = this.#formatBundleData(bundleData);\n this.#items = selectionItems;\n }\n\n #formatBundleSettings(bundleData: StorefrontBundleData) {\n try {\n const bundleSettings = bundleData.bundle_settings;\n return {\n bundleSettings: {\n maxPerItem: bundleSettings.max_quantity_per_variant,\n isCustomizable: bundleSettings.is_customizable,\n },\n // null-proto seeds so external variant/option-source ids become real own keys, not prototype pollution\n variantsSettings: bundleSettings.variants.reduce<BundleSettings['variantsSettings']>((acc, variant) => {\n if (!variant.enabled) return acc;\n\n let ranges: VariantSettings['ranges'] = [{ min: variant.items_count, max: variant.items_count }];\n if (!variant.items_count) {\n ranges = variant.ranges.map(({ quantity_max, quantity_min }) => ({\n min: quantity_min,\n max: quantity_max,\n }));\n }\n\n acc[variant.external_variant_id] = {\n externalVariantId: variant.external_variant_id,\n optionSources: variant.option_sources.reduce<VariantSettings['optionSources']>((acc, optionSource) => {\n acc[optionSource.option_source_id] = {\n min: optionSource.quantity_min,\n max: optionSource.quantity_max,\n collectionId: optionSource.option_source_id,\n };\n return acc;\n }, Object.create(null)),\n ranges,\n };\n return acc;\n }, Object.create(null)),\n };\n } catch (error) {\n return null;\n }\n }\n\n #formatBundleData(bundleData: StorefrontBundleData) {\n try {\n // null-proto seeds so external collection/product ids become real own keys, not prototype pollution\n const collections = Object.values(bundleData.collections).reduce<BundleData['collections']>((acc, current) => {\n acc[current.id] = {\n ...current,\n products: current.products.reduce<BundleData['collections'][string]['products']>((productAcc, product) => {\n productAcc[product.id] = product;\n return productAcc;\n }, Object.create(null)),\n };\n\n return acc;\n }, Object.create(null));\n\n return { ...bundleData, collections };\n } catch (error) {\n return null;\n }\n }\n\n #isValueInRange(ranges: { min: number | null; max: number | null }[], value: number) {\n const matchedRanges = ranges.filter(({ min, max }) => {\n const minValue = min ?? value;\n const maxValue = max ?? value;\n\n return minValue <= value && value <= maxValue;\n });\n\n return !!matchedRanges.length;\n }\n\n #unique(ids: string[]) {\n return Array.from(new Set(ids));\n }\n\n // Own-property membership check. Guards against inherited keys (e.g. `__proto__`,\n // `constructor`, `toString`) resolving to truthy values on plain-object maps.\n #hasOwn(target: object, key: string) {\n return Object.prototype.hasOwnProperty.call(target, key);\n }\n\n isInitialDataValid() {\n if (!this.#bundleData) {\n throw 'Bundle data does not exist for the given product.';\n }\n\n if (!this.#bundleSettings) {\n throw 'Bundle settings do not exist for the given product.';\n }\n\n if (!Array.isArray(this.#items) || !this.#items.length) {\n throw 'No bundle selection items provided.';\n }\n\n return true;\n }\n\n isValidVariant(externalVariantId: string) {\n if (!this.#bundleSettings?.variantsSettings[externalVariantId]) {\n throw `The ${externalVariantId} bundle variant is invalid.`;\n }\n\n return true;\n }\n\n isSelectionInVariantRange(externalVariantId: string) {\n const total = this.#items.reduce((acc, current) => acc + current.quantity, 0);\n const ranges = this.#bundleSettings?.variantsSettings[externalVariantId].ranges || [];\n\n if (!this.#isValueInRange(ranges, total)) {\n throw 'The total number of products does not fall within the required variant range.';\n }\n\n return true;\n }\n\n areItemsInMaxPerItemBound() {\n const maxPerItem = this.#bundleSettings?.bundleSettings.maxPerItem || 0;\n const invalidProducts = this.#items.filter(({ quantity }) => quantity > maxPerItem);\n\n if (maxPerItem && invalidProducts.length) {\n const invalidIds = this.#unique(invalidProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The selected products (${invalidIds}) exceed the maximum limit of ${maxPerItem} items per product.`;\n }\n\n return true;\n }\n\n areSelectedCollectionsValid(externalVariantId: string) {\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const optionSources = variantSettings?.optionSources;\n const invalidCollections = this.#items.filter(\n ({ collectionId }) => !optionSources || !this.#hasOwn(optionSources, collectionId)\n );\n if (invalidCollections.length) {\n const invalidIds = this.#unique(invalidCollections.map(({ collectionId }) => collectionId)).join(', ');\n throw `The collections (${invalidIds}) are no longer valid for the bundle variant (${externalVariantId}).`;\n }\n\n return true;\n }\n\n areItemsQuantitiesValidForTheCollection(externalVariantId: string) {\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const totalSelectedByCollection = this.#items.reduce<Record<string, number>>((acc, current) => {\n acc[current.collectionId] = current.quantity + (acc[current.collectionId] || 0);\n return acc;\n }, Object.create(null));\n\n const variantSettings = this.#bundleSettings?.variantsSettings[externalVariantId];\n const invalidItems = Object.values(variantSettings?.optionSources || {}).filter(collection => {\n const quantity = totalSelectedByCollection[collection.collectionId] || 0;\n return !this.#isValueInRange([collection], quantity);\n });\n\n if (!variantSettings || invalidItems.length) {\n const invalidIds = this.#unique(invalidItems.map(({ collectionId }) => collectionId)).join(', ');\n throw `The selection exceeds the limits for the collections (${invalidIds}).`;\n }\n\n return true;\n }\n\n areSelectedProductsValid(externalVariantId: string) {\n const bundleVariantCollections = this.#bundleSettings?.variantsSettings[externalVariantId]?.optionSources || {};\n // null-proto seed so a `__proto__` collectionId becomes a real own key, not prototype pollution\n const variantCollections = Object.values(bundleVariantCollections).reduce<BundleData['collections']>(\n (acc, optionSource) => {\n const collection = this.#bundleData?.collections[optionSource.collectionId];\n if (collection) {\n acc[optionSource.collectionId] = collection;\n }\n return acc;\n },\n Object.create(null)\n );\n\n if (!Object.values(variantCollections).length) {\n throw `No collections found for the bundle variant (${externalVariantId}).`;\n }\n\n const missingProducts = this.#items.filter(({ externalProductId, collectionId }) => {\n if (!this.#hasOwn(variantCollections, collectionId)) {\n return true;\n }\n return !this.#hasOwn(variantCollections[collectionId].products, externalProductId);\n });\n\n if (missingProducts.length) {\n const invalidIds = this.#unique(missingProducts.map(({ externalProductId }) => externalProductId)).join(', ');\n throw `The products (${invalidIds}) are no longer valid for the bundle product.`;\n }\n\n return true;\n }\n\n isBundleSelectionValid(externalVariantId: string) {\n this.isInitialDataValid();\n this.isValidVariant(externalVariantId);\n this.isSelectionInVariantRange(externalVariantId);\n this.areItemsInMaxPerItemBound();\n this.areSelectedCollectionsValid(externalVariantId);\n this.areItemsQuantitiesValidForTheCollection(externalVariantId);\n this.areSelectedProductsValid(externalVariantId);\n\n return true;\n }\n}\n"],"names":["xdrString","acc"],"mappings":"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"}
@@ -27,8 +27,7 @@ const mapBundleSettings = (bundleSettings) => {
27
27
  };
28
28
  };
29
29
  const mapIncentives = (incentives) => {
30
- if (incentives.tiered_discounts.length === 0)
31
- return null;
30
+ if (incentives.tiered_discounts.length === 0) return null;
32
31
  return {
33
32
  tiered_discounts: incentives.tiered_discounts
34
33
  };
@@ -57,10 +56,8 @@ const mapBasicVariant = (variant) => ({
57
56
  available_for_sale: variant.available
58
57
  });
59
58
  const formatFeaturedImage = (featuredImage) => {
60
- if (featuredImage == null || typeof featuredImage === "string")
61
- return featuredImage;
62
- if ("src" in featuredImage)
63
- return featuredImage["src"];
59
+ if (featuredImage == null || typeof featuredImage === "string") return featuredImage;
60
+ if ("src" in featuredImage) return featuredImage["src"];
64
61
  return null;
65
62
  };
66
63
  const mapBasicProduct = (product) => {
@@ -122,8 +119,7 @@ const productSellingPlansGroupLookup = (sellingPlanGroups) => sellingPlanGroups.
122
119
  return acc;
123
120
  }, {});
124
121
  const mapFilters = (filters) => {
125
- if (!Array.isArray(filters))
126
- return [];
122
+ if (!Array.isArray(filters)) return [];
127
123
  return filters;
128
124
  };
129
125
  function mapOnlineStoreToPublicBundleData(bundleData) {
@@ -1 +1 @@
1
- {"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bundleData.js","sources":["../../../src/utils/bundleData.ts"],"sourcesContent":["import { PublicBundleData, PriceRule } from '../types/bundleData';\nimport { BaseProduct, BaseProductVariant, BundleData as StorefrontBundleData } from '../types/bundle';\n\nconst mapBundleSettings = (bundleSettings: StorefrontBundleData['bundle_settings']) => {\n const addons = bundleSettings.layout_settings.addons;\n const crossSells = bundleSettings.layout_settings.crossSells;\n const customizationWindow = bundleSettings.customization_window;\n const defaultVariantId = bundleSettings.layout_settings?.defaultVariantId ?? bundleSettings.default_bundle_variant_id;\n const defaultFrequency = bundleSettings.layout_settings.defaultFrequency;\n const addToCartBehavior = bundleSettings.layout_settings.addToCartCallback;\n\n return {\n default_variant_id: defaultVariantId ? String(defaultVariantId) : null,\n is_customizable: bundleSettings.is_customizable,\n price_rule: String(bundleSettings.price_rule).toUpperCase(),\n customization_window: customizationWindow\n ? {\n active_days: customizationWindow,\n disabled_message: bundleSettings.customization_window_disabled_message || '',\n }\n : null,\n addons: addons.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n cross_sells: crossSells.collectionId\n ? { collection_id: addons.collectionId, collection_handle: addons.collectionHandle }\n : null,\n default_selling_plan_id: defaultFrequency || null,\n collapsible_collections: bundleSettings.layout_settings.collapsibleSections,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n show_product_variants: bundleSettings.layout_settings.showVariants,\n product_details_modal_enabled: bundleSettings.layout_settings.learnMoreModal,\n addToCartBehavior: {\n type: addToCartBehavior.type === 'none' ? ('cart_page' as const) : addToCartBehavior.type,\n value: addToCartBehavior.value,\n },\n };\n};\n\nconst mapIncentives = (incentives: StorefrontBundleData['incentives']): PublicBundleData['incentives'] => {\n if (incentives.tiered_discounts.length === 0) return null;\n\n return {\n tiered_discounts: incentives.tiered_discounts,\n };\n};\n\nconst mapSellingPlan = (\n sellingPlan: StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]\n): PublicBundleData['selling_plan_groups'][number]['selling_plans'][number] => ({\n id: sellingPlan.id,\n name: sellingPlan.name,\n options: sellingPlan.options.map(option => ({ name: option.name, value: option.value })),\n recurring_deliveries: sellingPlan.recurring_deliveries,\n price_adjustments: sellingPlan.price_adjustments.map(({ value, value_type }) => ({\n value,\n value_type,\n })),\n});\n\nconst mapSellingPlanGroups = (\n sellingPlanGroup: StorefrontBundleData['selling_plan_groups'][number]\n): PublicBundleData['selling_plan_groups'][number] => ({\n name: sellingPlanGroup.name,\n options: sellingPlanGroup.options.map(option => ({ name: option.name, values: option.values })),\n selling_plans: sellingPlanGroup.selling_plans.map(mapSellingPlan),\n});\n\nconst mapBasicVariant = (variant: BaseProductVariant) => ({\n id: String(variant.id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n options: variant.options,\n available_for_sale: variant.available,\n});\n\nconst formatFeaturedImage = (featuredImage: BaseProduct['featured_image']): string | null => {\n if (featuredImage == null || typeof featuredImage === 'string') return featuredImage;\n\n if ('src' in featuredImage) return featuredImage['src'];\n\n return null;\n};\n\nconst mapBasicProduct = (product: BaseProduct) => {\n return {\n id: String(product.id),\n title: product.title,\n description: product.description,\n available_for_sale: product.available,\n featured_image: formatFeaturedImage(product.featured_image),\n images: product.images,\n requires_selling_plan: product.requires_selling_plan,\n selling_plan_groups: product.selling_plan_groups.map(mapSellingPlanGroups),\n };\n};\n\nconst mapProduct = (product: StorefrontBundleData['collections'][number]['products'][number]) => {\n const productPlansLookup = productSellingPlansGroupLookup(product.selling_plan_groups);\n\n return {\n ...mapBasicProduct(product),\n handle: product.handle,\n tags: product.tags,\n price_range: { min: product.price_min, max: product.price_max },\n compare_at_price_range: { min: product.compare_at_price_min, max: product.compare_at_price_max },\n options: product.options,\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(\n productPlansLookup[`${sellingPlan.selling_plan_group_id}-${sellingPlan.selling_plan_id}`]\n ),\n })),\n option1: variant.option1,\n option2: variant.option2,\n option3: variant.option3,\n sku: variant.sku || '',\n requires_shipping: variant.requires_shipping,\n taxable: variant.taxable,\n featured_image: formatFeaturedImage(variant.featured_image),\n public_title: variant.public_title,\n requires_selling_plan: variant.requires_selling_plan,\n })),\n };\n};\n\nconst mapBundleVariantRanges = ({\n items_count,\n ranges,\n}: Pick<StorefrontBundleData['bundle_settings']['variants'][number], 'items_count' | 'ranges'>) => {\n if (ranges.length > 0) {\n return ranges.map(({ quantity_max, quantity_min }) => ({ min: quantity_min, max: quantity_max }));\n }\n\n return [{ min: items_count, max: items_count }];\n};\n\nconst productSellingPlansGroupLookup = (sellingPlanGroups: BaseProduct['selling_plan_groups']) =>\n sellingPlanGroups.reduce<\n Record<string, StorefrontBundleData['selling_plan_groups'][number]['selling_plans'][number]>\n >((acc, current) => {\n current.selling_plans.forEach(sellingPlan => {\n const key = `${current.id}-${sellingPlan.id}`;\n acc[key] = sellingPlan;\n });\n\n return acc;\n }, {});\n\nconst mapFilters = (filters: StorefrontBundleData['filters']): PublicBundleData['filters'] => {\n if (!Array.isArray(filters)) return [];\n return filters;\n};\n\nexport function mapOnlineStoreToPublicBundleData(bundleData: StorefrontBundleData): PublicBundleData {\n const bundleSettings = mapBundleSettings(bundleData.bundle_settings);\n const variantsLookup = bundleData.variants.reduce<Record<string, StorefrontBundleData['variants'][number]>>(\n (acc, variant) => {\n acc[variant.id] = variant;\n return acc;\n },\n {}\n );\n\n return {\n id: String(bundleData.id),\n title: bundleData.title,\n description: bundleData.description || null,\n handle: bundleData.handle,\n options: bundleData.options.map(option => ({\n name: option.name,\n position: option.position,\n values: option.values,\n })),\n default_variant_id: bundleSettings.default_variant_id,\n default_selling_plan_id: bundleSettings.default_selling_plan_id\n ? Number(bundleSettings.default_selling_plan_id)\n : null,\n available_for_sale: bundleData.available,\n requires_selling_plan: bundleData.requires_selling_plan,\n bundle_settings: {\n is_customizable: bundleSettings.is_customizable,\n price_rule: bundleSettings.price_rule as PriceRule,\n customization_window: bundleSettings.customization_window,\n max_quantity_per_variant: bundleSettings.max_quantity_per_variant,\n collapsible_collections: bundleSettings.collapsible_collections,\n show_product_variants: bundleSettings.show_product_variants,\n product_details_modal_enabled: bundleSettings.product_details_modal_enabled,\n show_variants_as_individual_products:\n bundleData.bundle_settings.settings.display_variants_as_separate_products_in_list,\n post_add_to_cart_behavior: bundleSettings.addToCartBehavior,\n },\n variants: bundleData.bundle_settings.variants\n .filter(({ enabled }) => enabled)\n .map((item, index) => {\n const variant = variantsLookup[String(item.external_variant_id)];\n\n return {\n id: String(item.external_variant_id),\n title: variant.title,\n price: variant.price,\n compare_at_price: variant.compare_at_price,\n image: variant.image || '',\n available_for_sale: variant.available,\n options: variant.options,\n requires_selling_plan: variant.requires_selling_plan,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n ranges: mapBundleVariantRanges(item),\n collections: item.option_sources.map(source => ({\n id: source.option_source_id,\n source_platform: 'shopify',\n min: source.quantity_min || 0,\n max: source.quantity_max,\n position: source.position,\n })),\n default_selections: item.selection_defaults.map(selectionDefault => ({\n quantity: selectionDefault.quantity,\n product: {\n id: String(selectionDefault.product.id),\n handle: selectionDefault.handle,\n title: selectionDefault.product.title,\n description: selectionDefault.product.description,\n images: selectionDefault.product.images,\n },\n variant: {\n id: selectionDefault.external_variant_id,\n title: selectionDefault.variant.title,\n featured_image: formatFeaturedImage(selectionDefault.variant.featured_image),\n sku: selectionDefault.sku || '',\n },\n })),\n position: index,\n };\n }),\n selling_plan_groups: bundleData.selling_plan_groups.map(mapSellingPlanGroups),\n collections: Object.values(bundleData.collections).reduce<PublicBundleData['collections']>((acc, current) => {\n if (!Array.isArray(current.products)) {\n /* If a collection is not published in Online store, it is included \n as _1:{ handle: \"<collection-handle\"} in the collections object.\n We need to skip these collections.\n */\n return acc;\n }\n\n acc[String(current.id)] = {\n id: String(current.id),\n title: current.title,\n handle: current.handle,\n products: current.products.map(mapProduct),\n };\n\n return acc;\n }, {}),\n addons: bundleData.addons.products.length\n ? {\n collection_id: bundleSettings.addons?.collection_id || '',\n collection_handle: bundleSettings.addons?.collection_handle || '',\n products: bundleData.addons.products.map(product => ({\n ...mapBasicProduct(product),\n price_range: { min: product.price, max: product.price },\n compare_at_price_range: { min: product.compare_at_price || 0, max: product.compare_at_price },\n variants: product.variants.map(variant => ({\n ...mapBasicVariant(variant),\n image: variant.image,\n selling_plan_allocations: variant.selling_plan_allocations.map(sellingPlan => ({\n price: sellingPlan.price,\n compare_at_price: sellingPlan.compare_at_price,\n selling_plan: mapSellingPlan(sellingPlan.selling_plan),\n })),\n })),\n })),\n }\n : null,\n cross_sells: bundleData.cross_sells.products.length\n ? {\n collection_id: bundleSettings.cross_sells?.collection_id || '',\n collection_handle: bundleSettings.cross_sells?.collection_handle || '',\n products: bundleData.cross_sells.products.map(mapProduct),\n }\n : null,\n incentives: mapIncentives(bundleData.incentives),\n filters: mapFilters(bundleData.filters),\n templates: bundleData.bundle_settings.layout_settings.templates || null,\n globalStyles: bundleData.bundle_settings.layout_settings.globalStyles || null,\n };\n}\n"],"names":[],"mappings":"AAGA,MAAM,iBAAA,GAAoB,CAAC,cAAA,KAA4D;AACrF,EAAA,MAAM,MAAA,GAAS,eAAe,eAAA,CAAgB,MAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,eAAe,eAAA,CAAgB,UAAA;AAClD,EAAA,MAAM,sBAAsB,cAAA,CAAe,oBAAA;AAC3C,EAAA,MAAM,gBAAA,GAAmB,cAAA,CAAe,eAAA,EAAiB,gBAAA,IAAoB,cAAA,CAAe,yBAAA;AAC5F,EAAA,MAAM,gBAAA,GAAmB,eAAe,eAAA,CAAgB,gBAAA;AACxD,EAAA,MAAM,iBAAA,GAAoB,eAAe,eAAA,CAAgB,iBAAA;AAEzD,EAAA,OAAO;AAAA,IACL,kBAAA,EAAoB,gBAAA,GAAmB,MAAA,CAAO,gBAAgB,CAAA,GAAI,IAAA;AAAA,IAClE,iBAAiB,cAAA,CAAe,eAAA;AAAA,IAChC,UAAA,EAAY,MAAA,CAAO,cAAA,CAAe,UAAU,EAAE,WAAA,EAAY;AAAA,IAC1D,sBAAsB,mBAAA,GAClB;AAAA,MACE,WAAA,EAAa,mBAAA;AAAA,MACb,gBAAA,EAAkB,eAAe,qCAAA,IAAyC;AAAA,KAC5E,GACA,IAAA;AAAA,IACJ,MAAA,EAAQ,MAAA,CAAO,YAAA,GACX,EAAE,aAAA,EAAe,OAAO,YAAA,EAAc,iBAAA,EAAmB,MAAA,CAAO,gBAAA,EAAiB,GACjF,IAAA;AAAA,IACJ,WAAA,EAAa,UAAA,CAAW,YAAA,GACpB,EAAE,aAAA,EAAe,OAAO,YAAA,EAAc,iBAAA,EAAmB,MAAA,CAAO,gBAAA,EAAiB,GACjF,IAAA;AAAA,IACJ,yBAAyB,gBAAA,IAAoB,IAAA;AAAA,IAC7C,uBAAA,EAAyB,eAAe,eAAA,CAAgB,mBAAA;AAAA,IACxD,0BAA0B,cAAA,CAAe,wBAAA;AAAA,IACzC,qBAAA,EAAuB,eAAe,eAAA,CAAgB,YAAA;AAAA,IACtD,6BAAA,EAA+B,eAAe,eAAA,CAAgB,cAAA;AAAA,IAC9D,iBAAA,EAAmB;AAAA,MACjB,IAAA,EAAM,iBAAA,CAAkB,IAAA,KAAS,MAAA,GAAU,cAAwB,iBAAA,CAAkB,IAAA;AAAA,MACrF,OAAO,iBAAA,CAAkB;AAAA;AAC3B,GACF;AACF,CAAA;AAEA,MAAM,aAAA,GAAgB,CAAC,UAAA,KAAmF;AACxG,EAAA,IAAI,UAAA,CAAW,gBAAA,CAAiB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAErD,EAAA,OAAO;AAAA,IACL,kBAAkB,UAAA,CAAW;AAAA,GAC/B;AACF,CAAA;AAEA,MAAM,cAAA,GAAiB,CACrB,WAAA,MAC8E;AAAA,EAC9E,IAAI,WAAA,CAAY,EAAA;AAAA,EAChB,MAAM,WAAA,CAAY,IAAA;AAAA,EAClB,OAAA,EAAS,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,MAAW,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,CAAE,CAAA;AAAA,EACvF,sBAAsB,WAAA,CAAY,oBAAA;AAAA,EAClC,iBAAA,EAAmB,YAAY,iBAAA,CAAkB,GAAA,CAAI,CAAC,EAAE,KAAA,EAAO,YAAW,MAAO;AAAA,IAC/E,KAAA;AAAA,IACA;AAAA,GACF,CAAE;AACJ,CAAA,CAAA;AAEA,MAAM,oBAAA,GAAuB,CAC3B,gBAAA,MACqD;AAAA,EACrD,MAAM,gBAAA,CAAiB,IAAA;AAAA,EACvB,OAAA,EAAS,gBAAA,CAAiB,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,MAAW,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO,CAAE,CAAA;AAAA,EAC9F,aAAA,EAAe,gBAAA,CAAiB,aAAA,CAAc,GAAA,CAAI,cAAc;AAClE,CAAA,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,OAAA,MAAiC;AAAA,EACxD,EAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,EACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,EACf,OAAO,OAAA,CAAQ,KAAA;AAAA,EACf,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,EAC1B,SAAS,OAAA,CAAQ,OAAA;AAAA,EACjB,oBAAoB,OAAA,CAAQ;AAC9B,CAAA,CAAA;AAEA,MAAM,mBAAA,GAAsB,CAAC,aAAA,KAAgE;AAC3F,EAAA,IAAI,aAAA,IAAiB,IAAA,IAAQ,OAAO,aAAA,KAAkB,UAAU,OAAO,aAAA;AAEvE,EAAA,IAAI,KAAA,IAAS,aAAA,EAAe,OAAO,aAAA,CAAc,KAAK,CAAA;AAEtD,EAAA,OAAO,IAAA;AACT,CAAA;AAEA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAyB;AAChD,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,IACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,IACf,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,oBAAoB,OAAA,CAAQ,SAAA;AAAA,IAC5B,cAAA,EAAgB,mBAAA,CAAoB,OAAA,CAAQ,cAAc,CAAA;AAAA,IAC1D,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,IAC/B,mBAAA,EAAqB,OAAA,CAAQ,mBAAA,CAAoB,GAAA,CAAI,oBAAoB;AAAA,GAC3E;AACF,CAAA;AAEA,MAAM,UAAA,GAAa,CAAC,OAAA,KAA6E;AAC/F,EAAA,MAAM,kBAAA,GAAqB,8BAAA,CAA+B,OAAA,CAAQ,mBAAmB,CAAA;AAErF,EAAA,OAAO;AAAA,IACL,GAAG,gBAAgB,OAAO,CAAA;AAAA,IAC1B,QAAQ,OAAA,CAAQ,MAAA;AAAA,IAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,aAAa,EAAE,GAAA,EAAK,QAAQ,SAAA,EAAW,GAAA,EAAK,QAAQ,SAAA,EAAU;AAAA,IAC9D,wBAAwB,EAAE,GAAA,EAAK,QAAQ,oBAAA,EAAsB,GAAA,EAAK,QAAQ,oBAAA,EAAqB;AAAA,IAC/F,SAAS,OAAA,CAAQ,OAAA;AAAA,IACjB,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY;AAAA,MACzC,GAAG,gBAAgB,OAAO,CAAA;AAAA,MAC1B,wBAAA,EAA0B,OAAA,CAAQ,wBAAA,CAAyB,GAAA,CAAI,CAAA,WAAA,MAAgB;AAAA,QAC7E,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,kBAAkB,WAAA,CAAY,gBAAA;AAAA,QAC9B,YAAA,EAAc,cAAA;AAAA,UACZ,mBAAmB,CAAA,EAAG,WAAA,CAAY,qBAAqB,CAAA,CAAA,EAAI,WAAA,CAAY,eAAe,CAAA,CAAE;AAAA;AAC1F,OACF,CAAE,CAAA;AAAA,MACF,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,GAAA,EAAK,QAAQ,GAAA,IAAO,EAAA;AAAA,MACpB,mBAAmB,OAAA,CAAQ,iBAAA;AAAA,MAC3B,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,cAAA,EAAgB,mBAAA,CAAoB,OAAA,CAAQ,cAAc,CAAA;AAAA,MAC1D,cAAc,OAAA,CAAQ,YAAA;AAAA,MACtB,uBAAuB,OAAA,CAAQ;AAAA,KACjC,CAAE;AAAA,GACJ;AACF,CAAA;AAEA,MAAM,yBAAyB,CAAC;AAAA,EAC9B,WAAA;AAAA,EACA;AACF,CAAA,KAAmG;AACjG,EAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,IAAA,OAAO,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,YAAA,EAAc,YAAA,EAAa,MAAO,EAAE,GAAA,EAAK,YAAA,EAAc,GAAA,EAAK,YAAA,EAAa,CAAE,CAAA;AAAA,EAClG;AAEA,EAAA,OAAO,CAAC,EAAE,GAAA,EAAK,WAAA,EAAa,GAAA,EAAK,aAAa,CAAA;AAChD,CAAA;AAEA,MAAM,iCAAiC,CAAC,iBAAA,KACtC,kBAAkB,MAAA,CAEhB,CAAC,KAAK,OAAA,KAAY;AAClB,EAAA,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,WAAA,KAAe;AAC3C,IAAA,MAAM,MAAM,CAAA,EAAG,OAAA,CAAQ,EAAE,CAAA,CAAA,EAAI,YAAY,EAAE,CAAA,CAAA;AAC3C,IAAA,GAAA,CAAI,GAAG,CAAA,GAAI,WAAA;AAAA,EACb,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT,CAAA,EAAG,EAAE,CAAA;AAEP,MAAM,UAAA,GAAa,CAAC,OAAA,KAA0E;AAC5F,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,SAAU,EAAC;AACrC,EAAA,OAAO,OAAA;AACT,CAAA;AAEO,SAAS,iCAAiC,UAAA,EAAoD;AACnG,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,UAAA,CAAW,eAAe,CAAA;AACnE,EAAA,MAAM,cAAA,GAAiB,WAAW,QAAA,CAAS,MAAA;AAAA,IACzC,CAAC,KAAK,OAAA,KAAY;AAChB,MAAA,GAAA,CAAI,OAAA,CAAQ,EAAE,CAAA,GAAI,OAAA;AAClB,MAAA,OAAO,GAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,UAAA,CAAW,EAAE,CAAA;AAAA,IACxB,OAAO,UAAA,CAAW,KAAA;AAAA,IAClB,WAAA,EAAa,WAAW,WAAA,IAAe,IAAA;AAAA,IACvC,QAAQ,UAAA,CAAW,MAAA;AAAA,IACnB,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,MAAW;AAAA,MACzC,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,QAAQ,MAAA,CAAO;AAAA,KACjB,CAAE,CAAA;AAAA,IACF,oBAAoB,cAAA,CAAe,kBAAA;AAAA,IACnC,yBAAyB,cAAA,CAAe,uBAAA,GACpC,MAAA,CAAO,cAAA,CAAe,uBAAuB,CAAA,GAC7C,IAAA;AAAA,IACJ,oBAAoB,UAAA,CAAW,SAAA;AAAA,IAC/B,uBAAuB,UAAA,CAAW,qBAAA;AAAA,IAClC,eAAA,EAAiB;AAAA,MACf,iBAAiB,cAAA,CAAe,eAAA;AAAA,MAChC,YAAY,cAAA,CAAe,UAAA;AAAA,MAC3B,sBAAsB,cAAA,CAAe,oBAAA;AAAA,MACrC,0BAA0B,cAAA,CAAe,wBAAA;AAAA,MACzC,yBAAyB,cAAA,CAAe,uBAAA;AAAA,MACxC,uBAAuB,cAAA,CAAe,qBAAA;AAAA,MACtC,+BAA+B,cAAA,CAAe,6BAAA;AAAA,MAC9C,oCAAA,EACE,UAAA,CAAW,eAAA,CAAgB,QAAA,CAAS,6CAAA;AAAA,MACtC,2BAA2B,cAAA,CAAe;AAAA,KAC5C;AAAA,IACA,QAAA,EAAU,UAAA,CAAW,eAAA,CAAgB,QAAA,CAClC,OAAO,CAAC,EAAE,OAAA,EAAQ,KAAM,OAAO,CAAA,CAC/B,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AACpB,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,MAAA,CAAO,IAAA,CAAK,mBAAmB,CAAC,CAAA;AAE/D,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,mBAAmB,CAAA;AAAA,QACnC,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,kBAAkB,OAAA,CAAQ,gBAAA;AAAA,QAC1B,KAAA,EAAO,QAAQ,KAAA,IAAS,EAAA;AAAA,QACxB,oBAAoB,OAAA,CAAQ,SAAA;AAAA,QAC5B,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,uBAAuB,OAAA,CAAQ,qBAAA;AAAA,QAC/B,wBAAA,EAA0B,OAAA,CAAQ,wBAAA,CAAyB,GAAA,CAAI,CAAA,WAAA,MAAgB;AAAA,UAC7E,OAAO,WAAA,CAAY,KAAA;AAAA,UACnB,kBAAkB,WAAA,CAAY,gBAAA;AAAA,UAC9B,YAAA,EAAc,cAAA,CAAe,WAAA,CAAY,YAAY;AAAA,SACvD,CAAE,CAAA;AAAA,QACF,MAAA,EAAQ,uBAAuB,IAAI,CAAA;AAAA,QACnC,WAAA,EAAa,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,CAAA,MAAA,MAAW;AAAA,UAC9C,IAAI,MAAA,CAAO,gBAAA;AAAA,UACX,eAAA,EAAiB,SAAA;AAAA,UACjB,GAAA,EAAK,OAAO,YAAA,IAAgB,CAAA;AAAA,UAC5B,KAAK,MAAA,CAAO,YAAA;AAAA,UACZ,UAAU,MAAA,CAAO;AAAA,SACnB,CAAE,CAAA;AAAA,QACF,kBAAA,EAAoB,IAAA,CAAK,kBAAA,CAAmB,GAAA,CAAI,CAAA,gBAAA,MAAqB;AAAA,UACnE,UAAU,gBAAA,CAAiB,QAAA;AAAA,UAC3B,OAAA,EAAS;AAAA,YACP,EAAA,EAAI,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAQ,EAAE,CAAA;AAAA,YACtC,QAAQ,gBAAA,CAAiB,MAAA;AAAA,YACzB,KAAA,EAAO,iBAAiB,OAAA,CAAQ,KAAA;AAAA,YAChC,WAAA,EAAa,iBAAiB,OAAA,CAAQ,WAAA;AAAA,YACtC,MAAA,EAAQ,iBAAiB,OAAA,CAAQ;AAAA,WACnC;AAAA,UACA,OAAA,EAAS;AAAA,YACP,IAAI,gBAAA,CAAiB,mBAAA;AAAA,YACrB,KAAA,EAAO,iBAAiB,OAAA,CAAQ,KAAA;AAAA,YAChC,cAAA,EAAgB,mBAAA,CAAoB,gBAAA,CAAiB,OAAA,CAAQ,cAAc,CAAA;AAAA,YAC3E,GAAA,EAAK,iBAAiB,GAAA,IAAO;AAAA;AAC/B,SACF,CAAE,CAAA;AAAA,QACF,QAAA,EAAU;AAAA,OACZ;AAAA,IACF,CAAC,CAAA;AAAA,IACH,mBAAA,EAAqB,UAAA,CAAW,mBAAA,CAAoB,GAAA,CAAI,oBAAoB,CAAA;AAAA,IAC5E,WAAA,EAAa,OAAO,MAAA,CAAO,UAAA,CAAW,WAAW,CAAA,CAAE,MAAA,CAAwC,CAAC,GAAA,EAAK,OAAA,KAAY;AAC3G,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAKpC,QAAA,OAAO,GAAA;AAAA,MACT;AAEA,MAAA,GAAA,CAAI,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAC,CAAA,GAAI;AAAA,QACxB,EAAA,EAAI,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAAA,QACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,UAAU;AAAA,OAC3C;AAEA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAAA,IACL,MAAA,EAAQ,UAAA,CAAW,MAAA,CAAO,QAAA,CAAS,MAAA,GAC/B;AAAA,MACE,aAAA,EAAe,cAAA,CAAe,MAAA,EAAQ,aAAA,IAAiB,EAAA;AAAA,MACvD,iBAAA,EAAmB,cAAA,CAAe,MAAA,EAAQ,iBAAA,IAAqB,EAAA;AAAA,MAC/D,QAAA,EAAU,UAAA,CAAW,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,OAAA,MAAY;AAAA,QACnD,GAAG,gBAAgB,OAAO,CAAA;AAAA,QAC1B,aAAa,EAAE,GAAA,EAAK,QAAQ,KAAA,EAAO,GAAA,EAAK,QAAQ,KAAA,EAAM;AAAA,QACtD,sBAAA,EAAwB,EAAE,GAAA,EAAK,OAAA,CAAQ,oBAAoB,CAAA,EAAG,GAAA,EAAK,QAAQ,gBAAA,EAAiB;AAAA,QAC5F,QAAA,EAAU,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,OAAA,MAAY;AAAA,UACzC,GAAG,gBAAgB,OAAO,CAAA;AAAA,UAC1B,OAAO,OAAA,CAAQ,KAAA;AAAA,UACf,wBAAA,EAA0B,OAAA,CAAQ,wBAAA,CAAyB,GAAA,CAAI,CAAA,WAAA,MAAgB;AAAA,YAC7E,OAAO,WAAA,CAAY,KAAA;AAAA,YACnB,kBAAkB,WAAA,CAAY,gBAAA;AAAA,YAC9B,YAAA,EAAc,cAAA,CAAe,WAAA,CAAY,YAAY;AAAA,WACvD,CAAE;AAAA,SACJ,CAAE;AAAA,OACJ,CAAE;AAAA,KACJ,GACA,IAAA;AAAA,IACJ,WAAA,EAAa,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,MAAA,GACzC;AAAA,MACE,aAAA,EAAe,cAAA,CAAe,WAAA,EAAa,aAAA,IAAiB,EAAA;AAAA,MAC5D,iBAAA,EAAmB,cAAA,CAAe,WAAA,EAAa,iBAAA,IAAqB,EAAA;AAAA,MACpE,QAAA,EAAU,UAAA,CAAW,WAAA,CAAY,QAAA,CAAS,IAAI,UAAU;AAAA,KAC1D,GACA,IAAA;AAAA,IACJ,UAAA,EAAY,aAAA,CAAc,UAAA,CAAW,UAAU,CAAA;AAAA,IAC/C,OAAA,EAAS,UAAA,CAAW,UAAA,CAAW,OAAO,CAAA;AAAA,IACtC,SAAA,EAAW,UAAA,CAAW,eAAA,CAAgB,eAAA,CAAgB,SAAA,IAAa,IAAA;AAAA,IACnE,YAAA,EAAc,UAAA,CAAW,eAAA,CAAgB,eAAA,CAAgB,YAAA,IAAgB;AAAA,GAC3E;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"error.js","sources":["../../../src/utils/error.ts"],"sourcesContent":["export class RechargeRequestError implements Error {\n name = 'RechargeRequestError';\n message: string;\n status?: number;\n\n constructor(message: string, status?: number) {\n this.message = message;\n this.status = status;\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAsC,CAAA;AAAA,EAKjD,WAAA,CAAY,SAAiB,MAAiB,EAAA;AAJ9C,IAAO,IAAA,CAAA,IAAA,GAAA,sBAAA,CAAA;AAKL,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AACf,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AAAA,GAChB;AACF;;;;"}
1
+ {"version":3,"file":"error.js","sources":["../../../src/utils/error.ts"],"sourcesContent":["export class RechargeRequestError implements Error {\n name = 'RechargeRequestError';\n message: string;\n status?: number;\n\n constructor(message: string, status?: number) {\n this.message = message;\n this.status = status;\n }\n}\n"],"names":[],"mappings":"AAAO,MAAM,oBAAA,CAAsC;AAAA,EAKjD,WAAA,CAAY,SAAiB,MAAA,EAAiB;AAJ9C,IAAA,IAAA,CAAA,IAAA,GAAO,sBAAA;AAKL,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"id.js","sources":["../../../src/utils/id.ts"],"sourcesContent":["const ALPHABET = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n\n/**\n * Generates a random URL-safe id.\n *\n * Uses `Math.random`, so it is NOT cryptographically secure. Only used for\n * internal request/telemetry ids where uniqueness matters.\n *\n * Reference: nanoid/non-secure\n */\nexport function nanoid(size = 21): string {\n let id = '';\n for (let i = 0; i < size; i++) {\n id += ALPHABET[(Math.random() * 64) | 0];\n }\n return id;\n}\n"],"names":[],"mappings":"AAAA,MAAM,QAAW,GAAA,kEAAA,CAAA;AAUD,SAAA,MAAA,CAAO,OAAO,EAAY,EAAA;AACxC,EAAA,IAAI,EAAK,GAAA,EAAA,CAAA;AACT,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,EAAM,CAAK,EAAA,EAAA;AAC7B,IAAA,EAAA,IAAM,QAAU,CAAA,IAAA,CAAK,MAAO,EAAA,GAAI,KAAM,CAAC,CAAA,CAAA;AAAA,GACzC;AACA,EAAO,OAAA,EAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"id.js","sources":["../../../src/utils/id.ts"],"sourcesContent":["const ALPHABET = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n\n/**\n * Generates a random URL-safe id.\n *\n * Uses `Math.random`, so it is NOT cryptographically secure. Only used for\n * internal request/telemetry ids where uniqueness matters.\n *\n * Reference: nanoid/non-secure\n */\nexport function nanoid(size = 21): string {\n let id = '';\n for (let i = 0; i < size; i++) {\n id += ALPHABET[(Math.random() * 64) | 0];\n }\n return id;\n}\n"],"names":[],"mappings":"AAAA,MAAM,QAAA,GAAW,kEAAA;AAUV,SAAS,MAAA,CAAO,OAAO,EAAA,EAAY;AACxC,EAAA,IAAI,EAAA,GAAK,EAAA;AACT,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,EAAM,CAAA,EAAA,EAAK;AAC7B,IAAA,EAAA,IAAM,QAAA,CAAU,IAAA,CAAK,MAAA,EAAO,GAAI,KAAM,CAAC,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,EAAA;AACT;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sources":["../../../src/utils/init.ts"],"sourcesContent":["import { resetCDNCache } from '../api/cdn';\nimport { StorefrontOptions, CRUDRequestOptions, GetRequestOptions, InitOptions } from '../types';\nimport { setOptions } from './options';\nimport { request } from './request';\n\n/**\n * @internal\n * @deprecated will be removed in next version\n */\nexport const api = {\n get<T>(url: string, requestOptions?: GetRequestOptions): Promise<T> {\n return request<T>('get', url, requestOptions);\n },\n post<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('post', url, requestOptions);\n },\n put<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('put', url, requestOptions);\n },\n delete<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('delete', url, requestOptions);\n },\n};\n\n/**\n * Uses passed in storeIdentifier, but if it's not passed in will try to infer it.\n * Currently it will only infer if we are in the context of a Shopify store. This will not infer headless or hosted yet.\n */\nfunction getStoreIdentifier(storeIdentifier?: string): string {\n if (storeIdentifier) {\n return storeIdentifier;\n }\n\n // Infer's when on Shopify store (non headless)\n if (window?.Shopify?.shop) {\n return window.Shopify.shop;\n }\n\n // Domain exists on hosted themes. If it doesn't for some reason, get the subdomain and create the identifier\n let domain = window?.domain;\n if (!domain) {\n const subdomain = location?.href\n .match(/(?:http[s]*:\\/\\/)*(.*?)\\.(?=admin\\.rechargeapps\\.com)/i)?.[1]\n .replace(/-sp$/, '');\n if (subdomain) {\n domain = `${subdomain}.myshopify.com`;\n }\n }\n\n // Infer's when on Recharge hosted\n if (domain) {\n return domain;\n }\n\n throw new Error(`No storeIdentifier was passed into init.`);\n}\n\nexport function initRecharge(opt: InitOptions = {}) {\n const hiddenOpts = opt as StorefrontOptions;\n const { storefrontAccessToken } = opt;\n if (storefrontAccessToken && !storefrontAccessToken.startsWith('strfnt')) {\n throw new Error(\n 'Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.'\n );\n }\n setOptions({\n storeIdentifier: getStoreIdentifier(opt.storeIdentifier),\n loginRetryFn: opt.loginRetryFn,\n __unstable_twoFactorRetryFn: opt.__unstable_twoFactorRetryFn,\n storefrontAccessToken,\n appName: opt.appName,\n appVersion: opt.appVersion,\n environment: hiddenOpts.environment ? hiddenOpts.environment : 'prod',\n environmentUri: hiddenOpts.environmentUri,\n customerHash: hiddenOpts.customerHash,\n });\n\n // When init is called again, reset the cache to make sure we don't have the old cache around\n resetCDNCache();\n}\n"],"names":[],"mappings":";;;;AASO,MAAM,GAAM,GAAA;AAAA,EACjB,GAAA,CAAO,KAAa,cAAgD,EAAA;AAClE,IAAO,OAAA,OAAA,CAAW,KAAO,EAAA,GAAA,EAAK,cAAc,CAAA,CAAA;AAAA,GAC9C;AAAA,EACA,IAAA,CAAQ,KAAa,cAAiD,EAAA;AACpE,IAAO,OAAA,OAAA,CAAW,MAAQ,EAAA,GAAA,EAAK,cAAc,CAAA,CAAA;AAAA,GAC/C;AAAA,EACA,GAAA,CAAO,KAAa,cAAiD,EAAA;AACnE,IAAO,OAAA,OAAA,CAAW,KAAO,EAAA,GAAA,EAAK,cAAc,CAAA,CAAA;AAAA,GAC9C;AAAA,EACA,MAAA,CAAU,KAAa,cAAiD,EAAA;AACtE,IAAO,OAAA,OAAA,CAAW,QAAU,EAAA,GAAA,EAAK,cAAc,CAAA,CAAA;AAAA,GACjD;AACF,EAAA;AAMA,SAAS,mBAAmB,eAAkC,EAAA;AAC5D,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA,eAAA,CAAA;AAAA,GACT;AAGA,EAAI,IAAA,MAAA,EAAQ,SAAS,IAAM,EAAA;AACzB,IAAA,OAAO,OAAO,OAAQ,CAAA,IAAA,CAAA;AAAA,GACxB;AAGA,EAAA,IAAI,SAAS,MAAQ,EAAA,MAAA,CAAA;AACrB,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAM,MAAA,SAAA,GAAY,QAAU,EAAA,IAAA,CACzB,KAAM,CAAA,wDAAwD,IAAI,CAAC,CAAA,CACnE,OAAQ,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AACrB,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,MAAA,GAAS,GAAG,SAAS,CAAA,cAAA,CAAA,CAAA;AAAA,KACvB;AAAA,GACF;AAGA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,IAAI,MAAM,CAA0C,wCAAA,CAAA,CAAA,CAAA;AAC5D,CAAA;AAEgB,SAAA,YAAA,CAAa,GAAmB,GAAA,EAAI,EAAA;AAClD,EAAA,MAAM,UAAa,GAAA,GAAA,CAAA;AACnB,EAAM,MAAA,EAAE,uBAA0B,GAAA,GAAA,CAAA;AAClC,EAAA,IAAI,qBAAyB,IAAA,CAAC,qBAAsB,CAAA,UAAA,CAAW,QAAQ,CAAG,EAAA;AACxE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,uKAAA;AAAA,KACF,CAAA;AAAA,GACF;AACA,EAAW,UAAA,CAAA;AAAA,IACT,eAAA,EAAiB,kBAAmB,CAAA,GAAA,CAAI,eAAe,CAAA;AAAA,IACvD,cAAc,GAAI,CAAA,YAAA;AAAA,IAClB,6BAA6B,GAAI,CAAA,2BAAA;AAAA,IACjC,qBAAA;AAAA,IACA,SAAS,GAAI,CAAA,OAAA;AAAA,IACb,YAAY,GAAI,CAAA,UAAA;AAAA,IAChB,WAAa,EAAA,UAAA,CAAW,WAAc,GAAA,UAAA,CAAW,WAAc,GAAA,MAAA;AAAA,IAC/D,gBAAgB,UAAW,CAAA,cAAA;AAAA,IAC3B,cAAc,UAAW,CAAA,YAAA;AAAA,GAC1B,CAAA,CAAA;AAGD,EAAc,aAAA,EAAA,CAAA;AAChB;;;;"}
1
+ {"version":3,"file":"init.js","sources":["../../../src/utils/init.ts"],"sourcesContent":["import { resetCDNCache } from '../api/cdn';\nimport { StorefrontOptions, CRUDRequestOptions, GetRequestOptions, InitOptions } from '../types';\nimport { setOptions } from './options';\nimport { request } from './request';\n\n/**\n * @internal\n * @deprecated will be removed in next version\n */\nexport const api = {\n get<T>(url: string, requestOptions?: GetRequestOptions): Promise<T> {\n return request<T>('get', url, requestOptions);\n },\n post<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('post', url, requestOptions);\n },\n put<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('put', url, requestOptions);\n },\n delete<T>(url: string, requestOptions?: CRUDRequestOptions): Promise<T> {\n return request<T>('delete', url, requestOptions);\n },\n};\n\n/**\n * Uses passed in storeIdentifier, but if it's not passed in will try to infer it.\n * Currently it will only infer if we are in the context of a Shopify store. This will not infer headless or hosted yet.\n */\nfunction getStoreIdentifier(storeIdentifier?: string): string {\n if (storeIdentifier) {\n return storeIdentifier;\n }\n\n // Infer's when on Shopify store (non headless)\n if (window?.Shopify?.shop) {\n return window.Shopify.shop;\n }\n\n // Domain exists on hosted themes. If it doesn't for some reason, get the subdomain and create the identifier\n let domain = window?.domain;\n if (!domain) {\n const subdomain = location?.href\n .match(/(?:http[s]*:\\/\\/)*(.*?)\\.(?=admin\\.rechargeapps\\.com)/i)?.[1]\n .replace(/-sp$/, '');\n if (subdomain) {\n domain = `${subdomain}.myshopify.com`;\n }\n }\n\n // Infer's when on Recharge hosted\n if (domain) {\n return domain;\n }\n\n throw new Error(`No storeIdentifier was passed into init.`);\n}\n\nexport function initRecharge(opt: InitOptions = {}) {\n const hiddenOpts = opt as StorefrontOptions;\n const { storefrontAccessToken } = opt;\n if (storefrontAccessToken && !storefrontAccessToken.startsWith('strfnt')) {\n throw new Error(\n 'Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.'\n );\n }\n setOptions({\n storeIdentifier: getStoreIdentifier(opt.storeIdentifier),\n loginRetryFn: opt.loginRetryFn,\n __unstable_twoFactorRetryFn: opt.__unstable_twoFactorRetryFn,\n storefrontAccessToken,\n appName: opt.appName,\n appVersion: opt.appVersion,\n environment: hiddenOpts.environment ? hiddenOpts.environment : 'prod',\n environmentUri: hiddenOpts.environmentUri,\n customerHash: hiddenOpts.customerHash,\n });\n\n // When init is called again, reset the cache to make sure we don't have the old cache around\n resetCDNCache();\n}\n"],"names":[],"mappings":";;;;AASO,MAAM,GAAA,GAAM;AAAA,EACjB,GAAA,CAAO,KAAa,cAAA,EAAgD;AAClE,IAAA,OAAO,OAAA,CAAW,KAAA,EAAO,GAAA,EAAK,cAAc,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,IAAA,CAAQ,KAAa,cAAA,EAAiD;AACpE,IAAA,OAAO,OAAA,CAAW,MAAA,EAAQ,GAAA,EAAK,cAAc,CAAA;AAAA,EAC/C,CAAA;AAAA,EACA,GAAA,CAAO,KAAa,cAAA,EAAiD;AACnE,IAAA,OAAO,OAAA,CAAW,KAAA,EAAO,GAAA,EAAK,cAAc,CAAA;AAAA,EAC9C,CAAA;AAAA,EACA,MAAA,CAAU,KAAa,cAAA,EAAiD;AACtE,IAAA,OAAO,OAAA,CAAW,QAAA,EAAU,GAAA,EAAK,cAAc,CAAA;AAAA,EACjD;AACF;AAMA,SAAS,mBAAmB,eAAA,EAAkC;AAC5D,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO,eAAA;AAAA,EACT;AAGA,EAAA,IAAI,MAAA,EAAQ,SAAS,IAAA,EAAM;AACzB,IAAA,OAAO,OAAO,OAAA,CAAQ,IAAA;AAAA,EACxB;AAGA,EAAA,IAAI,SAAS,MAAA,EAAQ,MAAA;AACrB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,SAAA,GAAY,QAAA,EAAU,IAAA,CACzB,KAAA,CAAM,wDAAwD,IAAI,CAAC,CAAA,CACnE,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACrB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAA,GAAS,GAAG,SAAS,CAAA,cAAA,CAAA;AAAA,IACvB;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,MAAM,CAAA,wCAAA,CAA0C,CAAA;AAC5D;AAEO,SAAS,YAAA,CAAa,GAAA,GAAmB,EAAC,EAAG;AAClD,EAAA,MAAM,UAAA,GAAa,GAAA;AACnB,EAAA,MAAM,EAAE,uBAAsB,GAAI,GAAA;AAClC,EAAA,IAAI,qBAAA,IAAyB,CAAC,qBAAA,CAAsB,UAAA,CAAW,QAAQ,CAAA,EAAG;AACxE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,UAAA,CAAW;AAAA,IACT,eAAA,EAAiB,kBAAA,CAAmB,GAAA,CAAI,eAAe,CAAA;AAAA,IACvD,cAAc,GAAA,CAAI,YAAA;AAAA,IAClB,6BAA6B,GAAA,CAAI,2BAAA;AAAA,IACjC,qBAAA;AAAA,IACA,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,WAAA,EAAa,UAAA,CAAW,WAAA,GAAc,UAAA,CAAW,WAAA,GAAc,MAAA;AAAA,IAC/D,gBAAgB,UAAA,CAAW,cAAA;AAAA,IAC3B,cAAc,UAAA,CAAW;AAAA,GAC1B,CAAA;AAGD,EAAA,aAAA,EAAc;AAChB;;"}
@@ -1,3 +1,14 @@
1
+ const LOAD_TIMEOUT_MS = 3e4;
2
+ const POLL_INTERVAL_MS = 50;
3
+ function parseSpreedlyUrl(scriptSrc) {
4
+ try {
5
+ const url = new URL(scriptSrc);
6
+ const isSpreedlyHost = url.hostname === "spreedly.com" || url.hostname.endsWith(".spreedly.com");
7
+ return url.protocol === "https:" && isSpreedlyHost ? url : null;
8
+ } catch {
9
+ return null;
10
+ }
11
+ }
1
12
  async function loadSpreedlyScript(scriptSrc, integrity) {
2
13
  if (typeof window !== "undefined" && window.Spreedly) {
3
14
  return Promise.resolve();
@@ -7,36 +18,39 @@ async function loadSpreedlyScript(scriptSrc, integrity) {
7
18
  reject(new Error("Document is not available. This function must be called in a browser environment."));
8
19
  return;
9
20
  }
10
- const existingScript = document.querySelector(`script[src="${scriptSrc}"]`);
21
+ const url = parseSpreedlyUrl(scriptSrc);
22
+ if (!url) {
23
+ reject(new Error("Payment iFrame script must be served over https from spreedly.com"));
24
+ return;
25
+ }
26
+ const deadline = Date.now() + LOAD_TIMEOUT_MS;
27
+ let pollTimer;
28
+ const waitForSpreedly = () => {
29
+ if (window.Spreedly) {
30
+ resolve();
31
+ } else if (Date.now() >= deadline) {
32
+ reject(new Error("Timed out loading payment iFrame script"));
33
+ } else {
34
+ pollTimer = setTimeout(waitForSpreedly, POLL_INTERVAL_MS);
35
+ }
36
+ };
37
+ const existingScript = Array.from(document.scripts).find(
38
+ (script2) => script2.src === url.href && script2.integrity === integrity
39
+ );
11
40
  if (existingScript) {
12
- const checkLoaded = () => {
13
- if (window.Spreedly) {
14
- resolve();
15
- } else {
16
- setTimeout(checkLoaded, 50);
17
- }
18
- };
19
- checkLoaded();
41
+ waitForSpreedly();
20
42
  return;
21
43
  }
22
44
  const script = document.createElement("script");
23
- script.src = scriptSrc;
45
+ script.src = url.href;
24
46
  script.integrity = integrity;
25
47
  script.crossOrigin = "anonymous";
26
- script.addEventListener("load", () => {
27
- const checkLoaded = () => {
28
- if (window.Spreedly) {
29
- resolve();
30
- } else {
31
- setTimeout(checkLoaded, 50);
32
- }
33
- };
34
- checkLoaded();
35
- });
36
48
  script.addEventListener("error", () => {
49
+ clearTimeout(pollTimer);
37
50
  reject(new Error("Failed to load payment iFrame script"));
38
51
  });
39
52
  document.head.appendChild(script);
53
+ waitForSpreedly();
40
54
  });
41
55
  }
42
56