@nextblock-cms/ecom 0.20.1 → 0.21.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 (317) hide show
  1. package/_virtual/_rolldown/runtime.cjs.js +1 -0
  2. package/index.cjs.js +1 -1
  3. package/index.es.js +38 -146
  4. package/lib/CurrencyProvider.cjs.js +1 -1
  5. package/lib/CurrencyProvider.d.ts +1 -1
  6. package/lib/CurrencyProvider.es.js +85 -95
  7. package/lib/PaymentReadinessProvider.cjs.js +1 -1
  8. package/lib/PaymentReadinessProvider.d.ts +1 -1
  9. package/lib/PaymentReadinessProvider.es.js +24 -27
  10. package/lib/cart-store.cjs.js +1 -1
  11. package/lib/cart-store.es.js +109 -121
  12. package/lib/components/AccountNavigationMenu.cjs.js +1 -1
  13. package/lib/components/AccountNavigationMenu.d.ts +1 -1
  14. package/lib/components/AccountNavigationMenu.es.js +36 -50
  15. package/lib/components/AddToCartButton.cjs.js +1 -1
  16. package/lib/components/AddToCartButton.d.ts +1 -1
  17. package/lib/components/AddToCartButton.es.js +94 -89
  18. package/lib/components/Cart.cjs.js +1 -1
  19. package/lib/components/Cart.d.ts +1 -1
  20. package/lib/components/Cart.es.js +261 -180
  21. package/lib/components/CartDrawer.cjs.js +1 -1
  22. package/lib/components/CartDrawer.d.ts +1 -1
  23. package/lib/components/CartDrawer.es.js +218 -148
  24. package/lib/components/CartIcon.cjs.js +1 -1
  25. package/lib/components/CartIcon.d.ts +1 -1
  26. package/lib/components/CartIcon.es.js +33 -35
  27. package/lib/components/Checkout.cjs.js +1 -1
  28. package/lib/components/Checkout.d.ts +1 -1
  29. package/lib/components/Checkout.es.js +1092 -1108
  30. package/lib/components/CouponForm.cjs.js +1 -1
  31. package/lib/components/CouponForm.d.ts +1 -1
  32. package/lib/components/CouponForm.es.js +136 -148
  33. package/lib/components/CurrencySwitcher.cjs.js +1 -1
  34. package/lib/components/CurrencySwitcher.d.ts +1 -1
  35. package/lib/components/CurrencySwitcher.es.js +22 -18
  36. package/lib/components/CustomerProfileForm.cjs.js +1 -1
  37. package/lib/components/CustomerProfileForm.es.js +454 -313
  38. package/lib/components/FeaturedProduct.cjs.js +1 -1
  39. package/lib/components/FeaturedProduct.d.ts +1 -1
  40. package/lib/components/FeaturedProduct.es.js +98 -83
  41. package/lib/components/FreemiusLicensePanel.cjs.js +1 -1
  42. package/lib/components/FreemiusLicensePanel.d.ts +1 -1
  43. package/lib/components/FreemiusLicensePanel.es.js +70 -65
  44. package/lib/components/InvoiceDocument.cjs.js +1 -1
  45. package/lib/components/InvoiceDocument.es.js +256 -192
  46. package/lib/components/InvoiceViewerShell.cjs.js +2 -2
  47. package/lib/components/InvoiceViewerShell.d.ts +1 -1
  48. package/lib/components/InvoiceViewerShell.es.js +75 -106
  49. package/lib/components/ProductCard.cjs.js +1 -1
  50. package/lib/components/ProductCard.d.ts +1 -1
  51. package/lib/components/ProductCard.es.js +186 -171
  52. package/lib/components/ProductDetailsLayout.cjs.js +1 -1
  53. package/lib/components/ProductDetailsLayout.es.js +405 -404
  54. package/lib/components/ProductGallery.cjs.js +1 -1
  55. package/lib/components/ProductGallery.d.ts +1 -1
  56. package/lib/components/ProductGallery.es.js +51 -54
  57. package/lib/components/ProductGrid.cjs.js +1 -1
  58. package/lib/components/ProductGrid.d.ts +1 -1
  59. package/lib/components/ProductGrid.es.js +23 -25
  60. package/lib/components/ShippingEstimator.cjs.js +1 -1
  61. package/lib/components/ShippingEstimator.d.ts +1 -1
  62. package/lib/components/ShippingEstimator.es.js +158 -153
  63. package/lib/components/ShortDescription.cjs.js +1 -1
  64. package/lib/components/ShortDescription.es.js +17 -17
  65. package/lib/components/SimpleTiptapRenderer.cjs.js +1 -1
  66. package/lib/components/SimpleTiptapRenderer.es.js +238 -211
  67. package/lib/components/SubscriptionSelector.cjs.js +1 -1
  68. package/lib/components/SubscriptionSelector.es.js +159 -154
  69. package/lib/countries.cjs.js +1 -1
  70. package/lib/countries.es.js +232 -75
  71. package/lib/coupon-server.cjs.js +1 -1
  72. package/lib/coupon-server.es.js +180 -224
  73. package/lib/coupons.cjs.js +1 -1
  74. package/lib/coupons.es.js +12 -14
  75. package/lib/currency-constants.cjs.js +1 -1
  76. package/lib/currency-constants.es.js +4 -4
  77. package/lib/currency-rest-client.cjs.js +1 -1
  78. package/lib/currency-rest-client.es.js +15 -22
  79. package/lib/currency-store.cjs.js +1 -1
  80. package/lib/currency-store.es.js +20 -27
  81. package/lib/currency-sync.cjs.js +1 -1
  82. package/lib/currency-sync.es.js +124 -170
  83. package/lib/currency.cjs.js +1 -1
  84. package/lib/currency.es.js +242 -310
  85. package/lib/customer-addresses.cjs.js +1 -1
  86. package/lib/customer-addresses.es.js +80 -109
  87. package/lib/customer-orders.cjs.js +1 -1
  88. package/lib/customer-orders.es.js +31 -43
  89. package/lib/customer.cjs.js +1 -1
  90. package/lib/customer.es.js +43 -52
  91. package/lib/export-helpers.cjs.js +1 -1
  92. package/lib/export-helpers.es.js +53 -52
  93. package/lib/factory.cjs.js +1 -1
  94. package/lib/factory.es.js +10 -7
  95. package/lib/freemius-coupons.cjs.js +1 -1
  96. package/lib/freemius-coupons.es.js +245 -262
  97. package/lib/freemius-license-claim.cjs.js +1 -1
  98. package/lib/freemius-license-claim.es.js +87 -71
  99. package/lib/freemius-license.cjs.js +1 -1
  100. package/lib/freemius-license.es.js +32 -39
  101. package/lib/freemius-order-sync.cjs.js +1 -1
  102. package/lib/freemius-order-sync.es.js +226 -290
  103. package/lib/freemius-trial-provision.cjs.js +1 -1
  104. package/lib/freemius-trial-provision.es.js +136 -130
  105. package/lib/inventory-settings.cjs.js +1 -1
  106. package/lib/inventory-settings.es.js +69 -77
  107. package/lib/invoice-server.cjs.js +3 -3
  108. package/lib/invoice-server.es.js +94 -141
  109. package/lib/invoice-ui.cjs.js +1 -1
  110. package/lib/invoice-ui.es.js +50 -66
  111. package/lib/invoice.cjs.js +1 -1
  112. package/lib/invoice.es.js +85 -94
  113. package/lib/order-inventory.cjs.js +25 -25
  114. package/lib/order-inventory.es.js +67 -79
  115. package/lib/order-tax-details.cjs.js +1 -1
  116. package/lib/order-tax-details.es.js +142 -153
  117. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +1 -1
  118. package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
  119. package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
  120. package/lib/pages/cms/coupons/CouponsPage.cjs.js +2 -2
  121. package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
  122. package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
  123. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +1 -1
  124. package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
  125. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
  126. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +1 -1
  127. package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
  128. package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
  129. package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +1 -1
  130. package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
  131. package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
  132. package/lib/pages/cms/coupons/actions.cjs.js +1 -1
  133. package/lib/pages/cms/coupons/actions.es.js +112 -115
  134. package/lib/pages/cms/coupons/index.cjs.js +1 -0
  135. package/lib/pages/cms/coupons/index.es.js +3 -0
  136. package/lib/pages/cms/coupons/product-options.cjs.js +1 -1
  137. package/lib/pages/cms/coupons/product-options.es.js +21 -23
  138. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +1 -1
  139. package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
  140. package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
  141. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +1 -1
  142. package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
  143. package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
  144. package/lib/pages/cms/orders/OrderPrintButton.cjs.js +1 -1
  145. package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
  146. package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
  147. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +1 -1
  148. package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
  149. package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
  150. package/lib/pages/cms/orders/OrdersPage.cjs.js +1 -1
  151. package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
  152. package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
  153. package/lib/pages/cms/orders/actions.cjs.js +3 -3
  154. package/lib/pages/cms/orders/actions.es.js +53 -69
  155. package/lib/pages/cms/orders/export-actions.cjs.js +1 -1
  156. package/lib/pages/cms/orders/export-actions.es.js +23 -26
  157. package/lib/pages/cms/orders/index.cjs.js +1 -0
  158. package/lib/pages/cms/orders/index.es.js +6 -0
  159. package/lib/pages/cms/orders/server-actions.cjs.js +1 -1
  160. package/lib/pages/cms/orders/server-actions.es.js +60 -51
  161. package/lib/pages/cms/payments/PaymentsClient.cjs.js +1 -1
  162. package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
  163. package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
  164. package/lib/pages/cms/payments/PaymentsPage.cjs.js +1 -1
  165. package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
  166. package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
  167. package/lib/pages/cms/payments/actions.cjs.js +1 -1
  168. package/lib/pages/cms/payments/actions.es.js +38 -48
  169. package/lib/pages/cms/payments/index.cjs.js +1 -0
  170. package/lib/pages/cms/payments/index.es.js +3 -0
  171. package/lib/pages/cms/payments/queries.cjs.js +1 -1
  172. package/lib/pages/cms/payments/queries.es.js +38 -48
  173. package/lib/pages/cms/products/ProductsPage.cjs.js +1 -1
  174. package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
  175. package/lib/pages/cms/products/ProductsPage.es.js +63 -66
  176. package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
  177. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +1 -1
  178. package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +138 -155
  179. package/lib/pages/cms/products/actions.cjs.js +4 -4
  180. package/lib/pages/cms/products/actions.es.js +121 -162
  181. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +1 -1
  182. package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
  183. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
  184. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +1 -1
  185. package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
  186. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
  187. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +1 -1
  188. package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
  189. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
  190. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +1 -1
  191. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
  192. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +1 -1
  193. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
  194. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +1 -1
  195. package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
  196. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
  197. package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +1 -1
  198. package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
  199. package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
  200. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +1 -1
  201. package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
  202. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
  203. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +1 -1
  204. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
  205. package/lib/pages/cms/products/components/ProductForm.cjs.js +1 -1
  206. package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
  207. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +1 -1
  208. package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
  209. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +1 -1
  210. package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
  211. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
  212. package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +1 -1
  213. package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
  214. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
  215. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +1 -1
  216. package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
  217. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
  218. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +2 -2
  219. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
  220. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
  221. package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
  222. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +1 -1
  223. package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
  224. package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
  225. package/lib/pages/cms/products/index.cjs.js +1 -0
  226. package/lib/pages/cms/products/index.es.js +8 -0
  227. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +1 -1
  228. package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
  229. package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
  230. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +2 -2
  231. package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
  232. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
  233. package/lib/pages/cms/products/inventory/actions.cjs.js +3 -3
  234. package/lib/pages/cms/products/inventory/actions.es.js +83 -91
  235. package/lib/pages/cms/products/new/NewProductPage.cjs.js +1 -1
  236. package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
  237. package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
  238. package/lib/pages/cms/products/product-price-sync.cjs.js +1 -1
  239. package/lib/pages/cms/products/product-price-sync.es.js +74 -89
  240. package/lib/pages/cms/products/server-actions.cjs.js +1 -1
  241. package/lib/pages/cms/products/server-actions.es.js +250 -233
  242. package/lib/pages/cms/shipping/ShippingPage.cjs.js +2 -2
  243. package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
  244. package/lib/pages/cms/shipping/components/RateForm.cjs.js +1 -1
  245. package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
  246. package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
  247. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +1 -1
  248. package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
  249. package/lib/pages/cms/shipping/index.cjs.js +1 -0
  250. package/lib/pages/cms/shipping/index.es.js +3 -0
  251. package/lib/pages/cms/shipping/server-actions.cjs.js +1 -1
  252. package/lib/pages/cms/shipping/server-actions.es.js +131 -149
  253. package/lib/pages/cms/taxes/TaxesPage.cjs.js +1 -1
  254. package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
  255. package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
  256. package/lib/pages/cms/taxes/actions.cjs.js +1 -1
  257. package/lib/pages/cms/taxes/actions.es.js +41 -53
  258. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +1 -1
  259. package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
  260. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
  261. package/lib/pages/cms/taxes/index.cjs.js +1 -0
  262. package/lib/pages/cms/taxes/index.es.js +3 -0
  263. package/lib/payment-config.cjs.js +1 -1
  264. package/lib/payment-config.es.js +110 -126
  265. package/lib/product-actions.cjs.js +4 -4
  266. package/lib/product-actions.es.js +289 -544
  267. package/lib/product-context.cjs.js +1 -1
  268. package/lib/product-context.es.js +13 -15
  269. package/lib/product-schema.cjs.js +1 -1
  270. package/lib/product-schema.es.js +99 -134
  271. package/lib/providers/freemius.cjs.js +1 -5
  272. package/lib/providers/freemius.es.js +446 -530
  273. package/lib/providers/stripe.cjs.js +1 -1
  274. package/lib/providers/stripe.es.js +417 -477
  275. package/lib/server-actions/coupon-actions.cjs.js +1 -1
  276. package/lib/server-actions/coupon-actions.es.js +22 -22
  277. package/lib/server-actions/customer-actions.cjs.js +1 -1
  278. package/lib/server-actions/customer-actions.es.js +26 -28
  279. package/lib/server-actions/product-actions.cjs.js +1 -1
  280. package/lib/server-actions/product-actions.es.js +9 -15
  281. package/lib/server-actions/shipping-actions.cjs.js +1 -1
  282. package/lib/server-actions/shipping-actions.es.js +27 -24
  283. package/lib/server-actions/tax-actions.cjs.js +1 -1
  284. package/lib/server-actions/tax-actions.es.js +33 -39
  285. package/lib/shared-inventory.cjs.js +2 -2
  286. package/lib/shared-inventory.es.js +111 -160
  287. package/lib/shipping/resolver.cjs.js +2 -2
  288. package/lib/shipping/resolver.es.js +44 -61
  289. package/lib/shipping-rate-currency.cjs.js +1 -1
  290. package/lib/shipping-rate-currency.es.js +52 -67
  291. package/lib/states.cjs.js +1 -1
  292. package/lib/states.es.js +333 -154
  293. package/lib/stripe/checkout.cjs.js +1 -1
  294. package/lib/stripe/checkout.es.js +125 -181
  295. package/lib/stripe/client.cjs.js +1 -1
  296. package/lib/stripe/client.es.js +14 -19
  297. package/lib/stripe/order-sync.cjs.js +1 -1
  298. package/lib/stripe/order-sync.es.js +106 -126
  299. package/lib/stripe/webhooks.cjs.js +1 -1
  300. package/lib/stripe/webhooks.es.js +37 -31
  301. package/lib/tax-calculation.cjs.js +1 -1
  302. package/lib/tax-calculation.es.js +84 -98
  303. package/lib/trials.cjs.js +1 -1
  304. package/lib/trials.es.js +24 -30
  305. package/lib/types.cjs.js +1 -1
  306. package/lib/types.es.js +21 -27
  307. package/lib/use-cart.cjs.js +1 -1
  308. package/lib/use-cart.es.js +38 -40
  309. package/lib/use-price-formatter.cjs.js +1 -1
  310. package/lib/use-price-formatter.es.js +10 -11
  311. package/lib/variation-utils.cjs.js +1 -1
  312. package/lib/variation-utils.es.js +199 -261
  313. package/lib/zod-config.cjs.js +1 -1
  314. package/lib/zod-config.es.js +5 -6
  315. package/package.json +16 -16
  316. package/server.cjs.js +1 -1
  317. package/server.es.js +56 -211
@@ -1,234 +1,190 @@
1
- import { normalizeCouponCode as S, getCartLineCouponKey as q, emptyProviderDiscounts as E } from "./coupons.es.js";
2
- import { getDefaultCurrency as x, resolveEffectivePriceForCurrency as A, normalizePriceMap as C, normalizeSalePriceMap as D, normalizeCurrencyRecord as T } from "./currency.es.js";
3
- function M(e) {
4
- if (!e)
5
- return null;
6
- const t = new Date(e);
7
- return Number.isNaN(t.getTime()) ? null : t;
1
+ import { getDefaultCurrency as e, normalizeCurrencyRecord as t, normalizePriceMap as n, normalizeSalePriceMap as r, resolveEffectivePriceForCurrency as i } from "./currency.es.js";
2
+ import { emptyProviderDiscounts as a, getCartLineCouponKey as o, normalizeCouponCode as s } from "./coupons.es.js";
3
+ //#region libs/ecommerce/src/lib/coupon-server.ts
4
+ function c(e) {
5
+ if (!e) return null;
6
+ let t = new Date(e);
7
+ return Number.isNaN(t.getTime()) ? null : t;
8
8
  }
9
- function k(e, t) {
10
- return e === "all" || e === t;
9
+ function l(e, t) {
10
+ return e === "all" || e === t;
11
11
  }
12
- function I(e) {
13
- return e === "stripe" || e === "freemius" ? e : null;
12
+ function u(e) {
13
+ return e === "stripe" || e === "freemius" ? e : null;
14
14
  }
15
- async function K(e) {
16
- const { data: t, error: c } = await e.from("currencies").select(
17
- "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"
18
- ).eq("is_active", !0).order("code", { ascending: !0 });
19
- if (c)
20
- throw new Error(c.message);
21
- return (t || []).map((s) => T(s));
15
+ async function d(e) {
16
+ let { data: n, error: r } = await e.from("currencies").select("code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount").eq("is_active", !0).order("code", { ascending: !0 });
17
+ if (r) throw Error(r.message);
18
+ return (n || []).map((e) => t(e));
22
19
  }
23
- async function L(e) {
24
- const { client: t, items: c } = e, s = await K(t);
25
- if (s.length === 0)
26
- throw new Error("No active currencies are configured.");
27
- const r = s.find((n) => n.code === (e.currencyCode || "").toUpperCase()) ?? x(s), u = [...new Set(c.map((n) => n.product_id).filter(Boolean))], i = [
28
- ...new Set(
29
- c.map((n) => n.variant_id).filter((n) => !!n)
30
- )
31
- ];
32
- if (u.length === 0)
33
- return {
34
- lines: [],
35
- currencies: s,
36
- selectedCurrency: r
37
- };
38
- const [{ data: p, error: f }, a] = await Promise.all([
39
- t.from("products").select(
40
- "id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id"
41
- ).in("id", u),
42
- i.length ? t.from("product_variants").select("id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at").in("id", i) : Promise.resolve({ data: [], error: null })
43
- ]);
44
- if (f)
45
- throw new Error(f.message);
46
- if (a.error)
47
- throw new Error(a.error.message);
48
- const g = p || [], _ = a.data || [], v = new Map(
49
- g.map((n) => [n.id, n])
50
- ), m = new Map(
51
- _.map((n) => [n.id, n])
52
- ), h = [];
53
- for (const n of c) {
54
- const o = v.get(n.product_id);
55
- if (!o)
56
- continue;
57
- const l = I(o.payment_provider) ?? (o.product_type === "digital" ? "freemius" : "stripe"), y = n.variant_id ? m.get(n.variant_id) : null, d = y && y.product_id === o.id ? y : o, w = A({
58
- prices: C(d.prices),
59
- salePrices: D(d.sale_prices),
60
- fallbackPrice: d.price,
61
- fallbackSalePrice: d.sale_price,
62
- saleStartAt: d.sale_start_at,
63
- saleEndAt: d.sale_end_at,
64
- scheduledPrice: d.scheduled_price,
65
- scheduledPrices: C(d.scheduled_prices),
66
- scheduledPriceAt: d.scheduled_price_at,
67
- currencyCode: r.code,
68
- currencies: s
69
- }), b = l === "freemius" ? 1 : Math.max(1, Number(n.quantity) || 1), P = Math.max(0, w.sale_price ?? w.price);
70
- h.push({
71
- key: q(n),
72
- product_id: o.id,
73
- variant_id: y?.id ?? null,
74
- title: o.title,
75
- quantity: b,
76
- provider: l,
77
- subtotal: P * b,
78
- freemius_product_id: o.freemius_product_id ?? null,
79
- freemius_plan_id: o.freemius_plan_id ?? null
80
- });
81
- }
82
- return {
83
- lines: h,
84
- currencies: s,
85
- selectedCurrency: r
86
- };
20
+ async function f(t) {
21
+ let { client: a, items: s } = t, c = await d(a);
22
+ if (c.length === 0) throw Error("No active currencies are configured.");
23
+ let l = c.find((e) => e.code === (t.currencyCode || "").toUpperCase()) ?? e(c), f = [...new Set(s.map((e) => e.product_id).filter(Boolean))], p = [...new Set(s.map((e) => e.variant_id).filter((e) => !!e))];
24
+ if (f.length === 0) return {
25
+ lines: [],
26
+ currencies: c,
27
+ selectedCurrency: l
28
+ };
29
+ let [{ data: m, error: h }, g] = await Promise.all([a.from("products").select("id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, product_type, payment_provider, freemius_product_id, freemius_plan_id").in("id", f), p.length ? a.from("product_variants").select("id, product_id, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at").in("id", p) : Promise.resolve({
30
+ data: [],
31
+ error: null
32
+ })]);
33
+ if (h) throw Error(h.message);
34
+ if (g.error) throw Error(g.error.message);
35
+ let _ = m || [], v = g.data || [], y = new Map(_.map((e) => [e.id, e])), b = new Map(v.map((e) => [e.id, e])), x = [];
36
+ for (let e of s) {
37
+ let t = y.get(e.product_id);
38
+ if (!t) continue;
39
+ let a = u(t.payment_provider) ?? (t.product_type === "digital" ? "freemius" : "stripe"), s = e.variant_id ? b.get(e.variant_id) : null, d = s && s.product_id === t.id ? s : t, f = i({
40
+ prices: n(d.prices),
41
+ salePrices: r(d.sale_prices),
42
+ fallbackPrice: d.price,
43
+ fallbackSalePrice: d.sale_price,
44
+ saleStartAt: d.sale_start_at,
45
+ saleEndAt: d.sale_end_at,
46
+ scheduledPrice: d.scheduled_price,
47
+ scheduledPrices: n(d.scheduled_prices),
48
+ scheduledPriceAt: d.scheduled_price_at,
49
+ currencyCode: l.code,
50
+ currencies: c
51
+ }), p = a === "freemius" ? 1 : Math.max(1, Number(e.quantity) || 1), m = Math.max(0, f.sale_price ?? f.price);
52
+ x.push({
53
+ key: o(e),
54
+ product_id: t.id,
55
+ variant_id: s?.id ?? null,
56
+ title: t.title,
57
+ quantity: p,
58
+ provider: a,
59
+ subtotal: m * p,
60
+ freemius_product_id: t.freemius_product_id ?? null,
61
+ freemius_plan_id: t.freemius_plan_id ?? null
62
+ });
63
+ }
64
+ return {
65
+ lines: x,
66
+ currencies: c,
67
+ selectedCurrency: l
68
+ };
87
69
  }
88
- async function R(e, t) {
89
- const { data: c, error: s } = await e.from("coupon_products").select("product_id").eq("coupon_id", t);
90
- if (s)
91
- throw new Error(s.message);
92
- return new Set((c || []).map((r) => r.product_id));
70
+ async function p(e, t) {
71
+ let { data: n, error: r } = await e.from("coupon_products").select("product_id").eq("coupon_id", t);
72
+ if (r) throw Error(r.message);
73
+ return new Set((n || []).map((e) => e.product_id));
93
74
  }
94
- function z(e, t) {
95
- const c = e.reduce((i, p) => i + p.subtotal, 0), s = Math.min(t, c);
96
- if (c <= 0 || s <= 0)
97
- return /* @__PURE__ */ new Map();
98
- const r = /* @__PURE__ */ new Map();
99
- let u = 0;
100
- return e.forEach((i, p) => {
101
- const a = p === e.length - 1 ? s - u : Math.min(
102
- i.subtotal,
103
- Math.floor(s * i.subtotal / c)
104
- );
105
- u += a, r.set(i.key, a);
106
- }), r;
75
+ function m(e, t) {
76
+ let n = e.reduce((e, t) => e + t.subtotal, 0), r = Math.min(t, n);
77
+ if (n <= 0 || r <= 0) return /* @__PURE__ */ new Map();
78
+ let i = /* @__PURE__ */ new Map(), a = 0;
79
+ return e.forEach((t, o) => {
80
+ let s = o === e.length - 1 ? r - a : Math.min(t.subtotal, Math.floor(r * t.subtotal / n));
81
+ a += s, i.set(t.key, s);
82
+ }), i;
107
83
  }
108
- async function B(e) {
109
- const t = S(e.code);
110
- if (!t)
111
- return {
112
- success: !1,
113
- error: "Enter a coupon code.",
114
- errorKey: "ecommerce.coupon_code_required"
115
- };
116
- if (!e.items.length)
117
- return {
118
- success: !1,
119
- error: "Add an item to your cart before applying a coupon.",
120
- errorKey: "ecommerce.coupon_cart_empty"
121
- };
122
- const { data: c, error: s } = await e.client.from("coupons").select(
123
- "id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count"
124
- ).ilike("code", t).maybeSingle();
125
- if (s)
126
- throw new Error(s.message);
127
- if (!c)
128
- return {
129
- success: !1,
130
- error: "Coupon code not found.",
131
- errorKey: "ecommerce.coupon_not_found"
132
- };
133
- const r = c, u = /* @__PURE__ */ new Date(), i = M(r.starts_at), p = M(r.ends_at);
134
- if (!r.is_active)
135
- return {
136
- success: !1,
137
- error: "This coupon is not active.",
138
- errorKey: "ecommerce.coupon_inactive"
139
- };
140
- if (i && i > u)
141
- return {
142
- success: !1,
143
- error: "This coupon is not active yet.",
144
- errorKey: "ecommerce.coupon_not_started"
145
- };
146
- if (p && p <= u)
147
- return {
148
- success: !1,
149
- error: "This coupon has expired.",
150
- errorKey: "ecommerce.coupon_expired"
151
- };
152
- if (r.redemption_limit !== null && (r.redemptions_count ?? 0) >= r.redemption_limit)
153
- return {
154
- success: !1,
155
- error: "This coupon has reached its redemption limit.",
156
- errorKey: "ecommerce.coupon_limit_reached"
157
- };
158
- const [{ lines: f }, a] = await Promise.all([
159
- L({
160
- client: e.client,
161
- items: e.items,
162
- currencyCode: e.currencyCode
163
- }),
164
- R(e.client, r.id)
165
- ]), g = a.size > 0, _ = f.filter(
166
- (o) => o.subtotal > 0 && k(r.provider_scope, o.provider) && (!g || a.has(o.product_id))
167
- );
168
- if (_.length === 0)
169
- return {
170
- success: !1,
171
- error: "This coupon does not apply to the items in your cart.",
172
- errorKey: "ecommerce.coupon_not_applicable"
173
- };
174
- const v = r.discount_type === "fixed" ? z(_, r.discount_amount) : null, m = E(), h = _.map((o) => {
175
- const l = r.discount_type === "percent" ? Math.min(o.subtotal, Math.round(o.subtotal * r.discount_amount / 100)) : v?.get(o.key) ?? 0;
176
- return m[o.provider] += l, {
177
- key: o.key,
178
- product_id: o.product_id,
179
- variant_id: o.variant_id,
180
- provider: o.provider,
181
- title: o.title,
182
- quantity: o.quantity,
183
- subtotal: o.subtotal,
184
- discount: l
185
- };
186
- });
187
- return {
188
- success: !0,
189
- quote: {
190
- couponId: r.id,
191
- code: r.code,
192
- name: r.name,
193
- discountType: r.discount_type,
194
- discountAmount: r.discount_amount,
195
- providerScope: r.provider_scope,
196
- eligibleSubtotal: _.reduce((o, l) => o + l.subtotal, 0),
197
- discountTotal: m.stripe + m.freemius,
198
- providerDiscounts: m,
199
- lineDiscounts: h
200
- }
201
- };
84
+ async function h(e) {
85
+ let t = s(e.code);
86
+ if (!t) return {
87
+ success: !1,
88
+ error: "Enter a coupon code.",
89
+ errorKey: "ecommerce.coupon_code_required"
90
+ };
91
+ if (!e.items.length) return {
92
+ success: !1,
93
+ error: "Add an item to your cart before applying a coupon.",
94
+ errorKey: "ecommerce.coupon_cart_empty"
95
+ };
96
+ let { data: n, error: r } = await e.client.from("coupons").select("id, code, name, provider_scope, discount_type, discount_amount, is_active, starts_at, ends_at, redemption_limit, redemptions_count").ilike("code", t).maybeSingle();
97
+ if (r) throw Error(r.message);
98
+ if (!n) return {
99
+ success: !1,
100
+ error: "Coupon code not found.",
101
+ errorKey: "ecommerce.coupon_not_found"
102
+ };
103
+ let i = n, o = /* @__PURE__ */ new Date(), u = c(i.starts_at), d = c(i.ends_at);
104
+ if (!i.is_active) return {
105
+ success: !1,
106
+ error: "This coupon is not active.",
107
+ errorKey: "ecommerce.coupon_inactive"
108
+ };
109
+ if (u && u > o) return {
110
+ success: !1,
111
+ error: "This coupon is not active yet.",
112
+ errorKey: "ecommerce.coupon_not_started"
113
+ };
114
+ if (d && d <= o) return {
115
+ success: !1,
116
+ error: "This coupon has expired.",
117
+ errorKey: "ecommerce.coupon_expired"
118
+ };
119
+ if (i.redemption_limit !== null && (i.redemptions_count ?? 0) >= i.redemption_limit) return {
120
+ success: !1,
121
+ error: "This coupon has reached its redemption limit.",
122
+ errorKey: "ecommerce.coupon_limit_reached"
123
+ };
124
+ let [{ lines: h }, g] = await Promise.all([f({
125
+ client: e.client,
126
+ items: e.items,
127
+ currencyCode: e.currencyCode
128
+ }), p(e.client, i.id)]), _ = g.size > 0, v = h.filter((e) => e.subtotal > 0 && l(i.provider_scope, e.provider) && (!_ || g.has(e.product_id)));
129
+ if (v.length === 0) return {
130
+ success: !1,
131
+ error: "This coupon does not apply to the items in your cart.",
132
+ errorKey: "ecommerce.coupon_not_applicable"
133
+ };
134
+ let y = i.discount_type === "fixed" ? m(v, i.discount_amount) : null, b = a(), x = v.map((e) => {
135
+ let t = i.discount_type === "percent" ? Math.min(e.subtotal, Math.round(e.subtotal * i.discount_amount / 100)) : y?.get(e.key) ?? 0;
136
+ return b[e.provider] += t, {
137
+ key: e.key,
138
+ product_id: e.product_id,
139
+ variant_id: e.variant_id,
140
+ provider: e.provider,
141
+ title: e.title,
142
+ quantity: e.quantity,
143
+ subtotal: e.subtotal,
144
+ discount: t
145
+ };
146
+ });
147
+ return {
148
+ success: !0,
149
+ quote: {
150
+ couponId: i.id,
151
+ code: i.code,
152
+ name: i.name,
153
+ discountType: i.discount_type,
154
+ discountAmount: i.discount_amount,
155
+ providerScope: i.provider_scope,
156
+ eligibleSubtotal: v.reduce((e, t) => e + t.subtotal, 0),
157
+ discountTotal: b.stripe + b.freemius,
158
+ providerDiscounts: b,
159
+ lineDiscounts: x
160
+ }
161
+ };
202
162
  }
203
- function Q(e) {
204
- const t = /* @__PURE__ */ new Map();
205
- for (const c of e?.lineDiscounts ?? [])
206
- t.set(c.key, c.discount);
207
- return t;
163
+ function g(e) {
164
+ let t = /* @__PURE__ */ new Map();
165
+ for (let n of e?.lineDiscounts ?? []) t.set(n.key, n.discount);
166
+ return t;
208
167
  }
209
- async function O(e) {
210
- const { error: t } = await e.client.from("coupon_redemptions").insert({
211
- coupon_id: e.quote.couponId,
212
- order_id: e.orderId,
213
- coupon_code: e.quote.code,
214
- provider: e.provider,
215
- discount_total: Math.max(0, e.discountTotal),
216
- user_id: e.userId || null,
217
- customer_email: e.customerEmail || null,
218
- metadata: e.metadata || {}
219
- });
220
- if (t) {
221
- console.error("Failed to record coupon redemption:", t);
222
- return;
223
- }
224
- const { data: c } = await e.client.from("coupons").select("redemptions_count").eq("id", e.quote.couponId).single();
225
- await e.client.from("coupons").update({
226
- redemptions_count: (c?.redemptions_count ?? 0) + 1,
227
- updated_at: (/* @__PURE__ */ new Date()).toISOString()
228
- }).eq("id", e.quote.couponId);
168
+ async function _(e) {
169
+ let { error: t } = await e.client.from("coupon_redemptions").insert({
170
+ coupon_id: e.quote.couponId,
171
+ order_id: e.orderId,
172
+ coupon_code: e.quote.code,
173
+ provider: e.provider,
174
+ discount_total: Math.max(0, e.discountTotal),
175
+ user_id: e.userId || null,
176
+ customer_email: e.customerEmail || null,
177
+ metadata: e.metadata || {}
178
+ });
179
+ if (t) {
180
+ console.error("Failed to record coupon redemption:", t);
181
+ return;
182
+ }
183
+ let { data: n } = await e.client.from("coupons").select("redemptions_count").eq("id", e.quote.couponId).single();
184
+ await e.client.from("coupons").update({
185
+ redemptions_count: (n?.redemptions_count ?? 0) + 1,
186
+ updated_at: (/* @__PURE__ */ new Date()).toISOString()
187
+ }).eq("id", e.quote.couponId);
229
188
  }
230
- export {
231
- B as getCouponQuote,
232
- Q as getQuoteLineDiscountMap,
233
- O as recordCouponRedemption
234
- };
189
+ //#endregion
190
+ export { h as getCouponQuote, g as getQuoteLineDiscountMap, _ as recordCouponRedemption };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(e){return(e||"").trim().replace(/\s+/g,"").toUpperCase()}function r(e){return`${e.product_id}:${e.variant_id||"base"}`}function t(){return{stripe:0,freemius:0}}exports.emptyProviderDiscounts=t;exports.getCartLineCouponKey=r;exports.normalizeCouponCode=o;
1
+ function e(e){return(e||``).trim().replace(/\s+/g,``).toUpperCase()}function t(e){return`${e.product_id}:${e.variant_id||`base`}`}function n(){return{stripe:0,freemius:0}}exports.emptyProviderDiscounts=n,exports.getCartLineCouponKey=t,exports.normalizeCouponCode=e;
package/lib/coupons.es.js CHANGED
@@ -1,17 +1,15 @@
1
- function r(e) {
2
- return (e || "").trim().replace(/\s+/g, "").toUpperCase();
1
+ //#region libs/ecommerce/src/lib/coupons.ts
2
+ function e(e) {
3
+ return (e || "").trim().replace(/\s+/g, "").toUpperCase();
3
4
  }
4
- function n(e) {
5
- return `${e.product_id}:${e.variant_id || "base"}`;
5
+ function t(e) {
6
+ return `${e.product_id}:${e.variant_id || "base"}`;
6
7
  }
7
- function t() {
8
- return {
9
- stripe: 0,
10
- freemius: 0
11
- };
8
+ function n() {
9
+ return {
10
+ stripe: 0,
11
+ freemius: 0
12
+ };
12
13
  }
13
- export {
14
- t as emptyProviderDiscounts,
15
- n as getCartLineCouponKey,
16
- r as normalizeCouponCode
17
- };
14
+ //#endregion
15
+ export { n as emptyProviderDiscounts, t as getCartLineCouponKey, e as normalizeCouponCode };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C="NEXTBLOCK_CURRENCY";exports.CURRENCY_COOKIE_NAME=C;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=`NEXTBLOCK_CURRENCY`;exports.CURRENCY_COOKIE_NAME=e;
@@ -1,4 +1,4 @@
1
- const C = "NEXTBLOCK_CURRENCY";
2
- export {
3
- C as CURRENCY_COOKIE_NAME
4
- };
1
+ //#region libs/ecommerce/src/lib/currency-constants.ts
2
+ var e = "NEXTBLOCK_CURRENCY";
3
+ //#endregion
4
+ export { e as CURRENCY_COOKIE_NAME };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});async function c(){const s=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,r=process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY||process.env.SUPABASE_ANON_KEY||process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY||process.env.SUPABASE_PUBLISHABLE_KEY;if(!s||!r)return[];const e=new URL("/rest/v1/currencies",s);e.searchParams.set("select","code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"),e.searchParams.set("is_active","eq.true"),e.searchParams.set("order","code.asc");const t=await fetch(e.toString(),{headers:{apikey:r,Authorization:`Bearer ${r}`}});if(!t.ok)return[];const a=await t.json();return Array.isArray(a)?a:[]}exports.fetchActiveCurrenciesFromRest=c;
1
+ async function e(){let e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,t=process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY||process.env.SUPABASE_ANON_KEY||process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY||process.env.SUPABASE_PUBLISHABLE_KEY;if(!e||!t)return[];let n=new URL(`/rest/v1/currencies`,e);n.searchParams.set(`select`,`code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount`),n.searchParams.set(`is_active`,`eq.true`),n.searchParams.set(`order`,`code.asc`);let r=await fetch(n.toString(),{headers:{apikey:t,Authorization:`Bearer ${t}`}});if(!r.ok)return[];let i=await r.json();return Array.isArray(i)?i:[]}exports.fetchActiveCurrenciesFromRest=e;
@@ -1,23 +1,16 @@
1
- async function n() {
2
- const s = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL, r = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY;
3
- if (!s || !r)
4
- return [];
5
- const e = new URL("/rest/v1/currencies", s);
6
- e.searchParams.set(
7
- "select",
8
- "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"
9
- ), e.searchParams.set("is_active", "eq.true"), e.searchParams.set("order", "code.asc");
10
- const a = await fetch(e.toString(), {
11
- headers: {
12
- apikey: r,
13
- Authorization: `Bearer ${r}`
14
- }
15
- });
16
- if (!a.ok)
17
- return [];
18
- const t = await a.json();
19
- return Array.isArray(t) ? t : [];
1
+ //#region libs/ecommerce/src/lib/currency-rest-client.ts
2
+ async function e() {
3
+ let e = process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL, t = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || process.env.SUPABASE_ANON_KEY || process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_PUBLISHABLE_KEY;
4
+ if (!e || !t) return [];
5
+ let n = new URL("/rest/v1/currencies", e);
6
+ n.searchParams.set("select", "code, symbol, exchange_rate, is_default, is_active, auto_sync_product_prices, auto_update_exchange_rate, exchange_rate_source, exchange_rate_updated_at, rounding_mode, rounding_increment, rounding_charm_amount"), n.searchParams.set("is_active", "eq.true"), n.searchParams.set("order", "code.asc");
7
+ let r = await fetch(n.toString(), { headers: {
8
+ apikey: t,
9
+ Authorization: `Bearer ${t}`
10
+ } });
11
+ if (!r.ok) return [];
12
+ let i = await r.json();
13
+ return Array.isArray(i) ? i : [];
20
14
  }
21
- export {
22
- n as fetchActiveCurrenciesFromRest
23
- };
15
+ //#endregion
16
+ export { e as fetchActiveCurrenciesFromRest };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("zustand"),t=require("zustand/middleware"),c=require("@nextblock-cms/utils"),o=a.create()(t.persist(e=>({activeCurrencyCode:null,hasHydrated:!1,setActiveCurrencyCode:r=>e({activeCurrencyCode:c.normalizeCurrencyCode(r)}),setHasHydrated:r=>e({hasHydrated:r})}),{name:"currency-preference-storage",storage:t.createJSONStorage(()=>localStorage),skipHydration:!0,partialize:e=>({activeCurrencyCode:e.activeCurrencyCode}),onRehydrateStorage:()=>e=>{e?.setHasHydrated(!0)}}));exports.useCurrencyPreferenceStore=o;
1
+ let e=require("zustand"),t=require("zustand/middleware"),n=require("@nextblock-cms/utils");var r=(0,e.create)()((0,t.persist)(e=>({activeCurrencyCode:null,hasHydrated:!1,setActiveCurrencyCode:t=>e({activeCurrencyCode:(0,n.normalizeCurrencyCode)(t)}),setHasHydrated:t=>e({hasHydrated:t})}),{name:`currency-preference-storage`,storage:(0,t.createJSONStorage)(()=>localStorage),skipHydration:!0,partialize:e=>({activeCurrencyCode:e.activeCurrencyCode}),onRehydrateStorage:()=>e=>{e?.setHasHydrated(!0)}}));exports.useCurrencyPreferenceStore=r;
@@ -1,27 +1,20 @@
1
- import { create as t } from "zustand";
2
- import { persist as a, createJSONStorage as o } from "zustand/middleware";
3
- import { normalizeCurrencyCode as c } from "@nextblock-cms/utils";
4
- const s = t()(
5
- a(
6
- (e) => ({
7
- activeCurrencyCode: null,
8
- hasHydrated: !1,
9
- setActiveCurrencyCode: (r) => e({ activeCurrencyCode: c(r) }),
10
- setHasHydrated: (r) => e({ hasHydrated: r })
11
- }),
12
- {
13
- name: "currency-preference-storage",
14
- storage: o(() => localStorage),
15
- skipHydration: !0,
16
- partialize: (e) => ({
17
- activeCurrencyCode: e.activeCurrencyCode
18
- }),
19
- onRehydrateStorage: () => (e) => {
20
- e?.setHasHydrated(!0);
21
- }
22
- }
23
- )
24
- );
25
- export {
26
- s as useCurrencyPreferenceStore
27
- };
1
+ import { create as e } from "zustand";
2
+ import { createJSONStorage as t, persist as n } from "zustand/middleware";
3
+ import { normalizeCurrencyCode as r } from "@nextblock-cms/utils";
4
+ //#region libs/ecommerce/src/lib/currency-store.ts
5
+ var i = e()(n((e) => ({
6
+ activeCurrencyCode: null,
7
+ hasHydrated: !1,
8
+ setActiveCurrencyCode: (t) => e({ activeCurrencyCode: r(t) }),
9
+ setHasHydrated: (t) => e({ hasHydrated: t })
10
+ }), {
11
+ name: "currency-preference-storage",
12
+ storage: t(() => localStorage),
13
+ skipHydration: !0,
14
+ partialize: (e) => ({ activeCurrencyCode: e.activeCurrencyCode }),
15
+ onRehydrateStorage: () => (e) => {
16
+ e?.setHasHydrated(!0);
17
+ }
18
+ }));
19
+ //#endregion
20
+ export { i as useCurrencyPreferenceStore };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("server-only");const R=require("@nextblock-cms/db/server"),a=require("@nextblock-cms/utils"),S=require("./currency.cjs.js"),v="https://api.frankfurter.dev",z="id, code, symbol, exchange_rate, is_default, is_active, auto_update_exchange_rate, auto_sync_product_prices, exchange_rate_source, exchange_rate_updated_at, updated_at, rounding_mode, rounding_increment, rounding_charm_amount";function w(r){if(!r.id)throw new Error(`Currency ${a.normalizeCurrencyCode(r.code)} is missing its ID.`);return r.id}function F(){return process.env.FX_API_BASE_URL?.trim().replace(/\/+$/,"")||v}function A(r){try{const e=new URL(r),n=e.pathname.replace(/\/+$/,"");return`${e.host}${n&&n!=="/"?n:""}`}catch{return r}}function $(r){if(!r||typeof r!="object")return!1;const e=r;return typeof e.base=="string"&&typeof e.date=="string"&&typeof e.quote=="string"&&typeof e.rate=="number"&&Number.isFinite(e.rate)&&e.rate>0}function q(r){return Array.isArray(r)&&r.every($)}async function E(){const r=R.getServiceRoleSupabaseClient(),{data:e,error:n}=await r.from("currencies").select(z).order("code",{ascending:!0});if(n)throw new Error(n.message);return{supabase:r,currencies:e||[]}}async function D(r){const e=a.normalizeCurrencyCode(r.newDefaultCurrencyCode),n=Number(r.previousBaseRate);if(!Number.isFinite(n)||n<=0)throw new Error("Cannot rebase exchange rates without a valid previous base rate.");const{supabase:f,currencies:c}=await E();if(!c.find(o=>a.normalizeCurrencyCode(o.code)===e))throw new Error(`Currency ${e} was not found for rebasing.`);const i=new Date().toISOString(),d=[],p=c.map(o=>{const C=w(o),u=a.normalizeCurrencyCode(o.code),y=u===e?1:Number((o.exchange_rate/n).toFixed(10));return d.push(u),{...o,id:C,exchange_rate:y,auto_update_exchange_rate:u===e?!1:o.auto_update_exchange_rate,exchange_rate_source:u===e?"store-default":o.exchange_rate_source||"rebased-default",exchange_rate_updated_at:i,updated_at:i}}),{error:s}=await f.from("currencies").upsert(p,{onConflict:"id"});if(s)throw new Error(s.message);return{rebasedAt:i,newDefaultCurrencyCode:e,updatedCurrencies:d}}async function N(){const{supabase:r,currencies:e}=await E();if(!e.length)throw new Error("No currencies are configured yet.");const n=e.map(t=>S.normalizeCurrencyRecord(t)),f=S.getDefaultCurrency(n),c=a.normalizeCurrencyCode(f.code),_=e.find(t=>a.normalizeCurrencyCode(t.code)===c);if(!_)throw new Error(`Default currency ${c} could not be found for syncing.`);const i=e.filter(t=>a.normalizeCurrencyCode(t.code)!==c&&t.auto_update_exchange_rate!==!1),d=F(),p=A(d),s=new Date().toISOString(),{error:o}=await r.from("currencies").upsert({..._,id:w(_),exchange_rate:1,auto_update_exchange_rate:!1,exchange_rate_source:"store-default",exchange_rate_updated_at:s,updated_at:s},{onConflict:"id"});if(o)throw new Error(o.message);if(!i.length)return{baseCurrencyCode:c,fetchedAt:s,provider:p,providerUrl:d,skippedCurrencies:[],updatedCurrencies:[]};const C=new URL(`${d}/v2/rates`);C.searchParams.set("base",c),C.searchParams.set("quotes",[...new Set(i.map(t=>a.normalizeCurrencyCode(t.code)))].join(","));const u=await fetch(C.toString(),{cache:"no-store",headers:{Accept:"application/json"}});if(!u.ok){const t=await u.text();throw new Error(`FX provider request failed (${u.status}): ${t||"Unexpected response body."}`)}const y=await u.json();if(!q(y))throw new Error("FX provider returned an unexpected response payload.");const m=new Map;for(const t of y)m.set(a.normalizeCurrencyCode(t.quote),t.rate);const x=[],b=[],g=[];for(const t of i){const h=a.normalizeCurrencyCode(t.code),l=m.get(h);if(!l||!Number.isFinite(l)||l<=0){b.push(h);continue}g.push({...t,id:w(t),exchange_rate:Number(l.toFixed(10)),exchange_rate_source:p,exchange_rate_updated_at:s,updated_at:s}),x.push(h)}if(g.length){const{error:t}=await r.from("currencies").upsert(g,{onConflict:"id"});if(t)throw new Error(t.message)}return{baseCurrencyCode:c,fetchedAt:s,provider:p,providerUrl:d,skippedCurrencies:b,updatedCurrencies:x}}async function P(r){const e=a.normalizeCurrencyCode(r),n=R.getServiceRoleSupabaseClient(),{error:f}=await n.rpc("clear_currency_price_overrides",{target_currency:e});if(f)throw new Error(f.message);return{currencyCode:e}}exports.clearAutoSyncedCurrencyPriceOverrides=P;exports.rebaseStoreCurrencyExchangeRates=D;exports.syncStoreCurrencyRates=N;
1
+ const e=require("./currency.cjs.js");let t=require("@nextblock-cms/utils"),n=require("@nextblock-cms/db/server");require("server-only");var r=`https://api.frankfurter.dev`,i=`id, code, symbol, exchange_rate, is_default, is_active, auto_update_exchange_rate, auto_sync_product_prices, exchange_rate_source, exchange_rate_updated_at, updated_at, rounding_mode, rounding_increment, rounding_charm_amount`;function a(e){if(!e.id)throw Error(`Currency ${(0,t.normalizeCurrencyCode)(e.code)} is missing its ID.`);return e.id}function o(){return process.env.FX_API_BASE_URL?.trim().replace(/\/+$/,``)||r}function s(e){try{let t=new URL(e),n=t.pathname.replace(/\/+$/,``);return`${t.host}${n&&n!==`/`?n:``}`}catch{return e}}function c(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.base==`string`&&typeof t.date==`string`&&typeof t.quote==`string`&&typeof t.rate==`number`&&Number.isFinite(t.rate)&&t.rate>0}function l(e){return Array.isArray(e)&&e.every(c)}async function u(){let e=(0,n.getServiceRoleSupabaseClient)(),{data:t,error:r}=await e.from(`currencies`).select(i).order(`code`,{ascending:!0});if(r)throw Error(r.message);return{supabase:e,currencies:t||[]}}async function d(e){let n=(0,t.normalizeCurrencyCode)(e.newDefaultCurrencyCode),r=Number(e.previousBaseRate);if(!Number.isFinite(r)||r<=0)throw Error(`Cannot rebase exchange rates without a valid previous base rate.`);let{supabase:i,currencies:o}=await u();if(!o.find(e=>(0,t.normalizeCurrencyCode)(e.code)===n))throw Error(`Currency ${n} was not found for rebasing.`);let s=new Date().toISOString(),c=[],l=o.map(e=>{let i=a(e),o=(0,t.normalizeCurrencyCode)(e.code),l=o===n?1:Number((e.exchange_rate/r).toFixed(10));return c.push(o),{...e,id:i,exchange_rate:l,auto_update_exchange_rate:o!==n&&e.auto_update_exchange_rate,exchange_rate_source:o===n?`store-default`:e.exchange_rate_source||`rebased-default`,exchange_rate_updated_at:s,updated_at:s}}),{error:d}=await i.from(`currencies`).upsert(l,{onConflict:`id`});if(d)throw Error(d.message);return{rebasedAt:s,newDefaultCurrencyCode:n,updatedCurrencies:c}}async function f(){let{supabase:n,currencies:r}=await u();if(!r.length)throw Error(`No currencies are configured yet.`);let i=r.map(t=>e.normalizeCurrencyRecord(t)),c=e.getDefaultCurrency(i),d=(0,t.normalizeCurrencyCode)(c.code),f=r.find(e=>(0,t.normalizeCurrencyCode)(e.code)===d);if(!f)throw Error(`Default currency ${d} could not be found for syncing.`);let p=r.filter(e=>(0,t.normalizeCurrencyCode)(e.code)!==d&&e.auto_update_exchange_rate!==!1),m=o(),h=s(m),g=new Date().toISOString(),{error:_}=await n.from(`currencies`).upsert({...f,id:a(f),exchange_rate:1,auto_update_exchange_rate:!1,exchange_rate_source:`store-default`,exchange_rate_updated_at:g,updated_at:g},{onConflict:`id`});if(_)throw Error(_.message);if(!p.length)return{baseCurrencyCode:d,fetchedAt:g,provider:h,providerUrl:m,skippedCurrencies:[],updatedCurrencies:[]};let v=new URL(`${m}/v2/rates`);v.searchParams.set(`base`,d),v.searchParams.set(`quotes`,[...new Set(p.map(e=>(0,t.normalizeCurrencyCode)(e.code)))].join(`,`));let y=await fetch(v.toString(),{cache:`no-store`,headers:{Accept:`application/json`}});if(!y.ok){let e=await y.text();throw Error(`FX provider request failed (${y.status}): ${e||`Unexpected response body.`}`)}let b=await y.json();if(!l(b))throw Error(`FX provider returned an unexpected response payload.`);let x=new Map;for(let e of b)x.set((0,t.normalizeCurrencyCode)(e.quote),e.rate);let S=[],C=[],w=[];for(let e of p){let n=(0,t.normalizeCurrencyCode)(e.code),r=x.get(n);if(!r||!Number.isFinite(r)||r<=0){C.push(n);continue}w.push({...e,id:a(e),exchange_rate:Number(r.toFixed(10)),exchange_rate_source:h,exchange_rate_updated_at:g,updated_at:g}),S.push(n)}if(w.length){let{error:e}=await n.from(`currencies`).upsert(w,{onConflict:`id`});if(e)throw Error(e.message)}return{baseCurrencyCode:d,fetchedAt:g,provider:h,providerUrl:m,skippedCurrencies:C,updatedCurrencies:S}}async function p(e){let r=(0,t.normalizeCurrencyCode)(e),{error:i}=await(0,n.getServiceRoleSupabaseClient)().rpc(`clear_currency_price_overrides`,{target_currency:r});if(i)throw Error(i.message);return{currencyCode:r}}exports.clearAutoSyncedCurrencyPriceOverrides=p,exports.rebaseStoreCurrencyExchangeRates=d,exports.syncStoreCurrencyRates=f;