@zonos/elements 1.5.1 → 1.5.2

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 (229) hide show
  1. package/dist/cjs/{cart-CiXlehwQ.js → cart-BJpqPdFU.js} +13 -13
  2. package/dist/cjs/{collect-Drr8fY-q.js → collect-CyUttsvB.js} +3 -3
  3. package/dist/cjs/{getMissingRequiredShippingFields-DI6qF1z3.js → getMissingRequiredShippingFields-DEbNbRAZ.js} +1 -1
  4. package/dist/cjs/{handleFetch-DQLhurnE.js → handleFetch-DVfjFTYO.js} +181 -71
  5. package/dist/cjs/{hasInclusivePrice-84KS94yH.js → hasInclusivePrice-CEPf3_FG.js} +1 -1
  6. package/dist/cjs/index.cjs.js +104 -12
  7. package/dist/cjs/{invoice-5hVfSXpb.js → invoice-DzRkkpLu.js} +3 -3
  8. package/dist/cjs/{localization-B2mjW0Xa.js → localization-BhNVhLZs.js} +24 -48
  9. package/dist/cjs/{paypal-pd8Nz_R_.js → paypal-DCSqbdjW.js} +4 -4
  10. package/dist/cjs/{placeTestOrder-DrI8rD9o.js → placeTestOrder-Bkip4PUT.js} +3 -3
  11. package/dist/cjs/{renderCheckoutCurrency-u5q8YdUb.js → renderCheckoutCurrency-BDvEZ3Hv.js} +2 -2
  12. package/dist/cjs/{shouldShowLanguageSelect-gBg4KeTQ.js → shouldShowLanguageSelect-NOVWOU53.js} +1 -1
  13. package/dist/cjs/{submitGtag-Rc-S3PnH.js → submitGtag-D4sB7w4z.js} +1 -1
  14. package/dist/cjs/{taxIdFields-BrIaPTcd.js → taxIdFields-e4OCgr8K.js} +2 -2
  15. package/dist/cjs/{updateCheckoutSessionAttributes-d0IKpwW8.js → updateCheckoutSessionAttributes-KxwcsKhM.js} +1 -1
  16. package/dist/cjs/zonos-address-completion-dialog_7.cjs.entry.js +5 -5
  17. package/dist/cjs/zonos-address-display_2.cjs.entry.js +2 -2
  18. package/dist/cjs/zonos-address_4.cjs.entry.js +4 -4
  19. package/dist/cjs/zonos-airwallex-payment.cjs.entry.js +4 -4
  20. package/dist/cjs/zonos-card_5.cjs.entry.js +5 -5
  21. package/dist/cjs/zonos-cart-items_12.cjs.entry.js +18 -18
  22. package/dist/cjs/zonos-checkout.cjs.entry.js +9 -9
  23. package/dist/cjs/zonos-collect-cart-items_3.cjs.entry.js +3 -3
  24. package/dist/cjs/zonos-collect-finish_6.cjs.entry.js +9 -9
  25. package/dist/cjs/zonos-collect.cjs.entry.js +6 -6
  26. package/dist/cjs/zonos-controller.cjs.entry.js +6 -6
  27. package/dist/cjs/zonos-country-flag.cjs.entry.js +2 -2
  28. package/dist/cjs/zonos-country-select_4.cjs.entry.js +3 -3
  29. package/dist/cjs/zonos-hello-dialog.cjs.entry.js +3 -3
  30. package/dist/cjs/zonos-hello.cjs.entry.js +2 -2
  31. package/dist/cjs/zonos-invoice-cart-items_2.cjs.entry.js +5 -5
  32. package/dist/cjs/zonos-invoice-finish_5.cjs.entry.js +9 -9
  33. package/dist/cjs/zonos-invoice.cjs.entry.js +6 -6
  34. package/dist/cjs/zonos-language-select_2.cjs.entry.js +2 -2
  35. package/dist/cjs/zonos-policy-consent_2.cjs.entry.js +4 -4
  36. package/dist/collection/components/checkout/zonos-checkout/zonos-checkout-finish/zonos-checkout-finish.js +8 -7
  37. package/dist/collection/components/checkout/zonos-checkout/zonos-checkout.js +4 -3
  38. package/dist/collection/components/main/zonos-controller.js +3 -2
  39. package/dist/collection/components/store/checkout/cart.js +3 -2
  40. package/dist/collection/components/store/checkout/stripe.js +10 -9
  41. package/dist/collection/components/store/storageStore.js +7 -6
  42. package/dist/collection/components/utils/__tests__/helpers/blockStorage.js +24 -0
  43. package/dist/collection/components/utils/api/getExchangeRate.js +2 -1
  44. package/dist/collection/components/utils/handleFetch.js +19 -9
  45. package/dist/collection/components/utils/hello/countryOverrideStorage.js +17 -40
  46. package/dist/collection/components/utils/logging/installConstructorCapture.js +58 -0
  47. package/dist/collection/components/utils/logging/reportBlockedStorage.js +34 -0
  48. package/dist/collection/components/utils/logging/sendErrorLog.js +8 -1
  49. package/dist/collection/components/utils/logging/startZonosInit.js +35 -0
  50. package/dist/collection/components/utils/logging/thrownMessage.js +16 -0
  51. package/dist/collection/components/utils/safeStorage.js +39 -0
  52. package/dist/collection/scripts/_getZonosQaUrl.js +3 -2
  53. package/dist/collection/scripts/_zonosBase.js +6 -2
  54. package/dist/collection/types/generated/graphql.frontend.types.js +0 -16
  55. package/dist/collection/types/generated/graphql.internal.types.js +215 -1
  56. package/dist/esm/{cart-DmJkjiDE.js → cart-BS5mSI8x.js} +13 -13
  57. package/dist/esm/{collect-BV5GTPmh.js → collect-B9ZxDDl7.js} +3 -3
  58. package/dist/esm/{getMissingRequiredShippingFields-DljgpDZe.js → getMissingRequiredShippingFields-BkEV865q.js} +1 -1
  59. package/dist/esm/{handleFetch-D5GYDF-O.js → handleFetch-BFVO7oAR.js} +178 -72
  60. package/dist/esm/{hasInclusivePrice-DhGXpH2D.js → hasInclusivePrice-zSvDReDb.js} +1 -1
  61. package/dist/esm/index.js +104 -12
  62. package/dist/esm/{invoice-CO-iqlni.js → invoice-6iTuS6ek.js} +3 -3
  63. package/dist/esm/{localization-DHM91diu.js → localization-CXHiWcJp.js} +24 -48
  64. package/dist/esm/{paypal-BfW5aLJw.js → paypal-BE_NVBoy.js} +4 -4
  65. package/dist/esm/{placeTestOrder-CyWUFhxD.js → placeTestOrder-BXA9K9Iy.js} +3 -3
  66. package/dist/esm/{renderCheckoutCurrency-B31ZNkUv.js → renderCheckoutCurrency-KMa4HlAf.js} +2 -2
  67. package/dist/esm/{shouldShowLanguageSelect-DwSfSHar.js → shouldShowLanguageSelect-BI_ApEsQ.js} +1 -1
  68. package/dist/esm/{submitGtag-BEFrutel.js → submitGtag-C5xzFHjG.js} +1 -1
  69. package/dist/esm/{taxIdFields-ByEYfsO5.js → taxIdFields-BUKnHMaL.js} +2 -2
  70. package/dist/esm/{updateCheckoutSessionAttributes-B0bQH0uw.js → updateCheckoutSessionAttributes-C9bMKTjz.js} +1 -1
  71. package/dist/esm/zonos-address-completion-dialog_7.entry.js +5 -5
  72. package/dist/esm/zonos-address-display_2.entry.js +2 -2
  73. package/dist/esm/zonos-address_4.entry.js +4 -4
  74. package/dist/esm/zonos-airwallex-payment.entry.js +4 -4
  75. package/dist/esm/zonos-card_5.entry.js +5 -5
  76. package/dist/esm/zonos-cart-items_12.entry.js +18 -18
  77. package/dist/esm/zonos-checkout.entry.js +9 -9
  78. package/dist/esm/zonos-collect-cart-items_3.entry.js +3 -3
  79. package/dist/esm/zonos-collect-finish_6.entry.js +9 -9
  80. package/dist/esm/zonos-collect.entry.js +6 -6
  81. package/dist/esm/zonos-controller.entry.js +6 -6
  82. package/dist/esm/zonos-country-flag.entry.js +2 -2
  83. package/dist/esm/zonos-country-select_4.entry.js +3 -3
  84. package/dist/esm/zonos-hello-dialog.entry.js +3 -3
  85. package/dist/esm/zonos-hello.entry.js +2 -2
  86. package/dist/esm/zonos-invoice-cart-items_2.entry.js +5 -5
  87. package/dist/esm/zonos-invoice-finish_5.entry.js +9 -9
  88. package/dist/esm/zonos-invoice.entry.js +6 -6
  89. package/dist/esm/zonos-language-select_2.entry.js +2 -2
  90. package/dist/esm/zonos-policy-consent_2.entry.js +4 -4
  91. package/dist/esm-es5/{cart-DmJkjiDE.js → cart-BS5mSI8x.js} +58 -58
  92. package/dist/esm-es5/{collect-BV5GTPmh.js → collect-B9ZxDDl7.js} +1 -1
  93. package/dist/esm-es5/{getMissingRequiredShippingFields-DljgpDZe.js → getMissingRequiredShippingFields-BkEV865q.js} +1 -1
  94. package/dist/esm-es5/handleFetch-BFVO7oAR.js +73 -0
  95. package/dist/esm-es5/{hasInclusivePrice-DhGXpH2D.js → hasInclusivePrice-zSvDReDb.js} +1 -1
  96. package/dist/esm-es5/index.js +26 -8
  97. package/dist/esm-es5/{invoice-CO-iqlni.js → invoice-6iTuS6ek.js} +1 -1
  98. package/dist/esm-es5/{localization-DHM91diu.js → localization-CXHiWcJp.js} +6 -9
  99. package/dist/esm-es5/{paypal-BfW5aLJw.js → paypal-BE_NVBoy.js} +1 -1
  100. package/dist/esm-es5/{placeTestOrder-CyWUFhxD.js → placeTestOrder-BXA9K9Iy.js} +1 -1
  101. package/dist/esm-es5/{renderCheckoutCurrency-B31ZNkUv.js → renderCheckoutCurrency-KMa4HlAf.js} +2 -2
  102. package/dist/esm-es5/{shouldShowLanguageSelect-DwSfSHar.js → shouldShowLanguageSelect-BI_ApEsQ.js} +1 -1
  103. package/dist/esm-es5/{submitGtag-BEFrutel.js → submitGtag-C5xzFHjG.js} +1 -1
  104. package/dist/esm-es5/{taxIdFields-ByEYfsO5.js → taxIdFields-BUKnHMaL.js} +2 -2
  105. package/dist/esm-es5/{updateCheckoutSessionAttributes-B0bQH0uw.js → updateCheckoutSessionAttributes-C9bMKTjz.js} +1 -1
  106. package/dist/esm-es5/zonos-address-completion-dialog_7.entry.js +1 -1
  107. package/dist/esm-es5/zonos-address-display_2.entry.js +1 -1
  108. package/dist/esm-es5/zonos-address_4.entry.js +1 -1
  109. package/dist/esm-es5/zonos-airwallex-payment.entry.js +1 -1
  110. package/dist/esm-es5/zonos-card_5.entry.js +6 -6
  111. package/dist/esm-es5/zonos-cart-items_12.entry.js +127 -127
  112. package/dist/esm-es5/zonos-checkout.entry.js +3 -3
  113. package/dist/esm-es5/zonos-collect-cart-items_3.entry.js +1 -1
  114. package/dist/esm-es5/zonos-collect-finish_6.entry.js +1 -1
  115. package/dist/esm-es5/zonos-collect.entry.js +6 -6
  116. package/dist/esm-es5/zonos-controller.entry.js +5 -5
  117. package/dist/esm-es5/zonos-country-flag.entry.js +1 -1
  118. package/dist/esm-es5/zonos-country-select_4.entry.js +1 -1
  119. package/dist/esm-es5/zonos-hello-dialog.entry.js +1 -1
  120. package/dist/esm-es5/zonos-hello.entry.js +1 -1
  121. package/dist/esm-es5/zonos-invoice-cart-items_2.entry.js +1 -1
  122. package/dist/esm-es5/zonos-invoice-finish_5.entry.js +1 -1
  123. package/dist/esm-es5/zonos-invoice.entry.js +3 -3
  124. package/dist/esm-es5/zonos-language-select_2.entry.js +1 -1
  125. package/dist/esm-es5/zonos-policy-consent_2.entry.js +1 -1
  126. package/dist/scripts/index.d.ts +6 -0
  127. package/dist/scripts/index.js +1 -1
  128. package/dist/scripts/loadZonos.js +1 -1
  129. package/dist/scripts/zonos.js +1 -1
  130. package/dist/types/components/utils/__tests__/helpers/blockStorage.d.ts +3 -0
  131. package/dist/types/components/utils/logging/installConstructorCapture.d.ts +20 -0
  132. package/dist/types/components/utils/logging/reportBlockedStorage.d.ts +16 -0
  133. package/dist/types/components/utils/logging/startZonosInit.d.ts +5 -0
  134. package/dist/types/components/utils/logging/thrownMessage.d.ts +1 -0
  135. package/dist/types/components/utils/safeStorage.d.ts +4 -0
  136. package/dist/types/scripts/cart/_setupCartDataWithSettings.d.ts +5 -0
  137. package/dist/types/types/generated/graphql.frontend.types.d.ts +0 -22
  138. package/dist/types/types/generated/graphql.frontend.types.ts +0 -51
  139. package/dist/types/types/generated/graphql.internal.types.d.ts +270 -1
  140. package/dist/types/types/generated/graphql.internal.types.ts +341 -1
  141. package/dist/zonos-elements/index.esm.js +1 -1
  142. package/dist/zonos-elements/{p-8fa6cfff.entry.js → p-08b01c96.entry.js} +1 -1
  143. package/dist/zonos-elements/{p-3e705c9b.entry.js → p-0909ef77.entry.js} +1 -1
  144. package/dist/zonos-elements/{p-2b63865a.system.entry.js → p-13015d34.system.entry.js} +1 -1
  145. package/dist/zonos-elements/{p-2d513aa3.entry.js → p-13d5b2f9.entry.js} +1 -1
  146. package/dist/zonos-elements/{p-46a839d2.system.entry.js → p-150047b3.system.entry.js} +16 -16
  147. package/dist/zonos-elements/{p-6e691736.entry.js → p-1986cc37.entry.js} +1 -1
  148. package/dist/zonos-elements/{p-vTIygnHq.system.js → p-1OG3IJgY.system.js} +1 -1
  149. package/dist/zonos-elements/{p-189cc594.system.entry.js → p-30bf4700.system.entry.js} +1 -1
  150. package/dist/zonos-elements/{p-4917b74d.entry.js → p-3466bcba.entry.js} +1 -1
  151. package/dist/zonos-elements/{p-12b24ebb.entry.js → p-383343c7.entry.js} +1 -1
  152. package/dist/zonos-elements/{p-5585db86.system.entry.js → p-3a506614.system.entry.js} +36 -36
  153. package/dist/zonos-elements/{p-46b9f0cf.entry.js → p-43c0ebe9.entry.js} +1 -1
  154. package/dist/zonos-elements/{p-84e76348.entry.js → p-4b65f192.entry.js} +1 -1
  155. package/dist/zonos-elements/{p-216a908d.system.entry.js → p-573a4e7c.system.entry.js} +6 -6
  156. package/dist/zonos-elements/{p-1fda4aec.system.entry.js → p-5a296dbc.system.entry.js} +87 -87
  157. package/dist/zonos-elements/{p-960070d0.system.entry.js → p-68325c5a.system.entry.js} +4 -4
  158. package/dist/zonos-elements/{p-53eac12f.system.entry.js → p-6db7317a.system.entry.js} +13 -13
  159. package/dist/zonos-elements/{p-1199baef.system.entry.js → p-709d1561.system.entry.js} +1 -1
  160. package/dist/zonos-elements/p-71d29603.entry.js +1 -0
  161. package/dist/zonos-elements/{p-064d8829.system.entry.js → p-7214c953.system.entry.js} +23 -23
  162. package/dist/zonos-elements/{p-65817880.entry.js → p-7fe83919.entry.js} +1 -1
  163. package/dist/zonos-elements/p-8ac26831.entry.js +1 -0
  164. package/dist/zonos-elements/{p-cccaad60.system.entry.js → p-8f9f859f.system.entry.js} +9 -9
  165. package/dist/zonos-elements/{p-f5f95990.system.entry.js → p-96b250d8.system.entry.js} +14 -14
  166. package/dist/zonos-elements/{p-678b9214.entry.js → p-97729873.entry.js} +1 -1
  167. package/dist/zonos-elements/{p-f3d9a380.system.entry.js → p-9b3668a4.system.entry.js} +144 -144
  168. package/dist/zonos-elements/{p-d8f375da.system.entry.js → p-9df31243.system.entry.js} +1 -1
  169. package/dist/zonos-elements/p-BI6VAB5B.js +1 -0
  170. package/dist/zonos-elements/p-BJFa5RwX.js +1 -0
  171. package/dist/zonos-elements/p-BJ_kE5rM.js +1 -0
  172. package/dist/zonos-elements/{p-XoQH3S7Z.system.js → p-BKUlQxBd.system.js} +1 -1
  173. package/dist/zonos-elements/{p-DprOoI2W.system.js → p-BUfCTQXY.system.js} +154 -154
  174. package/dist/zonos-elements/{p-CBUz18kA.system.js → p-BnQyot7Y.system.js} +23 -23
  175. package/dist/zonos-elements/p-Bu9WCfUC.system.js +1 -1
  176. package/dist/zonos-elements/{p-CMo3ZweU.js → p-C-zdj7MK.js} +1 -1
  177. package/dist/zonos-elements/{p-iAIzUA4k.js → p-C5fs3rIR.js} +1 -1
  178. package/dist/zonos-elements/{p-D1e9zNDA.js → p-CJmWr75U.js} +1 -1
  179. package/dist/zonos-elements/{p-Dtu_Japy.system.js → p-CMneHjck.system.js} +39 -39
  180. package/dist/zonos-elements/p-CP7KnfR3.system.js +245 -0
  181. package/dist/zonos-elements/p-CVRbGFV3.js +1 -0
  182. package/dist/zonos-elements/p-Cl5yV0ak.js +1 -0
  183. package/dist/zonos-elements/{p-CGNVm52g.system.js → p-Cp1IAJvW.system.js} +5 -5
  184. package/dist/zonos-elements/{p-6vSUiBfr.system.js → p-D-Lnf8mS.system.js} +50 -53
  185. package/dist/zonos-elements/p-D0DkOoAw.system.js +73 -0
  186. package/dist/zonos-elements/p-D4xpkSsK.js +1 -0
  187. package/dist/zonos-elements/p-DATNIakn.js +1 -0
  188. package/dist/zonos-elements/{p-CbhN65lj.system.js → p-DC1OPJDq.system.js} +1 -1
  189. package/dist/zonos-elements/{p-CHKKvuiz.js → p-DKnphvmJ.js} +1 -1
  190. package/dist/zonos-elements/{p-ojtNq-r5.system.js → p-DXlojp_Y.system.js} +1 -1
  191. package/dist/zonos-elements/{p-C9XLkmmb.system.js → p-DrS-0mk7.system.js} +1 -1
  192. package/dist/zonos-elements/{p-DpwmHU8R.js → p-DrbN3rPL.js} +2 -2
  193. package/dist/zonos-elements/{p-BrQ8n8NS.system.js → p-Dv5a-V6w.system.js} +3 -3
  194. package/dist/zonos-elements/{p-55813e9f.system.entry.js → p-a3c147d2.system.entry.js} +3 -3
  195. package/dist/zonos-elements/{p-DiMEP3mh.js → p-aK18R41t.js} +1 -1
  196. package/dist/zonos-elements/p-af4ad54b.entry.js +1 -0
  197. package/dist/zonos-elements/{p-1e6db427.entry.js → p-af741506.entry.js} +1 -1
  198. package/dist/zonos-elements/{p-2ca826b9.system.entry.js → p-b540c636.system.entry.js} +1 -1
  199. package/dist/zonos-elements/{p-636b71d4.entry.js → p-bac94956.entry.js} +1 -1
  200. package/dist/zonos-elements/{p-941a95a1.system.entry.js → p-bb1b414a.system.entry.js} +5 -5
  201. package/dist/zonos-elements/{p-e7fdb2c9.entry.js → p-bfa9e32a.entry.js} +1 -1
  202. package/dist/zonos-elements/p-cf6bf7a4.entry.js +1 -0
  203. package/dist/zonos-elements/p-dJcbnNlE.system.js +7 -0
  204. package/dist/zonos-elements/{p-7dc7f328.entry.js → p-db40b9c3.entry.js} +1 -1
  205. package/dist/zonos-elements/{p-d3345b2c.entry.js → p-dd003161.entry.js} +1 -1
  206. package/dist/zonos-elements/{p-ef5344ea.entry.js → p-e374aaa4.entry.js} +1 -1
  207. package/dist/zonos-elements/{p-6410fa11.system.entry.js → p-e43470f7.system.entry.js} +22 -22
  208. package/dist/zonos-elements/{p-fda89981.system.entry.js → p-ebc7ea54.system.entry.js} +3 -3
  209. package/dist/zonos-elements/{p-1cc42a98.system.entry.js → p-f2ed52bc.system.entry.js} +16 -16
  210. package/dist/zonos-elements/p-gEViRqvf.js +1 -0
  211. package/dist/zonos-elements/{p-DgUrB-1a.system.js → p-yv7ekcdG.system.js} +2 -2
  212. package/dist/zonos-elements/zonos-elements.esm.js +1 -1
  213. package/package.json +1 -1
  214. package/dist/esm-es5/handleFetch-D5GYDF-O.js +0 -60
  215. package/dist/zonos-elements/p-107f287b.entry.js +0 -1
  216. package/dist/zonos-elements/p-25eb99d4.entry.js +0 -1
  217. package/dist/zonos-elements/p-8f9d8795.entry.js +0 -1
  218. package/dist/zonos-elements/p-BMPYH-LT.js +0 -1
  219. package/dist/zonos-elements/p-C70h5mKA.js +0 -1
  220. package/dist/zonos-elements/p-CTiqplrr.js +0 -1
  221. package/dist/zonos-elements/p-Ch1w0Lr7.js +0 -1
  222. package/dist/zonos-elements/p-D1SmY_fZ.js +0 -1
  223. package/dist/zonos-elements/p-D6xXnsM_.js +0 -1
  224. package/dist/zonos-elements/p-DE4a-QD5.js +0 -1
  225. package/dist/zonos-elements/p-DQrMfUzi.system.js +0 -227
  226. package/dist/zonos-elements/p-DZdkJHK9.system.js +0 -7
  227. package/dist/zonos-elements/p-U33isUJG.js +0 -1
  228. package/dist/zonos-elements/p-ebe157b5.entry.js +0 -1
  229. package/dist/zonos-elements/p-zVLAvre1.system.js +0 -60
@@ -1,17 +1,5 @@
1
1
  import { l as log } from './VarianceTest-BJmZPrZl.js';
2
2
 
3
- const logError = (message, ...rest) => {
4
- log(message, 'error', ...rest);
5
- };
6
-
7
- const getIsStagingMode = () => window.location.search.includes('zonosStagingMode=1');
8
-
9
- const getIsTestMode = () => {
10
- var _a;
11
- return ((_a = window.Zonos.zonosApiKey) === null || _a === void 0 ? void 0 : _a.includes('test')) ||
12
- window.location.search.includes('zonosTestMode=1');
13
- };
14
-
15
3
  const fallbackApiType = ['cloudflare', 'vercel'];
16
4
  const MAIN_BASE_API_TYPE = fallbackApiType[0];
17
5
  const fallbackApiList = {
@@ -31,6 +19,164 @@ const getNextFallbackApiType = (currentApiType = MAIN_BASE_API_TYPE) => {
31
19
  return nextFallbackApiType;
32
20
  };
33
21
 
22
+ /**
23
+ * This is the time in milliseconds after release time that we will start sending error logs to the new API
24
+ * @default 1 hour
25
+ */
26
+ const postReleaseReportingDuration = 1 * 3600 * 1000; // 1 hour
27
+ const loggedHref = () => {
28
+ const url = new URL(window.location.href);
29
+ url.searchParams.delete('payment_intent');
30
+ url.searchParams.delete('payment_intent_client_secret');
31
+ url.searchParams.delete('redirect_status');
32
+ return url.toString();
33
+ };
34
+ const sendErrorLog = async ({ endpoint, errors, metadata, shouldPostReleaseErrorReporting, }) => {
35
+ log('sendErrorLog', 'warn', endpoint, metadata, errors);
36
+ if (shouldPostReleaseErrorReporting) {
37
+ // We only want to report errors that happened if current time is less than 2 hours after release time
38
+ const releaseTime = Number(window.Zonos.releaseDate);
39
+ const currentTime = new Date().getTime();
40
+ if (currentTime - releaseTime > postReleaseReportingDuration) {
41
+ return;
42
+ }
43
+ }
44
+ const userAgentData = 'userAgentData' in window.navigator
45
+ ? // userAgentData is not yet supported in all browsers
46
+ window.navigator.userAgentData
47
+ : null;
48
+ const errorObject = {
49
+ endpoint,
50
+ errors,
51
+ href: loggedHref(),
52
+ metadata: Object.assign({ appVersion: window.Zonos.version, domain: window.Zonos.domain, publicCredential: window.Zonos.zonosApiKey, userAgent: userAgentData && userAgentData.brands.length > 0
53
+ ? userAgentData
54
+ : window.navigator.userAgent }, metadata),
55
+ };
56
+ try {
57
+ // use native fetch because in handleFetch also calls sendErrorLog and it will possibly cause circular dependencies issue
58
+ void fetch(`${MAIN_BASE_API}/api/zonos-elements/log-error`, {
59
+ body: JSON.stringify(errorObject),
60
+ headers: {
61
+ 'Zonos-Referer': window.location.hostname,
62
+ },
63
+ method: 'POST',
64
+ });
65
+ }
66
+ catch (_a) {
67
+ const nextFallbackApi = getNextFallbackApiType();
68
+ if (!nextFallbackApi) {
69
+ return;
70
+ }
71
+ // request to the fallback API if the first one fails
72
+ void fetch(`${fallbackApiList[nextFallbackApi]}/api/zonos-elements/log-error`, {
73
+ body: JSON.stringify(errorObject),
74
+ method: 'POST',
75
+ });
76
+ }
77
+ };
78
+
79
+ const thrownMessage = (error, fallback) => {
80
+ if (typeof error === 'string' && error) {
81
+ return error;
82
+ }
83
+ if (error instanceof Error && error.message) {
84
+ return error.message;
85
+ }
86
+ if (typeof error === 'object' &&
87
+ error !== null &&
88
+ 'message' in error &&
89
+ typeof error.message === 'string' &&
90
+ error.message) {
91
+ return error.message;
92
+ }
93
+ return fallback;
94
+ };
95
+
96
+ const logError = (message, ...rest) => {
97
+ log(message, 'error', ...rest);
98
+ };
99
+
100
+ const reportedIds = () => {
101
+ if (!window.__zonosReportedBlockedStorage) {
102
+ window.__zonosReportedBlockedStorage = new Set();
103
+ }
104
+ return window.__zonosReportedBlockedStorage;
105
+ };
106
+ /**
107
+ * Record a blocked storage read or write on the existing error log.
108
+ * A throw before `window.Zonos` exists is swallowed and does not use up
109
+ * the per-page dedupe slot, so the later startup read can still report it.
110
+ */
111
+ const reportBlockedStorage = (area, operation, key, error) => {
112
+ if (typeof window.Zonos === 'undefined') {
113
+ return;
114
+ }
115
+ const dedupeId = `${area}\u0000${operation}\u0000${key}`;
116
+ const reported = reportedIds();
117
+ if (reported.has(dedupeId)) {
118
+ return;
119
+ }
120
+ reported.add(dedupeId);
121
+ void sendErrorLog({
122
+ endpoint: `storage://${area}/${key}`,
123
+ errors: [thrownMessage(error, 'SecurityError')],
124
+ metadata: {
125
+ area,
126
+ key,
127
+ operation,
128
+ shape: 'blocked-storage',
129
+ },
130
+ });
131
+ };
132
+
133
+ /**
134
+ * Touch `window.localStorage` / `window.sessionStorage` inside the try.
135
+ * Safari throws SecurityError on the getter itself when storage is blocked.
136
+ * A missing storage object is the same failure: calling `getItem` on it
137
+ * would report a TypeError instead of blocked storage.
138
+ */
139
+ const storageFor = (area) => {
140
+ const storage = area === 'local' ? window.localStorage : window.sessionStorage;
141
+ if (!storage) {
142
+ throw new DOMException('', 'SecurityError');
143
+ }
144
+ return storage;
145
+ };
146
+ const safeGetItem = (area, key) => {
147
+ try {
148
+ return storageFor(area).getItem(key);
149
+ }
150
+ catch (error) {
151
+ reportBlockedStorage(area, 'getItem', key, error);
152
+ return null;
153
+ }
154
+ };
155
+ const safeRemoveItem = (area, key) => {
156
+ try {
157
+ storageFor(area).removeItem(key);
158
+ }
159
+ catch (error) {
160
+ reportBlockedStorage(area, 'removeItem', key, error);
161
+ }
162
+ };
163
+ const safeSetItem = (area, key, value) => {
164
+ try {
165
+ storageFor(area).setItem(key, value);
166
+ }
167
+ catch (error) {
168
+ reportBlockedStorage(area, 'setItem', key, error);
169
+ }
170
+ };
171
+
172
+ const getIsStagingMode = () => window.location.search.includes('zonosStagingMode=1');
173
+
174
+ const getIsTestMode = () => {
175
+ var _a;
176
+ return ((_a = window.Zonos.zonosApiKey) === null || _a === void 0 ? void 0 : _a.includes('test')) ||
177
+ window.location.search.includes('zonosTestMode=1');
178
+ };
179
+
34
180
  const jsonParse = (_data) => {
35
181
  if (typeof _data === 'string') {
36
182
  try {
@@ -133,56 +279,6 @@ const prepLoadTimeApiLog = ({ apiPath, apiType, loadTimeInternal, loadTimeTotal,
133
279
  window.Zonos.loadTimeApiInfoList.push(bulkLoadLogBody);
134
280
  };
135
281
 
136
- /**
137
- * This is the time in milliseconds after release time that we will start sending error logs to the new API
138
- * @default 1 hour
139
- */
140
- const postReleaseReportingDuration = 1 * 3600 * 1000; // 1 hour
141
- const sendErrorLog = async ({ endpoint, errors, metadata, shouldPostReleaseErrorReporting, }) => {
142
- log('sendErrorLog', 'warn', endpoint, metadata, errors);
143
- if (shouldPostReleaseErrorReporting) {
144
- // We only want to report errors that happened if current time is less than 2 hours after release time
145
- const releaseTime = Number(window.Zonos.releaseDate);
146
- const currentTime = new Date().getTime();
147
- if (currentTime - releaseTime > postReleaseReportingDuration) {
148
- return;
149
- }
150
- }
151
- const userAgentData = 'userAgentData' in window.navigator
152
- ? // userAgentData is not yet supported in all browsers
153
- window.navigator.userAgentData
154
- : null;
155
- const errorObject = {
156
- endpoint,
157
- errors,
158
- href: window.location.href,
159
- metadata: Object.assign({ appVersion: window.Zonos.version, domain: window.Zonos.domain, publicCredential: window.Zonos.zonosApiKey, userAgent: userAgentData && userAgentData.brands.length > 0
160
- ? userAgentData
161
- : window.navigator.userAgent }, metadata),
162
- };
163
- try {
164
- // use native fetch because in handleFetch also calls sendErrorLog and it will possibly cause circular dependencies issue
165
- void fetch(`${MAIN_BASE_API}/api/zonos-elements/log-error`, {
166
- body: JSON.stringify(errorObject),
167
- headers: {
168
- 'Zonos-Referer': window.location.hostname,
169
- },
170
- method: 'POST',
171
- });
172
- }
173
- catch (_a) {
174
- const nextFallbackApi = getNextFallbackApiType();
175
- if (!nextFallbackApi) {
176
- return;
177
- }
178
- // request to the fallback API if the first one fails
179
- void fetch(`${fallbackApiList[nextFallbackApi]}/api/zonos-elements/log-error`, {
180
- body: JSON.stringify(errorObject),
181
- method: 'POST',
182
- });
183
- }
184
- };
185
-
186
282
  var __rest = (undefined && undefined.__rest) || function (s, e) {
187
283
  var t = {};
188
284
  for (var p in s)
@@ -195,6 +291,7 @@ var __rest = (undefined && undefined.__rest) || function (s, e) {
195
291
  }
196
292
  return t;
197
293
  };
294
+ const isGatewayStatus = (status) => status === 502 || status === 503 || status === 504;
198
295
  const getResponseBody = async ({ response, shouldLog = true, shouldThrow = false, }) => {
199
296
  try {
200
297
  const text = await response.text();
@@ -315,28 +412,31 @@ const handleRequest = async ({ basePathType, options, path, }) => {
315
412
  }
316
413
  catch (_a) {
317
414
  const message = 'Unknown error';
415
+ // A gateway HTML or empty body still carries a status a GET can fail over
416
+ // on. Other non-JSON statuses, including 404 and 500, keep the previous
417
+ // null response so they do not fail over.
318
418
  return {
319
419
  baseUrl,
320
420
  errors: [{ message: `${status}: ${message}`, type: status }],
321
421
  json: null,
322
- response: null,
422
+ response: isGatewayStatus(response.status) ? response : null,
323
423
  zonosMode,
324
424
  };
325
425
  }
326
426
  };
327
427
  const handleRequestWithFallback = async ({ basePathType: _basePathType, options, path, }) => {
328
- var _a, _b;
428
+ var _a, _b, _c;
329
429
  // use vercel API if the path is `/api/bigcommerce`
330
430
  const isBigcommerceEndpoint = path.startsWith('/api/bigcommerce');
331
431
  const basePathType = isBigcommerceEndpoint
332
432
  ? 'vercel'
333
433
  : _basePathType;
334
434
  const startTime = performance.now();
335
- const _c = await handleRequest({
435
+ const _d = await handleRequest({
336
436
  basePathType,
337
437
  options,
338
438
  path,
339
- }), { errors, response } = _c, rest = __rest(_c, ["errors", "response"]);
439
+ }), { errors, response } = _d, rest = __rest(_d, ["errors", "response"]);
340
440
  const endTime = performance.now();
341
441
  const duration = endTime - startTime;
342
442
  // Send the load time api log
@@ -358,10 +458,16 @@ const handleRequestWithFallback = async ({ basePathType: _basePathType, options,
358
458
  (message.includes('signal is aborted') ||
359
459
  message.includes('The operation was aborted') ||
360
460
  message.includes('Fetch is aborted')));
361
- const isUnknownError = !!unknownError || (response === null || response === void 0 ? void 0 : response.status) === 404 || (response === null || response === void 0 ? void 0 : response.status) === 500;
362
- const shouldCallFallback =
363
- // If next fallback is available, and the error is unknown (Failed to fetch) or 404 or 500 (server error)
364
- nextFallbackApiType && isUnknownError;
461
+ const statusCode = response === null || response === void 0 ? void 0 : response.status;
462
+ const gateway = statusCode !== undefined && isGatewayStatus(statusCode);
463
+ // handleFetch sets method, and a missing method is a GET.
464
+ const isIdempotentGet = ((_a = options === null || options === void 0 ? void 0 : options.method) !== null && _a !== void 0 ? _a : 'GET').toUpperCase() === 'GET';
465
+ const failedWithoutGateway = !!unknownError || statusCode === 404 || statusCode === 500;
466
+ const isUnknownError = failedWithoutGateway || gateway;
467
+ // Replay 502, 503, and 504 only for GET. A gateway timeout on a POST can
468
+ // mean the first host is still finishing a payment or order write.
469
+ const shouldCallFallback = nextFallbackApiType &&
470
+ (failedWithoutGateway || (gateway && isIdempotentGet));
365
471
  // Should log the error if it's unknown error
366
472
  if (isUnknownError && !isAbortError) {
367
473
  void sendErrorLog({
@@ -371,7 +477,7 @@ const handleRequestWithFallback = async ({ basePathType: _basePathType, options,
371
477
  currentBasePath: basePathType,
372
478
  nextFallbackApiType,
373
479
  requestHeaders: options === null || options === void 0 ? void 0 : options.headers,
374
- requestPayload: jsonParse((_a = options === null || options === void 0 ? void 0 : options.body) === null || _a === void 0 ? void 0 : _a.toString()) || ((_b = options === null || options === void 0 ? void 0 : options.body) === null || _b === void 0 ? void 0 : _b.toString()),
480
+ requestPayload: jsonParse((_b = options === null || options === void 0 ? void 0 : options.body) === null || _b === void 0 ? void 0 : _b.toString()) || ((_c = options === null || options === void 0 ? void 0 : options.body) === null || _c === void 0 ? void 0 : _c.toString()),
375
481
  shouldCallFallback,
376
482
  status: response === null || response === void 0 ? void 0 : response.status,
377
483
  statusText: response === null || response === void 0 ? void 0 : response.statusText,
@@ -415,4 +521,4 @@ const handleFetch = async (path, _opts) => {
415
521
  });
416
522
  };
417
523
 
418
- export { getIsStagingMode as a, getAdditionalLogMetadata as b, fallbackApiList as f, getIsTestMode as g, handleFetch as h, isCheckoutMobile as i, jsonParse as j, logError as l, sendErrorLog as s };
524
+ export { getIsStagingMode as a, safeRemoveItem as b, safeGetItem as c, getAdditionalLogMetadata as d, safeSetItem as e, fallbackApiList as f, getIsTestMode as g, handleFetch as h, isCheckoutMobile as i, jsonParse as j, logError as l, sendErrorLog as s, thrownMessage as t };
@@ -1,4 +1,4 @@
1
- import { l as localizationStore } from './localization-DHM91diu.js';
1
+ import { l as localizationStore } from './localization-CXHiWcJp.js';
2
2
 
3
3
  /**
4
4
  * Since the backend and the frontend are using the same keys,
package/dist/esm/index.js CHANGED
@@ -1,14 +1,105 @@
1
1
  export { c as curpRegex, i as isMexicoTaxIdType, a as isPeruTaxIdType, p as peruTaxIdTypeFromValue, s as stripTaxIdSeparators } from './taxIdRules-xYlx7ZXW.js';
2
2
  import { c as createCustomEvent } from './createCustomEvent-XQfWgQLB.js';
3
3
  import { g as getGenericSettingsOverride, I as IframeService } from './getGenericSettingsOverride-HeAZDwVW.js';
4
+ import { t as thrownMessage, s as sendErrorLog, g as getIsTestMode, a as getIsStagingMode, h as handleFetch, l as logError, b as safeRemoveItem, c as safeGetItem } from './handleFetch-BFVO7oAR.js';
4
5
  import { l as log } from './VarianceTest-BJmZPrZl.js';
5
6
  export { a as availableTestKeys } from './VarianceTest-BJmZPrZl.js';
6
- import { g as getIsTestMode, a as getIsStagingMode, h as handleFetch, l as logError } from './handleFetch-D5GYDF-O.js';
7
7
  import { g as getAbandonedCartRenewTokenValue, _ as _getIsValidCartId, c as checkoutHiddenBtnSelector, a as checkoutHiddenInternationalBtnSelector } from './CheckoutConfig-D5SpFsQJ.js';
8
8
  export { d as domesticRedirectedBtnSelector } from './CheckoutConfig-D5SpFsQJ.js';
9
9
  export { c as countryRequireShortAddressCode } from './ShortAddressCode-nJ6oI8-n.js';
10
10
  export { a as checkoutTaxIdTypeValues, c as countryRequireTaxId, e as euCountryCodes, i as isCountryRequireTaxId, p as peruTaxIdDigitLength, b as peruTaxIdFormatError, s as shipToTaxIdLabels, t as taxIdTypeOptions } from './TaxId-DMIgN_sT.js';
11
11
 
12
+ const constructorNotFound = /^Constructor for .+ was not found/;
13
+ const constructorTag = /^Constructor for "?([^#"]+)#/;
14
+ const recordConstructorFailure = (value) => {
15
+ var _a;
16
+ const message = thrownMessage(value, '');
17
+ if (!message || !constructorNotFound.test(message)) {
18
+ return;
19
+ }
20
+ if (typeof window.Zonos === 'undefined') {
21
+ return;
22
+ }
23
+ const capture = window.__zonosConstructorCapture;
24
+ if (!capture) {
25
+ return;
26
+ }
27
+ const tagMatch = constructorTag.exec(message);
28
+ const tag = (_a = tagMatch === null || tagMatch === void 0 ? void 0 : tagMatch[1]) !== null && _a !== void 0 ? _a : '';
29
+ if (capture.reported.has(tag)) {
30
+ return;
31
+ }
32
+ capture.reported.add(tag);
33
+ void sendErrorLog({
34
+ endpoint: 'stencil://constructor',
35
+ errors: [message],
36
+ metadata: {
37
+ shape: 'constructor-not-found',
38
+ tag,
39
+ },
40
+ });
41
+ };
42
+ /**
43
+ * Copy a missing-constructor failure onto the existing error log.
44
+ * Stencil catches `Constructor for "tag#mode" was not found` and passes that
45
+ * Error to `console.error`. One report is sent per tag, then the original
46
+ * console.error still runs. This does not request the chunk again.
47
+ */
48
+ const installConstructorCapture = () => {
49
+ if (window.__zonosConstructorCapture) {
50
+ return;
51
+ }
52
+ const listener = (event) => {
53
+ recordConstructorFailure(event.reason);
54
+ };
55
+ window.__zonosConstructorCapture = {
56
+ listener,
57
+ reported: new Set(),
58
+ };
59
+ window.addEventListener('unhandledrejection', listener);
60
+ // eslint-disable-next-line no-console -- Stencil reports the missing constructor here
61
+ const originalError = console.error.bind(console);
62
+ // eslint-disable-next-line no-console -- record the Stencil diagnostic, then forward it
63
+ console.error = (...data) => {
64
+ recordConstructorFailure(data[0]);
65
+ originalError(...data);
66
+ };
67
+ };
68
+
69
+ const reportInitRejection = (error) => {
70
+ // sendErrorLog prints only when zonosDebug is on. Keep the failure in the
71
+ // merchant console without leaving an unhandled rejection.
72
+ // eslint-disable-next-line no-console -- the page console is the support signal
73
+ console.error(error);
74
+ if (typeof window.Zonos === 'undefined') {
75
+ return;
76
+ }
77
+ void sendErrorLog({
78
+ endpoint: 'zonos://init',
79
+ errors: [thrownMessage(error, 'Unknown init rejection')],
80
+ metadata: {
81
+ shape: 'init-rejection',
82
+ },
83
+ });
84
+ };
85
+ /**
86
+ * Run an init that the caller is not waiting on. The rejection is recorded
87
+ * and not rethrown, so startup does not become an unhandled rejection.
88
+ */
89
+ const startZonosInit = (start) => {
90
+ let pending;
91
+ try {
92
+ pending = start();
93
+ }
94
+ catch (error) {
95
+ reportInitRejection(error);
96
+ return;
97
+ }
98
+ void pending.catch((error) => {
99
+ reportInitRejection(error);
100
+ });
101
+ };
102
+
12
103
  /**
13
104
  * Get the load version and url based on the loadScriptSrc and version
14
105
  * @returns
@@ -132,7 +223,7 @@ const getZonosQaUrl = () => {
132
223
  return null;
133
224
  }
134
225
  const qaUrl = extractZonosQaUrl(window.location.href);
135
- const cdnUrl = "https://v1.5.1.js.zonos.com";
226
+ const cdnUrl = "https://v1.5.2.js.zonos.com";
136
227
  // when the qaUrl is not set and the built URL is from the test domain, use the test domain for testing
137
228
  if (!qaUrl &&
138
229
  (cdnUrl.includes('test.') ||
@@ -167,8 +258,8 @@ const getZonosQaUrl = () => {
167
258
  void fetch(fullUrl)
168
259
  .then(() => {
169
260
  // cleanup checkout session to avoid using the prod session in preview domain
170
- window.sessionStorage.removeItem('zonos--checkout-session-id');
171
- window.sessionStorage.removeItem('zonos--client-secret');
261
+ safeRemoveItem('session', 'zonos--checkout-session-id');
262
+ safeRemoveItem('session', 'zonos--client-secret');
172
263
  })
173
264
  .catch(() => {
174
265
  alert(`[ZONOS-WARNING] '${fullUrl}' IS NO LONGER AVAILABLE. REMOVING zonosQaUrl PARAM AND RELOADING THE PAGE`);
@@ -421,10 +512,10 @@ const zonosLoadUrl = (() => {
421
512
  return null;
422
513
  })();
423
514
  const startLoadTime = Date.now();
424
- const ZONOS_URL = "https://v1.5.1.js.zonos.com";
425
- const JS_DELIVR_ZONOS_URL = zonosLoadUrl || "https://cdn.jsdelivr.net/npm/@zonos/elements@1.5.1";
426
- const UNPKG_ZONOS_URL = "https://unpkg.com/@zonos/elements@1.5.1";
427
- const CDNJS_ZONOS_URL = "https://cdnjs.cloudflare.com/ajax/libs/zonos-elements/1.5.1";
515
+ const ZONOS_URL = "https://v1.5.2.js.zonos.com";
516
+ const JS_DELIVR_ZONOS_URL = zonosLoadUrl || "https://cdn.jsdelivr.net/npm/@zonos/elements@1.5.2";
517
+ const UNPKG_ZONOS_URL = "https://unpkg.com/@zonos/elements@1.5.2";
518
+ const CDNJS_ZONOS_URL = "https://cdnjs.cloudflare.com/ajax/libs/zonos-elements/1.5.2";
428
519
  const GOOGLE_FONT_URL = 'https://fonts.googleapis.com';
429
520
  const GOOGLE_FONT_REGEX = /^https:\/\/fonts\.googleapis\.com/;
430
521
  class Zonos {
@@ -442,7 +533,7 @@ Zonos.iframeLogType = typeof window !== 'undefined'
442
533
  ? new URLSearchParams(window.location.search).get('iframeLogType')
443
534
  : null;
444
535
  Zonos.isBigCommerce = false;
445
- Zonos.releaseDate = "1793041426949";
536
+ Zonos.releaseDate = "1793899893283";
446
537
  Zonos.isLegacyCheckout = false;
447
538
  Zonos.googleAnalyticId = null;
448
539
  Zonos.googleAnalyticReady = false;
@@ -467,7 +558,7 @@ Zonos.isNpm = true;
467
558
  Zonos.zonosQaUrl = null;
468
559
  Zonos.zonosQaUrlApi = null;
469
560
  Zonos.trackEventLogs = [];
470
- Zonos.version = `v${"1.5.1"}`;
561
+ Zonos.version = `v${"1.5.2"}`;
471
562
  Zonos.modeAlerted = false;
472
563
  Zonos.cartData = null;
473
564
  Zonos.paypal = null;
@@ -478,6 +569,7 @@ Zonos.zonosController = null;
478
569
  Zonos.loadTimeApiInfoList = [];
479
570
  Zonos.logIntervalId = null;
480
571
  Zonos.init = async (params) => {
572
+ installConstructorCapture();
481
573
  const { appearance, checkoutSettings, currencyConverter, helloSettings, onCountryChange, overrideCurrencyFormat, storeId, zonosApiKey, } = params;
482
574
  _a.cartId = getCartIdFromQueryParam();
483
575
  // Expose the checkout cart callbacks on the global so Stripe loading can be
@@ -513,7 +605,7 @@ Zonos.init = async (params) => {
513
605
  window.Zonos.isLegacyCheckout = _a.isLegacyCheckout;
514
606
  window.Zonos.zonosMode = _a.zonosMode;
515
607
  // call init again after the script is loaded
516
- void window.Zonos.init(params);
608
+ startZonosInit(() => window.Zonos.init(params));
517
609
  });
518
610
  script.addEventListener('error', () => {
519
611
  alert(`[ZONOS - loadZonos] Failed to load "loadZonos.js" from zonosQaUrl: ${zonosQaUrl}`);
@@ -549,7 +641,7 @@ Zonos.init = async (params) => {
549
641
  }
550
642
  }
551
643
  // Check if the stripe client secret is available in the url or session storage, inject hidden button to trigger checkout right away to check status of client secret
552
- const clientSecretUrlParam = new URL(window.location.href).searchParams.get('payment_intent_client_secret') || sessionStorage.getItem('zonos--client-secret');
644
+ const clientSecretUrlParam = new URL(window.location.href).searchParams.get('payment_intent_client_secret') || safeGetItem('session', 'zonos--client-secret');
553
645
  const shouldAttemptImmediatelyOpenCheckout = (_a.cartId && _a.cartData) || !!clientSecretUrlParam;
554
646
  // inject hidden button to body to trigger checkout right away if we have cartData or stripe client secret
555
647
  if (shouldAttemptImmediatelyOpenCheckout) {
@@ -1,7 +1,7 @@
1
1
  import { c as createStore, z as zonosStore } from './zonosStore-BXP9FvIt.js';
2
- import { d as cartStore, Z as cartStoreUpdateSelectedShippingOption, b as stripeStore, a1 as stripeStoreBuildAddressForPartyCreate } from './cart-DmJkjiDE.js';
3
- import { s as storageStore } from './localization-DHM91diu.js';
4
- import { h as handleFetch, s as sendErrorLog, l as logError } from './handleFetch-D5GYDF-O.js';
2
+ import { d as cartStore, Z as cartStoreUpdateSelectedShippingOption, b as stripeStore, a1 as stripeStoreBuildAddressForPartyCreate } from './cart-BS5mSI8x.js';
3
+ import { s as storageStore } from './localization-CXHiWcJp.js';
4
+ import { h as handleFetch, s as sendErrorLog, l as logError } from './handleFetch-BFVO7oAR.js';
5
5
  import { b as allLogs } from './VarianceTest-BJmZPrZl.js';
6
6
 
7
7
  const { state: invoiceStore } = createStore(() => ({
@@ -1,5 +1,5 @@
1
1
  import { c as createStore, z as zonosStore } from './zonosStore-BXP9FvIt.js';
2
- import { j as jsonParse, h as handleFetch, l as logError } from './handleFetch-D5GYDF-O.js';
2
+ import { j as jsonParse, c as safeGetItem, b as safeRemoveItem, e as safeSetItem, h as handleFetch, l as logError } from './handleFetch-BFVO7oAR.js';
3
3
  import { a as availableTestKeys, l as log } from './VarianceTest-BJmZPrZl.js';
4
4
 
5
5
  /**
@@ -42,24 +42,24 @@ const filterValidTests = (testKeys) => {
42
42
  */
43
43
  const VARIANT_TEST_KEY_EXPIRATION = 60 * 60 * 24 * 1000;
44
44
  const { onChange: storageStoreOnChange, state: storageStore } = createStore({
45
- checkoutSessionId: sessionStorage.getItem('zonos--checkout-session-id'),
46
- enabledVariantTestKeys: jsonParse(localStorage.getItem('zonos--enabled-variant-test-keys')),
45
+ checkoutSessionId: safeGetItem('session', 'zonos--checkout-session-id'),
46
+ enabledVariantTestKeys: jsonParse(safeGetItem('local', 'zonos--enabled-variant-test-keys')),
47
47
  });
48
48
  storageStoreOnChange('enabledVariantTestKeys', () => {
49
49
  var _a;
50
50
  // This should be set in localStorage so we don't have multiple tests for the same user in short period of time
51
51
  if (!((_a = storageStore.enabledVariantTestKeys) === null || _a === void 0 ? void 0 : _a.length)) {
52
- localStorage.removeItem('zonos--enabled-variant-test-keys');
52
+ safeRemoveItem('local', 'zonos--enabled-variant-test-keys');
53
53
  return;
54
54
  }
55
- localStorage.setItem('zonos--enabled-variant-test-keys', JSON.stringify(storageStore.enabledVariantTestKeys));
55
+ safeSetItem('local', 'zonos--enabled-variant-test-keys', JSON.stringify(storageStore.enabledVariantTestKeys));
56
56
  });
57
57
  storageStoreOnChange('checkoutSessionId', () => {
58
58
  if (!storageStore.checkoutSessionId) {
59
- sessionStorage.removeItem('zonos--checkout-session-id');
59
+ safeRemoveItem('session', 'zonos--checkout-session-id');
60
60
  return;
61
61
  }
62
- sessionStorage.setItem('zonos--checkout-session-id', storageStore.checkoutSessionId);
62
+ safeSetItem('session', 'zonos--checkout-session-id', storageStore.checkoutSessionId);
63
63
  });
64
64
  const storageStoreSetEnabledVariantTestKeys = (testKeys) => {
65
65
  storageStore.enabledVariantTestKeys = filterValidTests(testKeys);
@@ -18276,7 +18276,7 @@ const getExchangeRate = async ({ country, isGuaranteed, sourceCurrency, targetCu
18276
18276
  const { rate, targetFormat } = json.exchangeRateCreate;
18277
18277
  const maxAge = json.maxAge;
18278
18278
  if (rate) {
18279
- sessionStorage.setItem(country + '_rate', JSON.stringify(rate));
18279
+ safeSetItem('session', `${country}_rate`, JSON.stringify(rate));
18280
18280
  const exchangeRate = { rate, targetFormat };
18281
18281
  return { exchangeRate, maxAge };
18282
18282
  }
@@ -18315,58 +18315,34 @@ const getLocaleMessages = async ({ countryCode, localeTo, storeId, }) => {
18315
18315
  const isCountryCode = (value) => /^[A-Z]{2}$/.test(value);
18316
18316
 
18317
18317
  const COUNTRY_OVERRIDE_KEY = 'zonos--country';
18318
- const withBlockedStorage = (run) => {
18319
- try {
18320
- run();
18321
- }
18322
- catch (_a) {
18323
- // localStorage/sessionStorage can throw in blocked-storage contexts
18324
- // (Safari private mode, cross-origin iframes).
18325
- }
18326
- };
18327
- const readStoredCountry = (storage) => {
18328
- try {
18329
- const value = storage.getItem(COUNTRY_OVERRIDE_KEY);
18330
- if (!value || !isCountryCode(value)) {
18331
- return null;
18332
- }
18333
- return value;
18334
- }
18335
- catch (_a) {
18318
+ const readStoredCountry = (area) => {
18319
+ const value = safeGetItem(area, COUNTRY_OVERRIDE_KEY);
18320
+ if (!value || !isCountryCode(value)) {
18336
18321
  return null;
18337
18322
  }
18323
+ return value;
18338
18324
  };
18339
- const writeOverride = (storage, countryCode) => {
18340
- storage.setItem(COUNTRY_OVERRIDE_KEY, countryCode);
18341
- };
18342
- const withEachStorage = (run) => {
18343
- withBlockedStorage(() => run(window.localStorage));
18344
- withBlockedStorage(() => run(window.sessionStorage));
18345
- };
18346
- const getCountryOverrideStorage = () => {
18347
- var _a;
18348
- return (_a = readStoredCountry(window.localStorage)) !== null && _a !== void 0 ? _a : readStoredCountry(window.sessionStorage);
18349
- };
18325
+ const getCountryOverrideStorage = () => { var _a; return (_a = readStoredCountry('local')) !== null && _a !== void 0 ? _a : readStoredCountry('session'); };
18350
18326
  const migrateCountryOverrideStorage = (selectedCountryCode) => {
18351
18327
  if (!selectedCountryCode) {
18352
18328
  return;
18353
18329
  }
18354
- withBlockedStorage(() => {
18355
- const localCountry = readStoredCountry(window.localStorage);
18356
- // Only mirror the country Hello actually kept. A failed localStorage
18357
- // clear can leave a discarded country in local; never copy that to
18358
- // session for older Elements. Never copy session → local.
18359
- if (localCountry === selectedCountryCode) {
18360
- writeOverride(window.sessionStorage, localCountry);
18361
- }
18362
- });
18330
+ const localCountry = readStoredCountry('local');
18331
+ // Only mirror the country Hello actually kept. A failed localStorage
18332
+ // clear can leave a discarded country in local; never copy that to
18333
+ // session for older Elements. Never copy session → local.
18334
+ if (localCountry === selectedCountryCode) {
18335
+ safeSetItem('session', COUNTRY_OVERRIDE_KEY, localCountry);
18336
+ }
18363
18337
  };
18364
18338
  const setCountryOverrideStorage = (countryCode) => {
18365
18339
  // Dual-write so older Elements that only read sessionStorage see the pick.
18366
- withEachStorage(storage => writeOverride(storage, countryCode));
18340
+ safeSetItem('local', COUNTRY_OVERRIDE_KEY, countryCode);
18341
+ safeSetItem('session', COUNTRY_OVERRIDE_KEY, countryCode);
18367
18342
  };
18368
18343
  const clearCountryOverrideStorage = () => {
18369
- withEachStorage(storage => storage.removeItem(COUNTRY_OVERRIDE_KEY));
18344
+ safeRemoveItem('local', COUNTRY_OVERRIDE_KEY);
18345
+ safeRemoveItem('session', COUNTRY_OVERRIDE_KEY);
18370
18346
  };
18371
18347
 
18372
18348
  const getZCountryUrlParam = (urlParams) => {
@@ -1,10 +1,10 @@
1
1
  import { z as zonosStore, c as createStore } from './zonosStore-BXP9FvIt.js';
2
- import { x as cartStoreNextStep, j as cartStoreClearCheckoutInterval, t as trackConversionEvent, y as isPolicyConsentRequired, G as policyConsentStore, C as validateCheckoutSession, b as stripeStore, d as cartStore, n as stripeStoreHandleInventoryCheck, A as storeCreditStoreApplyCredit, T as stripeStoreRecordPolicyConsent, B as storeCreditStoreCoversFullAmount, D as storeCreditStoreCreateOrder, K as storeCreditStoreGetEffectiveAmount } from './cart-DmJkjiDE.js';
3
- import { s as storageStore, t as translate } from './localization-DHM91diu.js';
4
- import { h as handleFetch, g as getIsTestMode, l as logError, j as jsonParse } from './handleFetch-D5GYDF-O.js';
2
+ import { x as cartStoreNextStep, j as cartStoreClearCheckoutInterval, t as trackConversionEvent, y as isPolicyConsentRequired, G as policyConsentStore, C as validateCheckoutSession, b as stripeStore, d as cartStore, n as stripeStoreHandleInventoryCheck, A as storeCreditStoreApplyCredit, T as stripeStoreRecordPolicyConsent, B as storeCreditStoreCoversFullAmount, D as storeCreditStoreCreateOrder, K as storeCreditStoreGetEffectiveAmount } from './cart-BS5mSI8x.js';
3
+ import { s as storageStore, t as translate } from './localization-CXHiWcJp.js';
4
+ import { h as handleFetch, g as getIsTestMode, l as logError, j as jsonParse } from './handleFetch-BFVO7oAR.js';
5
5
  import { i as isContrastColor } from './isContrastColor-CWLU13s9.js';
6
6
  import { l as log } from './VarianceTest-BJmZPrZl.js';
7
- import { i as isAnalyticsRelayInIframe, a as enqueueRelayEvent, s as submitGtag } from './submitGtag-BEFrutel.js';
7
+ import { i as isAnalyticsRelayInIframe, a as enqueueRelayEvent, s as submitGtag } from './submitGtag-C5xzFHjG.js';
8
8
 
9
9
  /*!
10
10
  * paypal-js v8.4.2 (2025-09-04T17:21:30.135Z)