@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":"loadSpreedlyScript.js","sources":["../../../src/utils/loadSpreedlyScript.ts"],"sourcesContent":["export async function loadSpreedlyScript(scriptSrc: string, integrity: string): Promise<void> {\n // Check if already loaded\n if (typeof window !== 'undefined' && window.Spreedly) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('Document is not available. This function must be called in a browser environment.'));\n return;\n }\n\n // Check if script is already in the DOM\n const existingScript = document.querySelector(`script[src=\"${scriptSrc}\"]`);\n if (existingScript) {\n // Wait for it to load\n const checkLoaded = () => {\n if (window.Spreedly) {\n resolve();\n } else {\n setTimeout(checkLoaded, 50);\n }\n };\n checkLoaded();\n return;\n }\n\n const script = document.createElement('script');\n script.src = scriptSrc;\n script.integrity = integrity;\n script.crossOrigin = 'anonymous';\n\n script.addEventListener('load', () => {\n // Wait for payment script to be fully initialized\n const checkLoaded = () => {\n if (window.Spreedly) {\n resolve();\n } else {\n setTimeout(checkLoaded, 50);\n }\n };\n checkLoaded();\n });\n\n script.addEventListener('error', () => {\n reject(new Error('Failed to load payment iFrame script'));\n });\n\n document.head.appendChild(script);\n });\n}\n"],"names":[],"mappings":"AAAsB,eAAA,kBAAA,CAAmB,WAAmB,SAAkC,EAAA;AAE5F,EAAA,IAAI,OAAO,MAAA,KAAW,WAAe,IAAA,MAAA,CAAO,QAAU,EAAA;AACpD,IAAA,OAAO,QAAQ,OAAQ,EAAA,CAAA;AAAA,GACzB;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACtC,IAAI,IAAA,OAAO,aAAa,WAAa,EAAA;AACnC,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,mFAAmF,CAAC,CAAA,CAAA;AACrG,MAAA,OAAA;AAAA,KACF;AAGA,IAAA,MAAM,cAAiB,GAAA,QAAA,CAAS,aAAc,CAAA,CAAA,YAAA,EAAe,SAAS,CAAI,EAAA,CAAA,CAAA,CAAA;AAC1E,IAAA,IAAI,cAAgB,EAAA;AAElB,MAAA,MAAM,cAAc,MAAM;AACxB,QAAA,IAAI,OAAO,QAAU,EAAA;AACnB,UAAQ,OAAA,EAAA,CAAA;AAAA,SACH,MAAA;AACL,UAAA,UAAA,CAAW,aAAa,EAAE,CAAA,CAAA;AAAA,SAC5B;AAAA,OACF,CAAA;AACA,MAAY,WAAA,EAAA,CAAA;AACZ,MAAA,OAAA;AAAA,KACF;AAEA,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAM,GAAA,SAAA,CAAA;AACb,IAAA,MAAA,CAAO,SAAY,GAAA,SAAA,CAAA;AACnB,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AAErB,IAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,MAAM;AAEpC,MAAA,MAAM,cAAc,MAAM;AACxB,QAAA,IAAI,OAAO,QAAU,EAAA;AACnB,UAAQ,OAAA,EAAA,CAAA;AAAA,SACH,MAAA;AACL,UAAA,UAAA,CAAW,aAAa,EAAE,CAAA,CAAA;AAAA,SAC5B;AAAA,OACF,CAAA;AACA,MAAY,WAAA,EAAA,CAAA;AAAA,KACb,CAAA,CAAA;AAED,IAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM;AACrC,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,sCAAsC,CAAC,CAAA,CAAA;AAAA,KACzD,CAAA,CAAA;AAED,IAAS,QAAA,CAAA,IAAA,CAAK,YAAY,MAAM,CAAA,CAAA;AAAA,GACjC,CAAA,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"loadSpreedlyScript.js","sources":["../../../src/utils/loadSpreedlyScript.ts"],"sourcesContent":["const LOAD_TIMEOUT_MS = 30_000;\nconst POLL_INTERVAL_MS = 50;\n\nfunction parseSpreedlyUrl(scriptSrc: string): URL | null {\n try {\n const url = new URL(scriptSrc);\n const isSpreedlyHost = url.hostname === 'spreedly.com' || url.hostname.endsWith('.spreedly.com');\n return url.protocol === 'https:' && isSpreedlyHost ? url : null;\n } catch {\n return null;\n }\n}\n\nexport async function loadSpreedlyScript(scriptSrc: string, integrity: string): Promise<void> {\n // Check if already loaded\n if (typeof window !== 'undefined' && window.Spreedly) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n if (typeof document === 'undefined') {\n reject(new Error('Document is not available. This function must be called in a browser environment.'));\n return;\n }\n\n const url = parseSpreedlyUrl(scriptSrc);\n if (!url) {\n reject(new Error('Payment iFrame script must be served over https from spreedly.com'));\n return;\n }\n\n const deadline = Date.now() + LOAD_TIMEOUT_MS;\n let pollTimer: ReturnType<typeof setTimeout> | undefined;\n const waitForSpreedly = () => {\n if (window.Spreedly) {\n resolve();\n } else if (Date.now() >= deadline) {\n reject(new Error('Timed out loading payment iFrame script'));\n } else {\n pollTimer = setTimeout(waitForSpreedly, POLL_INTERVAL_MS);\n }\n };\n\n // A tag already on the page is only trusted if the browser verified it against the same hash\n const existingScript = Array.from(document.scripts).find(\n script => script.src === url.href && script.integrity === integrity\n );\n if (existingScript) {\n waitForSpreedly();\n return;\n }\n\n const script = document.createElement('script');\n script.src = url.href;\n script.integrity = integrity;\n script.crossOrigin = 'anonymous';\n\n script.addEventListener('error', () => {\n clearTimeout(pollTimer);\n reject(new Error('Failed to load payment iFrame script'));\n });\n\n document.head.appendChild(script);\n // Poll from the start rather than on load so a request that stalls still hits the deadline\n waitForSpreedly();\n });\n}\n"],"names":["script"],"mappings":"AAAA,MAAM,eAAA,GAAkB,GAAA;AACxB,MAAM,gBAAA,GAAmB,EAAA;AAEzB,SAAS,iBAAiB,SAAA,EAA+B;AACvD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,SAAS,CAAA;AAC7B,IAAA,MAAM,iBAAiB,GAAA,CAAI,QAAA,KAAa,kBAAkB,GAAA,CAAI,QAAA,CAAS,SAAS,eAAe,CAAA;AAC/F,IAAA,OAAO,GAAA,CAAI,QAAA,KAAa,QAAA,IAAY,cAAA,GAAiB,GAAA,GAAM,IAAA;AAAA,EAC7D,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,eAAsB,kBAAA,CAAmB,WAAmB,SAAA,EAAkC;AAE5F,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,QAAA,EAAU;AACpD,IAAA,OAAO,QAAQ,OAAA,EAAQ;AAAA,EACzB;AAEA,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,mFAAmF,CAAC,CAAA;AACrG,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,iBAAiB,SAAS,CAAA;AACtC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,mEAAmE,CAAC,CAAA;AACrF,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,eAAA;AAC9B,IAAA,IAAI,SAAA;AACJ,IAAA,MAAM,kBAAkB,MAAM;AAC5B,MAAA,IAAI,OAAO,QAAA,EAAU;AACnB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAA,IAAW,IAAA,CAAK,GAAA,EAAI,IAAK,QAAA,EAAU;AACjC,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,yCAAyC,CAAC,CAAA;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,SAAA,GAAY,UAAA,CAAW,iBAAiB,gBAAgB,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,CAAE,IAAA;AAAA,MAClD,CAAAA,OAAAA,KAAUA,OAAAA,CAAO,QAAQ,GAAA,CAAI,IAAA,IAAQA,QAAO,SAAA,KAAc;AAAA,KAC5D;AACA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,eAAA,EAAgB;AAChB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA;AACjB,IAAA,MAAA,CAAO,SAAA,GAAY,SAAA;AACnB,IAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAErB,IAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,MAAM;AACrC,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,sCAAsC,CAAC,CAAA;AAAA,IAC1D,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAEhC,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAC,CAAA;AACH;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sources":["../../../src/utils/options.ts"],"sourcesContent":["import { StorefrontOptions } from '../types';\n\nlet options: StorefrontOptions = {\n storeIdentifier: '',\n environment: 'prod',\n};\n\nexport function setOptions(opts: StorefrontOptions) {\n options = opts;\n}\n\nexport function getOptions() {\n return options;\n}\n"],"names":[],"mappings":"AAEA,IAAI,OAA6B,GAAA;AAAA,EAC/B,eAAiB,EAAA,EAAA;AAAA,EACjB,WAAa,EAAA,MAAA;AACf,CAAA,CAAA;AAEO,SAAS,WAAW,IAAyB,EAAA;AAClD,EAAU,OAAA,GAAA,IAAA,CAAA;AACZ,CAAA;AAEO,SAAS,UAAa,GAAA;AAC3B,EAAO,OAAA,OAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"options.js","sources":["../../../src/utils/options.ts"],"sourcesContent":["import { StorefrontOptions } from '../types';\n\nlet options: StorefrontOptions = {\n storeIdentifier: '',\n environment: 'prod',\n};\n\nexport function setOptions(opts: StorefrontOptions) {\n options = opts;\n}\n\nexport function getOptions() {\n return options;\n}\n"],"names":[],"mappings":"AAEA,IAAI,OAAA,GAA6B;AAAA,EAC/B,eAAA,EAAiB,EAAA;AAAA,EACjB,WAAA,EAAa;AACf,CAAA;AAEO,SAAS,WAAW,IAAA,EAAyB;AAClD,EAAA,OAAA,GAAU,IAAA;AACZ;AAEO,SAAS,UAAA,GAAa;AAC3B,EAAA,OAAO,OAAA;AACT;;"}
@@ -1,6 +1,6 @@
1
1
  import { nanoid } from './id.js';
2
2
  import { getOptions } from './options.js';
3
- import { RECHARGE_CDN_URL, RECHARGE_API_URL, SHOPIFY_APP_PROXY_URL } from '../constants/api.js';
3
+ import { SHOPIFY_APP_PROXY_URL, RECHARGE_API_URL, RECHARGE_CDN_URL } from '../constants/api.js';
4
4
  import { RechargeRequestError } from './error.js';
5
5
  import { encodePathSegment } from './url.js';
6
6
 
@@ -44,7 +44,7 @@ async function rechargeApiRequest(method, url, { id, query, data, headers } = {}
44
44
  "X-Recharge-Sdk-Fn": session.internalFnCall,
45
45
  ...appName ? { "X-Recharge-Sdk-App-Name": appName } : {},
46
46
  ...appVersion ? { "X-Recharge-Sdk-App-Version": appVersion } : {},
47
- "X-Recharge-Sdk-Version": "2.6.0",
47
+ "X-Recharge-Sdk-Version": "2.7.0",
48
48
  "X-Request-Id": session.internalRequestId,
49
49
  ...session.tmp_fn_identifier ? { "X-Recharge-Sdk-Fn-Identifier": session.tmp_fn_identifier } : {},
50
50
  ...headers ? headers : {}
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sources":["../../../src/utils/request.ts"],"sourcesContent":["import { nanoid } from './id';\n\nimport { Method, RequestHeaders, RequestOptions, InternalSession, Session } from '../types';\nimport { getOptions } from './options';\nimport { RECHARGE_API_URL, RECHARGE_CDN_URL, SHOPIFY_APP_PROXY_URL } from '../constants/api';\nimport { RechargeRequestError } from './error';\nimport { encodePathSegment } from './url';\n\n/**\n * Converts a query object into a URL-encoded query string using the following rules:\n * - Arrays are serialized as comma-separated values: `a=1,2` (not `a[0]=1&a[1]=2`)\n * - Only the values are URL-encoded; keys are not encoded\n * - Properties with `undefined` values or empty arrays are omitted from the result\n *\n * Reference: qs\n */\nfunction stringifyQuery(obj: Record<string, unknown>): string {\n const encode = (value: unknown) => encodeURIComponent(value === null ? '' : String(value));\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined && !(Array.isArray(value) && value.length === 0))\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.map(encode).join(',') : encode(value)}`)\n .join('&');\n}\n\nconst RESERVED_QUERY_KEYS = new Set(['shop_url']);\n\n/** @internal */\nexport function getInternalSession(session: Session | InternalSession, fnName: string): InternalSession {\n return {\n ...session,\n internalFnCall: (session as InternalSession).internalFnCall ?? fnName,\n internalRequestId: (session as InternalSession).internalRequestId ?? nanoid(),\n };\n}\n\nexport async function cdnRequest<T>(method: Method, url: string, requestOptions: RequestOptions = {}): Promise<T> {\n const opts = getOptions();\n return request(method, `${RECHARGE_CDN_URL(opts.environment)}/store/${opts.storeIdentifier}${url}`, requestOptions);\n}\n\nexport async function rechargeApiRequest<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {},\n session: InternalSession\n): Promise<T> {\n const {\n environment,\n environmentUri,\n storeIdentifier,\n loginRetryFn,\n __unstable_twoFactorRetryFn,\n appName,\n appVersion,\n } = getOptions();\n if (!storeIdentifier) {\n throw new Error('InitRecharge has not been called and/or no store identifier has been defined.');\n }\n const token = session.apiToken;\n if (!token) {\n throw new Error('No API token defined on session.');\n }\n const rechargeBaseUrl = RECHARGE_API_URL(environment, environmentUri);\n const reqHeaders: RequestHeaders = {\n 'X-Recharge-Access-Token': token,\n 'X-Recharge-Version': '2021-11',\n 'X-Recharge-Sdk-Fn': session.internalFnCall,\n ...(appName ? { 'X-Recharge-Sdk-App-Name': appName } : {}),\n ...(appVersion ? { 'X-Recharge-Sdk-App-Version': appVersion } : {}),\n 'X-Recharge-Sdk-Version': '__SDK_VERSION__',\n 'X-Request-Id': session.internalRequestId,\n ...(session.tmp_fn_identifier ? { 'X-Recharge-Sdk-Fn-Identifier': session.tmp_fn_identifier } : {}),\n ...(headers ? headers : {}),\n };\n\n const callerQuery = query as Record<string, unknown> | undefined;\n const sanitizedCallerQuery = callerQuery\n ? Object.fromEntries(Object.entries(callerQuery).filter(([k]) => !RESERVED_QUERY_KEYS.has(k)))\n : undefined;\n\n const localQuery = {\n ...sanitizedCallerQuery,\n shop_url: storeIdentifier,\n };\n\n try {\n // await to catch any errors\n return await request<T>(method, `${rechargeBaseUrl}${url}`, { id, query: localQuery, data, headers: reqHeaders });\n } catch (error: unknown) {\n if (loginRetryFn && error instanceof RechargeRequestError && error.status === 401) {\n // call loginRetryFn and retry request on 401\n return loginRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n } else if (__unstable_twoFactorRetryFn && error instanceof RechargeRequestError && error.status === 423) {\n // trigger two-factor authentication flow and retry request on 423\n return __unstable_twoFactorRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n }\n throw error;\n }\n}\n\nexport async function shopifyAppProxyRequest<T>(\n method: Method,\n url: string,\n requestOptions: RequestOptions = {}\n): Promise<T> {\n return request(method, `${SHOPIFY_APP_PROXY_URL}${url}`, requestOptions);\n}\n\nexport async function request<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {}\n): Promise<T> {\n let reqUrl = url.trim();\n\n if (id) {\n // Encode the id as a single opaque path segment. Without this, an id\n // containing `../` or `?` could traverse to a different API route or\n // smuggle query params (H1-3884884 / SEC-4002).\n reqUrl = [reqUrl, encodePathSegment(id)].join('/');\n }\n\n if (query) {\n let exQuery;\n [reqUrl, exQuery] = reqUrl.split('?');\n const fullQuery = [exQuery, stringifyQuery(query as Record<string, unknown>)].join('&').replace(/^&/, '');\n reqUrl = `${reqUrl}${fullQuery ? `?${fullQuery}` : ''}`;\n }\n\n let reqBody;\n if (data && method !== 'get') {\n reqBody = JSON.stringify(data);\n }\n\n const reqHeaders: RequestHeaders = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Recharge-App': 'storefront-client',\n ...(headers ? headers : {}),\n };\n\n const response = await fetch(reqUrl, {\n method,\n headers: reqHeaders,\n body: reqBody,\n });\n\n let result;\n try {\n result = await response.json();\n } catch (e) {\n // If we get here, it means we were a no content response.\n }\n\n if (!response.ok) {\n if (response.status === 502 || response.status === 504) {\n throw new RechargeRequestError('A gateway error occurred while making the request', response.status);\n } else if (result && result.error) {\n throw new RechargeRequestError(result.error, response.status);\n } else if (result && result.errors) {\n throw new RechargeRequestError(JSON.stringify(result.errors), response.status);\n } else {\n throw new RechargeRequestError('A connection error occurred while making the request');\n }\n }\n\n return result as T;\n}\n"],"names":["session"],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sources":["../../../src/utils/request.ts"],"sourcesContent":["import { nanoid } from './id';\n\nimport { Method, RequestHeaders, RequestOptions, InternalSession, Session } from '../types';\nimport { getOptions } from './options';\nimport { RECHARGE_API_URL, RECHARGE_CDN_URL, SHOPIFY_APP_PROXY_URL } from '../constants/api';\nimport { RechargeRequestError } from './error';\nimport { encodePathSegment } from './url';\n\n/**\n * Converts a query object into a URL-encoded query string using the following rules:\n * - Arrays are serialized as comma-separated values: `a=1,2` (not `a[0]=1&a[1]=2`)\n * - Only the values are URL-encoded; keys are not encoded\n * - Properties with `undefined` values or empty arrays are omitted from the result\n *\n * Reference: qs\n */\nfunction stringifyQuery(obj: Record<string, unknown>): string {\n const encode = (value: unknown) => encodeURIComponent(value === null ? '' : String(value));\n return Object.entries(obj)\n .filter(([, value]) => value !== undefined && !(Array.isArray(value) && value.length === 0))\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.map(encode).join(',') : encode(value)}`)\n .join('&');\n}\n\nconst RESERVED_QUERY_KEYS = new Set(['shop_url']);\n\n/** @internal */\nexport function getInternalSession(session: Session | InternalSession, fnName: string): InternalSession {\n return {\n ...session,\n internalFnCall: (session as InternalSession).internalFnCall ?? fnName,\n internalRequestId: (session as InternalSession).internalRequestId ?? nanoid(),\n };\n}\n\nexport async function cdnRequest<T>(method: Method, url: string, requestOptions: RequestOptions = {}): Promise<T> {\n const opts = getOptions();\n return request(method, `${RECHARGE_CDN_URL(opts.environment)}/store/${opts.storeIdentifier}${url}`, requestOptions);\n}\n\nexport async function rechargeApiRequest<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {},\n session: InternalSession\n): Promise<T> {\n const {\n environment,\n environmentUri,\n storeIdentifier,\n loginRetryFn,\n __unstable_twoFactorRetryFn,\n appName,\n appVersion,\n } = getOptions();\n if (!storeIdentifier) {\n throw new Error('InitRecharge has not been called and/or no store identifier has been defined.');\n }\n const token = session.apiToken;\n if (!token) {\n throw new Error('No API token defined on session.');\n }\n const rechargeBaseUrl = RECHARGE_API_URL(environment, environmentUri);\n const reqHeaders: RequestHeaders = {\n 'X-Recharge-Access-Token': token,\n 'X-Recharge-Version': '2021-11',\n 'X-Recharge-Sdk-Fn': session.internalFnCall,\n ...(appName ? { 'X-Recharge-Sdk-App-Name': appName } : {}),\n ...(appVersion ? { 'X-Recharge-Sdk-App-Version': appVersion } : {}),\n 'X-Recharge-Sdk-Version': '__SDK_VERSION__',\n 'X-Request-Id': session.internalRequestId,\n ...(session.tmp_fn_identifier ? { 'X-Recharge-Sdk-Fn-Identifier': session.tmp_fn_identifier } : {}),\n ...(headers ? headers : {}),\n };\n\n const callerQuery = query as Record<string, unknown> | undefined;\n const sanitizedCallerQuery = callerQuery\n ? Object.fromEntries(Object.entries(callerQuery).filter(([k]) => !RESERVED_QUERY_KEYS.has(k)))\n : undefined;\n\n const localQuery = {\n ...sanitizedCallerQuery,\n shop_url: storeIdentifier,\n };\n\n try {\n // await to catch any errors\n return await request<T>(method, `${rechargeBaseUrl}${url}`, { id, query: localQuery, data, headers: reqHeaders });\n } catch (error: unknown) {\n if (loginRetryFn && error instanceof RechargeRequestError && error.status === 401) {\n // call loginRetryFn and retry request on 401\n return loginRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n } else if (__unstable_twoFactorRetryFn && error instanceof RechargeRequestError && error.status === 423) {\n // trigger two-factor authentication flow and retry request on 423\n return __unstable_twoFactorRetryFn().then(session => {\n if (session) {\n return request(method, `${rechargeBaseUrl}${url}`, {\n id,\n query: localQuery,\n data,\n headers: {\n ...reqHeaders,\n 'X-Recharge-Access-Token': session.apiToken,\n },\n });\n }\n throw error;\n });\n }\n throw error;\n }\n}\n\nexport async function shopifyAppProxyRequest<T>(\n method: Method,\n url: string,\n requestOptions: RequestOptions = {}\n): Promise<T> {\n return request(method, `${SHOPIFY_APP_PROXY_URL}${url}`, requestOptions);\n}\n\nexport async function request<T>(\n method: Method,\n url: string,\n { id, query, data, headers }: RequestOptions = {}\n): Promise<T> {\n let reqUrl = url.trim();\n\n if (id) {\n // Encode the id as a single opaque path segment. Without this, an id\n // containing `../` or `?` could traverse to a different API route or\n // smuggle query params (H1-3884884 / SEC-4002).\n reqUrl = [reqUrl, encodePathSegment(id)].join('/');\n }\n\n if (query) {\n let exQuery;\n [reqUrl, exQuery] = reqUrl.split('?');\n const fullQuery = [exQuery, stringifyQuery(query as Record<string, unknown>)].join('&').replace(/^&/, '');\n reqUrl = `${reqUrl}${fullQuery ? `?${fullQuery}` : ''}`;\n }\n\n let reqBody;\n if (data && method !== 'get') {\n reqBody = JSON.stringify(data);\n }\n\n const reqHeaders: RequestHeaders = {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Recharge-App': 'storefront-client',\n ...(headers ? headers : {}),\n };\n\n const response = await fetch(reqUrl, {\n method,\n headers: reqHeaders,\n body: reqBody,\n });\n\n let result;\n try {\n result = await response.json();\n } catch (e) {\n // If we get here, it means we were a no content response.\n }\n\n if (!response.ok) {\n if (response.status === 502 || response.status === 504) {\n throw new RechargeRequestError('A gateway error occurred while making the request', response.status);\n } else if (result && result.error) {\n throw new RechargeRequestError(result.error, response.status);\n } else if (result && result.errors) {\n throw new RechargeRequestError(JSON.stringify(result.errors), response.status);\n } else {\n throw new RechargeRequestError('A connection error occurred while making the request');\n }\n }\n\n return result as T;\n}\n"],"names":["session"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["/**\n * Encode a value as a single opaque URL path segment.\n *\n * Resource identifiers interpolated into a request URL must never be able to\n * change the route: without encoding, an id containing `../` or `?` can\n * traverse to a different endpoint or smuggle query parameters (H1-3884884 /\n * SEC-4002). Use this for every caller- or session-supplied path segment.\n *\n * Kept in its own module (not `request.ts`) so it stays available to callers\n * even when tests mock the request module.\n */\nexport function encodePathSegment(value: string | number): string {\n return encodeURIComponent(`${value}`.trim());\n}\n"],"names":[],"mappings":"AAWO,SAAS,kBAAkB,KAAgC,EAAA;AAChE,EAAA,OAAO,kBAAmB,CAAA,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,MAAM,CAAA,CAAA;AAC7C;;;;"}
1
+ {"version":3,"file":"url.js","sources":["../../../src/utils/url.ts"],"sourcesContent":["/**\n * Encode a value as a single opaque URL path segment.\n *\n * Resource identifiers interpolated into a request URL must never be able to\n * change the route: without encoding, an id containing `../` or `?` can\n * traverse to a different endpoint or smuggle query parameters (H1-3884884 /\n * SEC-4002). Use this for every caller- or session-supplied path segment.\n *\n * Kept in its own module (not `request.ts`) so it stays available to callers\n * even when tests mock the request module.\n */\nexport function encodePathSegment(value: string | number): string {\n return encodeURIComponent(`${value}`.trim());\n}\n"],"names":[],"mappings":"AAWO,SAAS,kBAAkB,KAAA,EAAgC;AAChE,EAAA,OAAO,kBAAA,CAAmB,CAAA,EAAG,KAAK,CAAA,CAAA,CAAG,MAAM,CAAA;AAC7C;;"}
package/dist/index.d.ts CHANGED
@@ -1559,7 +1559,7 @@ interface SubscriptionBase {
1559
1559
  bundle_product?: BundleProduct<BundleVariantOptionSourceSubscription> | null;
1560
1560
  customer_entitlements?: CustomerEntitlement[] | null;
1561
1561
  addons?: Addon[] | null;
1562
- expires_at?: IsoDateString | null;
1562
+ expires_at?: (IsoDateString | null)[];
1563
1563
  };
1564
1564
  /** The id of the parent subscription. When present, this subscription will be created as a child and linked to the parent. */
1565
1565
  addon_parent_subscription_id?: number;
@@ -3353,20 +3353,17 @@ interface CollectionListParams extends ListParams<CollectionsSortBy> {
3353
3353
  title?: string;
3354
3354
  }
3355
3355
 
3356
- /** @internal */
3357
3356
  interface CustomerSurveyReason {
3358
3357
  id: number;
3359
3358
  ga_id: string;
3360
3359
  response: string;
3361
3360
  }
3362
- /** @internal */
3363
3361
  interface DelayOption {
3364
3362
  delay: number;
3365
3363
  delay_unit: string;
3366
3364
  label?: string;
3367
3365
  nextShipmentDate?: string;
3368
3366
  }
3369
- /** @internal */
3370
3367
  interface CustomerSurveyOfferResponse {
3371
3368
  claim_id: string;
3372
3369
  ga_id: string;
@@ -3400,7 +3397,6 @@ interface CustomerSurveyOfferResponse {
3400
3397
  };
3401
3398
  offer_type: string;
3402
3399
  }
3403
- /** @internal */
3404
3400
  interface CustomerSurveyOfferParams {
3405
3401
  change_frequency?: {
3406
3402
  frequency: string;
@@ -3420,12 +3416,10 @@ interface CustomerSurveyOfferParams {
3420
3416
  quantity: number;
3421
3417
  };
3422
3418
  }
3423
- /** @internal */
3424
3419
  interface CustomerSurveyReasonsResponse {
3425
3420
  id: number;
3426
3421
  responses: CustomerSurveyReason[];
3427
3422
  }
3428
- /** @internal */
3429
3423
  interface CustomerSurveyOffersResponse {
3430
3424
  response_offer_lookup: {
3431
3425
  response_id: number;
@@ -3970,6 +3964,8 @@ interface CustomerPortalSettings {
3970
3964
  /** @internal */
3971
3965
  enable_affinity_account_page_schema: BooleanNumbers;
3972
3966
  /** @internal */
3967
+ enable_affinity_orders_page_schema: BooleanNumbers;
3968
+ /** @internal */
3973
3969
  customer_portal_page_view_templates_published: string[];
3974
3970
  /** Whether enhanced slots are enabled or not. */
3975
3971
  enable_enhanced_slots: boolean;
@@ -1,2 +1,2 @@
1
- // recharge-client-2.6.0.min.js | MIT License | © Recharge Inc.
2
- (function(N,T){typeof exports=="object"&&typeof module<"u"?module.exports=T():typeof define=="function"&&define.amd?define(T):(N=typeof globalThis<"u"?globalThis:N||self,N.recharge=T())})(this,function(){"use strict";const N="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";function T(t=21){let e="";for(let r=0;r<t;r++)e+=N[Math.random()*64|0];return e}let he={storeIdentifier:"",environment:"prod"};function tt(t){he=t}function b(){return he}const rt=(t,e="")=>{switch(t){case"prod":return"https://api.rechargeapps.com";case"stage":return"https://api.stage.rechargeapps.com";case"preprod":case"prestage":return`${e}/api`}},nt=(t,e="")=>{switch(t){case"prod":return"https://admin.rechargeapps.com";case"stage":return"https://admin.stage.rechargeapps.com";case"preprod":case"prestage":return e}},it=t=>{switch(t){case"prod":case"preprod":return"https://static.rechargecdn.com";case"stage":case"prestage":return"https://static.stage.rechargecdn.com"}},me="/tools/recurring";class F{constructor(e,r){this.name="RechargeRequestError",this.message=e,this.status=r}}function p(t){return encodeURIComponent(`${t}`.trim())}function st(t){const e=r=>encodeURIComponent(r===null?"":String(r));return Object.entries(t).filter(([,r])=>r!==void 0&&!(Array.isArray(r)&&r.length===0)).map(([r,n])=>`${r}=${Array.isArray(n)?n.map(e).join(","):e(n)}`).join("&")}const ot=new Set(["shop_url"]);function a(t,e){return{...t,internalFnCall:t.internalFnCall??e,internalRequestId:t.internalRequestId??T()}}async function V(t,e,r={}){const n=b();return S(t,`${it(n.environment)}/store/${n.storeIdentifier}${e}`,r)}async function c(t,e,{id:r,query:n,data:i,headers:s}={},o){const{environment:l,environmentUri:f,storeIdentifier:_,loginRetryFn:h,__unstable_twoFactorRetryFn:y,appName:v,appVersion:d}=b();if(!_)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const m=o.apiToken;if(!m)throw new Error("No API token defined on session.");const g=rt(l,f),I={"X-Recharge-Access-Token":m,"X-Recharge-Version":"2021-11","X-Recharge-Sdk-Fn":o.internalFnCall,...v?{"X-Recharge-Sdk-App-Name":v}:{},...d?{"X-Recharge-Sdk-App-Version":d}:{},"X-Recharge-Sdk-Version":"2.6.0","X-Request-Id":o.internalRequestId,...o.tmp_fn_identifier?{"X-Recharge-Sdk-Fn-Identifier":o.tmp_fn_identifier}:{},...s||{}},k=n,D={...k?Object.fromEntries(Object.entries(k).filter(([q])=>!ot.has(q))):void 0,shop_url:_};try{return await S(t,`${g}${e}`,{id:r,query:D,data:i,headers:I})}catch(q){if(h&&q instanceof F&&q.status===401)return h().then(O=>{if(O)return S(t,`${g}${e}`,{id:r,query:D,data:i,headers:{...I,"X-Recharge-Access-Token":O.apiToken}});throw q});if(y&&q instanceof F&&q.status===423)return y().then(O=>{if(O)return S(t,`${g}${e}`,{id:r,query:D,data:i,headers:{...I,"X-Recharge-Access-Token":O.apiToken}});throw q});throw q}}async function A(t,e,r={}){return S(t,`${me}${e}`,r)}async function S(t,e,{id:r,query:n,data:i,headers:s}={}){let o=e.trim();if(r&&(o=[o,p(r)].join("/")),n){let y;[o,y]=o.split("?");const v=[y,st(n)].join("&").replace(/^&/,"");o=`${o}${v?`?${v}`:""}`}let l;i&&t!=="get"&&(l=JSON.stringify(i));const f={Accept:"application/json","Content-Type":"application/json","X-Recharge-App":"storefront-client",...s||{}},_=await fetch(o,{method:t,headers:f,body:l});let h;try{h=await _.json()}catch{}if(!_.ok)throw _.status===502||_.status===504?new F("A gateway error occurred while making the request",_.status):h&&h.error?new F(h.error,_.status):h&&h.errors?new F(JSON.stringify(h.errors),_.status):new F("A connection error occurred while making the request");return h}function at(t,e){return c("get","/addresses",{query:e},a(t,"listAddresses"))}async function ct(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{address:n}=await c("get","/addresses",{id:e,query:{include:r?.include}},a(t,"getAddress"));return n}async function dt(t,e){const{address:r}=await c("post","/addresses",{data:{...e,customer_id:t.customerId?Number(t.customerId):void 0}},a(t,"createAddress"));return r}async function J(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{address:i}=await c("put","/addresses",{id:e,data:r,query:n},a(t,"updateAddress"));return i}async function ut(t,e,r,n){return J(a(t,"applyDiscountToAddress"),e,{discounts:[{code:r}]},n)}async function lt(t,e,r){if(e===void 0||e==="")throw new Error("Id is required");return J(a(t,"removeDiscountsFromAddress"),e,{discounts:[]},r)}function pt(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/addresses",{id:e},a(t,"deleteAddress"))}async function _t(t,e){const{address:r}=await c("post","/addresses/merge",{data:e},a(t,"mergeAddresses"));return r}async function ht(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/addresses/${p(e)}/charges/skip`,{data:r},a(t,"skipFutureCharge"));return n}var mt=Object.freeze({__proto__:null,applyDiscountToAddress:ut,createAddress:dt,deleteAddress:pt,getAddress:ct,listAddresses:at,mergeAddresses:_t,removeDiscountsFromAddress:lt,skipFutureCharge:ht,updateAddress:J});async function ft(){const{storefrontAccessToken:t}=b(),e={};t&&(e["X-Recharge-Storefront-Access-Token"]=t);const r=await A("get","/access",{headers:e});return{apiToken:r.api_token,customerId:r.customer_id,message:r.message}}async function gt(t,e){return fe(t,e)}async function fe(t,e){if(!t)throw new Error("Shopify storefront token is required");const{storeIdentifier:r}=b();if(!r)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{api_token:n,customer_id:i,message:s}=await B("post","/shopify_storefront_access",{data:{customer_token:e,storefront_token:t,shop_url:r}});return n?{apiToken:n,customerId:i,message:s}:null}async function wt(t){const{storeIdentifier:e}=b();if(!e)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{api_token:r,customer_id:n,message:i}=await B("post","/shopify_customer_account_api_access",{data:{customer_token:t,shop_url:e}});return r?{apiToken:r,customerId:n,message:i}:null}async function yt(t,e={}){if(!t)throw new Error("Email is required.");const{storeIdentifier:r}=b();if(!r)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{send_email:n,send_sms:i}=e,s=await B("post","/attempt_login",{data:{email:t,shop:r,...n!==void 0?{send_email:n}:{},...i!==void 0?{send_sms:i}:{}}});if(s.errors)throw new Error(s.errors);return s.session_token}async function bt(t,e={}){if(!t)throw new Error("Email is required.");const{storefrontAccessToken:r}=b(),n={};r&&(n["X-Recharge-Storefront-Access-Token"]=r);const{send_email:i,send_sms:s}=e,o=await A("post","/attempt_login",{data:{email:t,...i!==void 0?{send_email:i}:{},...s!==void 0?{send_sms:s}:{}},headers:n});if(o.errors)throw new Error(o.errors);return o.session_token}async function vt(t,e,r){if(!t)throw new Error("Email is required.");if(!e)throw new Error("Session token is required.");if(!r)throw new Error("Code is required.");const{storeIdentifier:n}=b();if(!n)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const i=await B("post","/validate_login",{data:{code:r,email:t,session_token:e,shop:n}});if(i.errors)throw new Error(i.errors);return{apiToken:i.api_token,customerId:i.customer_id}}async function St(t,e,r){if(!t)throw new Error("Email is required.");if(!e)throw new Error("Session token is required.");if(!r)throw new Error("Code is required.");const{storefrontAccessToken:n}=b(),i={};n&&(i["X-Recharge-Storefront-Access-Token"]=n);const s=await A("post","/validate_login",{data:{code:r,email:t,session_token:e},headers:i});if(s.errors)throw new Error(s.errors);return{apiToken:s.api_token,customerId:s.customer_id}}function $t(){const{customerHash:t}=b(),{pathname:e,search:r}=window.location,n=new URLSearchParams(r).get("token"),i=e.split("/").filter(Boolean),s=i.findIndex(l=>l==="portal"),o=s!==-1?i[s+1]:t;if(!n||!o)throw new Error("Not in context of Recharge Customer Portal or URL did not contain correct params");return{customerHash:o,token:n}}async function It(){const{customerHash:t,token:e}=$t(),{storeIdentifier:r}=b(),n=await B("post",`/customers/${p(t)}/access`,{data:{token:e,shop:r}});return{apiToken:n.api_token,customerId:n.customer_id}}async function B(t,e,{id:r,query:n,data:i,headers:s}={}){const{environment:o,environmentUri:l,storefrontAccessToken:f,appName:_,appVersion:h}=b(),y=nt(o,l),v={...f?{"X-Recharge-Storefront-Access-Token":f}:{},..._?{"X-Recharge-Sdk-App-Name":_}:{},...h?{"X-Recharge-Sdk-App-Version":h}:{},"X-Recharge-Sdk-Version":"2.6.0",...s||{}};return S(t,`${y}${e}`,{id:r,query:n,data:i,headers:v})}var qt=Object.freeze({__proto__:null,loginCustomerPortal:It,loginShopifyApi:gt,loginShopifyAppProxy:ft,loginWithShopifyCustomerAccount:wt,loginWithShopifyStorefront:fe,sendPasswordlessCode:yt,sendPasswordlessCodeAppProxy:bt,validatePasswordlessCode:vt,validatePasswordlessCodeAppProxy:St});const ge="XdrError";class u extends Error{constructor(e){super(e),this.name=ge}static[Symbol.hasInstance](e){return e instanceof Error&&e.name===ge}}function we(t){return(4-t%4)%4}function ye(t){if(typeof t!="object"||t===null)return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function be(t,e){if(!Number.isInteger(t)||t<0||t>4294967295)throw new u(`${e}: expected uint32 length`)}function Q(t,e,r,n){if(typeof t!="number"||!Number.isInteger(t)||t<e||t>r)throw new u(`${n}: expected integer in range ${e}..${r}`)}function Et(t,e,r,n){if(typeof t!="bigint"||t<e||t>r)throw new u(`${n}: expected bigint in range ${e}..${r}`)}function Ct(t,e){if(!(t instanceof Uint8Array))throw new u(`${e}: expected Uint8Array`);try{Uint8Array.prototype.at.call(t,0)}catch{throw new u(`${e}: Uint8Array is detached or out of bounds`)}}function kt(t,e){if(!Array.isArray(t))throw new u(`${e}: expected array`)}const ve=1500;class xt{#e=0;#i=0;#t;#n;#s;bytes;constructor(e,r=ve){if(r<0||!Number.isInteger(r))throw new u(`invalid maxDepth ${r}`);if(this.#t=r,!ArrayBuffer.isView(e)||e.BYTES_PER_ELEMENT!==1)throw new TypeError("Reader expects a Uint8Array");this.bytes=Object.getPrototypeOf(e)===Uint8Array.prototype?e:e.byteLength===0?new Uint8Array(0):new Uint8Array(e.buffer,e.byteOffset,e.byteLength),this.#n=this.bytes.buffer?.detached?new DataView(new ArrayBuffer(0)):new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.#s=this.#n.byteLength}#r(e,r){if(this.remaining<e)throw new u(`${r}: incomplete XDR data at offset ${this.#e}, expected ${e} byte(s)`);const n=this.#e;return this.#e+=e,n}get offset(){return this.#e}get remaining(){return this.#s-this.#e}enter(e){if(this.#i+=1,this.#i>this.#t)throw this.#i-=1,new u(`${e}: max recursion depth ${this.#t} exceeded`)}exit(){this.#i-=1}done(e){if(this.remaining!==0)throw new u(`${e}: trailing ${this.remaining} byte(s) after XDR value`)}readBytes(e,r){if(e<0||!Number.isInteger(e))throw new u(`${r}: invalid byte length ${e}`);if(this.remaining<e)throw new u(`${r}: incomplete XDR data at offset ${this.#e}, expected ${e} byte(s)`);const n=this.bytes.slice(this.#e,this.#e+e);if(n.length!==e)throw new u(`${r}: input shrank during decode`);return this.#e+=e,n}skipPadding(e,r){if(e<0||!Number.isInteger(e))throw new u(`${r}: invalid byte length ${e}`);const n=we(e);if(n===0)return;const i=this.#r(n,r);for(let s=0;s<n;s++)if(this.bytes[i+s]!==0)throw this.#e=i,new u(`${r}: non-zero XDR padding`)}readInt32(e){return this.#n.getInt32(this.#r(4,e),!1)}readUint32(e){return this.#n.getUint32(this.#r(4,e),!1)}readBigInt64(e){return this.#n.getBigInt64(this.#r(8,e),!1)}readBigUint64(e){return this.#n.getBigUint64(this.#r(8,e),!1)}readFloat32(e){return this.#n.getFloat32(this.#r(4,e),!1)}readFloat64(e){return this.#n.getFloat64(this.#r(8,e),!1)}}const Pt=8192;class Se{#e=new Uint8Array(Pt);#i=new DataView(this.#e.buffer);#t=0;#n=0;#s;constructor(e=ve){if(e<0||!Number.isInteger(e))throw new u(`invalid maxDepth ${e}`);this.#s=e}get offset(){return this.#t}enter(e){if(this.#n+=1,this.#n>this.#s)throw this.#n-=1,new u(`${e}: max recursion depth ${this.#s} exceeded`)}exit(){this.#n-=1}writeBytes(e){this.#o(e.length),this.#e.set(e,this.#t),this.#t+=e.length}writePadding(e){const r=we(e);r>0&&(this.#o(r),this.#e.fill(0,this.#t,this.#t+r),this.#t+=r)}writeInt32(e){const r=this.#r(4);this.#i.setInt32(r,e,!1),this.#t+=4}writeUint32(e){const r=this.#r(4);this.#i.setUint32(r,e,!1),this.#t+=4}writeBigInt64(e){const r=this.#r(8);this.#i.setBigInt64(r,e,!1),this.#t+=8}writeBigUint64(e){const r=this.#r(8);this.#i.setBigUint64(r,e,!1),this.#t+=8}writeFloat32(e){const r=this.#r(4);this.#i.setFloat32(r,e,!1),this.#t+=4}writeFloat64(e){const r=this.#r(8);this.#i.setFloat64(r,e,!1),this.#t+=8}#r(e){return this.#o(e),this.#t}toUint8Array(){return this.#e.slice(0,this.#t)}#o(e){const r=this.#t+e;if(r<=this.#e.length)return;let n=this.#e.length;for(;n<r;)n*=2;const i=new Uint8Array(n);i.set(this.#e),this.#e=i,this.#i=new DataView(i.buffer)}}const At=4294967295;class x{name;constructor(e=void 0){this.name=e}encode(e,r){const n=new Se(r?.maxDepth);return this._write(e,n,this.name??this.kind),n.toUint8Array()}decode(e,r){const n=new xt(e,r?.maxDepth),i=this._read(n,this.name??this.kind);return n.done(this.name??this.kind),i}validateXdr(e,r){try{return this.decode(e,r),!0}catch(n){if(n instanceof u)return!1;throw n}}validate(e){try{const r=new Se;return this._write(e,r,this.name??this.kind),!0}catch(r){if(r instanceof u)return!1;throw r}}}class Dt extends x{kind="array";element;maxLength;constructor(e,r){super(),be(r,"array maxLength"),this.element=e,this.maxLength=r}_read(e,r){e.enter(r);try{const n=e.readUint32(r);if(n>this.maxLength)throw new u(`${r}: array length ${n} exceeds maximum ${this.maxLength}`);if(n>e.remaining)throw new u(`${r}: array length ${n} exceeds remaining ${e.remaining} byte(s)`);return Tt(e,n,this.element,r)}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(kt(e,n),e.length>this.maxLength)throw new u(`${n}: array length ${e.length} exceeds maximum ${this.maxLength}`);r.writeUint32(e.length),Ft(e,r,this.element,n)}finally{r.exit()}}}function Ot(t,e){return new Dt(t,e)}function Tt(t,e,r,n){const i=[];for(let s=0;s<e;s+=1){const o=t.offset,l=r._read(t,`${n}[${s}]`);if(t.offset===o)throw new u(`${n}[${s}]: element type '${r.name??r.kind}' consumed no input; an array element must encode to at least one byte`);i.push(l)}return i}function Ft(t,e,r,n){let i=0;for(const s of t){const o=e.offset;if(r._write(s,e,`${n}[${i}]`),e.offset===o)throw new u(`${n}[${i}]: element type '${r.name??r.kind}' encoded to zero bytes; an array element must encode to at least one byte`);i+=1}}const Rt=new Set(["__proto__","name","kind","encode","decode","validate","_read","_write","nameByValue"]);class Nt extends x{kind="enum";nameByValue;#e=new Set;constructor(e,r){super(e);const n=new Map;for(const[i,s]of Object.entries(r)){if(Q(s,-2147483648,2147483647,`${e}.${i}`),this.#e.has(s))throw new u(`${e}: duplicate enum value ${s}`);this.#e.add(s),n.set(s,i)}this.nameByValue=n}_read(e,r){const n=e.readInt32(r);if(!this.#e.has(n))throw new u(`${r}: unknown enum value ${n}`);return n}_write(e,r,n){if(typeof e!="number"||!this.#e.has(e))throw new u(`${n}: unknown enum value ${String(e)}`);r.writeInt32(e)}}function Bt(t,e){for(const n of Object.getOwnPropertyNames(e))if(Rt.has(n))throw new u(`${t}: enum member name ${n} collides with reserved property`);const r=new Nt(t,e);return Object.assign(r,e)}class Mt extends x{kind="int32";_read(e,r){return e.readInt32(r)}_write(e,r,n){Q(e,-2147483648,2147483647,n),r.writeInt32(e)}}function $e(){return new Mt}class jt extends x{constructor(e){super(),this.maxLength=e,be(e,"string maxLength")}maxLength;kind="string";_read(e,r){const n=e.readUint32(r);if(n>this.maxLength)throw new u(`${r}: string byte length ${n} exceeds maximum ${this.maxLength}`);const i=e.readBytes(n,r);return e.skipPadding(n,r),i}_write(e,r,n){if(Ct(e,n),e.length>this.maxLength)throw new u(`${n}: string byte length ${e.length} exceeds maximum ${this.maxLength}`);r.writeUint32(e.length),r.writeBytes(e),r.writePadding(e.length)}}function Ut(t){return new jt(t)}class Lt extends x{kind="struct";entries;constructor(e,r){if(super(e),Object.getOwnPropertyNames(r).includes("__proto__"))throw new u(`${e}: struct field name '__proto__' is not allowed`);this.entries=Object.entries(r)}_read(e,r){e.enter(r);try{const n={};for(const[i,s]of this.entries)n[i]=s._read(e,`${r}.${i}`);return n}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(!ye(e))throw new u(`${n}: expected plain object`);const i=e;for(const[s,o]of this.entries){if(!Object.prototype.hasOwnProperty.call(i,s))throw new u(`${n}.${s}: missing struct field`);o._write(i[s],r,`${n}.${s}`)}}finally{r.exit()}}}function Ie(t,e){return new Lt(t,e)}class Vt extends x{kind="uint32";_read(e,r){return e.readUint32(r)}_write(e,r,n){Q(e,0,4294967295,n),r.writeUint32(e)}}function qe(){return new Vt}class zt extends x{kind="uint64";_read(e,r){return e.readBigUint64(r)}_write(e,r,n){Et(e,0n,(1n<<64n)-1n,n),r.writeBigUint64(e)}}function z(){return new zt}const Z="default";class Xt extends x{kind="union";switchOn;cases;defaultArm;switchKey;#e=new Map;constructor(e,r,n,i,s){if(super(e),s==="__proto__")throw new u(`${e}: switchKey '__proto__' is not allowed`);if(this.switchOn=r,this.cases=n,this.defaultArm=i,this.switchKey=s,n.length===0&&i===void 0)throw new u(`${e}: union needs at least one case or a default arm`);const o=new Set;for(const l of n){if(!r.validate(l.discriminant))throw new u(`${e}.${l.name}: case discriminator ${String(l.discriminant)} is not a valid ${r.name??r.kind} value`);if(o.has(l.name))throw new u(`${e}: duplicate union case name ${l.name}`);if(o.add(l.name),this.#e.has(l.discriminant))throw new u(`${e}: duplicate union discriminator ${String(l.discriminant)}`);Ee(e,l.name,l.arm,s),this.#e.set(l.discriminant,l)}i!==void 0&&Ee(e,Z,i,s)}_read(e,r){e.enter(r);try{const n=this.switchOn._read(e,`${r}.${this.switchKey}`),i=this.#e.get(n),s=i?.arm??this.defaultArm;if(s===void 0)throw new u(`${r}: no case for union discriminator ${String(n)}`);return Ht(n,s,this.switchKey,e,`${r}.${i?.name??Z}`)}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(!ye(e)||!Object.prototype.hasOwnProperty.call(e,this.switchKey))throw new u(`${n}: expected union object with ${this.switchKey} discriminator`);const i=e,s=i[this.switchKey],o=this.#e.get(s),l=o?.arm??this.defaultArm;if(l===void 0)throw new u(`${n}: no case for union discriminator ${String(s)}`);this.switchOn._write(s,r,`${n}.${this.switchKey}`),Gt(i,l,r,`${n}.${o?.name??Z}`)}finally{r.exit()}}}function Wt(t,e){return{kind:"field",name:t,schema:e}}function ee(t,e,r){return{name:t,discriminant:e,arm:r}}function te(t,e){const r=e.switchKey??"type";return new Xt(t,e.switchOn,e.cases,e.defaultArm,r)}function Ht(t,e,r,n,i){const s={};return s[r]=t,X(e)?(s[e.name]=e.schema._read(n,`${i}.${e.name}`),s):(e._read(n,i),s)}function Gt(t,e,r,n){if(X(e)){if(!Object.prototype.hasOwnProperty.call(t,e.name))throw new u(`${n}.${e.name}: missing union arm payload`);e.schema._write(t[e.name],r,`${n}.${e.name}`);return}e._write(void 0,r,n)}function Ee(t,e,r,n){if(X(r)&&r.name===n)throw new u(`${t}.${e}: union arm payload field must not be named ${n}`);if(X(r)&&r.name==="__proto__")throw new u(`${t}.${e}: union arm payload field name '__proto__' is not allowed`)}function X(t){return"schema"in t}class Kt extends x{kind="void";_read(){}_write(e,r,n){if(e!==void 0)throw new u(`${n}: expected void`)}}function Ce(){return new Kt}var re=(t,e,r)=>{if(!e.has(t))throw TypeError("Cannot "+r)},w=(t,e,r)=>(re(t,e,"read from private field"),r?r.call(t):e.get(t)),P=(t,e,r)=>{if(e.has(t))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(t):e.set(t,r)},ne=(t,e,r,n)=>(re(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),$=(t,e,r)=>(re(t,e,"access private method"),r),E,C,M,ie,ke,se,xe,W,oe,R,j,U,H;const Yt=new TextEncoder,Pe={v:0};function Jt(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e)}const ae=Bt("EnvelopeType",{envelopeTypeBundle:0}),Qt=te("BundleItemExt",{switchOn:$e(),switchKey:"v",cases:[ee("v0",0,Ce())]}),Zt=Ie("BundleItem",{collectionId:z(),productId:z(),variantId:z(),sku:Ut(At),quantity:qe(),ext:Qt}),er=te("BundleExt",{switchOn:$e(),switchKey:"v",cases:[ee("v0",0,Ce())]}),tr=Ie("Bundle",{variantId:z(),items:Ot(Zt,500),version:qe(),ext:er}),rr=te("BundleEnvelope",{switchOn:ae,switchKey:"type",cases:[ee("envelopeTypeBundle",ae.envelopeTypeBundle,Wt("v1",tr))]});function nr(t){const e={type:ae.envelopeTypeBundle,v1:{variantId:BigInt(t.variantId.toString()),items:t.items.map(r=>({collectionId:BigInt(r.collectionId.toString()),productId:BigInt(r.productId.toString()),variantId:BigInt(r.variantId.toString()),sku:Yt.encode(r.sku||""),quantity:r.quantity,ext:Pe})),version:t.version||Math.floor(Date.now()/1e3),ext:Pe}};return Jt(rr.encode(e))}class ir{constructor(e,r){P(this,ie),P(this,se),P(this,W),P(this,R),P(this,U),P(this,E,void 0),P(this,C,void 0),P(this,M,void 0),ne(this,E,$(this,ie,ke).call(this,r)),ne(this,M,$(this,se,xe).call(this,r)),ne(this,C,e)}isInitialDataValid(){if(!w(this,M))throw"Bundle data does not exist for the given product.";if(!w(this,E))throw"Bundle settings do not exist for the given product.";if(!Array.isArray(w(this,C))||!w(this,C).length)throw"No bundle selection items provided.";return!0}isValidVariant(e){if(!w(this,E)?.variantsSettings[e])throw`The ${e} bundle variant is invalid.`;return!0}isSelectionInVariantRange(e){const r=w(this,C).reduce((i,s)=>i+s.quantity,0),n=w(this,E)?.variantsSettings[e].ranges||[];if(!$(this,W,oe).call(this,n,r))throw"The total number of products does not fall within the required variant range.";return!0}areItemsInMaxPerItemBound(){const e=w(this,E)?.bundleSettings.maxPerItem||0,r=w(this,C).filter(({quantity:n})=>n>e);if(e&&r.length)throw`The selected products (${$(this,R,j).call(this,r.map(({externalProductId:n})=>n)).join(", ")}) exceed the maximum limit of ${e} items per product.`;return!0}areSelectedCollectionsValid(e){const r=w(this,E)?.variantsSettings[e]?.optionSources,n=w(this,C).filter(({collectionId:i})=>!r||!$(this,U,H).call(this,r,i));if(n.length)throw`The collections (${$(this,R,j).call(this,n.map(({collectionId:i})=>i)).join(", ")}) are no longer valid for the bundle variant (${e}).`;return!0}areItemsQuantitiesValidForTheCollection(e){const r=w(this,C).reduce((s,o)=>(s[o.collectionId]=o.quantity+(s[o.collectionId]||0),s),Object.create(null)),n=w(this,E)?.variantsSettings[e],i=Object.values(n?.optionSources||{}).filter(s=>{const o=r[s.collectionId]||0;return!$(this,W,oe).call(this,[s],o)});if(!n||i.length)throw`The selection exceeds the limits for the collections (${$(this,R,j).call(this,i.map(({collectionId:s})=>s)).join(", ")}).`;return!0}areSelectedProductsValid(e){const r=w(this,E)?.variantsSettings[e]?.optionSources||{},n=Object.values(r).reduce((s,o)=>{const l=w(this,M)?.collections[o.collectionId];return l&&(s[o.collectionId]=l),s},Object.create(null));if(!Object.values(n).length)throw`No collections found for the bundle variant (${e}).`;const i=w(this,C).filter(({externalProductId:s,collectionId:o})=>$(this,U,H).call(this,n,o)?!$(this,U,H).call(this,n[o].products,s):!0);if(i.length)throw`The products (${$(this,R,j).call(this,i.map(({externalProductId:s})=>s)).join(", ")}) are no longer valid for the bundle product.`;return!0}isBundleSelectionValid(e){return this.isInitialDataValid(),this.isValidVariant(e),this.isSelectionInVariantRange(e),this.areItemsInMaxPerItemBound(),this.areSelectedCollectionsValid(e),this.areItemsQuantitiesValidForTheCollection(e),this.areSelectedProductsValid(e),!0}}E=new WeakMap,C=new WeakMap,M=new WeakMap,ie=new WeakSet,ke=function(t){try{const e=t.bundle_settings;return{bundleSettings:{maxPerItem:e.max_quantity_per_variant,isCustomizable:e.is_customizable},variantsSettings:e.variants.reduce((r,n)=>{if(!n.enabled)return r;let i=[{min:n.items_count,max:n.items_count}];return n.items_count||(i=n.ranges.map(({quantity_max:s,quantity_min:o})=>({min:o,max:s}))),r[n.external_variant_id]={externalVariantId:n.external_variant_id,optionSources:n.option_sources.reduce((s,o)=>(s[o.option_source_id]={min:o.quantity_min,max:o.quantity_max,collectionId:o.option_source_id},s),Object.create(null)),ranges:i},r},Object.create(null))}}catch{return null}},se=new WeakSet,xe=function(t){try{const e=Object.values(t.collections).reduce((r,n)=>(r[n.id]={...n,products:n.products.reduce((i,s)=>(i[s.id]=s,i),Object.create(null))},r),Object.create(null));return{...t,collections:e}}catch{return null}},W=new WeakSet,oe=function(t,e){return!!t.filter(({min:r,max:n})=>{const i=r??e,s=n??e;return i<=e&&e<=s}).length},R=new WeakSet,j=function(t){return Array.from(new Set(t))},U=new WeakSet,H=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};const sr="/bundling-storefront-manager";function Ae(t){return nr({variantId:t.externalVariantId,version:0,items:t.selections.map(e=>({collectionId:e.collectionId,productId:e.externalProductId,variantId:e.externalVariantId,quantity:e.quantity,sku:""}))})}async function or(t){const e=b(),r=await ce(t);if(r!==!0)throw new Error(r);const n=Ae(t);try{const i=await A("post",`${sr}/api/v1/bundles`,{data:{bundle:n},headers:{Origin:`https://${e.storeIdentifier}`}});if(!i.id||i.code!==200)throw new Error(`1: failed generating rb_id: ${JSON.stringify(i)}`);return i.id}catch(i){throw new Error(`2: failed generating rb_id ${i}`)}}async function ar(t,e){const r=await ce(e);if(r!==!0)throw new Error(r);const n=Ae(e);try{const i=await c("post","/bundle_selections/bundle_id",{data:{bundle:n}},a(t,"getBundleSelectionId"));if(!i.id||i.code!==200)throw new Error(`1: failed generating rb_id: ${JSON.stringify(i)}`);return i.id}catch(i){throw new Error(`2: failed generating rb_id ${i}`)}}function cr(t,e){const r=De(t);if(r!==!0)throw new Error(`Dynamic Bundle is invalid. ${r}`);const n=`${T(9)}:${t.externalProductId}`;return t.selections.map(i=>{const s={id:i.externalVariantId,quantity:i.quantity,properties:{_rc_bundle:n,_rc_bundle_variant:t.externalVariantId,_rc_bundle_parent:e,_rc_bundle_collection_id:i.collectionId}};return i.sellingPlan?s.selling_plan=i.sellingPlan:i.shippingIntervalFrequency&&(s.properties.shipping_interval_frequency=i.shippingIntervalFrequency,s.properties.shipping_interval_unit_type=i.shippingIntervalUnitType,s.id=`${i.discountedVariantId}`),s})}async function ce(t){try{return t?t.selections.length===0?"No selections defined":!0:"Bundle is not defined"}catch(e){return`Error fetching bundle settings: ${e}`}}async function dr(t){try{const e=await A("get",`/bundle-data/${p(t.externalProductId)}`);return{valid:new ir(t.selections,e).isBundleSelectionValid(t.externalVariantId)}}catch(e){return{valid:!1,error:String(e)}}}const ur={day:["day","days","Days"],days:["day","days","Days"],Days:["day","days","Days"],week:["week","weeks","Weeks"],weeks:["week","weeks","Weeks"],Weeks:["week","weeks","Weeks"],month:["month","months","Months"],months:["month","months","Months"],Months:["month","months","Months"]};function De(t){if(!t)return"No bundle defined.";if(t.selections.length===0)return"No selections defined.";const{shippingIntervalFrequency:e,shippingIntervalUnitType:r}=t.selections.find(n=>n.shippingIntervalFrequency||n.shippingIntervalUnitType)||{};if(e||r){if(!e||!r)return"Shipping intervals do not match on selections.";{const n=ur[r];for(let i=0;i<t.selections.length;i++){const{shippingIntervalFrequency:s,shippingIntervalUnitType:o}=t.selections[i];if(s&&s!==e||o&&!n.includes(o))return"Shipping intervals do not match on selections."}}}return!0}async function lr(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{bundle_selection:r}=await c("get","/bundle_selections",{id:e},a(t,"getBundleSelection"));return r}function pr(t,e){return c("get","/bundle_selections",{query:e},a(t,"listBundleSelections"))}async function _r(t,e){const{bundle_selection:r}=await c("post","/bundle_selections",{data:e},a(t,"createBundleSelection"));return r}async function hr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{bundle_selection:n}=await c("put","/bundle_selections",{id:e,data:r},a(t,"updateBundleSelection"));return n}function mr(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/bundle_selections",{id:e},a(t,"deleteBundleSelection"))}async function fr(t,e,r,n){if(e===void 0||e==="")throw new Error("Purchase item ID is required");const{subscription:i}=await c("put","/bundles",{id:e,data:r,query:n},a(t,"updateBundle"));return i}var gr=Object.freeze({__proto__:null,createBundleSelection:_r,deleteBundleSelection:mr,getBundleId:or,getBundleSelection:lr,getBundleSelectionId:ar,getDynamicBundleItems:cr,listBundleSelections:pr,updateBundle:fr,updateBundleSelection:hr,validateBundle:ce,validateBundleSelection:dr,validateDynamicBundle:De});const wr=t=>{const e=t.layout_settings.addons,r=t.layout_settings.crossSells,n=t.customization_window,i=t.layout_settings?.defaultVariantId??t.default_bundle_variant_id,s=t.layout_settings.defaultFrequency,o=t.layout_settings.addToCartCallback;return{default_variant_id:i?String(i):null,is_customizable:t.is_customizable,price_rule:String(t.price_rule).toUpperCase(),customization_window:n?{active_days:n,disabled_message:t.customization_window_disabled_message||""}:null,addons:e.collectionId?{collection_id:e.collectionId,collection_handle:e.collectionHandle}:null,cross_sells:r.collectionId?{collection_id:e.collectionId,collection_handle:e.collectionHandle}:null,default_selling_plan_id:s||null,collapsible_collections:t.layout_settings.collapsibleSections,max_quantity_per_variant:t.max_quantity_per_variant,show_product_variants:t.layout_settings.showVariants,product_details_modal_enabled:t.layout_settings.learnMoreModal,addToCartBehavior:{type:o.type==="none"?"cart_page":o.type,value:o.value}}},yr=t=>t.tiered_discounts.length===0?null:{tiered_discounts:t.tiered_discounts},G=t=>({id:t.id,name:t.name,options:t.options.map(e=>({name:e.name,value:e.value})),recurring_deliveries:t.recurring_deliveries,price_adjustments:t.price_adjustments.map(({value:e,value_type:r})=>({value:e,value_type:r}))}),Oe=t=>({name:t.name,options:t.options.map(e=>({name:e.name,values:e.values})),selling_plans:t.selling_plans.map(G)}),Te=t=>({id:String(t.id),title:t.title,price:t.price,compare_at_price:t.compare_at_price,options:t.options,available_for_sale:t.available}),de=t=>t==null||typeof t=="string"?t:"src"in t?t.src:null,Fe=t=>({id:String(t.id),title:t.title,description:t.description,available_for_sale:t.available,featured_image:de(t.featured_image),images:t.images,requires_selling_plan:t.requires_selling_plan,selling_plan_groups:t.selling_plan_groups.map(Oe)}),Re=t=>{const e=vr(t.selling_plan_groups);return{...Fe(t),handle:t.handle,tags:t.tags,price_range:{min:t.price_min,max:t.price_max},compare_at_price_range:{min:t.compare_at_price_min,max:t.compare_at_price_max},options:t.options,variants:t.variants.map(r=>({...Te(r),selling_plan_allocations:r.selling_plan_allocations.map(n=>({price:n.price,compare_at_price:n.compare_at_price,selling_plan:G(e[`${n.selling_plan_group_id}-${n.selling_plan_id}`])})),option1:r.option1,option2:r.option2,option3:r.option3,sku:r.sku||"",requires_shipping:r.requires_shipping,taxable:r.taxable,featured_image:de(r.featured_image),public_title:r.public_title,requires_selling_plan:r.requires_selling_plan}))}},br=({items_count:t,ranges:e})=>e.length>0?e.map(({quantity_max:r,quantity_min:n})=>({min:n,max:r})):[{min:t,max:t}],vr=t=>t.reduce((e,r)=>(r.selling_plans.forEach(n=>{const i=`${r.id}-${n.id}`;e[i]=n}),e),{}),Sr=t=>Array.isArray(t)?t:[];function ue(t){const e=wr(t.bundle_settings),r=t.variants.reduce((n,i)=>(n[i.id]=i,n),{});return{id:String(t.id),title:t.title,description:t.description||null,handle:t.handle,options:t.options.map(n=>({name:n.name,position:n.position,values:n.values})),default_variant_id:e.default_variant_id,default_selling_plan_id:e.default_selling_plan_id?Number(e.default_selling_plan_id):null,available_for_sale:t.available,requires_selling_plan:t.requires_selling_plan,bundle_settings:{is_customizable:e.is_customizable,price_rule:e.price_rule,customization_window:e.customization_window,max_quantity_per_variant:e.max_quantity_per_variant,collapsible_collections:e.collapsible_collections,show_product_variants:e.show_product_variants,product_details_modal_enabled:e.product_details_modal_enabled,show_variants_as_individual_products:t.bundle_settings.settings.display_variants_as_separate_products_in_list,post_add_to_cart_behavior:e.addToCartBehavior},variants:t.bundle_settings.variants.filter(({enabled:n})=>n).map((n,i)=>{const s=r[String(n.external_variant_id)];return{id:String(n.external_variant_id),title:s.title,price:s.price,compare_at_price:s.compare_at_price,image:s.image||"",available_for_sale:s.available,options:s.options,requires_selling_plan:s.requires_selling_plan,selling_plan_allocations:s.selling_plan_allocations.map(o=>({price:o.price,compare_at_price:o.compare_at_price,selling_plan:G(o.selling_plan)})),ranges:br(n),collections:n.option_sources.map(o=>({id:o.option_source_id,source_platform:"shopify",min:o.quantity_min||0,max:o.quantity_max,position:o.position})),default_selections:n.selection_defaults.map(o=>({quantity:o.quantity,product:{id:String(o.product.id),handle:o.handle,title:o.product.title,description:o.product.description,images:o.product.images},variant:{id:o.external_variant_id,title:o.variant.title,featured_image:de(o.variant.featured_image),sku:o.sku||""}})),position:i}}),selling_plan_groups:t.selling_plan_groups.map(Oe),collections:Object.values(t.collections).reduce((n,i)=>(Array.isArray(i.products)&&(n[String(i.id)]={id:String(i.id),title:i.title,handle:i.handle,products:i.products.map(Re)}),n),{}),addons:t.addons.products.length?{collection_id:e.addons?.collection_id||"",collection_handle:e.addons?.collection_handle||"",products:t.addons.products.map(n=>({...Fe(n),price_range:{min:n.price,max:n.price},compare_at_price_range:{min:n.compare_at_price||0,max:n.compare_at_price},variants:n.variants.map(i=>({...Te(i),image:i.image,selling_plan_allocations:i.selling_plan_allocations.map(s=>({price:s.price,compare_at_price:s.compare_at_price,selling_plan:G(s.selling_plan)}))}))}))}:null,cross_sells:t.cross_sells.products.length?{collection_id:e.cross_sells?.collection_id||"",collection_handle:e.cross_sells?.collection_handle||"",products:t.cross_sells.products.map(Re)}:null,incentives:yr(t.incentives),filters:Sr(t.filters),templates:t.bundle_settings.layout_settings.templates||null,globalStyles:t.bundle_settings.layout_settings.globalStyles||null}}async function $r(t,e){return e?.source==="shopify_storefront"?qr():Ir(t,e?.country_code)}async function Ir(t,e){const{appName:r,appVersion:n}=b(),i={"X-Recharge-Sdk-Fn":"loadFromOnlineStore","X-Recharge-Sdk-Version":"2.6.0",...r?{"X-Recharge-Sdk-App-Name":r}:{},...n?{"X-Recharge-Sdk-App-Version":n}:{}};if(!e){const o=await A("get",`/bundle-data/${p(t)}`,{headers:i});return ue(o)}const s=new FormData;s.append("form_type","localization"),s.append("_method","put"),s.append("return_to",`${me}/bundle-data/${t}`),s.append("country_code",e);try{const o=await S("post","/localization",{headers:{"Content-Type":"multipart/form-data",...i},data:s});return ue(o)}catch{const o=await A("get",`/bundle-data/${p(t)}`,{headers:i});return ue(o)}}async function qr(t,e){if(!b().storeIdentifier)throw new Error("Store identifier is required for Shopify Storefront API requests");return{}}var Er=Object.freeze({__proto__:null,loadBundleData:$r});function Cr(t){try{return JSON.parse(t)}catch{return t}}function kr(t){return Object.entries(t).reduce((e,[r,n])=>({...e,[r]:Cr(n)}),{})}const Ne=t=>typeof t=="string"?t!=="0"&&t!=="false":!!t;function le(t,e){const r=new Set(e),n={};for(const i of Object.keys(t))r.has(i)||(n[i]=t[i]);return n}function Be(t){const e=kr(t),r=e.auto_inject===void 0?!0:e.auto_inject,n=e.display_on??[],i=e.first_option==="autodeliver";return{...le(e,["display_on","first_option"]),auto_inject:r,valid_pages:n,is_subscription_first:i,autoInject:r,validPages:n,isSubscriptionFirst:i}}function Me(t){const e=t.subscription_options?.storefront_purchase_options==="subscription_only";return{...t,is_subscription_only:e,isSubscriptionOnly:e}}function xr(t){return t.map(e=>{const r={};return Object.entries(e).forEach(([n,i])=>{Object.defineProperty(r,n,{value:Me(i),enumerable:!0,writable:!0,configurable:!0})}),r})}const pe="2020-12",Pr={store_currency:{currency_code:"USD",currency_symbol:"$",decimal_separator:".",thousands_separator:",",currency_symbol_location:"left"}},L=new Map;function K(t,e){return L.has(t)||L.set(t,e()),L.get(t)}async function _e(t,e){if(t===void 0||t==="")throw new Error("ID is required");const r=e?.version??"2020-12",{product:n}=await K(`product.${t}.${r}`,()=>V("get",`/product/${r}/${p(t)}.json`));return r==="2020-12"?Me(n):n}async function je(){return await K("storeSettings",()=>V("get",`/${pe}/store_settings.json`).catch(()=>Pr))}async function Ue(){const{widget_settings:t}=await K("widgetSettings",()=>V("get",`/${pe}/widget_settings.json`));return Be(t)}async function Le(){const{products:t,widget_settings:e,store_settings:r,meta:n}=await K("productsAndSettings",()=>V("get",`/product/${pe}/products.json`));return n?.status==="error"?Promise.reject(n.message):{products:xr(t),widget_settings:Be(e),store_settings:r??{}}}async function Ar(){const{products:t}=await Le();return t}async function Dr(t){const[e,r,n]=await Promise.all([_e(t),je(),Ue()]);return{product:e,store_settings:r,widget_settings:n,storeSettings:r,widgetSettings:n}}async function Or(t){const{bundle_product:e}=await _e(t);return e}async function Ve(){return Array.from(L.keys()).forEach(t=>L.delete(t))}var Tr=Object.freeze({__proto__:null,getCDNBundleSettings:Or,getCDNProduct:_e,getCDNProductAndSettings:Dr,getCDNProducts:Ar,getCDNProductsAndSettings:Le,getCDNStoreSettings:je,getCDNWidgetSettings:Ue,resetCDNCache:Ve});async function Fr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("get","/charges",{id:e,query:{include:r?.include}},a(t,"getCharge"));return n}function Rr(t,e){return c("get","/charges",{query:e},a(t,"listCharges"))}async function Nr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/charges/${p(e)}/apply_discount`,{data:{discount_code:r}},a(t,"applyDiscountToCharge"));return n}async function Br(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{charge:r}=await c("post",`/charges/${p(e)}/remove_discount`,{},a(t,"removeDiscountsFromCharge"));return r}async function Mr(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");if(r===void 0||r.length===0)throw new Error("Purchase item IDs are required");const{charge:i}=await c("post",`/charges/${p(e)}/skip`,{query:n,data:{purchase_item_ids:r.map(s=>Number(s))}},a(t,"skipCharge"));return i}async function jr(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");if(r===void 0||r.length===0)throw new Error("Purchase item IDs are required");const{charge:i}=await c("post",`/charges/${p(e)}/unskip`,{query:n,data:{purchase_item_ids:r.map(s=>Number(s))}},a(t,"unskipCharge"));return i}async function Ur(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{charge:r}=await c("post",`/charges/${p(e)}/process`,{},a(t,"processCharge"));return r}async function Lr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/charges/${p(e)}/change_next_charge_date`,{data:{next_charge_date:r}},a(t,"rescheduleCharge"));return n}var Vr=Object.freeze({__proto__:null,applyDiscountToCharge:Nr,getCharge:Fr,listCharges:Rr,processCharge:Ur,removeDiscountsFromCharge:Br,rescheduleCharge:Lr,skipCharge:Mr,unskipCharge:jr});async function ze(t,e){if(!["2020-12","2022-06"].includes(e.format_version))throw new Error("Missing or unsupported format_version.");return c("get","/product_search",{query:e,headers:{"X-Recharge-Version":"2021-01"}},a(t,"productSearch"))}var zr=Object.freeze({__proto__:null,productSearch:ze});async function Xe(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{collection:r}=await c("get","/collections",{id:e},a(t,"getCollection"));return r}function Xr(t,e){return c("get","/collections",{query:e},a(t,"listCollections"))}async function Wr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");if(!["2020-12","2022-06"].includes(r.format_version))throw new Error("Missing or unsupported format_version.");const n=a(t,"listCollectionProducts"),[{sort_order:i,manual_sort_order:s},{products:o}]=await Promise.all([Xe(n,e),ze(n,{...r,collection_ids:[e],limit:250})]);if(i==="manual")return{products:s.reduce((l,f)=>{const _=o.find(h=>h.external_product_id===f);return _&&l.push(_),l},[])};{const l=Hr(i);return{products:o.slice().sort(l)}}}function We(t,e){const r=t.external_created_at,n=e.external_created_at;return r<n?-1:n>r?1:0}function He(t,e){const r=t.external_product_id,n=e.external_product_id;return r<n?-1:n>r?1:0}function Ge(t,e){const r=t.title.toLowerCase(),n=e.title.toLowerCase();return r<n?-1:n>r?1:0}function Hr(t){switch(t){case"created_at-asc":return We;case"created_at-desc":return(e,r)=>We(r,e);case"id-asc":return He;case"id-desc":return(e,r)=>He(r,e);case"title-asc":return Ge;case"title-desc":return(e,r)=>Ge(r,e)}}var Gr=Object.freeze({__proto__:null,getCollection:Xe,listCollectionProducts:Wr,listCollections:Xr});async function Kr(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer:n}=await c("get","/customers",{id:r,query:{include:e?.include}},a(t,"getCustomer"));return n}async function Ke(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer:n}=await c("put","/customers",{id:r,data:e},a(t,"updateCustomer"));return n}async function Yr(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{deliveries:n}=await c("get",`/customers/${p(r)}/delivery_schedule`,{query:e},a(t,"getDeliverySchedule"));return n}async function Y(t,e){return c("get","/portal_access",{query:e},a(t,"getCustomerPortalAccess"))}async function Jr(t,e,r){if(e===void 0||e==="")throw new Error("Subscription ID is required");const{base_url:n,customer_hash:i,temp_token:s}=await Y(a(t,"getActiveChurnLandingPageURL"));return`${n.replace("portal","pages")}${i}/subscriptions/${e}/cancel?token=${s}&subscription=${e}&redirect_to=${encodeURIComponent(r)}`}async function Qr(t){const{base_url:e,customer_hash:r,temp_token:n}=await Y(a(t,"getFailedPaymentMethodRecoveryLandingPageURL"));return`${e.replace("portal","pages")}account/payment-methods?token=${n}&hash=${r}`}async function Zr(t,e,r){if(e===void 0||e==="")throw new Error("Gift ID is required");const{base_url:n,customer_hash:i,temp_token:s}=await Y(a(t,"getGiftRedemptionLandingPageURL"));return`${n.replace("portal","pages")}${i}/gifts/${e}?token=${s}&redirect_to=${encodeURIComponent(r)}`}const Ye={SHOPIFY_UPDATE_PAYMENT_INFO:{type:"email",template_type:"shopify_update_payment_information"},SHOPIFY_MIGRATE_PAYMENT_INFO:{type:"email",template_type:"shopify_migrate_payment_information"}};async function en(t,e,r){const n=t.customerId;if(!n)throw new Error("Not logged in.");if(!Object.prototype.hasOwnProperty.call(Ye,e))throw new Error("Notification not supported.");const i=Ye[e];return c("post",`/customers/${p(n)}/notifications`,{data:{...i,template_vars:r}},a(t,"sendCustomerNotification"))}async function tn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{credit_summary:n}=await c("get",`/customers/${p(r)}/credit_summary`,{query:{include:e?.include}},a(t,"getCreditSummary"));return n}var rn=Object.freeze({__proto__:null,getActiveChurnLandingPageURL:Jr,getCreditSummary:tn,getCustomer:Kr,getCustomerPortalAccess:Y,getDeliverySchedule:Yr,getFailedPaymentMethodRecoveryLandingPageURL:Qr,getGiftRedemptionLandingPageURL:Zr,sendCustomerNotification:en,updateCustomer:Ke});async function nn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{credit_summary:n}=await c("get",`/customers/${p(r)}/credit_summary`,{query:{include:e?.include,presentment_currency_code:e?.presentment_currency_code}},a(t,"getCreditSummary"));return n}function sn(t,{recurring:e}){if(!t.customerId)throw new Error("Not logged in.");const r={};return e!==void 0&&(r.apply_credit_to_next_recurring_charge=e),Ke(a(t,"setApplyCreditsToNextCharge"),r)}async function on(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer_id:n,...i}=e??{};return await c("get","/credit_accounts",{query:{...i,customer_id:r}},a(t,"listCreditAccounts"))}var an=Object.freeze({__proto__:null,getCreditSummary:nn,listCreditAccounts:on,setApplyCreditsToNextCharge:sn});async function cn(t,e,r){return await c("post","/customer_surveys/cancellation_prevention",{data:{customer_id:e,subscription_id:r}},a(t,"getCustomerSurveyReasons"))}async function dn(t,e,r,n){return await c("post",`/customer_surveys/${p(r)}/customer_response`,{data:{customer_id:e,response_id:n}},a(t,"getCustomerSurveyOffers"))}async function un(t,e){return await c("post","/offers/claim",{data:e},a(t,"claimOfferCustomerSurvey")),{}}var ln=Object.freeze({__proto__:null,claimOfferCustomerSurvey:un,getCustomerSurveyOffers:dn,getCustomerSurveyReasons:cn});async function pn(t,e,r,n){if(e===void 0||e==="")throw new Error("Subscription ID is required");return c("post",`/flows/customer_portal_flow/subscription/${p(e)}`,{query:{action:r,flow_id:n?.flow_id},data:{}},a(t,"triggerCustomerPortalFlow"))}var _n=Object.freeze({__proto__:null,triggerCustomerPortalFlow:pn});function hn(t,e){if(!t.customerId)throw new Error("Not logged in.");return c("get","/gift_purchases",{query:e},a(t,"listGiftPurchases"))}async function mn(t,e){if(!t.customerId)throw new Error("Not logged in.");if(e===void 0||e==="")throw new Error("ID is required");const{gift_purchase:r}=await c("get","/gift_purchases",{id:e},a(t,"getGiftPurchase"));return r}var fn=Object.freeze({__proto__:null,getGiftPurchase:mn,listGiftPurchases:hn});function gn(t,e){if(!t.customerId)throw new Error("Not logged in.");return c("get","/incentives/tiered_discounts",{query:e},a(t,"listTieredDiscounts"))}async function wn(t,e){if(!t.customerId)throw new Error("Not logged in.");if(e===void 0||e==="")throw new Error("ID is required");const{tiered_discount:r}=await c("get",`/incentives/tiered_discounts/${p(e)}`,{},a(t,"getTieredDiscount"));return r}function yn(t,e){return c("post","/incentives/tiered_discounts/offers",{data:e},a(t,"getTieredDiscountOffers"))}var bn=Object.freeze({__proto__:null,getTieredDiscount:wn,getTieredDiscountOffers:yn,listTieredDiscounts:gn});async function vn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{membership:r}=await c("get","/memberships",{id:e},a(t,"getMembership"));return r}function Sn(t,e){return c("get","/memberships",{query:e},a(t,"listMemberships"))}async function $n(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/cancel`,{data:r},a(t,"cancelMembership"));return n}async function In(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/activate`,{data:r},a(t,"activateMembership"));return n}async function qn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/change`,{data:r},a(t,"changeMembership"));return n}var En=Object.freeze({__proto__:null,activateMembership:In,cancelMembership:$n,changeMembership:qn,getMembership:vn,listMemberships:Sn});async function Cn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership_program:n}=await c("get","/membership_programs",{id:e,query:{include:r?.include}},a(t,"getMembershipProgram"));return n}function kn(t,e){return c("get","/membership_programs",{query:e},a(t,"listMembershipPrograms"))}var xn=Object.freeze({__proto__:null,getMembershipProgram:Cn,listMembershipPrograms:kn});async function Pn(t,e){const{metafield:r}=await c("post","/metafields",{data:{metafield:e}},a(t,"createMetafield"));return r}async function An(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{metafield:n}=await c("put","/metafields",{id:e,data:{metafield:r}},a(t,"updateMetafield"));return n}function Dn(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/metafields",{id:e},a(t,"deleteMetafield"))}var On=Object.freeze({__proto__:null,createMetafield:Pn,deleteMetafield:Dn,updateMetafield:An});async function Tn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{onetime:r}=await c("get","/onetimes",{id:e},a(t,"getOnetime"));return r}function Fn(t,e){return c("get","/onetimes",{query:e},a(t,"listOnetimes"))}async function Rn(t,e){const{onetime:r}=await c("post","/onetimes",{data:e},a(t,"createOnetime"));return r}async function Nn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{onetime:n}=await c("put","/onetimes",{id:e,data:r},a(t,"updateOnetime"));return n}function Bn(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/onetimes",{id:e},a(t,"deleteOnetime"))}var Mn=Object.freeze({__proto__:null,createOnetime:Rn,deleteOnetime:Bn,getOnetime:Tn,listOnetimes:Fn,updateOnetime:Nn});async function jn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{order:r}=await c("get","/orders",{id:e},a(t,"getOrder"));return r}function Un(t,e){return c("get","/orders",{query:e},a(t,"listOrders"))}async function Ln(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{order:r}=await c("post",`/orders/${p(e)}/delay`,{},a(t,"delayOrder"));return r}var Vn=Object.freeze({__proto__:null,delayOrder:Ln,getOrder:jn,listOrders:Un});async function zn(t,e){return typeof window<"u"&&window.Spreedly?Promise.resolve():new Promise((r,n)=>{if(typeof document>"u"){n(new Error("Document is not available. This function must be called in a browser environment."));return}if(document.querySelector(`script[src="${t}"]`)){const s=()=>{window.Spreedly?r():setTimeout(s,50)};s();return}const i=document.createElement("script");i.src=t,i.integrity=e,i.crossOrigin="anonymous",i.addEventListener("load",()=>{const s=()=>{window.Spreedly?r():setTimeout(s,50)};s()}),i.addEventListener("error",()=>{n(new Error("Failed to load payment iFrame script"))}),document.head.appendChild(i)})}async function Xn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{payment_method:n}=await c("get","/payment_methods",{id:e,query:{include:r?.include}},a(t,"getPaymentMethod"));return n}async function Je(t,e){const{payment_method:r}=await c("post","/payment_methods",{data:{...e,customer_id:t.customerId}},a(t,"createPaymentMethod"));return r}async function Wn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{payment_method:n}=await c("put","/payment_methods",{id:e,data:r},a(t,"updatePaymentMethod"));return n}function Hn(t,e){return c("get","/payment_methods",{query:e},a(t,"listPaymentMethods"))}async function Gn(t,e){const r=await Kn(t,e),n=r.external.environment_key,i=r.payment_method_intent_id,s=r.external_customer_id.ecommerce,o=r.external.resource_url,l=r.external.integrity_hash,f=r.payment_method?.processor_payment_method_token;await zn(o,l);let _=!1,h=null,y=null,v=null;return{mount(d,m){if(typeof window>"u"||!window.Spreedly)throw new Error("Payment script failed to load");window.Spreedly.init(n,{numberEl:d.numberElementId,cvvEl:d.cvvElementId}),window.Spreedly.on("ready",()=>{_=!0,d.styles&&(window.Spreedly.setStyle("number",d.styles),window.Spreedly.setStyle("cvv",d.styles)),d.numberLabel&&window.Spreedly.setLabel("number",d.numberLabel),d.cvvLabel&&window.Spreedly.setLabel("cvv",d.cvvLabel),d.numberPlaceholder&&window.Spreedly.setPlaceholder("number",d.numberPlaceholder),d.cvvPlaceholder&&window.Spreedly.setPlaceholder("cvv",d.cvvPlaceholder),d.numberFormat==="plainFormat"?(d.numberFieldType&&window.Spreedly.setFieldType("number",d.numberFieldType),d.cvvFieldType&&window.Spreedly.setFieldType("cvv",d.cvvFieldType),window.Spreedly.setNumberFormat("plainFormat")):d.numberFormat==="maskedFormat"?(window.Spreedly.setFieldType("cvv","text"),window.Spreedly.setFieldType("number","text"),window.Spreedly.setNumberFormat("maskedFormat")):d.numberFormat==="prettyFormat"?(d.numberFieldType==="text"||d.numberFieldType==="tel"?window.Spreedly.setFieldType("number",d.numberFieldType):window.Spreedly.setFieldType("number","tel"),d.cvvFieldType==="text"||d.cvvFieldType==="tel"?window.Spreedly.setFieldType("cvv",d.cvvFieldType):window.Spreedly.setFieldType("cvv","tel"),window.Spreedly.setNumberFormat("prettyFormat")):(d.numberFieldType&&window.Spreedly.setFieldType("number",d.numberFieldType),d.cvvFieldType&&window.Spreedly.setFieldType("cvv",d.cvvFieldType)),m?.onReady?.()}),window.Spreedly.on("fieldEvent",(g,I,k,D)=>{m?.onFieldEvent?.(g,I,k,D)}),window.Spreedly.on("errors",g=>{m?.onErrors?.(g)}),window.Spreedly.on("paymentMethod",(g,I)=>{h=g,m?.onPaymentMethod?.(g,I),y&&(h=null,y(g),y=null)})},tokenize(d){if(!_||!window.Spreedly)throw new Error("Payment form is not initialized");let m=String(d.year);m.length===2&&(m=`20${m}`);const g=String(d.month).padStart(2,"0");"full_name"in d?window.Spreedly.tokenizeCreditCard({full_name:d.full_name,month:g,year:m}):window.Spreedly.tokenizeCreditCard({first_name:d.first_name,last_name:d.last_name,month:g,year:m})},async submit(d){if(!_)throw new Error("Payment form is not initialized");if(h){const m=h;return h=null,Qe(t,m,d,{external_payment_method_id:f,payment_method_intent_id:i,external_customer_id:s})}return new Promise((m,g)=>{v=d,y=async I=>{try{const k=await Qe(t,I,v,{external_payment_method_id:f,payment_method_intent_id:i,external_customer_id:s});m(k)}catch(k){g(k)}finally{v=null}},this.tokenize(d.card_details)})},reset(){window.Spreedly&&window.Spreedly.reload(),h=null,y=null,v=null},unmount(){window.Spreedly&&window.Spreedly.removeHandlers(),_=!1,h=null,y=null,v=null},addEventHandlers(d){d.onReady&&window.Spreedly.on("ready",d.onReady),d.onFieldEvent&&window.Spreedly.on("fieldEvent",d.onFieldEvent),d.onErrors&&window.Spreedly.on("errors",d.onErrors),d.onPaymentMethod&&window.Spreedly.on("paymentMethod",d.onPaymentMethod)},removeHandlers(){window.Spreedly&&window.Spreedly.removeHandlers()},setFieldType(d,m){window.Spreedly.setFieldType(d,m)},setLabel(d,m){window.Spreedly.setLabel(d,m)},setNumberFormat(d){window.Spreedly.setNumberFormat(d)},setPlaceholder(d,m){window.Spreedly.setPlaceholder(d,m)},setStyle(d,m){window.Spreedly.setStyle(d,m)}}}async function Kn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");return await c("post","/payment_method_intents",{data:{customer_id:r,payment_method_id:e}},a(t,"createFrictionlessPaymentIntentV1"))}async function Qe(t,e,{billing_address:r,default_payment_method:n,address_ids:i,apply_to_all_subscription_addresses:s},{external_payment_method_id:o,payment_method_intent_id:l,external_customer_id:f}){return await Je(a(t,"submitFrictionlessPaymentMethodV1"),{default:n??!1,payment_type:"CREDIT_CARD",processor_customer_token:f.toString(),processor_name:"frictionless",processor_payment_method_token:e,billing_address:r,payment_method_intent_id:l,address_ids:i,external_payment_method_id:o,apply_to_all_subscription_addresses:s})}var Yn=Object.freeze({__proto__:null,createPaymentMethod:Je,getPaymentMethod:Xn,initFrictionlessPaymentV1:Gn,listPaymentMethods:Hn,updatePaymentMethod:Wn});async function Jn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{plan:r}=await c("get","/plans",{id:e},a(t,"getPlan"));return r}function Qn(t,e){return c("get","/plans",{query:e},a(t,"listPlans"))}var Zn=Object.freeze({__proto__:null,getPlan:Jn,listPlans:Qn});async function ei(t,e){return await c("get","/shop/shipping_countries",{query:e,headers:{"X-Recharge-Version":"2021-01"}},a(t,"getShippingCountries"))}async function ti(t){return await c("get","/shop/settings",{headers:{"X-Recharge-Version":"2021-01"}},a(t,"getStoreSettings"))}var ri=Object.freeze({__proto__:null,getShippingCountries:ei,getStoreSettings:ti});function ni(t,e){return{...le(e,["address_id","external_variant_id","external_product_id","charge_interval_frequency","order_interval_frequency","price","status"]),customer_id:parseInt(t,10),shopify_variant_id:e.external_variant_id.ecommerce?parseInt(e.external_variant_id.ecommerce,10):void 0,...e.charge_interval_frequency?{charge_interval_frequency:`${e.charge_interval_frequency}`}:{},...e.order_interval_frequency?{order_interval_frequency:`${e.order_interval_frequency}`}:{},status:e.status?e.status.toUpperCase():void 0}}function ii(t,e){return{...le(e,["external_variant_id","external_product_id","charge_interval_frequency","order_interval_frequency","price","use_external_variant_defaults"]),shopify_variant_id:e.external_variant_id?.ecommerce?parseInt(e.external_variant_id.ecommerce,10):void 0,...e.charge_interval_frequency?{charge_interval_frequency:`${e.charge_interval_frequency}`}:void 0,...e.order_interval_frequency?{order_interval_frequency:`${e.order_interval_frequency}`}:void 0,force_update:t}}function Ze(t){const{id:e,address_id:r,customer_id:n,analytics_data:i,cancellation_reason:s,cancellation_reason_comments:o,cancelled_at:l,charge_interval_frequency:f,created_at:_,expire_after_specific_number_of_charges:h,shopify_product_id:y,shopify_variant_id:v,has_queued_charges:d,is_prepaid:m,is_skippable:g,is_swappable:I,max_retries_reached:k,next_charge_scheduled_at:D,order_day_of_month:q,order_day_of_week:O,order_interval_frequency:Ii,order_interval_unit:qi,presentment_currency:Ei,price:Ci,product_title:ki,properties:xi,quantity:Pi,sku:Ai,sku_override:Di,status:Oi,updated_at:Ti,variant_title:Fi}=t;return{id:e,address_id:r,customer_id:n,analytics_data:i,cancellation_reason:s,cancellation_reason_comments:o,cancelled_at:l,charge_interval_frequency:parseInt(f,10),created_at:_,expire_after_specific_number_of_charges:h,external_product_id:{ecommerce:`${y}`},external_variant_id:{ecommerce:`${v}`},has_queued_charges:Ne(d),is_prepaid:m,is_skippable:g,is_swappable:I,max_retries_reached:Ne(k),next_charge_scheduled_at:D,order_day_of_month:q,order_day_of_week:O,order_interval_frequency:parseInt(Ii,10),order_interval_unit:qi,presentment_currency:Ei,price:`${Ci}`,product_title:ki??"",properties:xi,quantity:Pi,sku:Ai,sku_override:Di,status:Oi.toLowerCase(),updated_at:Ti,variant_title:Fi}}async function si(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("get","/subscriptions",{id:e,query:{include:r?.include}},a(t,"getSubscription"));return n}function oi(t,e){return c("get","/subscriptions",{query:e},a(t,"listSubscriptions"))}function ai(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");return c("get",`/subscriptions/${p(e)}/addons`,{query:r},a(t,"listSubscriptionAddons"))}async function ci(t,e,r){const{subscription:n}=await c("post","/subscriptions",{data:e,query:r},a(t,"createSubscription"));return n}async function di(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("put","/subscriptions",{id:e,data:r,query:n},a(t,"updateSubscription"));return i}async function ui(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("post",`/subscriptions/${p(e)}/set_next_charge_date`,{data:{date:r},query:n},a(t,"updateSubscriptionChargeDate"));return i}async function li(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/change_address`,{data:{address_id:r}},a(t,"updateSubscriptionAddress"));return n}async function pi(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("post",`/subscriptions/${p(e)}/cancel`,{data:r,query:n},a(t,"cancelSubscription"));return i}async function _i(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/activate`,{query:r},a(t,"activateSubscription"));return n}async function hi(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/subscriptions/${p(e)}/charges/skip`,{data:{date:r,subscription_id:`${e}`}},a(t,"skipSubscriptionCharge"));return n}async function mi(t,e,r={}){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/pricing_preview`,{data:r},a(t,"getSubscriptionPricingPreview"));return n}async function fi(t,e,r){if(e===void 0||e.length===0)throw new Error("Subscription IDs are required");const{onetimes:n}=await c("post","/purchase_items/skip_gift",{data:{purchase_item_ids:e.map(Number),recipient_address:r}},a(t,"skipGiftSubscriptionCharge"));return n}async function gi(t,e,r){const n=e.length;if(n<1||n>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:i}=t;if(!i)throw new Error("No customerId in session.");const s=e[0].address_id;if(!e.every(_=>_.address_id===s))throw new Error("All subscriptions must have the same address_id.");const o=e.map(_=>ni(i,_));let l;r?.allow_onetimes!==void 0&&(l={allow_onetimes:r.allow_onetimes});const{subscriptions:f}=await c("post",`/addresses/${p(s)}/subscriptions-bulk`,{data:{subscriptions:o,commit_update:!!r?.commit},headers:{"X-Recharge-Version":"2021-01"},query:l},a(t,"createSubscriptions"));return f.map(Ze)}async function wi(t,e,r,n){if(e===void 0||e==="")throw new Error("Address ID is required");const i=r.length;if(i<1||i>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:s}=t;if(!s)throw new Error("No customerId in session.");const o=!!n?.force_update,l=r.map(h=>ii(o,h));let f;n?.allow_onetimes!==void 0&&(f={allow_onetimes:n.allow_onetimes});const{subscriptions:_}=await c("put",`/addresses/${p(e)}/subscriptions-bulk`,{data:{subscriptions:l,commit_update:!!n?.commit},headers:{"X-Recharge-Version":"2021-01"},query:f},a(t,"updateSubscriptions"));return _.map(Ze)}async function yi(t,e,r,n){if(e===void 0||e==="")throw new Error("Address ID is required");const i=r.length;if(i<1||i>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:s}=t;if(!s)throw new Error("No customerId in session.");let o;n?.allow_onetimes!==void 0&&(o={allow_onetimes:n.allow_onetimes}),await c("delete",`/addresses/${p(e)}/subscriptions-bulk`,{data:{subscriptions:r,send_email:!!n?.send_email,commit_update:!!n?.commit},headers:{"X-Recharge-Version":"2021-01"},query:o},a(t,"deleteSubscriptions"))}var bi=Object.freeze({__proto__:null,activateSubscription:_i,cancelSubscription:pi,createSubscription:ci,createSubscriptions:gi,deleteSubscriptions:yi,getSubscription:si,getSubscriptionPricingPreview:mi,listSubscriptionAddons:ai,listSubscriptions:oi,skipGiftSubscriptionCharge:fi,skipSubscriptionCharge:hi,updateSubscription:di,updateSubscriptionAddress:li,updateSubscriptionChargeDate:ui,updateSubscriptions:wi});const vi={get(t,e){return S("get",t,e)},post(t,e){return S("post",t,e)},put(t,e){return S("put",t,e)},delete(t,e){return S("delete",t,e)}};function Si(t){if(t)return t;if(window?.Shopify?.shop)return window.Shopify.shop;let e=window?.domain;if(!e){const r=location?.href.match(/(?:http[s]*:\/\/)*(.*?)\.(?=admin\.rechargeapps\.com)/i)?.[1].replace(/-sp$/,"");r&&(e=`${r}.myshopify.com`)}if(e)return e;throw new Error("No storeIdentifier was passed into init.")}function $i(t={}){const e=t,{storefrontAccessToken:r}=t;if(r&&!r.startsWith("strfnt"))throw new Error("Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.");tt({storeIdentifier:Si(t.storeIdentifier),loginRetryFn:t.loginRetryFn,__unstable_twoFactorRetryFn:t.__unstable_twoFactorRetryFn,storefrontAccessToken:r,appName:t.appName,appVersion:t.appVersion,environment:e.environment?e.environment:"prod",environmentUri:e.environmentUri,customerHash:e.customerHash}),Ve()}const et={init:$i,api:vi,address:mt,auth:qt,bundle:gr,bundleData:Er,charge:Vr,cdn:Tr,collection:Gr,credit:an,customer:rn,customerSurveys:ln,flow:_n,gift:fn,tieredDiscount:bn,membership:En,membershipProgram:xn,metafield:On,onetime:Mn,order:Vn,paymentMethod:Yn,plan:Zn,product:zr,store:ri,subscription:bi};try{et.init()}catch{}return et});
1
+ // recharge-client-2.7.0.min.js | MIT License | © Recharge Inc.
2
+ (function(R,T){typeof exports=="object"&&typeof module<"u"?module.exports=T():typeof define=="function"&&define.amd?define(T):(R=typeof globalThis<"u"?globalThis:R||self,R.recharge=T())})(this,(function(){"use strict";const R="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";function T(t=21){let e="";for(let r=0;r<t;r++)e+=R[Math.random()*64|0];return e}let le={storeIdentifier:"",environment:"prod"};function Ze(t){le=t}function b(){return le}const et=(t,e="")=>{switch(t){case"prod":return"https://api.rechargeapps.com";case"stage":return"https://api.stage.rechargeapps.com";case"preprod":case"prestage":return`${e}/api`}},tt=(t,e="")=>{switch(t){case"prod":return"https://admin.rechargeapps.com";case"stage":return"https://admin.stage.rechargeapps.com";case"preprod":case"prestage":return e}},rt=t=>{switch(t){case"prod":case"preprod":return"https://static.rechargecdn.com";case"stage":case"prestage":return"https://static.stage.rechargecdn.com"}},pe="/tools/recurring";class F{constructor(e,r){this.name="RechargeRequestError",this.message=e,this.status=r}}function p(t){return encodeURIComponent(`${t}`.trim())}function nt(t){const e=r=>encodeURIComponent(r===null?"":String(r));return Object.entries(t).filter(([,r])=>r!==void 0&&!(Array.isArray(r)&&r.length===0)).map(([r,n])=>`${r}=${Array.isArray(n)?n.map(e).join(","):e(n)}`).join("&")}const it=new Set(["shop_url"]);function a(t,e){return{...t,internalFnCall:t.internalFnCall??e,internalRequestId:t.internalRequestId??T()}}async function U(t,e,r={}){const n=b();return $(t,`${rt(n.environment)}/store/${n.storeIdentifier}${e}`,r)}async function c(t,e,{id:r,query:n,data:i,headers:s}={},o){const{environment:u,environmentUri:f,storeIdentifier:h,loginRetryFn:_,__unstable_twoFactorRetryFn:y,appName:v,appVersion:d}=b();if(!h)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const m=o.apiToken;if(!m)throw new Error("No API token defined on session.");const g=et(u,f),q={"X-Recharge-Access-Token":m,"X-Recharge-Version":"2021-11","X-Recharge-Sdk-Fn":o.internalFnCall,...v?{"X-Recharge-Sdk-App-Name":v}:{},...d?{"X-Recharge-Sdk-App-Version":d}:{},"X-Recharge-Sdk-Version":"2.7.0","X-Request-Id":o.internalRequestId,...o.tmp_fn_identifier?{"X-Recharge-Sdk-Fn-Identifier":o.tmp_fn_identifier}:{},...s||{}},k=n,D={...k?Object.fromEntries(Object.entries(k).filter(([E])=>!it.has(E))):void 0,shop_url:h};try{return await $(t,`${g}${e}`,{id:r,query:D,data:i,headers:q})}catch(E){if(_&&E instanceof F&&E.status===401)return _().then(O=>{if(O)return $(t,`${g}${e}`,{id:r,query:D,data:i,headers:{...q,"X-Recharge-Access-Token":O.apiToken}});throw E});if(y&&E instanceof F&&E.status===423)return y().then(O=>{if(O)return $(t,`${g}${e}`,{id:r,query:D,data:i,headers:{...q,"X-Recharge-Access-Token":O.apiToken}});throw E});throw E}}async function A(t,e,r={}){return $(t,`${pe}${e}`,r)}async function $(t,e,{id:r,query:n,data:i,headers:s}={}){let o=e.trim();if(r&&(o=[o,p(r)].join("/")),n){let y;[o,y]=o.split("?");const v=[y,nt(n)].join("&").replace(/^&/,"");o=`${o}${v?`?${v}`:""}`}let u;i&&t!=="get"&&(u=JSON.stringify(i));const f={Accept:"application/json","Content-Type":"application/json","X-Recharge-App":"storefront-client",...s||{}},h=await fetch(o,{method:t,headers:f,body:u});let _;try{_=await h.json()}catch{}if(!h.ok)throw h.status===502||h.status===504?new F("A gateway error occurred while making the request",h.status):_&&_.error?new F(_.error,h.status):_&&_.errors?new F(JSON.stringify(_.errors),h.status):new F("A connection error occurred while making the request");return _}function st(t,e){return c("get","/addresses",{query:e},a(t,"listAddresses"))}async function ot(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{address:n}=await c("get","/addresses",{id:e,query:{include:r?.include}},a(t,"getAddress"));return n}async function at(t,e){const{address:r}=await c("post","/addresses",{data:{...e,customer_id:t.customerId?Number(t.customerId):void 0}},a(t,"createAddress"));return r}async function K(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{address:i}=await c("put","/addresses",{id:e,data:r,query:n},a(t,"updateAddress"));return i}async function ct(t,e,r,n){return K(a(t,"applyDiscountToAddress"),e,{discounts:[{code:r}]},n)}async function dt(t,e,r){if(e===void 0||e==="")throw new Error("Id is required");return K(a(t,"removeDiscountsFromAddress"),e,{discounts:[]},r)}function ut(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/addresses",{id:e},a(t,"deleteAddress"))}async function lt(t,e){const{address:r}=await c("post","/addresses/merge",{data:e},a(t,"mergeAddresses"));return r}async function pt(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/addresses/${p(e)}/charges/skip`,{data:r},a(t,"skipFutureCharge"));return n}var ht=Object.freeze({__proto__:null,applyDiscountToAddress:ct,createAddress:at,deleteAddress:ut,getAddress:ot,listAddresses:st,mergeAddresses:lt,removeDiscountsFromAddress:dt,skipFutureCharge:pt,updateAddress:K});async function _t(){const{storefrontAccessToken:t}=b(),e={};t&&(e["X-Recharge-Storefront-Access-Token"]=t);const r=await A("get","/access",{headers:e});return{apiToken:r.api_token,customerId:r.customer_id,message:r.message}}async function mt(t,e){return he(t,e)}async function he(t,e){if(!t)throw new Error("Shopify storefront token is required");const{storeIdentifier:r}=b();if(!r)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{api_token:n,customer_id:i,message:s}=await N("post","/shopify_storefront_access",{data:{customer_token:e,storefront_token:t,shop_url:r}});return n?{apiToken:n,customerId:i,message:s}:null}async function ft(t){const{storeIdentifier:e}=b();if(!e)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{api_token:r,customer_id:n,message:i}=await N("post","/shopify_customer_account_api_access",{data:{customer_token:t,shop_url:e}});return r?{apiToken:r,customerId:n,message:i}:null}async function gt(t,e={}){if(!t)throw new Error("Email is required.");const{storeIdentifier:r}=b();if(!r)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const{send_email:n,send_sms:i}=e,s=await N("post","/attempt_login",{data:{email:t,shop:r,...n!==void 0?{send_email:n}:{},...i!==void 0?{send_sms:i}:{}}});if(s.errors)throw new Error(s.errors);return s.session_token}async function wt(t,e={}){if(!t)throw new Error("Email is required.");const{storefrontAccessToken:r}=b(),n={};r&&(n["X-Recharge-Storefront-Access-Token"]=r);const{send_email:i,send_sms:s}=e,o=await A("post","/attempt_login",{data:{email:t,...i!==void 0?{send_email:i}:{},...s!==void 0?{send_sms:s}:{}},headers:n});if(o.errors)throw new Error(o.errors);return o.session_token}async function yt(t,e,r){if(!t)throw new Error("Email is required.");if(!e)throw new Error("Session token is required.");if(!r)throw new Error("Code is required.");const{storeIdentifier:n}=b();if(!n)throw new Error("InitRecharge has not been called and/or no store identifier has been defined.");const i=await N("post","/validate_login",{data:{code:r,email:t,session_token:e,shop:n}});if(i.errors)throw new Error(i.errors);return{apiToken:i.api_token,customerId:i.customer_id}}async function bt(t,e,r){if(!t)throw new Error("Email is required.");if(!e)throw new Error("Session token is required.");if(!r)throw new Error("Code is required.");const{storefrontAccessToken:n}=b(),i={};n&&(i["X-Recharge-Storefront-Access-Token"]=n);const s=await A("post","/validate_login",{data:{code:r,email:t,session_token:e},headers:i});if(s.errors)throw new Error(s.errors);return{apiToken:s.api_token,customerId:s.customer_id}}function vt(){const{customerHash:t}=b(),{pathname:e,search:r}=window.location,n=new URLSearchParams(r).get("token"),i=e.split("/").filter(Boolean),s=i.findIndex(u=>u==="portal"),o=s!==-1?i[s+1]:t;if(!n||!o)throw new Error("Not in context of Recharge Customer Portal or URL did not contain correct params");return{customerHash:o,token:n}}async function St(){const{customerHash:t,token:e}=vt(),{storeIdentifier:r}=b(),n=await N("post",`/customers/${p(t)}/access`,{data:{token:e,shop:r}});return{apiToken:n.api_token,customerId:n.customer_id}}async function N(t,e,{id:r,query:n,data:i,headers:s}={}){const{environment:o,environmentUri:u,storefrontAccessToken:f,appName:h,appVersion:_}=b(),y=tt(o,u),v={...f?{"X-Recharge-Storefront-Access-Token":f}:{},...h?{"X-Recharge-Sdk-App-Name":h}:{},..._?{"X-Recharge-Sdk-App-Version":_}:{},"X-Recharge-Sdk-Version":"2.7.0",...s||{}};return $(t,`${y}${e}`,{id:r,query:n,data:i,headers:v})}var $t=Object.freeze({__proto__:null,loginCustomerPortal:St,loginShopifyApi:mt,loginShopifyAppProxy:_t,loginWithShopifyCustomerAccount:ft,loginWithShopifyStorefront:he,sendPasswordlessCode:gt,sendPasswordlessCodeAppProxy:wt,validatePasswordlessCode:yt,validatePasswordlessCodeAppProxy:bt});const _e="XdrError";class l extends Error{constructor(e){super(e),this.name=_e}static[Symbol.hasInstance](e){return e instanceof Error&&e.name===_e}}function me(t){return(4-t%4)%4}function fe(t){if(typeof t!="object"||t===null)return!1;const e=Object.getPrototypeOf(t);return e===Object.prototype||e===null}function ge(t,e){if(!Number.isInteger(t)||t<0||t>4294967295)throw new l(`${e}: expected uint32 length`)}function Y(t,e,r,n){if(typeof t!="number"||!Number.isInteger(t)||t<e||t>r)throw new l(`${n}: expected integer in range ${e}..${r}`)}function It(t,e,r,n){if(typeof t!="bigint"||t<e||t>r)throw new l(`${n}: expected bigint in range ${e}..${r}`)}function qt(t,e){if(!(t instanceof Uint8Array))throw new l(`${e}: expected Uint8Array`);try{Uint8Array.prototype.at.call(t,0)}catch{throw new l(`${e}: Uint8Array is detached or out of bounds`)}}function Et(t,e){if(!Array.isArray(t))throw new l(`${e}: expected array`)}const we=1500;class Ct{#e=0;#i=0;#t;#n;#s;bytes;constructor(e,r=we){if(r<0||!Number.isInteger(r))throw new l(`invalid maxDepth ${r}`);if(this.#t=r,!ArrayBuffer.isView(e)||e.BYTES_PER_ELEMENT!==1)throw new TypeError("Reader expects a Uint8Array");this.bytes=Object.getPrototypeOf(e)===Uint8Array.prototype?e:e.byteLength===0?new Uint8Array(0):new Uint8Array(e.buffer,e.byteOffset,e.byteLength),this.#n=this.bytes.buffer?.detached?new DataView(new ArrayBuffer(0)):new DataView(this.bytes.buffer,this.bytes.byteOffset,this.bytes.byteLength),this.#s=this.#n.byteLength}#r(e,r){if(this.remaining<e)throw new l(`${r}: incomplete XDR data at offset ${this.#e}, expected ${e} byte(s)`);const n=this.#e;return this.#e+=e,n}get offset(){return this.#e}get remaining(){return this.#s-this.#e}enter(e){if(this.#i+=1,this.#i>this.#t)throw this.#i-=1,new l(`${e}: max recursion depth ${this.#t} exceeded`)}exit(){this.#i-=1}done(e){if(this.remaining!==0)throw new l(`${e}: trailing ${this.remaining} byte(s) after XDR value`)}readBytes(e,r){if(e<0||!Number.isInteger(e))throw new l(`${r}: invalid byte length ${e}`);if(this.remaining<e)throw new l(`${r}: incomplete XDR data at offset ${this.#e}, expected ${e} byte(s)`);const n=this.bytes.slice(this.#e,this.#e+e);if(n.length!==e)throw new l(`${r}: input shrank during decode`);return this.#e+=e,n}skipPadding(e,r){if(e<0||!Number.isInteger(e))throw new l(`${r}: invalid byte length ${e}`);const n=me(e);if(n===0)return;const i=this.#r(n,r);for(let s=0;s<n;s++)if(this.bytes[i+s]!==0)throw this.#e=i,new l(`${r}: non-zero XDR padding`)}readInt32(e){return this.#n.getInt32(this.#r(4,e),!1)}readUint32(e){return this.#n.getUint32(this.#r(4,e),!1)}readBigInt64(e){return this.#n.getBigInt64(this.#r(8,e),!1)}readBigUint64(e){return this.#n.getBigUint64(this.#r(8,e),!1)}readFloat32(e){return this.#n.getFloat32(this.#r(4,e),!1)}readFloat64(e){return this.#n.getFloat64(this.#r(8,e),!1)}}const xt=8192;class ye{#e=new Uint8Array(xt);#i=new DataView(this.#e.buffer);#t=0;#n=0;#s;constructor(e=we){if(e<0||!Number.isInteger(e))throw new l(`invalid maxDepth ${e}`);this.#s=e}get offset(){return this.#t}enter(e){if(this.#n+=1,this.#n>this.#s)throw this.#n-=1,new l(`${e}: max recursion depth ${this.#s} exceeded`)}exit(){this.#n-=1}writeBytes(e){this.#o(e.length),this.#e.set(e,this.#t),this.#t+=e.length}writePadding(e){const r=me(e);r>0&&(this.#o(r),this.#e.fill(0,this.#t,this.#t+r),this.#t+=r)}writeInt32(e){const r=this.#r(4);this.#i.setInt32(r,e,!1),this.#t+=4}writeUint32(e){const r=this.#r(4);this.#i.setUint32(r,e,!1),this.#t+=4}writeBigInt64(e){const r=this.#r(8);this.#i.setBigInt64(r,e,!1),this.#t+=8}writeBigUint64(e){const r=this.#r(8);this.#i.setBigUint64(r,e,!1),this.#t+=8}writeFloat32(e){const r=this.#r(4);this.#i.setFloat32(r,e,!1),this.#t+=4}writeFloat64(e){const r=this.#r(8);this.#i.setFloat64(r,e,!1),this.#t+=8}#r(e){return this.#o(e),this.#t}toUint8Array(){return this.#e.slice(0,this.#t)}#o(e){const r=this.#t+e;if(r<=this.#e.length)return;let n=this.#e.length;for(;n<r;)n*=2;const i=new Uint8Array(n);i.set(this.#e),this.#e=i,this.#i=new DataView(i.buffer)}}const kt=4294967295;class P{name;constructor(e=void 0){this.name=e}encode(e,r){const n=new ye(r?.maxDepth);return this._write(e,n,this.name??this.kind),n.toUint8Array()}decode(e,r){const n=new Ct(e,r?.maxDepth),i=this._read(n,this.name??this.kind);return n.done(this.name??this.kind),i}validateXdr(e,r){try{return this.decode(e,r),!0}catch(n){if(n instanceof l)return!1;throw n}}validate(e){try{const r=new ye;return this._write(e,r,this.name??this.kind),!0}catch(r){if(r instanceof l)return!1;throw r}}}class Pt extends P{kind="array";element;maxLength;constructor(e,r){super(),ge(r,"array maxLength"),this.element=e,this.maxLength=r}_read(e,r){e.enter(r);try{const n=e.readUint32(r);if(n>this.maxLength)throw new l(`${r}: array length ${n} exceeds maximum ${this.maxLength}`);if(n>e.remaining)throw new l(`${r}: array length ${n} exceeds remaining ${e.remaining} byte(s)`);return Dt(e,n,this.element,r)}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(Et(e,n),e.length>this.maxLength)throw new l(`${n}: array length ${e.length} exceeds maximum ${this.maxLength}`);r.writeUint32(e.length),Ot(e,r,this.element,n)}finally{r.exit()}}}function At(t,e){return new Pt(t,e)}function Dt(t,e,r,n){const i=[];for(let s=0;s<e;s+=1){const o=t.offset,u=r._read(t,`${n}[${s}]`);if(t.offset===o)throw new l(`${n}[${s}]: element type '${r.name??r.kind}' consumed no input; an array element must encode to at least one byte`);i.push(u)}return i}function Ot(t,e,r,n){let i=0;for(const s of t){const o=e.offset;if(r._write(s,e,`${n}[${i}]`),e.offset===o)throw new l(`${n}[${i}]: element type '${r.name??r.kind}' encoded to zero bytes; an array element must encode to at least one byte`);i+=1}}const Tt=new Set(["__proto__","name","kind","encode","decode","validate","_read","_write","nameByValue"]);class Ft extends P{kind="enum";nameByValue;#e=new Set;constructor(e,r){super(e);const n=new Map;for(const[i,s]of Object.entries(r)){if(Y(s,-2147483648,2147483647,`${e}.${i}`),this.#e.has(s))throw new l(`${e}: duplicate enum value ${s}`);this.#e.add(s),n.set(s,i)}this.nameByValue=n}_read(e,r){const n=e.readInt32(r);if(!this.#e.has(n))throw new l(`${r}: unknown enum value ${n}`);return n}_write(e,r,n){if(typeof e!="number"||!this.#e.has(e))throw new l(`${n}: unknown enum value ${String(e)}`);r.writeInt32(e)}}function Rt(t,e){for(const n of Object.getOwnPropertyNames(e))if(Tt.has(n))throw new l(`${t}: enum member name ${n} collides with reserved property`);const r=new Ft(t,e);return Object.assign(r,e)}class Nt extends P{kind="int32";_read(e,r){return e.readInt32(r)}_write(e,r,n){Y(e,-2147483648,2147483647,n),r.writeInt32(e)}}function be(){return new Nt}class Bt extends P{constructor(e){super(),this.maxLength=e,ge(e,"string maxLength")}maxLength;kind="string";_read(e,r){const n=e.readUint32(r);if(n>this.maxLength)throw new l(`${r}: string byte length ${n} exceeds maximum ${this.maxLength}`);const i=e.readBytes(n,r);return e.skipPadding(n,r),i}_write(e,r,n){if(qt(e,n),e.length>this.maxLength)throw new l(`${n}: string byte length ${e.length} exceeds maximum ${this.maxLength}`);r.writeUint32(e.length),r.writeBytes(e),r.writePadding(e.length)}}function Mt(t){return new Bt(t)}class jt extends P{kind="struct";entries;constructor(e,r){if(super(e),Object.getOwnPropertyNames(r).includes("__proto__"))throw new l(`${e}: struct field name '__proto__' is not allowed`);this.entries=Object.entries(r)}_read(e,r){e.enter(r);try{const n={};for(const[i,s]of this.entries)n[i]=s._read(e,`${r}.${i}`);return n}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(!fe(e))throw new l(`${n}: expected plain object`);const i=e;for(const[s,o]of this.entries){if(!Object.prototype.hasOwnProperty.call(i,s))throw new l(`${n}.${s}: missing struct field`);o._write(i[s],r,`${n}.${s}`)}}finally{r.exit()}}}function ve(t,e){return new jt(t,e)}class Ut extends P{kind="uint32";_read(e,r){return e.readUint32(r)}_write(e,r,n){Y(e,0,4294967295,n),r.writeUint32(e)}}function Se(){return new Ut}class Lt extends P{kind="uint64";_read(e,r){return e.readBigUint64(r)}_write(e,r,n){It(e,0n,(1n<<64n)-1n,n),r.writeBigUint64(e)}}function L(){return new Lt}const J="default";class Vt extends P{kind="union";switchOn;cases;defaultArm;switchKey;#e=new Map;constructor(e,r,n,i,s){if(super(e),s==="__proto__")throw new l(`${e}: switchKey '__proto__' is not allowed`);if(this.switchOn=r,this.cases=n,this.defaultArm=i,this.switchKey=s,n.length===0&&i===void 0)throw new l(`${e}: union needs at least one case or a default arm`);const o=new Set;for(const u of n){if(!r.validate(u.discriminant))throw new l(`${e}.${u.name}: case discriminator ${String(u.discriminant)} is not a valid ${r.name??r.kind} value`);if(o.has(u.name))throw new l(`${e}: duplicate union case name ${u.name}`);if(o.add(u.name),this.#e.has(u.discriminant))throw new l(`${e}: duplicate union discriminator ${String(u.discriminant)}`);$e(e,u.name,u.arm,s),this.#e.set(u.discriminant,u)}i!==void 0&&$e(e,J,i,s)}_read(e,r){e.enter(r);try{const n=this.switchOn._read(e,`${r}.${this.switchKey}`),i=this.#e.get(n),s=i?.arm??this.defaultArm;if(s===void 0)throw new l(`${r}: no case for union discriminator ${String(n)}`);return Xt(n,s,this.switchKey,e,`${r}.${i?.name??J}`)}finally{e.exit()}}_write(e,r,n){r.enter(n);try{if(!fe(e)||!Object.prototype.hasOwnProperty.call(e,this.switchKey))throw new l(`${n}: expected union object with ${this.switchKey} discriminator`);const i=e,s=i[this.switchKey],o=this.#e.get(s),u=o?.arm??this.defaultArm;if(u===void 0)throw new l(`${n}: no case for union discriminator ${String(s)}`);this.switchOn._write(s,r,`${n}.${this.switchKey}`),Ht(i,u,r,`${n}.${o?.name??J}`)}finally{r.exit()}}}function zt(t,e){return{kind:"field",name:t,schema:e}}function Q(t,e,r){return{name:t,discriminant:e,arm:r}}function Z(t,e){const r=e.switchKey??"type";return new Vt(t,e.switchOn,e.cases,e.defaultArm,r)}function Xt(t,e,r,n,i){const s={};return s[r]=t,V(e)?(s[e.name]=e.schema._read(n,`${i}.${e.name}`),s):(e._read(n,i),s)}function Ht(t,e,r,n){if(V(e)){if(!Object.prototype.hasOwnProperty.call(t,e.name))throw new l(`${n}.${e.name}: missing union arm payload`);e.schema._write(t[e.name],r,`${n}.${e.name}`);return}e._write(void 0,r,n)}function $e(t,e,r,n){if(V(r)&&r.name===n)throw new l(`${t}.${e}: union arm payload field must not be named ${n}`);if(V(r)&&r.name==="__proto__")throw new l(`${t}.${e}: union arm payload field name '__proto__' is not allowed`)}function V(t){return"schema"in t}class Gt extends P{kind="void";_read(){}_write(e,r,n){if(e!==void 0)throw new l(`${n}: expected void`)}}function Ie(){return new Gt}var qe=t=>{throw TypeError(t)},ee=(t,e,r)=>e.has(t)||qe("Cannot "+r),w=(t,e,r)=>(ee(t,e,"read from private field"),e.get(t)),z=(t,e,r)=>e.has(t)?qe("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),te=(t,e,r,n)=>(ee(t,e,"write to private field"),e.set(t,r),r),I=(t,e,r)=>(ee(t,e,"access private method"),r),C,x,B,S,Ee,Ce,re,M,X;const Wt=new TextEncoder,xe={v:0};function Kt(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e)}const ne=Rt("EnvelopeType",{envelopeTypeBundle:0}),Yt=Z("BundleItemExt",{switchOn:be(),switchKey:"v",cases:[Q("v0",0,Ie())]}),Jt=ve("BundleItem",{collectionId:L(),productId:L(),variantId:L(),sku:Mt(kt),quantity:Se(),ext:Yt}),Qt=Z("BundleExt",{switchOn:be(),switchKey:"v",cases:[Q("v0",0,Ie())]}),Zt=ve("Bundle",{variantId:L(),items:At(Jt,500),version:Se(),ext:Qt}),er=Z("BundleEnvelope",{switchOn:ne,switchKey:"type",cases:[Q("envelopeTypeBundle",ne.envelopeTypeBundle,zt("v1",Zt))]});function tr(t){const e={type:ne.envelopeTypeBundle,v1:{variantId:BigInt(t.variantId.toString()),items:t.items.map(r=>({collectionId:BigInt(r.collectionId.toString()),productId:BigInt(r.productId.toString()),variantId:BigInt(r.variantId.toString()),sku:Wt.encode(r.sku||""),quantity:r.quantity,ext:xe})),version:Math.floor(Date.now()/1e3),ext:xe}};return Kt(er.encode(e))}class rr{constructor(e,r){z(this,S),z(this,C),z(this,x),z(this,B),te(this,C,I(this,S,Ee).call(this,r)),te(this,B,I(this,S,Ce).call(this,r)),te(this,x,e)}isInitialDataValid(){if(!w(this,B))throw"Bundle data does not exist for the given product.";if(!w(this,C))throw"Bundle settings do not exist for the given product.";if(!Array.isArray(w(this,x))||!w(this,x).length)throw"No bundle selection items provided.";return!0}isValidVariant(e){if(!w(this,C)?.variantsSettings[e])throw`The ${e} bundle variant is invalid.`;return!0}isSelectionInVariantRange(e){const r=w(this,x).reduce((i,s)=>i+s.quantity,0),n=w(this,C)?.variantsSettings[e].ranges||[];if(!I(this,S,re).call(this,n,r))throw"The total number of products does not fall within the required variant range.";return!0}areItemsInMaxPerItemBound(){const e=w(this,C)?.bundleSettings.maxPerItem||0,r=w(this,x).filter(({quantity:n})=>n>e);if(e&&r.length)throw`The selected products (${I(this,S,M).call(this,r.map(({externalProductId:n})=>n)).join(", ")}) exceed the maximum limit of ${e} items per product.`;return!0}areSelectedCollectionsValid(e){const r=w(this,C)?.variantsSettings[e]?.optionSources,n=w(this,x).filter(({collectionId:i})=>!r||!I(this,S,X).call(this,r,i));if(n.length)throw`The collections (${I(this,S,M).call(this,n.map(({collectionId:i})=>i)).join(", ")}) are no longer valid for the bundle variant (${e}).`;return!0}areItemsQuantitiesValidForTheCollection(e){const r=w(this,x).reduce((s,o)=>(s[o.collectionId]=o.quantity+(s[o.collectionId]||0),s),Object.create(null)),n=w(this,C)?.variantsSettings[e],i=Object.values(n?.optionSources||{}).filter(s=>{const o=r[s.collectionId]||0;return!I(this,S,re).call(this,[s],o)});if(!n||i.length)throw`The selection exceeds the limits for the collections (${I(this,S,M).call(this,i.map(({collectionId:s})=>s)).join(", ")}).`;return!0}areSelectedProductsValid(e){const r=w(this,C)?.variantsSettings[e]?.optionSources||{},n=Object.values(r).reduce((s,o)=>{const u=w(this,B)?.collections[o.collectionId];return u&&(s[o.collectionId]=u),s},Object.create(null));if(!Object.values(n).length)throw`No collections found for the bundle variant (${e}).`;const i=w(this,x).filter(({externalProductId:s,collectionId:o})=>I(this,S,X).call(this,n,o)?!I(this,S,X).call(this,n[o].products,s):!0);if(i.length)throw`The products (${I(this,S,M).call(this,i.map(({externalProductId:s})=>s)).join(", ")}) are no longer valid for the bundle product.`;return!0}isBundleSelectionValid(e){return this.isInitialDataValid(),this.isValidVariant(e),this.isSelectionInVariantRange(e),this.areItemsInMaxPerItemBound(),this.areSelectedCollectionsValid(e),this.areItemsQuantitiesValidForTheCollection(e),this.areSelectedProductsValid(e),!0}}C=new WeakMap,x=new WeakMap,B=new WeakMap,S=new WeakSet,Ee=function(t){try{const e=t.bundle_settings;return{bundleSettings:{maxPerItem:e.max_quantity_per_variant,isCustomizable:e.is_customizable},variantsSettings:e.variants.reduce((r,n)=>{if(!n.enabled)return r;let i=[{min:n.items_count,max:n.items_count}];return n.items_count||(i=n.ranges.map(({quantity_max:s,quantity_min:o})=>({min:o,max:s}))),r[n.external_variant_id]={externalVariantId:n.external_variant_id,optionSources:n.option_sources.reduce((s,o)=>(s[o.option_source_id]={min:o.quantity_min,max:o.quantity_max,collectionId:o.option_source_id},s),Object.create(null)),ranges:i},r},Object.create(null))}}catch{return null}},Ce=function(t){try{const e=Object.values(t.collections).reduce((r,n)=>(r[n.id]={...n,products:n.products.reduce((i,s)=>(i[s.id]=s,i),Object.create(null))},r),Object.create(null));return{...t,collections:e}}catch{return null}},re=function(t,e){return!!t.filter(({min:r,max:n})=>{const i=r??e,s=n??e;return i<=e&&e<=s}).length},M=function(t){return Array.from(new Set(t))},X=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};const nr="/bundling-storefront-manager";function ke(t){return tr({variantId:t.externalVariantId,items:t.selections.map(e=>({collectionId:e.collectionId,productId:e.externalProductId,variantId:e.externalVariantId,quantity:e.quantity,sku:""}))})}async function ir(t){const e=b(),r=await ie(t);if(r!==!0)throw new Error(r);const n=ke(t);try{const i=await A("post",`${nr}/api/v1/bundles`,{data:{bundle:n},headers:{Origin:`https://${e.storeIdentifier}`}});if(!i.id||i.code!==200)throw new Error(`1: failed generating rb_id: ${JSON.stringify(i)}`);return i.id}catch(i){throw new Error(`2: failed generating rb_id ${i}`)}}async function sr(t,e){const r=await ie(e);if(r!==!0)throw new Error(r);const n=ke(e);try{const i=await c("post","/bundle_selections/bundle_id",{data:{bundle:n}},a(t,"getBundleSelectionId"));if(!i.id||i.code!==200)throw new Error(`1: failed generating rb_id: ${JSON.stringify(i)}`);return i.id}catch(i){throw new Error(`2: failed generating rb_id ${i}`)}}function or(t,e){const r=Pe(t);if(r!==!0)throw new Error(`Dynamic Bundle is invalid. ${r}`);const n=`${T(9)}:${t.externalProductId}`;return t.selections.map(i=>{const s={id:i.externalVariantId,quantity:i.quantity,properties:{_rc_bundle:n,_rc_bundle_variant:t.externalVariantId,_rc_bundle_parent:e,_rc_bundle_collection_id:i.collectionId}};return i.sellingPlan?s.selling_plan=i.sellingPlan:i.shippingIntervalFrequency&&(s.properties.shipping_interval_frequency=i.shippingIntervalFrequency,s.properties.shipping_interval_unit_type=i.shippingIntervalUnitType,s.id=`${i.discountedVariantId}`),s})}async function ie(t){try{return t?t.selections.length===0?"No selections defined":!0:"Bundle is not defined"}catch(e){return`Error fetching bundle settings: ${e}`}}async function ar(t){try{const e=await A("get",`/bundle-data/${p(t.externalProductId)}`);return{valid:new rr(t.selections,e).isBundleSelectionValid(t.externalVariantId)}}catch(e){return{valid:!1,error:String(e)}}}const cr={day:["day","days","Days"],days:["day","days","Days"],Days:["day","days","Days"],week:["week","weeks","Weeks"],weeks:["week","weeks","Weeks"],Weeks:["week","weeks","Weeks"],month:["month","months","Months"],months:["month","months","Months"],Months:["month","months","Months"]};function Pe(t){if(!t)return"No bundle defined.";if(t.selections.length===0)return"No selections defined.";const{shippingIntervalFrequency:e,shippingIntervalUnitType:r}=t.selections.find(n=>n.shippingIntervalFrequency||n.shippingIntervalUnitType)||{};if(e||r){if(!e||!r)return"Shipping intervals do not match on selections.";{const n=cr[r];for(let i=0;i<t.selections.length;i++){const{shippingIntervalFrequency:s,shippingIntervalUnitType:o}=t.selections[i];if(s&&s!==e||o&&!n.includes(o))return"Shipping intervals do not match on selections."}}}return!0}async function dr(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{bundle_selection:r}=await c("get","/bundle_selections",{id:e},a(t,"getBundleSelection"));return r}function ur(t,e){return c("get","/bundle_selections",{query:e},a(t,"listBundleSelections"))}async function lr(t,e){const{bundle_selection:r}=await c("post","/bundle_selections",{data:e},a(t,"createBundleSelection"));return r}async function pr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{bundle_selection:n}=await c("put","/bundle_selections",{id:e,data:r},a(t,"updateBundleSelection"));return n}function hr(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/bundle_selections",{id:e},a(t,"deleteBundleSelection"))}async function _r(t,e,r,n){if(e===void 0||e==="")throw new Error("Purchase item ID is required");const{subscription:i}=await c("put","/bundles",{id:e,data:r,query:n},a(t,"updateBundle"));return i}var mr=Object.freeze({__proto__:null,createBundleSelection:lr,deleteBundleSelection:hr,getBundleId:ir,getBundleSelection:dr,getBundleSelectionId:sr,getDynamicBundleItems:or,listBundleSelections:ur,updateBundle:_r,updateBundleSelection:pr,validateBundle:ie,validateBundleSelection:ar,validateDynamicBundle:Pe});const fr=t=>{const e=t.layout_settings.addons,r=t.layout_settings.crossSells,n=t.customization_window,i=t.layout_settings?.defaultVariantId??t.default_bundle_variant_id,s=t.layout_settings.defaultFrequency,o=t.layout_settings.addToCartCallback;return{default_variant_id:i?String(i):null,is_customizable:t.is_customizable,price_rule:String(t.price_rule).toUpperCase(),customization_window:n?{active_days:n,disabled_message:t.customization_window_disabled_message||""}:null,addons:e.collectionId?{collection_id:e.collectionId,collection_handle:e.collectionHandle}:null,cross_sells:r.collectionId?{collection_id:e.collectionId,collection_handle:e.collectionHandle}:null,default_selling_plan_id:s||null,collapsible_collections:t.layout_settings.collapsibleSections,max_quantity_per_variant:t.max_quantity_per_variant,show_product_variants:t.layout_settings.showVariants,product_details_modal_enabled:t.layout_settings.learnMoreModal,addToCartBehavior:{type:o.type==="none"?"cart_page":o.type,value:o.value}}},gr=t=>t.tiered_discounts.length===0?null:{tiered_discounts:t.tiered_discounts},H=t=>({id:t.id,name:t.name,options:t.options.map(e=>({name:e.name,value:e.value})),recurring_deliveries:t.recurring_deliveries,price_adjustments:t.price_adjustments.map(({value:e,value_type:r})=>({value:e,value_type:r}))}),Ae=t=>({name:t.name,options:t.options.map(e=>({name:e.name,values:e.values})),selling_plans:t.selling_plans.map(H)}),De=t=>({id:String(t.id),title:t.title,price:t.price,compare_at_price:t.compare_at_price,options:t.options,available_for_sale:t.available}),se=t=>t==null||typeof t=="string"?t:"src"in t?t.src:null,Oe=t=>({id:String(t.id),title:t.title,description:t.description,available_for_sale:t.available,featured_image:se(t.featured_image),images:t.images,requires_selling_plan:t.requires_selling_plan,selling_plan_groups:t.selling_plan_groups.map(Ae)}),Te=t=>{const e=yr(t.selling_plan_groups);return{...Oe(t),handle:t.handle,tags:t.tags,price_range:{min:t.price_min,max:t.price_max},compare_at_price_range:{min:t.compare_at_price_min,max:t.compare_at_price_max},options:t.options,variants:t.variants.map(r=>({...De(r),selling_plan_allocations:r.selling_plan_allocations.map(n=>({price:n.price,compare_at_price:n.compare_at_price,selling_plan:H(e[`${n.selling_plan_group_id}-${n.selling_plan_id}`])})),option1:r.option1,option2:r.option2,option3:r.option3,sku:r.sku||"",requires_shipping:r.requires_shipping,taxable:r.taxable,featured_image:se(r.featured_image),public_title:r.public_title,requires_selling_plan:r.requires_selling_plan}))}},wr=({items_count:t,ranges:e})=>e.length>0?e.map(({quantity_max:r,quantity_min:n})=>({min:n,max:r})):[{min:t,max:t}],yr=t=>t.reduce((e,r)=>(r.selling_plans.forEach(n=>{const i=`${r.id}-${n.id}`;e[i]=n}),e),{}),br=t=>Array.isArray(t)?t:[];function oe(t){const e=fr(t.bundle_settings),r=t.variants.reduce((n,i)=>(n[i.id]=i,n),{});return{id:String(t.id),title:t.title,description:t.description||null,handle:t.handle,options:t.options.map(n=>({name:n.name,position:n.position,values:n.values})),default_variant_id:e.default_variant_id,default_selling_plan_id:e.default_selling_plan_id?Number(e.default_selling_plan_id):null,available_for_sale:t.available,requires_selling_plan:t.requires_selling_plan,bundle_settings:{is_customizable:e.is_customizable,price_rule:e.price_rule,customization_window:e.customization_window,max_quantity_per_variant:e.max_quantity_per_variant,collapsible_collections:e.collapsible_collections,show_product_variants:e.show_product_variants,product_details_modal_enabled:e.product_details_modal_enabled,show_variants_as_individual_products:t.bundle_settings.settings.display_variants_as_separate_products_in_list,post_add_to_cart_behavior:e.addToCartBehavior},variants:t.bundle_settings.variants.filter(({enabled:n})=>n).map((n,i)=>{const s=r[String(n.external_variant_id)];return{id:String(n.external_variant_id),title:s.title,price:s.price,compare_at_price:s.compare_at_price,image:s.image||"",available_for_sale:s.available,options:s.options,requires_selling_plan:s.requires_selling_plan,selling_plan_allocations:s.selling_plan_allocations.map(o=>({price:o.price,compare_at_price:o.compare_at_price,selling_plan:H(o.selling_plan)})),ranges:wr(n),collections:n.option_sources.map(o=>({id:o.option_source_id,source_platform:"shopify",min:o.quantity_min||0,max:o.quantity_max,position:o.position})),default_selections:n.selection_defaults.map(o=>({quantity:o.quantity,product:{id:String(o.product.id),handle:o.handle,title:o.product.title,description:o.product.description,images:o.product.images},variant:{id:o.external_variant_id,title:o.variant.title,featured_image:se(o.variant.featured_image),sku:o.sku||""}})),position:i}}),selling_plan_groups:t.selling_plan_groups.map(Ae),collections:Object.values(t.collections).reduce((n,i)=>(Array.isArray(i.products)&&(n[String(i.id)]={id:String(i.id),title:i.title,handle:i.handle,products:i.products.map(Te)}),n),{}),addons:t.addons.products.length?{collection_id:e.addons?.collection_id||"",collection_handle:e.addons?.collection_handle||"",products:t.addons.products.map(n=>({...Oe(n),price_range:{min:n.price,max:n.price},compare_at_price_range:{min:n.compare_at_price||0,max:n.compare_at_price},variants:n.variants.map(i=>({...De(i),image:i.image,selling_plan_allocations:i.selling_plan_allocations.map(s=>({price:s.price,compare_at_price:s.compare_at_price,selling_plan:H(s.selling_plan)}))}))}))}:null,cross_sells:t.cross_sells.products.length?{collection_id:e.cross_sells?.collection_id||"",collection_handle:e.cross_sells?.collection_handle||"",products:t.cross_sells.products.map(Te)}:null,incentives:gr(t.incentives),filters:br(t.filters),templates:t.bundle_settings.layout_settings.templates||null,globalStyles:t.bundle_settings.layout_settings.globalStyles||null}}async function vr(t,e){return e?.source==="shopify_storefront"?$r():Sr(t,e?.country_code)}async function Sr(t,e){const{appName:r,appVersion:n}=b(),i={"X-Recharge-Sdk-Fn":"loadFromOnlineStore","X-Recharge-Sdk-Version":"2.7.0",...r?{"X-Recharge-Sdk-App-Name":r}:{},...n?{"X-Recharge-Sdk-App-Version":n}:{}};if(!e){const o=await A("get",`/bundle-data/${p(t)}`,{headers:i});return oe(o)}const s=new FormData;s.append("form_type","localization"),s.append("_method","put"),s.append("return_to",`${pe}/bundle-data/${t}`),s.append("country_code",e);try{const o=await $("post","/localization",{headers:{"Content-Type":"multipart/form-data",...i},data:s});return oe(o)}catch{const o=await A("get",`/bundle-data/${p(t)}`,{headers:i});return oe(o)}}async function $r(t,e){if(!b().storeIdentifier)throw new Error("Store identifier is required for Shopify Storefront API requests");return{}}var Ir=Object.freeze({__proto__:null,loadBundleData:vr});function qr(t){try{return JSON.parse(t)}catch{return t}}function Er(t){return Object.entries(t).reduce((e,[r,n])=>({...e,[r]:qr(n)}),{})}const Fe=t=>typeof t=="string"?t!=="0"&&t!=="false":!!t;function ae(t,e){const r=new Set(e),n={};for(const i of Object.keys(t))r.has(i)||(n[i]=t[i]);return n}function Re(t){const e=Er(t),r=e.auto_inject===void 0?!0:e.auto_inject,n=e.display_on??[],i=e.first_option==="autodeliver";return{...ae(e,["display_on","first_option"]),auto_inject:r,valid_pages:n,is_subscription_first:i,autoInject:r,validPages:n,isSubscriptionFirst:i}}function Ne(t){const e=t.subscription_options?.storefront_purchase_options==="subscription_only";return{...t,is_subscription_only:e,isSubscriptionOnly:e}}function Cr(t){return t.map(e=>{const r={};return Object.entries(e).forEach(([n,i])=>{Object.defineProperty(r,n,{value:Ne(i),enumerable:!0,writable:!0,configurable:!0})}),r})}const ce="2020-12",xr={store_currency:{currency_code:"USD",currency_symbol:"$",decimal_separator:".",thousands_separator:",",currency_symbol_location:"left"}},j=new Map;function G(t,e){return j.has(t)||j.set(t,e()),j.get(t)}async function de(t,e){if(t===void 0||t==="")throw new Error("ID is required");const r=e?.version??"2020-12",{product:n}=await G(`product.${t}.${r}`,()=>U("get",`/product/${r}/${p(t)}.json`));return r==="2020-12"?Ne(n):n}async function Be(){return await G("storeSettings",()=>U("get",`/${ce}/store_settings.json`).catch(()=>xr))}async function Me(){const{widget_settings:t}=await G("widgetSettings",()=>U("get",`/${ce}/widget_settings.json`));return Re(t)}async function je(){const{products:t,widget_settings:e,store_settings:r,meta:n}=await G("productsAndSettings",()=>U("get",`/product/${ce}/products.json`));return n?.status==="error"?Promise.reject(n.message):{products:Cr(t),widget_settings:Re(e),store_settings:r??{}}}async function kr(){const{products:t}=await je();return t}async function Pr(t){const[e,r,n]=await Promise.all([de(t),Be(),Me()]);return{product:e,store_settings:r,widget_settings:n,storeSettings:r,widgetSettings:n}}async function Ar(t){const{bundle_product:e}=await de(t);return e}async function Ue(){return Array.from(j.keys()).forEach(t=>j.delete(t))}var Dr=Object.freeze({__proto__:null,getCDNBundleSettings:Ar,getCDNProduct:de,getCDNProductAndSettings:Pr,getCDNProducts:kr,getCDNProductsAndSettings:je,getCDNStoreSettings:Be,getCDNWidgetSettings:Me,resetCDNCache:Ue});async function Or(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("get","/charges",{id:e,query:{include:r?.include}},a(t,"getCharge"));return n}function Tr(t,e){return c("get","/charges",{query:e},a(t,"listCharges"))}async function Fr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/charges/${p(e)}/apply_discount`,{data:{discount_code:r}},a(t,"applyDiscountToCharge"));return n}async function Rr(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{charge:r}=await c("post",`/charges/${p(e)}/remove_discount`,{},a(t,"removeDiscountsFromCharge"));return r}async function Nr(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");if(r===void 0||r.length===0)throw new Error("Purchase item IDs are required");const{charge:i}=await c("post",`/charges/${p(e)}/skip`,{query:n,data:{purchase_item_ids:r.map(s=>Number(s))}},a(t,"skipCharge"));return i}async function Br(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");if(r===void 0||r.length===0)throw new Error("Purchase item IDs are required");const{charge:i}=await c("post",`/charges/${p(e)}/unskip`,{query:n,data:{purchase_item_ids:r.map(s=>Number(s))}},a(t,"unskipCharge"));return i}async function Mr(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{charge:r}=await c("post",`/charges/${p(e)}/process`,{},a(t,"processCharge"));return r}async function jr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/charges/${p(e)}/change_next_charge_date`,{data:{next_charge_date:r}},a(t,"rescheduleCharge"));return n}var Ur=Object.freeze({__proto__:null,applyDiscountToCharge:Fr,getCharge:Or,listCharges:Tr,processCharge:Mr,removeDiscountsFromCharge:Rr,rescheduleCharge:jr,skipCharge:Nr,unskipCharge:Br});async function Le(t,e){if(!["2020-12","2022-06"].includes(e.format_version))throw new Error("Missing or unsupported format_version.");return c("get","/product_search",{query:e,headers:{"X-Recharge-Version":"2021-01"}},a(t,"productSearch"))}var Lr=Object.freeze({__proto__:null,productSearch:Le});async function Ve(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{collection:r}=await c("get","/collections",{id:e},a(t,"getCollection"));return r}function Vr(t,e){return c("get","/collections",{query:e},a(t,"listCollections"))}async function zr(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");if(!["2020-12","2022-06"].includes(r.format_version))throw new Error("Missing or unsupported format_version.");const n=a(t,"listCollectionProducts"),[{sort_order:i,manual_sort_order:s},{products:o}]=await Promise.all([Ve(n,e),Le(n,{...r,collection_ids:[e],limit:250})]);if(i==="manual")return{products:s.reduce((u,f)=>{const h=o.find(_=>_.external_product_id===f);return h&&u.push(h),u},[])};{const u=Xr(i);return{products:o.slice().sort(u)}}}function ze(t,e){const r=t.external_created_at,n=e.external_created_at;return r<n?-1:n>r?1:0}function Xe(t,e){const r=t.external_product_id,n=e.external_product_id;return r<n?-1:n>r?1:0}function He(t,e){const r=t.title.toLowerCase(),n=e.title.toLowerCase();return r<n?-1:n>r?1:0}function Xr(t){switch(t){case"created_at-asc":return ze;case"created_at-desc":return(e,r)=>ze(r,e);case"id-asc":return Xe;case"id-desc":return(e,r)=>Xe(r,e);case"title-asc":return He;case"title-desc":return(e,r)=>He(r,e)}}var Hr=Object.freeze({__proto__:null,getCollection:Ve,listCollectionProducts:zr,listCollections:Vr});async function Gr(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer:n}=await c("get","/customers",{id:r,query:{include:e?.include}},a(t,"getCustomer"));return n}async function Ge(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer:n}=await c("put","/customers",{id:r,data:e},a(t,"updateCustomer"));return n}async function Wr(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{deliveries:n}=await c("get",`/customers/${p(r)}/delivery_schedule`,{query:e},a(t,"getDeliverySchedule"));return n}async function W(t,e){return c("get","/portal_access",{query:e},a(t,"getCustomerPortalAccess"))}function ue(t){return t.replace(/\/portal\/?$/,"/pages/")}async function Kr(t,e,r){if(e===void 0||e==="")throw new Error("Subscription ID is required");const{base_url:n,customer_hash:i,temp_token:s}=await W(a(t,"getActiveChurnLandingPageURL"));return`${ue(n)}${i}/subscriptions/${e}/cancel?token=${s}&subscription=${e}&redirect_to=${encodeURIComponent(r)}`}async function Yr(t){const{base_url:e,customer_hash:r,temp_token:n}=await W(a(t,"getFailedPaymentMethodRecoveryLandingPageURL"));return`${ue(e)}account/payment-methods?token=${n}&hash=${r}`}async function Jr(t,e,r){if(e===void 0||e==="")throw new Error("Gift ID is required");const{base_url:n,customer_hash:i,temp_token:s}=await W(a(t,"getGiftRedemptionLandingPageURL"));return`${ue(n)}${i}/gifts/${e}?token=${s}&redirect_to=${encodeURIComponent(r)}`}const We={SHOPIFY_UPDATE_PAYMENT_INFO:{type:"email",template_type:"shopify_update_payment_information"},SHOPIFY_MIGRATE_PAYMENT_INFO:{type:"email",template_type:"shopify_migrate_payment_information"}};async function Qr(t,e,r){const n=t.customerId;if(!n)throw new Error("Not logged in.");if(!Object.prototype.hasOwnProperty.call(We,e))throw new Error("Notification not supported.");const i=We[e];return c("post",`/customers/${p(n)}/notifications`,{data:{...i,template_vars:r}},a(t,"sendCustomerNotification"))}async function Zr(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{credit_summary:n}=await c("get",`/customers/${p(r)}/credit_summary`,{query:{include:e?.include}},a(t,"getCreditSummary"));return n}var en=Object.freeze({__proto__:null,getActiveChurnLandingPageURL:Kr,getCreditSummary:Zr,getCustomer:Gr,getCustomerPortalAccess:W,getDeliverySchedule:Wr,getFailedPaymentMethodRecoveryLandingPageURL:Yr,getGiftRedemptionLandingPageURL:Jr,sendCustomerNotification:Qr,updateCustomer:Ge});async function tn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{credit_summary:n}=await c("get",`/customers/${p(r)}/credit_summary`,{query:{include:e?.include,presentment_currency_code:e?.presentment_currency_code}},a(t,"getCreditSummary"));return n}function rn(t,{recurring:e}){if(!t.customerId)throw new Error("Not logged in.");const r={};return e!==void 0&&(r.apply_credit_to_next_recurring_charge=e),Ge(a(t,"setApplyCreditsToNextCharge"),r)}async function nn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");const{customer_id:n,...i}=e??{};return await c("get","/credit_accounts",{query:{...i,customer_id:r}},a(t,"listCreditAccounts"))}var sn=Object.freeze({__proto__:null,getCreditSummary:tn,listCreditAccounts:nn,setApplyCreditsToNextCharge:rn});async function on(t,e,r){return await c("post","/customer_surveys/cancellation_prevention",{data:{customer_id:e,subscription_id:r}},a(t,"getCustomerSurveyReasons"))}async function an(t,e,r,n){return await c("post",`/customer_surveys/${p(r)}/customer_response`,{data:{customer_id:e,response_id:n}},a(t,"getCustomerSurveyOffers"))}async function cn(t,e){return await c("post","/offers/claim",{data:e},a(t,"claimOfferCustomerSurvey")),{}}var dn=Object.freeze({__proto__:null,claimOfferCustomerSurvey:cn,getCustomerSurveyOffers:an,getCustomerSurveyReasons:on});async function un(t,e,r,n){if(e===void 0||e==="")throw new Error("Subscription ID is required");return c("post",`/flows/customer_portal_flow/subscription/${p(e)}`,{query:{action:r,flow_id:n?.flow_id},data:{}},a(t,"triggerCustomerPortalFlow"))}var ln=Object.freeze({__proto__:null,triggerCustomerPortalFlow:un});function pn(t,e){if(!t.customerId)throw new Error("Not logged in.");return c("get","/gift_purchases",{query:e},a(t,"listGiftPurchases"))}async function hn(t,e){if(!t.customerId)throw new Error("Not logged in.");if(e===void 0||e==="")throw new Error("ID is required");const{gift_purchase:r}=await c("get","/gift_purchases",{id:e},a(t,"getGiftPurchase"));return r}var _n=Object.freeze({__proto__:null,getGiftPurchase:hn,listGiftPurchases:pn});function mn(t,e){return c("get","/incentives/tiered_discounts",{query:e},a(t,"listTieredDiscounts"))}async function fn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{tiered_discount:r}=await c("get",`/incentives/tiered_discounts/${p(e)}`,{},a(t,"getTieredDiscount"));return r}function gn(t,e){return c("post","/incentives/tiered_discounts/offers",{data:e},a(t,"getTieredDiscountOffers"))}var wn=Object.freeze({__proto__:null,getTieredDiscount:fn,getTieredDiscountOffers:gn,listTieredDiscounts:mn});async function yn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{membership:r}=await c("get","/memberships",{id:e},a(t,"getMembership"));return r}function bn(t,e){return c("get","/memberships",{query:e},a(t,"listMemberships"))}async function vn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/cancel`,{data:r},a(t,"cancelMembership"));return n}async function Sn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/activate`,{data:r},a(t,"activateMembership"));return n}async function $n(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership:n}=await c("post",`/memberships/${p(e)}/change`,{data:r},a(t,"changeMembership"));return n}var In=Object.freeze({__proto__:null,activateMembership:Sn,cancelMembership:vn,changeMembership:$n,getMembership:yn,listMemberships:bn});async function qn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{membership_program:n}=await c("get","/membership_programs",{id:e,query:{include:r?.include}},a(t,"getMembershipProgram"));return n}function En(t,e){return c("get","/membership_programs",{query:e},a(t,"listMembershipPrograms"))}var Cn=Object.freeze({__proto__:null,getMembershipProgram:qn,listMembershipPrograms:En});async function xn(t,e){const{metafield:r}=await c("post","/metafields",{data:{metafield:e}},a(t,"createMetafield"));return r}async function kn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{metafield:n}=await c("put","/metafields",{id:e,data:{metafield:r}},a(t,"updateMetafield"));return n}function Pn(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/metafields",{id:e},a(t,"deleteMetafield"))}var An=Object.freeze({__proto__:null,createMetafield:xn,deleteMetafield:Pn,updateMetafield:kn});async function Dn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{onetime:r}=await c("get","/onetimes",{id:e},a(t,"getOnetime"));return r}function On(t,e){return c("get","/onetimes",{query:e},a(t,"listOnetimes"))}async function Tn(t,e){const{onetime:r}=await c("post","/onetimes",{data:e},a(t,"createOnetime"));return r}async function Fn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{onetime:n}=await c("put","/onetimes",{id:e,data:r},a(t,"updateOnetime"));return n}function Rn(t,e){if(e===void 0||e==="")throw new Error("ID is required");return c("delete","/onetimes",{id:e},a(t,"deleteOnetime"))}var Nn=Object.freeze({__proto__:null,createOnetime:Tn,deleteOnetime:Rn,getOnetime:Dn,listOnetimes:On,updateOnetime:Fn});async function Bn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{order:r}=await c("get","/orders",{id:e},a(t,"getOrder"));return r}function Mn(t,e){return c("get","/orders",{query:e},a(t,"listOrders"))}async function jn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{order:r}=await c("post",`/orders/${p(e)}/delay`,{},a(t,"delayOrder"));return r}var Un=Object.freeze({__proto__:null,delayOrder:jn,getOrder:Bn,listOrders:Mn});function Ln(t){try{const e=new URL(t),r=e.hostname==="spreedly.com"||e.hostname.endsWith(".spreedly.com");return e.protocol==="https:"&&r?e:null}catch{return null}}async function Vn(t,e){return typeof window<"u"&&window.Spreedly?Promise.resolve():new Promise((r,n)=>{if(typeof document>"u"){n(new Error("Document is not available. This function must be called in a browser environment."));return}const i=Ln(t);if(!i){n(new Error("Payment iFrame script must be served over https from spreedly.com"));return}const s=Date.now()+3e4;let o;const u=()=>{window.Spreedly?r():Date.now()>=s?n(new Error("Timed out loading payment iFrame script")):o=setTimeout(u,50)};if(Array.from(document.scripts).find(h=>h.src===i.href&&h.integrity===e)){u();return}const f=document.createElement("script");f.src=i.href,f.integrity=e,f.crossOrigin="anonymous",f.addEventListener("error",()=>{clearTimeout(o),n(new Error("Failed to load payment iFrame script"))}),document.head.appendChild(f),u()})}async function zn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{payment_method:n}=await c("get","/payment_methods",{id:e,query:{include:r?.include}},a(t,"getPaymentMethod"));return n}async function Ke(t,e){const{payment_method:r}=await c("post","/payment_methods",{data:{...e,customer_id:t.customerId}},a(t,"createPaymentMethod"));return r}async function Xn(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{payment_method:n}=await c("put","/payment_methods",{id:e,data:r},a(t,"updatePaymentMethod"));return n}function Hn(t,e){return c("get","/payment_methods",{query:e},a(t,"listPaymentMethods"))}async function Gn(t,e){const r=await Wn(t,e),n=r.external.environment_key,i=r.payment_method_intent_id,s=r.external_customer_id.ecommerce,o=r.external.resource_url,u=r.external.integrity_hash,f=r.payment_method?.processor_payment_method_token;await Vn(o,u);let h=!1,_=null,y=null,v=null;return{mount(d,m){if(typeof window>"u"||!window.Spreedly)throw new Error("Payment script failed to load");window.Spreedly.init(n,{numberEl:d.numberElementId,cvvEl:d.cvvElementId}),window.Spreedly.on("ready",()=>{h=!0,d.styles&&(window.Spreedly.setStyle("number",d.styles),window.Spreedly.setStyle("cvv",d.styles)),d.numberLabel&&window.Spreedly.setLabel("number",d.numberLabel),d.cvvLabel&&window.Spreedly.setLabel("cvv",d.cvvLabel),d.numberPlaceholder&&window.Spreedly.setPlaceholder("number",d.numberPlaceholder),d.cvvPlaceholder&&window.Spreedly.setPlaceholder("cvv",d.cvvPlaceholder),d.numberFormat==="plainFormat"?(d.numberFieldType&&window.Spreedly.setFieldType("number",d.numberFieldType),d.cvvFieldType&&window.Spreedly.setFieldType("cvv",d.cvvFieldType),window.Spreedly.setNumberFormat("plainFormat")):d.numberFormat==="maskedFormat"?(window.Spreedly.setFieldType("cvv","text"),window.Spreedly.setFieldType("number","text"),window.Spreedly.setNumberFormat("maskedFormat")):d.numberFormat==="prettyFormat"?(d.numberFieldType==="text"||d.numberFieldType==="tel"?window.Spreedly.setFieldType("number",d.numberFieldType):window.Spreedly.setFieldType("number","tel"),d.cvvFieldType==="text"||d.cvvFieldType==="tel"?window.Spreedly.setFieldType("cvv",d.cvvFieldType):window.Spreedly.setFieldType("cvv","tel"),window.Spreedly.setNumberFormat("prettyFormat")):(d.numberFieldType&&window.Spreedly.setFieldType("number",d.numberFieldType),d.cvvFieldType&&window.Spreedly.setFieldType("cvv",d.cvvFieldType)),m?.onReady?.()}),window.Spreedly.on("fieldEvent",(g,q,k,D)=>{m?.onFieldEvent?.(g,q,k,D)}),window.Spreedly.on("errors",g=>{m?.onErrors?.(g)}),window.Spreedly.on("paymentMethod",(g,q)=>{_=g,m?.onPaymentMethod?.(g,q),y&&(_=null,y(g),y=null)})},tokenize(d){if(!h||!window.Spreedly)throw new Error("Payment form is not initialized");let m=String(d.year);m.length===2&&(m=`20${m}`);const g=String(d.month).padStart(2,"0");"full_name"in d?window.Spreedly.tokenizeCreditCard({full_name:d.full_name,month:g,year:m}):window.Spreedly.tokenizeCreditCard({first_name:d.first_name,last_name:d.last_name,month:g,year:m})},async submit(d){if(!h)throw new Error("Payment form is not initialized");if(_){const m=_;return _=null,Ye(t,m,d,{external_payment_method_id:f,payment_method_intent_id:i,external_customer_id:s})}return new Promise((m,g)=>{v=d,y=async q=>{try{const k=await Ye(t,q,v,{external_payment_method_id:f,payment_method_intent_id:i,external_customer_id:s});m(k)}catch(k){g(k)}finally{v=null}},this.tokenize(d.card_details)})},reset(){window.Spreedly&&window.Spreedly.reload(),_=null,y=null,v=null},unmount(){window.Spreedly&&window.Spreedly.removeHandlers(),h=!1,_=null,y=null,v=null},addEventHandlers(d){d.onReady&&window.Spreedly.on("ready",d.onReady),d.onFieldEvent&&window.Spreedly.on("fieldEvent",d.onFieldEvent),d.onErrors&&window.Spreedly.on("errors",d.onErrors),d.onPaymentMethod&&window.Spreedly.on("paymentMethod",d.onPaymentMethod)},removeHandlers(){window.Spreedly&&window.Spreedly.removeHandlers()},setFieldType(d,m){window.Spreedly.setFieldType(d,m)},setLabel(d,m){window.Spreedly.setLabel(d,m)},setNumberFormat(d){window.Spreedly.setNumberFormat(d)},setPlaceholder(d,m){window.Spreedly.setPlaceholder(d,m)},setStyle(d,m){window.Spreedly.setStyle(d,m)}}}async function Wn(t,e){const r=t.customerId;if(!r)throw new Error("Not logged in.");return await c("post","/payment_method_intents",{data:{customer_id:r,payment_method_id:e}},a(t,"createFrictionlessPaymentIntentV1"))}async function Ye(t,e,{billing_address:r,default_payment_method:n,address_ids:i,apply_to_all_subscription_addresses:s},{external_payment_method_id:o,payment_method_intent_id:u,external_customer_id:f}){return await Ke(a(t,"submitFrictionlessPaymentMethodV1"),{default:n??!1,payment_type:"CREDIT_CARD",processor_customer_token:f.toString(),processor_name:"frictionless",processor_payment_method_token:e,billing_address:r,payment_method_intent_id:u,address_ids:i,external_payment_method_id:o,apply_to_all_subscription_addresses:s})}var Kn=Object.freeze({__proto__:null,createPaymentMethod:Ke,getPaymentMethod:zn,initFrictionlessPaymentV1:Gn,listPaymentMethods:Hn,updatePaymentMethod:Xn});async function Yn(t,e){if(e===void 0||e==="")throw new Error("ID is required");const{plan:r}=await c("get","/plans",{id:e},a(t,"getPlan"));return r}function Jn(t,e){return c("get","/plans",{query:e},a(t,"listPlans"))}var Qn=Object.freeze({__proto__:null,getPlan:Yn,listPlans:Jn});async function Zn(t,e){return await c("get","/shop/shipping_countries",{query:e,headers:{"X-Recharge-Version":"2021-01"}},a(t,"getShippingCountries"))}async function ei(t){return await c("get","/shop/settings",{headers:{"X-Recharge-Version":"2021-01"}},a(t,"getStoreSettings"))}var ti=Object.freeze({__proto__:null,getShippingCountries:Zn,getStoreSettings:ei});function ri(t,e){return{...ae(e,["address_id","external_variant_id","external_product_id","charge_interval_frequency","order_interval_frequency","price","status"]),customer_id:parseInt(t,10),shopify_variant_id:e.external_variant_id.ecommerce?parseInt(e.external_variant_id.ecommerce,10):void 0,...e.charge_interval_frequency?{charge_interval_frequency:`${e.charge_interval_frequency}`}:{},...e.order_interval_frequency?{order_interval_frequency:`${e.order_interval_frequency}`}:{},status:e.status?e.status.toUpperCase():void 0}}function ni(t,e){return{...ae(e,["external_variant_id","external_product_id","charge_interval_frequency","order_interval_frequency","price","use_external_variant_defaults"]),shopify_variant_id:e.external_variant_id?.ecommerce?parseInt(e.external_variant_id.ecommerce,10):void 0,...e.charge_interval_frequency?{charge_interval_frequency:`${e.charge_interval_frequency}`}:void 0,...e.order_interval_frequency?{order_interval_frequency:`${e.order_interval_frequency}`}:void 0,force_update:t}}function Je(t){const{id:e,address_id:r,customer_id:n,analytics_data:i,cancellation_reason:s,cancellation_reason_comments:o,cancelled_at:u,charge_interval_frequency:f,created_at:h,expire_after_specific_number_of_charges:_,shopify_product_id:y,shopify_variant_id:v,has_queued_charges:d,is_prepaid:m,is_skippable:g,is_swappable:q,max_retries_reached:k,next_charge_scheduled_at:D,order_day_of_month:E,order_day_of_week:O,order_interval_frequency:$i,order_interval_unit:Ii,presentment_currency:qi,price:Ei,product_title:Ci,properties:xi,quantity:ki,sku:Pi,sku_override:Ai,status:Di,updated_at:Oi,variant_title:Ti}=t;return{id:e,address_id:r,customer_id:n,analytics_data:i,cancellation_reason:s,cancellation_reason_comments:o,cancelled_at:u,charge_interval_frequency:parseInt(f,10),created_at:h,expire_after_specific_number_of_charges:_,external_product_id:{ecommerce:`${y}`},external_variant_id:{ecommerce:`${v}`},has_queued_charges:Fe(d),is_prepaid:m,is_skippable:g,is_swappable:q,max_retries_reached:Fe(k),next_charge_scheduled_at:D,order_day_of_month:E,order_day_of_week:O,order_interval_frequency:parseInt($i,10),order_interval_unit:Ii,presentment_currency:qi,price:`${Ei}`,product_title:Ci??"",properties:xi,quantity:ki,sku:Pi,sku_override:Ai,status:Di.toLowerCase(),updated_at:Oi,variant_title:Ti}}async function ii(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("get","/subscriptions",{id:e,query:{include:r?.include}},a(t,"getSubscription"));return n}function si(t,e){return c("get","/subscriptions",{query:e},a(t,"listSubscriptions"))}function oi(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");return c("get",`/subscriptions/${p(e)}/addons`,{query:r},a(t,"listSubscriptionAddons"))}async function ai(t,e,r){const{subscription:n}=await c("post","/subscriptions",{data:e,query:r},a(t,"createSubscription"));return n}async function ci(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("put","/subscriptions",{id:e,data:r,query:n},a(t,"updateSubscription"));return i}async function di(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("post",`/subscriptions/${p(e)}/set_next_charge_date`,{data:{date:r},query:n},a(t,"updateSubscriptionChargeDate"));return i}async function ui(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/change_address`,{data:{address_id:r}},a(t,"updateSubscriptionAddress"));return n}async function li(t,e,r,n){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:i}=await c("post",`/subscriptions/${p(e)}/cancel`,{data:r,query:n},a(t,"cancelSubscription"));return i}async function pi(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/activate`,{query:r},a(t,"activateSubscription"));return n}async function hi(t,e,r){if(e===void 0||e==="")throw new Error("ID is required");const{charge:n}=await c("post",`/subscriptions/${p(e)}/charges/skip`,{data:{date:r,subscription_id:`${e}`}},a(t,"skipSubscriptionCharge"));return n}async function _i(t,e,r={}){if(e===void 0||e==="")throw new Error("ID is required");const{subscription:n}=await c("post",`/subscriptions/${p(e)}/pricing_preview`,{data:r},a(t,"getSubscriptionPricingPreview"));return n}async function mi(t,e,r){if(e===void 0||e.length===0)throw new Error("Subscription IDs are required");const{onetimes:n}=await c("post","/purchase_items/skip_gift",{data:{purchase_item_ids:e.map(Number),recipient_address:r}},a(t,"skipGiftSubscriptionCharge"));return n}async function fi(t,e,r){const n=e.length;if(n<1||n>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:i}=t;if(!i)throw new Error("No customerId in session.");const s=e[0].address_id;if(!e.every(h=>h.address_id===s))throw new Error("All subscriptions must have the same address_id.");const o=e.map(h=>ri(i,h));let u;r?.allow_onetimes!==void 0&&(u={allow_onetimes:r.allow_onetimes});const{subscriptions:f}=await c("post",`/addresses/${p(s)}/subscriptions-bulk`,{data:{subscriptions:o,commit_update:!!r?.commit},headers:{"X-Recharge-Version":"2021-01"},query:u},a(t,"createSubscriptions"));return f.map(Je)}async function gi(t,e,r,n){if(e===void 0||e==="")throw new Error("Address ID is required");const i=r.length;if(i<1||i>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:s}=t;if(!s)throw new Error("No customerId in session.");const o=!!n?.force_update,u=r.map(_=>ni(o,_));let f;n?.allow_onetimes!==void 0&&(f={allow_onetimes:n.allow_onetimes});const{subscriptions:h}=await c("put",`/addresses/${p(e)}/subscriptions-bulk`,{data:{subscriptions:u,commit_update:!!n?.commit},headers:{"X-Recharge-Version":"2021-01"},query:f},a(t,"updateSubscriptions"));return h.map(Je)}async function wi(t,e,r,n){if(e===void 0||e==="")throw new Error("Address ID is required");const i=r.length;if(i<1||i>21)throw new Error("Number of subscriptions must be between 1 and 20.");const{customerId:s}=t;if(!s)throw new Error("No customerId in session.");let o;n?.allow_onetimes!==void 0&&(o={allow_onetimes:n.allow_onetimes}),await c("delete",`/addresses/${p(e)}/subscriptions-bulk`,{data:{subscriptions:r,send_email:!!n?.send_email,commit_update:!!n?.commit},headers:{"X-Recharge-Version":"2021-01"},query:o},a(t,"deleteSubscriptions"))}var yi=Object.freeze({__proto__:null,activateSubscription:pi,cancelSubscription:li,createSubscription:ai,createSubscriptions:fi,deleteSubscriptions:wi,getSubscription:ii,getSubscriptionPricingPreview:_i,listSubscriptionAddons:oi,listSubscriptions:si,skipGiftSubscriptionCharge:mi,skipSubscriptionCharge:hi,updateSubscription:ci,updateSubscriptionAddress:ui,updateSubscriptionChargeDate:di,updateSubscriptions:gi});const bi={get(t,e){return $("get",t,e)},post(t,e){return $("post",t,e)},put(t,e){return $("put",t,e)},delete(t,e){return $("delete",t,e)}};function vi(t){if(t)return t;if(window?.Shopify?.shop)return window.Shopify.shop;let e=window?.domain;if(!e){const r=location?.href.match(/(?:http[s]*:\/\/)*(.*?)\.(?=admin\.rechargeapps\.com)/i)?.[1].replace(/-sp$/,"");r&&(e=`${r}.myshopify.com`)}if(e)return e;throw new Error("No storeIdentifier was passed into init.")}function Si(t={}){const e=t,{storefrontAccessToken:r}=t;if(r&&!r.startsWith("strfnt"))throw new Error("Incorrect storefront access token used. See https://storefront.rechargepayments.com/client/docs/getting_started/package_setup/#initialization-- for more information.");Ze({storeIdentifier:vi(t.storeIdentifier),loginRetryFn:t.loginRetryFn,__unstable_twoFactorRetryFn:t.__unstable_twoFactorRetryFn,storefrontAccessToken:r,appName:t.appName,appVersion:t.appVersion,environment:e.environment?e.environment:"prod",environmentUri:e.environmentUri,customerHash:e.customerHash}),Ue()}const Qe={init:Si,api:bi,address:ht,auth:$t,bundle:mr,bundleData:Ir,charge:Ur,cdn:Dr,collection:Hr,credit:sn,customer:en,customerSurveys:dn,flow:ln,gift:_n,tieredDiscount:wn,membership:In,membershipProgram:Cn,metafield:An,onetime:Nn,order:Un,paymentMethod:Kn,plan:Qn,product:Lr,store:ti,subscription:yi};try{Qe.init()}catch{}return Qe}));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rechargeapps/storefront-client",
3
3
  "description": "Storefront client for Recharge",
4
- "version": "2.6.0",
4
+ "version": "2.7.0",
5
5
  "author": "Recharge Inc.",
6
6
  "license": "MIT",
7
7
  "main": "dist/cjs/index.js",
@@ -23,6 +23,7 @@
23
23
  "test:e2e": "start-server-and-test 'pnpm serve' http://127.0.0.1:8080 'pnpm cypress run --browser=chrome'",
24
24
  "test:e2e:debug": "start-server-and-test 'pnpm serve' http://127.0.0.1:8080 'pnpm cypress open --browser=chrome'",
25
25
  "test:watch": "vitest",
26
+ "console-script": "node scripts/console-script.mjs",
26
27
  "deploy": "pnpm deploy:cdn && pnpm deploy:npm",
27
28
  "deploy:cdn": "rc-scripts cdn deploy",
28
29
  "deploy:npm": "rc-scripts deploy-npm --package @rechargeapps/storefront-client",
@@ -42,22 +43,22 @@
42
43
  "@rollup/plugin-node-resolve": "15.2.3",
43
44
  "@rollup/plugin-replace": "5.0.7",
44
45
  "@types/spreedly-iframe-browser": "1.0.3",
45
- "@vitest/coverage-v8": "5.0.1",
46
- "concurrently": "8.2.2",
47
- "cypress": "15.18.0",
46
+ "@vitest/coverage-v8": "5.0.5",
47
+ "concurrently": "10.0.6",
48
+ "cypress": "16.2.0",
48
49
  "dotenv": "16.3.1",
49
- "esbuild": "0.19.5",
50
+ "esbuild": "0.28.2",
50
51
  "http-server": "14.1.1",
51
- "jsdom": "22.1.0",
52
- "rollup": "4.3.0",
52
+ "jsdom": "30.1.3",
53
+ "rollup": "4.64.12",
53
54
  "rollup-plugin-banner2": "1.2.2",
54
55
  "rollup-plugin-dts": "6.5.1",
55
- "rollup-plugin-esbuild": "6.1.0",
56
+ "rollup-plugin-esbuild": "6.2.1",
56
57
  "rollup-plugin-polyfill-node": "0.13.0",
57
58
  "rollup-plugin-subpath-externals": "3.4.0",
58
59
  "rollup-plugin-typescript-paths": "1.5.0",
59
- "start-server-and-test": "2.0.2",
60
- "vitest": "5.0.1",
60
+ "start-server-and-test": "3.0.13",
61
+ "vitest": "5.0.5",
61
62
  "vitest-fetch-mock": "0.3.0"
62
63
  },
63
64
  "prettier": "@recharge-packages/prettier-config",