@nextblock-cms/ecom 0.20.3 → 0.21.1

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 (446) hide show
  1. package/README.md +43 -0
  2. package/_virtual/_rolldown/runtime.cjs +1 -0
  3. package/index.cjs +1 -0
  4. package/index.es.js +38 -146
  5. package/lib/CurrencyProvider.cjs +1 -0
  6. package/lib/CurrencyProvider.d.ts +1 -1
  7. package/lib/CurrencyProvider.es.js +85 -95
  8. package/lib/PaymentReadinessProvider.cjs +1 -0
  9. package/lib/PaymentReadinessProvider.d.ts +1 -1
  10. package/lib/PaymentReadinessProvider.es.js +24 -27
  11. package/lib/cart-store.cjs +1 -0
  12. package/lib/cart-store.es.js +109 -121
  13. package/lib/components/AccountNavigationMenu.cjs +1 -0
  14. package/lib/components/AccountNavigationMenu.d.ts +1 -1
  15. package/lib/components/AccountNavigationMenu.es.js +36 -50
  16. package/lib/components/AddToCartButton.cjs +1 -0
  17. package/lib/components/AddToCartButton.d.ts +1 -1
  18. package/lib/components/AddToCartButton.es.js +94 -89
  19. package/lib/components/Cart.cjs +1 -0
  20. package/lib/components/Cart.d.ts +1 -1
  21. package/lib/components/Cart.es.js +261 -180
  22. package/lib/components/CartDrawer.cjs +1 -0
  23. package/lib/components/CartDrawer.d.ts +1 -1
  24. package/lib/components/CartDrawer.es.js +218 -148
  25. package/lib/components/CartIcon.cjs +1 -0
  26. package/lib/components/CartIcon.d.ts +1 -1
  27. package/lib/components/CartIcon.es.js +33 -35
  28. package/lib/components/Checkout.cjs +1 -0
  29. package/lib/components/Checkout.d.ts +1 -1
  30. package/lib/components/Checkout.es.js +1092 -1108
  31. package/lib/components/CouponForm.cjs +1 -0
  32. package/lib/components/CouponForm.d.ts +1 -1
  33. package/lib/components/CouponForm.es.js +136 -148
  34. package/lib/components/CurrencySwitcher.cjs +1 -0
  35. package/lib/components/CurrencySwitcher.d.ts +1 -1
  36. package/lib/components/CurrencySwitcher.es.js +22 -18
  37. package/lib/components/CustomerProfileForm.cjs +1 -0
  38. package/lib/components/CustomerProfileForm.es.js +454 -313
  39. package/lib/components/FeaturedProduct.cjs +1 -0
  40. package/lib/components/FeaturedProduct.d.ts +1 -1
  41. package/lib/components/FeaturedProduct.es.js +98 -83
  42. package/lib/components/FreemiusLicensePanel.cjs +1 -0
  43. package/lib/components/FreemiusLicensePanel.d.ts +1 -1
  44. package/lib/components/FreemiusLicensePanel.es.js +70 -65
  45. package/lib/components/InvoiceDocument.cjs +1 -0
  46. package/lib/components/InvoiceDocument.es.js +256 -192
  47. package/lib/components/InvoiceViewerShell.cjs +29 -0
  48. package/lib/components/InvoiceViewerShell.d.ts +1 -1
  49. package/lib/components/InvoiceViewerShell.es.js +75 -106
  50. package/lib/components/ProductCard.cjs +1 -0
  51. package/lib/components/ProductCard.d.ts +1 -1
  52. package/lib/components/ProductCard.es.js +186 -171
  53. package/lib/components/ProductDetailsLayout.cjs +1 -0
  54. package/lib/components/ProductDetailsLayout.es.js +405 -404
  55. package/lib/components/ProductGallery.cjs +1 -0
  56. package/lib/components/ProductGallery.d.ts +1 -1
  57. package/lib/components/ProductGallery.es.js +51 -54
  58. package/lib/components/ProductGrid.cjs +1 -0
  59. package/lib/components/ProductGrid.d.ts +1 -1
  60. package/lib/components/ProductGrid.es.js +23 -25
  61. package/lib/components/ShippingEstimator.cjs +1 -0
  62. package/lib/components/ShippingEstimator.d.ts +1 -1
  63. package/lib/components/ShippingEstimator.es.js +158 -153
  64. package/lib/components/ShortDescription.cjs +1 -0
  65. package/lib/components/ShortDescription.es.js +17 -17
  66. package/lib/components/SimpleTiptapRenderer.cjs +1 -0
  67. package/lib/components/SimpleTiptapRenderer.es.js +238 -211
  68. package/lib/components/SubscriptionSelector.cjs +1 -0
  69. package/lib/components/SubscriptionSelector.es.js +159 -154
  70. package/lib/countries.cjs +1 -0
  71. package/lib/countries.es.js +232 -75
  72. package/lib/coupon-server.cjs +1 -0
  73. package/lib/coupon-server.es.js +180 -224
  74. package/lib/coupons.cjs +1 -0
  75. package/lib/coupons.es.js +12 -14
  76. package/lib/currency-constants.cjs +1 -0
  77. package/lib/currency-constants.es.js +4 -4
  78. package/lib/currency-rest-client.cjs +1 -0
  79. package/lib/currency-rest-client.es.js +15 -22
  80. package/lib/currency-store.cjs +1 -0
  81. package/lib/currency-store.es.js +20 -27
  82. package/lib/currency-sync.cjs +1 -0
  83. package/lib/currency-sync.es.js +124 -170
  84. package/lib/currency.cjs +1 -0
  85. package/lib/currency.es.js +242 -310
  86. package/lib/customer-addresses.cjs +1 -0
  87. package/lib/customer-addresses.es.js +80 -109
  88. package/lib/customer-orders.cjs +1 -0
  89. package/lib/customer-orders.es.js +31 -43
  90. package/lib/customer.cjs +1 -0
  91. package/lib/customer.es.js +43 -52
  92. package/lib/export-helpers.cjs +1 -0
  93. package/lib/export-helpers.es.js +53 -52
  94. package/lib/factory.cjs +1 -0
  95. package/lib/factory.es.js +10 -7
  96. package/lib/freemius-coupons.cjs +1 -0
  97. package/lib/freemius-coupons.es.js +245 -262
  98. package/lib/freemius-license-claim.cjs +1 -0
  99. package/lib/freemius-license-claim.es.js +87 -71
  100. package/lib/freemius-license.cjs +1 -0
  101. package/lib/freemius-license.es.js +32 -39
  102. package/lib/freemius-order-sync.cjs +1 -0
  103. package/lib/freemius-order-sync.es.js +226 -290
  104. package/lib/freemius-trial-provision.cjs +1 -0
  105. package/lib/freemius-trial-provision.es.js +136 -130
  106. package/lib/inventory-settings.cjs +1 -0
  107. package/lib/inventory-settings.es.js +69 -77
  108. package/lib/invoice-server.cjs +33 -0
  109. package/lib/invoice-server.es.js +94 -141
  110. package/lib/invoice-ui.cjs +1 -0
  111. package/lib/invoice-ui.es.js +50 -66
  112. package/lib/invoice.cjs +1 -0
  113. package/lib/invoice.es.js +85 -94
  114. package/lib/order-inventory.cjs +61 -0
  115. package/lib/order-inventory.es.js +67 -79
  116. package/lib/order-tax-details.cjs +1 -0
  117. package/lib/order-tax-details.es.js +142 -153
  118. package/lib/pages/cms/coupons/CouponEditorForm.cjs +1 -0
  119. package/lib/pages/cms/coupons/CouponEditorForm.d.ts +1 -1
  120. package/lib/pages/cms/coupons/CouponEditorForm.es.js +227 -185
  121. package/lib/pages/cms/coupons/CouponsPage.cjs +5 -0
  122. package/lib/pages/cms/coupons/CouponsPage.d.ts +1 -1
  123. package/lib/pages/cms/coupons/CouponsPage.es.js +235 -166
  124. package/lib/pages/cms/coupons/CreateCouponDialog.cjs +1 -0
  125. package/lib/pages/cms/coupons/CreateCouponDialog.d.ts +1 -1
  126. package/lib/pages/cms/coupons/CreateCouponDialog.es.js +35 -34
  127. package/lib/pages/cms/coupons/EditCouponPage.cjs +1 -0
  128. package/lib/pages/cms/coupons/EditCouponPage.d.ts +1 -1
  129. package/lib/pages/cms/coupons/EditCouponPage.es.js +47 -47
  130. package/lib/pages/cms/coupons/ProductScopePicker.cjs +1 -0
  131. package/lib/pages/cms/coupons/ProductScopePicker.d.ts +1 -1
  132. package/lib/pages/cms/coupons/ProductScopePicker.es.js +128 -117
  133. package/lib/pages/cms/coupons/actions.cjs +1 -0
  134. package/lib/pages/cms/coupons/actions.es.js +112 -115
  135. package/lib/pages/cms/coupons/index.cjs +1 -0
  136. package/lib/pages/cms/coupons/index.es.js +3 -0
  137. package/lib/pages/cms/coupons/product-options.cjs +1 -0
  138. package/lib/pages/cms/coupons/product-options.es.js +21 -23
  139. package/lib/pages/cms/orders/ExportReportsDialog.cjs +1 -0
  140. package/lib/pages/cms/orders/ExportReportsDialog.es.js +135 -129
  141. package/lib/pages/cms/orders/MarkPaidButton.d.ts +1 -1
  142. package/lib/pages/cms/orders/OrderDetailPage.cjs +1 -0
  143. package/lib/pages/cms/orders/OrderDetailPage.d.ts +1 -1
  144. package/lib/pages/cms/orders/OrderDetailPage.es.js +186 -134
  145. package/lib/pages/cms/orders/OrderPrintButton.cjs +1 -0
  146. package/lib/pages/cms/orders/OrderPrintButton.d.ts +1 -1
  147. package/lib/pages/cms/orders/OrderPrintButton.es.js +15 -21
  148. package/lib/pages/cms/orders/OrderStatusForm.cjs +1 -0
  149. package/lib/pages/cms/orders/OrderStatusForm.d.ts +1 -1
  150. package/lib/pages/cms/orders/OrderStatusForm.es.js +85 -69
  151. package/lib/pages/cms/orders/OrdersPage.cjs +1 -0
  152. package/lib/pages/cms/orders/OrdersPage.d.ts +1 -1
  153. package/lib/pages/cms/orders/OrdersPage.es.js +170 -102
  154. package/lib/pages/cms/orders/actions.cjs +7 -0
  155. package/lib/pages/cms/orders/actions.es.js +53 -69
  156. package/lib/pages/cms/orders/export-actions.cjs +1 -0
  157. package/lib/pages/cms/orders/export-actions.es.js +23 -26
  158. package/lib/pages/cms/orders/index.cjs +1 -0
  159. package/lib/pages/cms/orders/index.es.js +6 -0
  160. package/lib/pages/cms/orders/server-actions.cjs +1 -0
  161. package/lib/pages/cms/orders/server-actions.es.js +60 -51
  162. package/lib/pages/cms/payments/PaymentsClient.cjs +1 -0
  163. package/lib/pages/cms/payments/PaymentsClient.d.ts +1 -1
  164. package/lib/pages/cms/payments/PaymentsClient.es.js +316 -346
  165. package/lib/pages/cms/payments/PaymentsPage.cjs +1 -0
  166. package/lib/pages/cms/payments/PaymentsPage.d.ts +1 -1
  167. package/lib/pages/cms/payments/PaymentsPage.es.js +29 -32
  168. package/lib/pages/cms/payments/actions.cjs +1 -0
  169. package/lib/pages/cms/payments/actions.es.js +38 -48
  170. package/lib/pages/cms/payments/index.cjs +1 -0
  171. package/lib/pages/cms/payments/index.es.js +3 -0
  172. package/lib/pages/cms/payments/queries.cjs +1 -0
  173. package/lib/pages/cms/payments/queries.es.js +38 -48
  174. package/lib/pages/cms/products/ProductsPage.cjs +1 -0
  175. package/lib/pages/cms/products/ProductsPage.d.ts +1 -1
  176. package/lib/pages/cms/products/ProductsPage.es.js +63 -66
  177. package/lib/pages/cms/products/[id]/edit/EditProductPage.cjs +1 -0
  178. package/lib/pages/cms/products/[id]/edit/EditProductPage.d.ts +1 -1
  179. package/lib/pages/cms/products/[id]/edit/EditProductPage.es.js +139 -0
  180. package/lib/pages/cms/products/actions.cjs +44 -0
  181. package/lib/pages/cms/products/actions.es.js +121 -162
  182. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs +1 -0
  183. package/lib/pages/cms/products/attributes/AttributeManagementPage.d.ts +1 -1
  184. package/lib/pages/cms/products/attributes/AttributeManagementPage.es.js +55 -47
  185. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs +1 -0
  186. package/lib/pages/cms/products/attributes/components/AttributeManager.d.ts +1 -1
  187. package/lib/pages/cms/products/attributes/components/AttributeManager.es.js +285 -290
  188. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs +1 -0
  189. package/lib/pages/cms/products/categories/CategoryManagementPage.d.ts +1 -1
  190. package/lib/pages/cms/products/categories/CategoryManagementPage.es.js +43 -35
  191. package/lib/pages/cms/products/categories/components/CategoryManager.cjs +1 -0
  192. package/lib/pages/cms/products/categories/components/CategoryManager.es.js +315 -262
  193. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs +1 -0
  194. package/lib/pages/cms/products/components/CopyProductFromLanguage.es.js +115 -113
  195. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs +1 -0
  196. package/lib/pages/cms/products/components/CurrencyPriceFields.d.ts +1 -1
  197. package/lib/pages/cms/products/components/CurrencyPriceFields.es.js +136 -145
  198. package/lib/pages/cms/products/components/DeleteProductButton.cjs +1 -0
  199. package/lib/pages/cms/products/components/DeleteProductButton.d.ts +1 -1
  200. package/lib/pages/cms/products/components/DeleteProductButton.es.js +35 -47
  201. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs +1 -0
  202. package/lib/pages/cms/products/components/FreemiusPricingDashboard.d.ts +1 -1
  203. package/lib/pages/cms/products/components/FreemiusPricingDashboard.es.js +106 -84
  204. package/lib/pages/cms/products/components/ProductCategorySelector.cjs +1 -0
  205. package/lib/pages/cms/products/components/ProductCategorySelector.es.js +156 -159
  206. package/lib/pages/cms/products/components/ProductForm.cjs +1 -0
  207. package/lib/pages/cms/products/components/ProductForm.es.js +872 -693
  208. package/lib/pages/cms/products/components/ProductMediaManager.cjs +1 -0
  209. package/lib/pages/cms/products/components/ProductMediaManager.es.js +106 -103
  210. package/lib/pages/cms/products/components/ProductsBulkTable.cjs +1 -0
  211. package/lib/pages/cms/products/components/ProductsBulkTable.d.ts +1 -1
  212. package/lib/pages/cms/products/components/ProductsBulkTable.es.js +303 -294
  213. package/lib/pages/cms/products/components/SaleScheduleFields.cjs +1 -0
  214. package/lib/pages/cms/products/components/SaleScheduleFields.d.ts +1 -1
  215. package/lib/pages/cms/products/components/SaleScheduleFields.es.js +111 -134
  216. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs +1 -0
  217. package/lib/pages/cms/products/components/SyncFreemiusButton.d.ts +1 -1
  218. package/lib/pages/cms/products/components/SyncFreemiusButton.es.js +29 -35
  219. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs +5 -0
  220. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.d.ts +1 -1
  221. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.es.js +36 -48
  222. package/lib/pages/cms/products/components/SyncProductForm.d.ts +1 -1
  223. package/lib/pages/cms/products/components/VariationsEditor.cjs +1 -0
  224. package/lib/pages/cms/products/components/VariationsEditor.d.ts +1 -1
  225. package/lib/pages/cms/products/components/VariationsEditor.es.js +396 -405
  226. package/lib/pages/cms/products/index.cjs +1 -0
  227. package/lib/pages/cms/products/index.es.js +8 -0
  228. package/lib/pages/cms/products/inventory/InventoryPage.cjs +1 -0
  229. package/lib/pages/cms/products/inventory/InventoryPage.d.ts +1 -1
  230. package/lib/pages/cms/products/inventory/InventoryPage.es.js +21 -15
  231. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs +2 -0
  232. package/lib/pages/cms/products/inventory/InventoryTableClient.d.ts +1 -1
  233. package/lib/pages/cms/products/inventory/InventoryTableClient.es.js +230 -209
  234. package/lib/pages/cms/products/inventory/actions.cjs +3 -0
  235. package/lib/pages/cms/products/inventory/actions.es.js +83 -91
  236. package/lib/pages/cms/products/new/NewProductPage.cjs +1 -0
  237. package/lib/pages/cms/products/new/NewProductPage.d.ts +1 -1
  238. package/lib/pages/cms/products/new/NewProductPage.es.js +58 -74
  239. package/lib/pages/cms/products/product-price-sync.cjs +1 -0
  240. package/lib/pages/cms/products/product-price-sync.es.js +74 -89
  241. package/lib/pages/cms/products/server-actions.cjs +1 -0
  242. package/lib/pages/cms/products/server-actions.es.js +250 -233
  243. package/lib/pages/cms/shipping/ShippingPage.cjs +5 -0
  244. package/lib/pages/cms/shipping/ShippingPage.es.js +287 -209
  245. package/lib/pages/cms/shipping/components/RateForm.cjs +1 -0
  246. package/lib/pages/cms/shipping/components/RateForm.d.ts +1 -1
  247. package/lib/pages/cms/shipping/components/RateForm.es.js +439 -436
  248. package/lib/pages/cms/shipping/components/ZoneForm.cjs +1 -0
  249. package/lib/pages/cms/shipping/components/ZoneForm.es.js +245 -224
  250. package/lib/pages/cms/shipping/index.cjs +1 -0
  251. package/lib/pages/cms/shipping/index.es.js +3 -0
  252. package/lib/pages/cms/shipping/server-actions.cjs +1 -0
  253. package/lib/pages/cms/shipping/server-actions.es.js +131 -149
  254. package/lib/pages/cms/taxes/TaxesPage.cjs +1 -0
  255. package/lib/pages/cms/taxes/TaxesPage.d.ts +1 -1
  256. package/lib/pages/cms/taxes/TaxesPage.es.js +211 -169
  257. package/lib/pages/cms/taxes/actions.cjs +1 -0
  258. package/lib/pages/cms/taxes/actions.es.js +41 -53
  259. package/lib/pages/cms/taxes/components/TaxRateForm.cjs +1 -0
  260. package/lib/pages/cms/taxes/components/TaxRateForm.d.ts +1 -1
  261. package/lib/pages/cms/taxes/components/TaxRateForm.es.js +112 -99
  262. package/lib/pages/cms/taxes/index.cjs +1 -0
  263. package/lib/pages/cms/taxes/index.es.js +3 -0
  264. package/lib/payment-config.cjs +1 -0
  265. package/lib/payment-config.es.js +110 -126
  266. package/lib/product-actions.cjs +238 -0
  267. package/lib/product-actions.es.js +289 -544
  268. package/lib/product-context.cjs +1 -0
  269. package/lib/product-context.es.js +13 -15
  270. package/lib/product-schema.cjs +1 -0
  271. package/lib/product-schema.es.js +99 -134
  272. package/lib/providers/freemius.cjs +1 -0
  273. package/lib/providers/freemius.es.js +446 -530
  274. package/lib/providers/stripe.cjs +1 -0
  275. package/lib/providers/stripe.es.js +417 -477
  276. package/lib/server-actions/coupon-actions.cjs +1 -0
  277. package/lib/server-actions/coupon-actions.es.js +22 -22
  278. package/lib/server-actions/customer-actions.cjs +1 -0
  279. package/lib/server-actions/customer-actions.es.js +26 -28
  280. package/lib/server-actions/product-actions.cjs +1 -0
  281. package/lib/server-actions/product-actions.es.js +9 -15
  282. package/lib/server-actions/shipping-actions.cjs +1 -0
  283. package/lib/server-actions/shipping-actions.es.js +27 -24
  284. package/lib/server-actions/tax-actions.cjs +1 -0
  285. package/lib/server-actions/tax-actions.es.js +33 -39
  286. package/lib/shared-inventory.cjs +15 -0
  287. package/lib/shared-inventory.es.js +111 -160
  288. package/lib/shipping/resolver.cjs +7 -0
  289. package/lib/shipping/resolver.es.js +44 -61
  290. package/lib/shipping-rate-currency.cjs +1 -0
  291. package/lib/shipping-rate-currency.es.js +52 -67
  292. package/lib/states.cjs +1 -0
  293. package/lib/states.es.js +333 -154
  294. package/lib/stripe/checkout.cjs +1 -0
  295. package/lib/stripe/checkout.es.js +125 -181
  296. package/lib/stripe/client.cjs +1 -0
  297. package/lib/stripe/client.es.js +14 -19
  298. package/lib/stripe/order-sync.cjs +1 -0
  299. package/lib/stripe/order-sync.es.js +106 -126
  300. package/lib/stripe/webhooks.cjs +1 -0
  301. package/lib/stripe/webhooks.es.js +37 -31
  302. package/lib/tax-calculation.cjs +1 -0
  303. package/lib/tax-calculation.es.js +84 -98
  304. package/lib/trials.cjs +1 -0
  305. package/lib/trials.es.js +24 -30
  306. package/lib/types.cjs +1 -0
  307. package/lib/types.es.js +21 -27
  308. package/lib/use-cart.cjs +1 -0
  309. package/lib/use-cart.es.js +38 -40
  310. package/lib/use-price-formatter.cjs +1 -0
  311. package/lib/use-price-formatter.es.js +10 -11
  312. package/lib/variation-utils.cjs +1 -0
  313. package/lib/variation-utils.es.js +199 -261
  314. package/lib/zod-config.cjs +1 -0
  315. package/lib/zod-config.es.js +5 -6
  316. package/package.json +22 -21
  317. package/server.cjs +1 -0
  318. package/server.es.js +56 -211
  319. package/index.cjs.js +0 -1
  320. package/lib/CurrencyProvider.cjs.js +0 -1
  321. package/lib/PaymentReadinessProvider.cjs.js +0 -1
  322. package/lib/cart-store.cjs.js +0 -1
  323. package/lib/components/AccountNavigationMenu.cjs.js +0 -1
  324. package/lib/components/AddToCartButton.cjs.js +0 -1
  325. package/lib/components/Cart.cjs.js +0 -1
  326. package/lib/components/CartDrawer.cjs.js +0 -1
  327. package/lib/components/CartIcon.cjs.js +0 -1
  328. package/lib/components/Checkout.cjs.js +0 -1
  329. package/lib/components/CouponForm.cjs.js +0 -1
  330. package/lib/components/CurrencySwitcher.cjs.js +0 -1
  331. package/lib/components/CustomerProfileForm.cjs.js +0 -1
  332. package/lib/components/FeaturedProduct.cjs.js +0 -1
  333. package/lib/components/FreemiusLicensePanel.cjs.js +0 -1
  334. package/lib/components/InvoiceDocument.cjs.js +0 -1
  335. package/lib/components/InvoiceViewerShell.cjs.js +0 -29
  336. package/lib/components/ProductCard.cjs.js +0 -1
  337. package/lib/components/ProductDetailsLayout.cjs.js +0 -1
  338. package/lib/components/ProductGallery.cjs.js +0 -1
  339. package/lib/components/ProductGrid.cjs.js +0 -1
  340. package/lib/components/ShippingEstimator.cjs.js +0 -1
  341. package/lib/components/ShortDescription.cjs.js +0 -1
  342. package/lib/components/SimpleTiptapRenderer.cjs.js +0 -1
  343. package/lib/components/SubscriptionSelector.cjs.js +0 -1
  344. package/lib/countries.cjs.js +0 -1
  345. package/lib/coupon-server.cjs.js +0 -1
  346. package/lib/coupons.cjs.js +0 -1
  347. package/lib/currency-constants.cjs.js +0 -1
  348. package/lib/currency-rest-client.cjs.js +0 -1
  349. package/lib/currency-store.cjs.js +0 -1
  350. package/lib/currency-sync.cjs.js +0 -1
  351. package/lib/currency.cjs.js +0 -1
  352. package/lib/customer-addresses.cjs.js +0 -1
  353. package/lib/customer-orders.cjs.js +0 -1
  354. package/lib/customer.cjs.js +0 -1
  355. package/lib/export-helpers.cjs.js +0 -1
  356. package/lib/factory.cjs.js +0 -1
  357. package/lib/freemius-coupons.cjs.js +0 -1
  358. package/lib/freemius-license-claim.cjs.js +0 -1
  359. package/lib/freemius-license.cjs.js +0 -1
  360. package/lib/freemius-order-sync.cjs.js +0 -1
  361. package/lib/freemius-trial-provision.cjs.js +0 -1
  362. package/lib/inventory-settings.cjs.js +0 -1
  363. package/lib/invoice-server.cjs.js +0 -33
  364. package/lib/invoice-ui.cjs.js +0 -1
  365. package/lib/invoice.cjs.js +0 -1
  366. package/lib/order-inventory.cjs.js +0 -61
  367. package/lib/order-tax-details.cjs.js +0 -1
  368. package/lib/pages/cms/coupons/CouponEditorForm.cjs.js +0 -1
  369. package/lib/pages/cms/coupons/CouponsPage.cjs.js +0 -5
  370. package/lib/pages/cms/coupons/CreateCouponDialog.cjs.js +0 -1
  371. package/lib/pages/cms/coupons/EditCouponPage.cjs.js +0 -1
  372. package/lib/pages/cms/coupons/ProductScopePicker.cjs.js +0 -1
  373. package/lib/pages/cms/coupons/actions.cjs.js +0 -1
  374. package/lib/pages/cms/coupons/product-options.cjs.js +0 -1
  375. package/lib/pages/cms/orders/ExportReportsDialog.cjs.js +0 -1
  376. package/lib/pages/cms/orders/OrderDetailPage.cjs.js +0 -1
  377. package/lib/pages/cms/orders/OrderPrintButton.cjs.js +0 -1
  378. package/lib/pages/cms/orders/OrderStatusForm.cjs.js +0 -1
  379. package/lib/pages/cms/orders/OrdersPage.cjs.js +0 -1
  380. package/lib/pages/cms/orders/actions.cjs.js +0 -7
  381. package/lib/pages/cms/orders/export-actions.cjs.js +0 -1
  382. package/lib/pages/cms/orders/server-actions.cjs.js +0 -1
  383. package/lib/pages/cms/payments/PaymentsClient.cjs.js +0 -1
  384. package/lib/pages/cms/payments/PaymentsPage.cjs.js +0 -1
  385. package/lib/pages/cms/payments/actions.cjs.js +0 -1
  386. package/lib/pages/cms/payments/queries.cjs.js +0 -1
  387. package/lib/pages/cms/products/ProductsPage.cjs.js +0 -1
  388. package/lib/pages/cms/products/_id_/edit/EditProductPage.cjs.js +0 -1
  389. package/lib/pages/cms/products/_id_/edit/EditProductPage.es.js +0 -156
  390. package/lib/pages/cms/products/actions.cjs.js +0 -44
  391. package/lib/pages/cms/products/attributes/AttributeManagementPage.cjs.js +0 -1
  392. package/lib/pages/cms/products/attributes/components/AttributeManager.cjs.js +0 -1
  393. package/lib/pages/cms/products/categories/CategoryManagementPage.cjs.js +0 -1
  394. package/lib/pages/cms/products/categories/components/CategoryManager.cjs.js +0 -1
  395. package/lib/pages/cms/products/components/CopyProductFromLanguage.cjs.js +0 -1
  396. package/lib/pages/cms/products/components/CurrencyPriceFields.cjs.js +0 -1
  397. package/lib/pages/cms/products/components/DeleteProductButton.cjs.js +0 -1
  398. package/lib/pages/cms/products/components/FreemiusPricingDashboard.cjs.js +0 -1
  399. package/lib/pages/cms/products/components/ProductCategorySelector.cjs.js +0 -1
  400. package/lib/pages/cms/products/components/ProductForm.cjs.js +0 -1
  401. package/lib/pages/cms/products/components/ProductMediaManager.cjs.js +0 -1
  402. package/lib/pages/cms/products/components/ProductsBulkTable.cjs.js +0 -1
  403. package/lib/pages/cms/products/components/SaleScheduleFields.cjs.js +0 -1
  404. package/lib/pages/cms/products/components/SyncFreemiusButton.cjs.js +0 -1
  405. package/lib/pages/cms/products/components/SyncFreemiusPricingButton.cjs.js +0 -5
  406. package/lib/pages/cms/products/components/VariationsEditor.cjs.js +0 -1
  407. package/lib/pages/cms/products/inventory/InventoryPage.cjs.js +0 -1
  408. package/lib/pages/cms/products/inventory/InventoryTableClient.cjs.js +0 -2
  409. package/lib/pages/cms/products/inventory/actions.cjs.js +0 -3
  410. package/lib/pages/cms/products/new/NewProductPage.cjs.js +0 -1
  411. package/lib/pages/cms/products/product-price-sync.cjs.js +0 -1
  412. package/lib/pages/cms/products/server-actions.cjs.js +0 -1
  413. package/lib/pages/cms/shipping/ShippingPage.cjs.js +0 -5
  414. package/lib/pages/cms/shipping/components/RateForm.cjs.js +0 -1
  415. package/lib/pages/cms/shipping/components/ZoneForm.cjs.js +0 -1
  416. package/lib/pages/cms/shipping/server-actions.cjs.js +0 -1
  417. package/lib/pages/cms/taxes/TaxesPage.cjs.js +0 -1
  418. package/lib/pages/cms/taxes/actions.cjs.js +0 -1
  419. package/lib/pages/cms/taxes/components/TaxRateForm.cjs.js +0 -1
  420. package/lib/payment-config.cjs.js +0 -1
  421. package/lib/product-actions.cjs.js +0 -238
  422. package/lib/product-context.cjs.js +0 -1
  423. package/lib/product-schema.cjs.js +0 -1
  424. package/lib/providers/freemius.cjs.js +0 -5
  425. package/lib/providers/stripe.cjs.js +0 -1
  426. package/lib/server-actions/coupon-actions.cjs.js +0 -1
  427. package/lib/server-actions/customer-actions.cjs.js +0 -1
  428. package/lib/server-actions/product-actions.cjs.js +0 -1
  429. package/lib/server-actions/shipping-actions.cjs.js +0 -1
  430. package/lib/server-actions/tax-actions.cjs.js +0 -1
  431. package/lib/shared-inventory.cjs.js +0 -15
  432. package/lib/shipping/resolver.cjs.js +0 -7
  433. package/lib/shipping-rate-currency.cjs.js +0 -1
  434. package/lib/states.cjs.js +0 -1
  435. package/lib/stripe/checkout.cjs.js +0 -1
  436. package/lib/stripe/client.cjs.js +0 -1
  437. package/lib/stripe/order-sync.cjs.js +0 -1
  438. package/lib/stripe/webhooks.cjs.js +0 -1
  439. package/lib/tax-calculation.cjs.js +0 -1
  440. package/lib/trials.cjs.js +0 -1
  441. package/lib/types.cjs.js +0 -1
  442. package/lib/use-cart.cjs.js +0 -1
  443. package/lib/use-price-formatter.cjs.js +0 -1
  444. package/lib/variation-utils.cjs.js +0 -1
  445. package/lib/zod-config.cjs.js +0 -1
  446. package/server.cjs.js +0 -1
@@ -0,0 +1 @@
1
+ "use client";const e=require("../_virtual/_rolldown/runtime.cjs");let t=require("react");t=e.__toESM(t,1);let n=require("react/jsx-runtime");var r=(0,t.createContext)(void 0),i=({product:e,children:t})=>(0,n.jsx)(r.Provider,{value:{product:e},children:t}),a=()=>{let e=(0,t.useContext)(r);if(!e)throw Error(`useProduct must be used within a ProductProvider. Ensure the component is wrapped in a ProductProvider.`);return e.product};exports.ProductProvider=i,exports.useProduct=a;
@@ -1,16 +1,14 @@
1
- 'use client';
2
- import { jsx as e } from "react/jsx-runtime";
3
- import { createContext as n, useContext as u } from "react";
4
- const t = n(void 0), i = ({
5
- product: r,
6
- children: o
7
- }) => /* @__PURE__ */ e(t.Provider, { value: { product: r }, children: o }), s = () => {
8
- const r = u(t);
9
- if (!r)
10
- throw new Error("useProduct must be used within a ProductProvider. Ensure the component is wrapped in a ProductProvider.");
11
- return r.product;
12
- };
13
- export {
14
- i as ProductProvider,
15
- s as useProduct
1
+ "use client";
2
+ import { createContext as e, useContext as t } from "react";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/lib/product-context.tsx
5
+ var r = e(void 0), i = ({ product: e, children: t }) => /* @__PURE__ */ n(r.Provider, {
6
+ value: { product: e },
7
+ children: t
8
+ }), a = () => {
9
+ let e = t(r);
10
+ if (!e) throw Error("useProduct must be used within a ProductProvider. Ensure the component is wrapped in a ProductProvider.");
11
+ return e.product;
16
12
  };
13
+ //#endregion
14
+ export { i as ProductProvider, a as useProduct };
@@ -0,0 +1 @@
1
+ require("./zod-config.cjs");let e=require("zod");var t=e.z.enum([`physical`,`digital`]).or(e.z.literal(``)).refine(e=>e!==``,{message:`Product type is required`}).transform(e=>e),n=e.z.record(e.z.string().regex(/^[A-Z]{3}$/,`Currency code must be ISO 4217`),e.z.coerce.number().min(0,`Prices must be non-negative`)),r=e.z.record(e.z.string().regex(/^[A-Z]{3}$/,`Currency code must be ISO 4217`),e.z.coerce.number().min(0,`Sale prices must be non-negative`).nullable()),i=e.z.string().trim().refine(e=>e===``||!Number.isNaN(Date.parse(e)),{message:`Must be a valid date and time`}).transform(e=>e===``?null:e).nullable().optional();function a(e,t){if(!e||!t)return!0;let n=Date.parse(e),r=Date.parse(t);return Number.isNaN(n)||Number.isNaN(r)?!0:n<r}var o=e.z.object({attribute_id:e.z.string().uuid(),attribute_name:e.z.string(),term_id:e.z.string().uuid(),term_value:e.z.string(),term_slug:e.z.string().optional()}),s=e.z.object({id:e.z.string().uuid().optional(),combination_key:e.z.string().min(1),sku:e.z.string().min(1,`Variant SKU is required`),upc:e.z.string().optional().nullable(),price:e.z.coerce.number().min(0,`Variant price must be non-negative`),prices:n.default({}),sale_price:e.z.coerce.number().min(0,`Variant sale price must be non-negative`).optional().nullable(),sale_prices:r.default({}),sale_start_at:i,sale_end_at:i,stock_quantity:e.z.coerce.number().int().min(0,`Variant stock must be a non-negative integer`),main_media_id:e.z.string().uuid().optional().nullable(),main_image_url:e.z.string().optional().nullable(),attribute_term_ids:e.z.array(e.z.string().uuid()).min(1),selected_options:e.z.array(o).min(1),label:e.z.string().min(1)}).refine(e=>e.sale_price===null||e.sale_price===void 0||e.sale_price<=e.price,{message:`Variant sale price cannot exceed the regular price`,path:[`sale_price`]}).refine(e=>Object.entries(e.sale_prices||{}).every(([t,n])=>{if(n==null)return!0;let r=e.prices?.[t];return typeof r!=`number`||n<=r}),{message:`Variant sale prices cannot exceed regular prices`,path:[`sale_prices`]}).refine(e=>a(e.sale_start_at,e.sale_end_at),{message:`Sale end must be after the sale start`,path:[`sale_end_at`]}),c=e.z.object({attribute_id:e.z.string().uuid(),term_ids:e.z.array(e.z.string().uuid())}),l=e.z.object({product_type:t,payment_provider:e.z.enum([`stripe`,`freemius`]),title:e.z.string().min(1,`Title is required`),slug:e.z.string().min(1,`Slug is required`).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/,`Slug must be lowercase alphanumeric with hyphens`),sku:e.z.string().min(1,`SKU is required`),upc:e.z.string().optional().nullable(),price:e.z.coerce.number().min(0,`Price must be non-negative`),prices:n.default({}),sale_price:e.z.coerce.number().min(0,`Sale price must be non-negative`).optional().nullable(),sale_prices:r.default({}),sale_start_at:i,sale_end_at:i,stock:e.z.coerce.number().int().min(0,`Stock must be a non-negative integer`),meta_title:e.z.string().optional().nullable(),meta_description:e.z.string().optional().nullable(),custom_canonical:e.z.string().optional().nullable(),short_description:e.z.string().optional(),description_json:e.z.any().optional(),freemius_plan_id:e.z.string().optional(),freemius_product_id:e.z.string().optional(),trial_period_days:e.z.coerce.number().int().min(0,`Trial period must be zero or greater`).default(0),trial_requires_payment_method:e.z.boolean().default(!1),media_id:e.z.string().optional(),product_media:e.z.array(e.z.object({media_id:e.z.string()})).optional(),category_ids:e.z.array(e.z.string().uuid()).optional(),is_taxable:e.z.boolean(),status:e.z.enum([`draft`,`active`,`archived`]),language_id:e.z.coerce.number().int().min(1,`Language is required`),translation_group_id:e.z.string().uuid().optional().or(e.z.literal(``)).transform(e=>e===``?void 0:e),explicitly_removed_media_ids:e.z.array(e.z.string()).optional(),variation_attributes:e.z.array(c).optional(),variants:e.z.array(s).optional()}).refine(e=>e.sale_price===null||e.sale_price===void 0||e.sale_price<=e.price,{message:`Sale price cannot exceed the regular price`,path:[`sale_price`]}).refine(e=>Object.entries(e.sale_prices||{}).every(([t,n])=>{if(n==null)return!0;let r=e.prices?.[t];return typeof r!=`number`||n<=r}),{message:`Sale prices cannot exceed regular prices`,path:[`sale_prices`]}).refine(e=>a(e.sale_start_at,e.sale_end_at),{message:`Sale end must be after the sale start`,path:[`sale_end_at`]});exports.productSchema=l;
@@ -1,135 +1,100 @@
1
- import "./zod-config.es.js";
2
- import { z as e } from "zod";
3
- const u = e.enum(["physical", "digital"]).or(e.literal("")).refine((r) => r !== "", {
4
- message: "Product type is required"
5
- }).transform((r) => r), s = e.record(
6
- e.string().regex(/^[A-Z]{3}$/, "Currency code must be ISO 4217"),
7
- e.coerce.number().min(0, "Prices must be non-negative")
8
- ), l = e.record(
9
- e.string().regex(/^[A-Z]{3}$/, "Currency code must be ISO 4217"),
10
- e.coerce.number().min(0, "Sale prices must be non-negative").nullable()
11
- ), n = e.string().trim().refine((r) => r === "" || !Number.isNaN(Date.parse(r)), {
12
- message: "Must be a valid date and time"
13
- }).transform((r) => r === "" ? null : r).nullable().optional();
14
- function o(r, a) {
15
- if (!r || !a)
16
- return !0;
17
- const t = Date.parse(r), i = Date.parse(a);
18
- return Number.isNaN(t) || Number.isNaN(i) ? !0 : t < i;
1
+ import { z as e } from "./zod-config.es.js";
2
+ //#region src/lib/product-schema.ts
3
+ var t = e.enum(["physical", "digital"]).or(e.literal("")).refine((e) => e !== "", { message: "Product type is required" }).transform((e) => e), n = e.record(e.string().regex(/^[A-Z]{3}$/, "Currency code must be ISO 4217"), e.coerce.number().min(0, "Prices must be non-negative")), r = e.record(e.string().regex(/^[A-Z]{3}$/, "Currency code must be ISO 4217"), e.coerce.number().min(0, "Sale prices must be non-negative").nullable()), i = e.string().trim().refine((e) => e === "" || !Number.isNaN(Date.parse(e)), { message: "Must be a valid date and time" }).transform((e) => e === "" ? null : e).nullable().optional();
4
+ function a(e, t) {
5
+ if (!e || !t) return !0;
6
+ let n = Date.parse(e), r = Date.parse(t);
7
+ return Number.isNaN(n) || Number.isNaN(r) ? !0 : n < r;
19
8
  }
20
- const c = e.object({
21
- attribute_id: e.string().uuid(),
22
- attribute_name: e.string(),
23
- term_id: e.string().uuid(),
24
- term_value: e.string(),
25
- term_slug: e.string().optional()
26
- }), m = e.object({
27
- id: e.string().uuid().optional(),
28
- combination_key: e.string().min(1),
29
- sku: e.string().min(1, "Variant SKU is required"),
30
- upc: e.string().optional().nullable(),
31
- price: e.coerce.number().min(0, "Variant price must be non-negative"),
32
- prices: s.default({}),
33
- sale_price: e.coerce.number().min(0, "Variant sale price must be non-negative").optional().nullable(),
34
- sale_prices: l.default({}),
35
- sale_start_at: n,
36
- sale_end_at: n,
37
- stock_quantity: e.coerce.number().int().min(0, "Variant stock must be a non-negative integer"),
38
- main_media_id: e.string().uuid().optional().nullable(),
39
- main_image_url: e.string().optional().nullable(),
40
- attribute_term_ids: e.array(e.string().uuid()).min(1),
41
- selected_options: e.array(c).min(1),
42
- label: e.string().min(1)
43
- }).refine(
44
- (r) => r.sale_price === null || r.sale_price === void 0 || r.sale_price <= r.price,
45
- {
46
- message: "Variant sale price cannot exceed the regular price",
47
- path: ["sale_price"]
48
- }
49
- ).refine(
50
- (r) => Object.entries(r.sale_prices || {}).every(([a, t]) => {
51
- if (t == null)
52
- return !0;
53
- const i = r.prices?.[a];
54
- return typeof i == "number" ? t <= i : !0;
55
- }),
56
- {
57
- message: "Variant sale prices cannot exceed regular prices",
58
- path: ["sale_prices"]
59
- }
60
- ).refine(
61
- (r) => o(r.sale_start_at, r.sale_end_at),
62
- {
63
- message: "Sale end must be after the sale start",
64
- path: ["sale_end_at"]
65
- }
66
- ), p = e.object({
67
- attribute_id: e.string().uuid(),
68
- term_ids: e.array(e.string().uuid())
69
- }), g = e.object({
70
- product_type: u,
71
- payment_provider: e.enum(["stripe", "freemius"]),
72
- title: e.string().min(1, "Title is required"),
73
- slug: e.string().min(1, "Slug is required").regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "Slug must be lowercase alphanumeric with hyphens"),
74
- sku: e.string().min(1, "SKU is required"),
75
- upc: e.string().optional().nullable(),
76
- price: e.coerce.number().min(0, "Price must be non-negative"),
77
- prices: s.default({}),
78
- sale_price: e.coerce.number().min(0, "Sale price must be non-negative").optional().nullable(),
79
- sale_prices: l.default({}),
80
- sale_start_at: n,
81
- sale_end_at: n,
82
- stock: e.coerce.number().int().min(0, "Stock must be a non-negative integer"),
83
- meta_title: e.string().optional().nullable(),
84
- meta_description: e.string().optional().nullable(),
85
- custom_canonical: e.string().optional().nullable(),
86
- short_description: e.string().optional(),
87
- description_json: e.any().optional(),
88
- // Using any for Tiptap JSON structure
89
- freemius_plan_id: e.string().optional(),
90
- // ID from Freemius Dashboard
91
- freemius_product_id: e.string().optional(),
92
- // Product or App ID from Freemius Dashboard
93
- trial_period_days: e.coerce.number().int().min(0, "Trial period must be zero or greater").default(0),
94
- trial_requires_payment_method: e.boolean().default(!1),
95
- media_id: e.string().optional(),
96
- // For the main product image (backward compat or single select)
97
- product_media: e.array(e.object({
98
- media_id: e.string()
99
- // We can sort based on index in this array, or explicit sort_order from UI
100
- })).optional(),
101
- category_ids: e.array(e.string().uuid()).optional(),
102
- is_taxable: e.boolean(),
103
- status: e.enum(["draft", "active", "archived"]),
104
- language_id: e.coerce.number().int().min(1, "Language is required"),
105
- translation_group_id: e.string().uuid().optional().or(e.literal("")).transform((r) => r === "" ? void 0 : r),
106
- explicitly_removed_media_ids: e.array(e.string()).optional(),
107
- variation_attributes: e.array(p).optional(),
108
- variants: e.array(m).optional()
109
- }).refine(
110
- (r) => r.sale_price === null || r.sale_price === void 0 || r.sale_price <= r.price,
111
- {
112
- message: "Sale price cannot exceed the regular price",
113
- path: ["sale_price"]
114
- }
115
- ).refine(
116
- (r) => Object.entries(r.sale_prices || {}).every(([a, t]) => {
117
- if (t == null)
118
- return !0;
119
- const i = r.prices?.[a];
120
- return typeof i == "number" ? t <= i : !0;
121
- }),
122
- {
123
- message: "Sale prices cannot exceed regular prices",
124
- path: ["sale_prices"]
125
- }
126
- ).refine(
127
- (r) => o(r.sale_start_at, r.sale_end_at),
128
- {
129
- message: "Sale end must be after the sale start",
130
- path: ["sale_end_at"]
131
- }
132
- );
133
- export {
134
- g as productSchema
135
- };
9
+ var o = e.object({
10
+ attribute_id: e.string().uuid(),
11
+ attribute_name: e.string(),
12
+ term_id: e.string().uuid(),
13
+ term_value: e.string(),
14
+ term_slug: e.string().optional()
15
+ }), s = e.object({
16
+ id: e.string().uuid().optional(),
17
+ combination_key: e.string().min(1),
18
+ sku: e.string().min(1, "Variant SKU is required"),
19
+ upc: e.string().optional().nullable(),
20
+ price: e.coerce.number().min(0, "Variant price must be non-negative"),
21
+ prices: n.default({}),
22
+ sale_price: e.coerce.number().min(0, "Variant sale price must be non-negative").optional().nullable(),
23
+ sale_prices: r.default({}),
24
+ sale_start_at: i,
25
+ sale_end_at: i,
26
+ stock_quantity: e.coerce.number().int().min(0, "Variant stock must be a non-negative integer"),
27
+ main_media_id: e.string().uuid().optional().nullable(),
28
+ main_image_url: e.string().optional().nullable(),
29
+ attribute_term_ids: e.array(e.string().uuid()).min(1),
30
+ selected_options: e.array(o).min(1),
31
+ label: e.string().min(1)
32
+ }).refine((e) => e.sale_price === null || e.sale_price === void 0 || e.sale_price <= e.price, {
33
+ message: "Variant sale price cannot exceed the regular price",
34
+ path: ["sale_price"]
35
+ }).refine((e) => Object.entries(e.sale_prices || {}).every(([t, n]) => {
36
+ if (n == null) return !0;
37
+ let r = e.prices?.[t];
38
+ return typeof r != "number" || n <= r;
39
+ }), {
40
+ message: "Variant sale prices cannot exceed regular prices",
41
+ path: ["sale_prices"]
42
+ }).refine((e) => a(e.sale_start_at, e.sale_end_at), {
43
+ message: "Sale end must be after the sale start",
44
+ path: ["sale_end_at"]
45
+ }), c = e.object({
46
+ attribute_id: e.string().uuid(),
47
+ term_ids: e.array(e.string().uuid())
48
+ }), l = e.object({
49
+ product_type: t,
50
+ payment_provider: e.enum(["stripe", "freemius"]),
51
+ title: e.string().min(1, "Title is required"),
52
+ slug: e.string().min(1, "Slug is required").regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "Slug must be lowercase alphanumeric with hyphens"),
53
+ sku: e.string().min(1, "SKU is required"),
54
+ upc: e.string().optional().nullable(),
55
+ price: e.coerce.number().min(0, "Price must be non-negative"),
56
+ prices: n.default({}),
57
+ sale_price: e.coerce.number().min(0, "Sale price must be non-negative").optional().nullable(),
58
+ sale_prices: r.default({}),
59
+ sale_start_at: i,
60
+ sale_end_at: i,
61
+ stock: e.coerce.number().int().min(0, "Stock must be a non-negative integer"),
62
+ meta_title: e.string().optional().nullable(),
63
+ meta_description: e.string().optional().nullable(),
64
+ custom_canonical: e.string().optional().nullable(),
65
+ short_description: e.string().optional(),
66
+ description_json: e.any().optional(),
67
+ freemius_plan_id: e.string().optional(),
68
+ freemius_product_id: e.string().optional(),
69
+ trial_period_days: e.coerce.number().int().min(0, "Trial period must be zero or greater").default(0),
70
+ trial_requires_payment_method: e.boolean().default(!1),
71
+ media_id: e.string().optional(),
72
+ product_media: e.array(e.object({ media_id: e.string() })).optional(),
73
+ category_ids: e.array(e.string().uuid()).optional(),
74
+ is_taxable: e.boolean(),
75
+ status: e.enum([
76
+ "draft",
77
+ "active",
78
+ "archived"
79
+ ]),
80
+ language_id: e.coerce.number().int().min(1, "Language is required"),
81
+ translation_group_id: e.string().uuid().optional().or(e.literal("")).transform((e) => e === "" ? void 0 : e),
82
+ explicitly_removed_media_ids: e.array(e.string()).optional(),
83
+ variation_attributes: e.array(c).optional(),
84
+ variants: e.array(s).optional()
85
+ }).refine((e) => e.sale_price === null || e.sale_price === void 0 || e.sale_price <= e.price, {
86
+ message: "Sale price cannot exceed the regular price",
87
+ path: ["sale_price"]
88
+ }).refine((e) => Object.entries(e.sale_prices || {}).every(([t, n]) => {
89
+ if (n == null) return !0;
90
+ let r = e.prices?.[t];
91
+ return typeof r != "number" || n <= r;
92
+ }), {
93
+ message: "Sale prices cannot exceed regular prices",
94
+ path: ["sale_prices"]
95
+ }).refine((e) => a(e.sale_start_at, e.sale_end_at), {
96
+ message: "Sale end must be after the sale start",
97
+ path: ["sale_end_at"]
98
+ });
99
+ //#endregion
100
+ export { l as productSchema };
@@ -0,0 +1 @@
1
+ const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../currency.cjs"),n=require("../coupon-server.cjs"),r=require("../customer.cjs"),i=require("../customer-addresses.cjs"),a=require("../payment-config.cjs");let o=require("@supabase/supabase-js"),s=require("crypto");s=e.__toESM(s,1);let c=require("@freemius/sdk");function l(e){let t=process.env[e];if(!t)return null;let n=t.trim();return n.startsWith(`"`)&&n.endsWith(`"`)||n.startsWith(`'`)&&n.endsWith(`'`)?n.slice(1,-1).trim():n}function u(e){let t=e?.trim();if(!t)return{firstName:null,lastName:null};let[n,...r]=t.split(/\s+/);return{firstName:n||null,lastName:r.length>0?r.join(` `):null}}function d(e){if(e==null||e===``)return 0;let t=Number(e);return!Number.isFinite(t)||t<=0?0:Math.round(t)}function f(e){return e===!0||e===1||e===`1`||e===`true`}function p(e,t){let n=e?.[t];return Array.isArray(n)?n:n&&typeof n==`object`?[n]:[]}function m(e,t){for(let n of t){let t=p(e,n);if(t.length>0)return t}return Array.isArray(e)?e:[]}function h(e){if(e==null||e===``)return null;let t=Number(e);return Number.isFinite(t)?t:null}function g(e){return e===null?0:e>5e3?(console.warn(`[Freemius Sync] Suspiciously high price detected: ${e}. Assuming it is already in cents.`),Math.round(e)):Math.round(e*100)}function _(e){let t=Number(e);return!Number.isFinite(t)||t<1?1:Math.round(t)}function v(){let e=l(`FREEMIUS_CHECKOUT_PRODUCTS_JSON`);if(!e)return null;try{let t=JSON.parse(e);return t&&typeof t==`object`?t:null}catch(e){return console.error(`[Freemius Checkout] Failed to parse FREEMIUS_CHECKOUT_PRODUCTS_JSON:`,e),null}}function y(e){let t=v(),n=String(e),r=t?.[n],i=l(`FREEMIUS_PRODUCT_ID`),a=l(`FREEMIUS_ECOMMERCE_SANDBOX_PUBLIC_KEY`),o=l(`FREEMIUS_ECOMMERCE_SANDBOX_SECRET_KEY`);return r?.publicKey?{publicKey:r.publicKey,secretKey:r.secretKey??null,apiKey:r.apiKey??null,source:`product-map`}:process.env.FREEMIUS_SANDBOX_ENABLED===`true`&&i&&i===n&&a?{publicKey:a,secretKey:o,apiKey:l(`FREEMIUS_API_KEY`),source:`single-product-sandbox-env`}:i&&i===n&&l(`FREEMIUS_PUBLIC_KEY`)?{publicKey:l(`FREEMIUS_PUBLIC_KEY`),secretKey:l(`FREEMIUS_SECRET_KEY`),apiKey:l(`FREEMIUS_API_KEY`),source:`single-product-env`}:{publicKey:l(`FREEMIUS_PUBLIC_KEY`),secretKey:l(`FREEMIUS_SECRET_KEY`),apiKey:l(`FREEMIUS_API_KEY`),source:`legacy-env`}}async function b(e){if(!e.apiKey)throw Error(`Missing Freemius API key for SDK sandbox generation.`);return new c.Freemius({productId:Number(e.productId),apiKey:e.apiKey,secretKey:e.secretKey,publicKey:e.publicKey}).checkout.getSandboxParams()}var x=class{getProviderName(){return`Freemius`}async createCheckoutSession({items:e,customerEmail:c,customerPhone:f,userId:p,billingAddress:m,shippingAddress:h,currencyCode:g,couponCode:_,couponContextItems:v}){let x=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,S=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!x||!S)return{error:`Missing Supabase credentials for checkout (Service Key required).`,url:null};let C=(0,o.createClient)(x,S);if(!e||e.length===0)return{error:`Cart is empty`,url:null};if(e.length!==1)return{error:`Freemius items must be checked out one at a time.`,url:null};let{data:w,error:T}=await C.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}),E=w??[];if(T||E.length===0)return{error:`Failed to resolve store currencies`,url:null};let D=t.getDefaultCurrency(E),O=E.find(e=>e.code===(g||``).toUpperCase())??D,k=e[0],{data:A,error:j}=await C.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at, freemius_plan_id, freemius_product_id, trial_period_days, trial_requires_payment_method`).eq(`id`,k.product_id).single();if(j||!A)return{error:`Product not found`,url:null};let M=A.freemius_plan_id,N=A.freemius_product_id;if(!M||!N)return{error:`Product is not configured for Freemius checkout (missing Plan ID or Product ID)`,url:null};let P=t.resolveEffectivePriceForCurrency({prices:A.prices||{},salePrices:A.sale_prices||{},fallbackPrice:A.price,fallbackSalePrice:A.sale_price,saleStartAt:A.sale_start_at,saleEndAt:A.sale_end_at,scheduledPrice:A.scheduled_price,scheduledPrices:A.scheduled_prices||{},scheduledPriceAt:A.scheduled_price_at,currencyCode:O.code,currencies:E}),F=P.sale_price??P.price,I=t.isSaleWindowActive({saleStartAt:A.sale_start_at,saleEndAt:A.sale_end_at}),L=F*k.quantity,R=null,z=0;if(_){let t=await n.getCouponQuote({client:C,code:_,items:v&&v.length>0?v:e,currencyCode:O.code});if(!t.success)return{error:t.error,errorKey:t.errorKey,errorStatus:400,url:null};R=t.quote,z=Math.min(L,R.lineDiscounts.filter(e=>e.product_id===A.id).reduce((e,t)=>e+t.discount,0))}let B=d(A.trial_period_days),V=B>0?k.trial_preference?k.trial_preference:A.trial_requires_payment_method?`paid`:`free`:null,H=`pending`,U=u(m?.recipient_name??null),{data:W,error:G}=await C.from(`orders`).insert({status:H,total:Math.max(0,L-z),currency:O.code,exchange_rate_at_purchase:O.exchange_rate,subtotal:L,discount_total:z,coupon_id:R?.couponId??null,coupon_code:R?.code??null,discount_details:R?{code:R.code,discount_type:R.discountType,discount_amount:R.discountAmount,provider:`freemius`,provider_discounts:R.providerDiscounts,line_discounts:R.lineDiscounts,final_amount_owned_by:`freemius`}:null,provider:`freemius`,freemius_product_id:String(N),freemius_plan_id:String(M),user_id:p||null,customer_details:r.normalizeOrderCustomerDetails({email:c,phone:f,name:m?.recipient_name,billing:m,shipping:h})}).select(`id`).single();if(G||!W)return console.error(`Failed to create pending order:`,G),{error:`Failed to initiate order`,url:null};let{error:K}=await C.from(`order_items`).insert([{order_id:W.id,product_id:A.id,quantity:k.quantity,price_at_purchase:F}]);if(K&&console.error(`Failed to insert order items:`,K),p)try{await i.upsertDefaultUserAddresses({userId:p,billingAddress:m,shippingAddress:h,client:C}),await i.fillMissingUserProfileCheckoutDetails({userId:p,fullName:m?.recipient_name??h?.recipient_name??null,phone:f,client:C})}catch(e){console.error(`Failed to sync checkout profile defaults before checkout:`,e)}R&&await n.recordCouponRedemption({client:C,quote:R,orderId:W.id,provider:`freemius`,discountTotal:z,userId:p,customerEmail:c,metadata:{currency:O.code,subtotal:L,final_amount_owned_by:`freemius`}}),await a.hydrateFreemiusEnvFromDb();let q=process.env.FREEMIUS_SANDBOX_ENABLED===`true`,J=y(N),Y=J.publicKey,X=J.secretKey,Z=J.apiKey;if(!Y||q&&!X)return console.error(`Freemius checkout blocked: missing credentials (PUBLIC_KEY or SECRET_KEY) in CMS → Payments or environment.`),{error:`This store is not able to take payments right now. Please contact the seller to complete your purchase.`,errorKey:`ecommerce.checkout_payments_unavailable`,errorStatus:503,url:null};if(q&&J.source===`legacy-env`){let e=l(`FREEMIUS_PRODUCT_ID`),t=!!l(`FREEMIUS_ECOMMERCE_SANDBOX_PUBLIC_KEY`),n=!!l(`FREEMIUS_ECOMMERCE_SANDBOX_SECRET_KEY`);console.warn(`[Freemius Checkout] Sandbox is enabled for product ${N}, but no product-scoped checkout credentials were selected. Falling back to legacy FREEMIUS_PUBLIC_KEY/FREEMIUS_SECRET_KEY may open live checkout instead of sandbox.`,{configuredProductId:e,productIdsMatch:e===String(N),hasSandboxOverridePublicKey:t,hasSandboxOverrideSecretKey:n,hasCheckoutProductsJson:!!l(`FREEMIUS_CHECKOUT_PRODUCTS_JSON`)})}let Q=!1;if(q&&X&&Y)try{Q=await b({productId:N,publicKey:Y,secretKey:X,apiKey:Z})}catch(e){console.warn(`Freemius Checkout - SDK sandbox generation failed. Falling back to manual token generation.`,e,{credentialSource:J.source,hasApiKey:!!Z});let t=Math.floor(Date.now()/1e3).toString(),n=`${t}${N}${X}${Y}checkout`;Q={ctx:t,token:s.default.createHash(`md5`).update(n).digest(`hex`)}}let $=new URL(`https://checkout.freemius.com/app/${N}/plan/${M}/`);if(q&&X&&Y?($.searchParams.append(`sandbox`,Q.token),$.searchParams.append(`s_ctx_ts`,Q.ctx)):q&&$.searchParams.append(`sandbox`,`true`),c&&$.searchParams.append(`user_email`,c),U.firstName&&$.searchParams.append(`user_firstname`,U.firstName),U.lastName&&$.searchParams.append(`user_lastname`,U.lastName),$.searchParams.append(`currency`,O.code.toLowerCase()),k.billing_cycle&&$.searchParams.append(`billing_cycle`,k.billing_cycle),V&&$.searchParams.append(`trial`,V),R)$.searchParams.append(`coupon`,R.code);else if(I){let{data:e}=await C.from(`product_freemius_sale_coupons`).select(`freemius_coupon_code, is_active, starts_at, ends_at, sync_status`).eq(`product_id`,A.id).maybeSingle();e?.is_active&&e.sync_status===`synced`&&e.freemius_coupon_code&&t.isSaleWindowActive({saleStartAt:e.starts_at,saleEndAt:e.ends_at})&&$.searchParams.append(`coupon`,e.freemius_coupon_code)}return{url:$.toString(),customProps:{provider:`freemius`,plugin_id:N,plan_id:M,public_key:Y,user_email:c,user_firstname:U.firstName,user_lastname:U.lastName,credential_source:J.source,sandbox:Q,billing_cycle:k.billing_cycle,trial:V,trial_period_days:B,trial_requires_payment_method:A.trial_requires_payment_method,initial_order_status:H,coupon:R?.code??null,order_id:W.id}}}};async function S(e,t,n,r){let i=new Date().toUTCString().replace(`GMT`,`+0000`),a=`GET\n\n\n${i}\n${e}`,o=s.default.createHmac(`sha256`,r).update(a).digest(`hex`),c=`FS ${t}:${n}:${Buffer.from(o).toString(`base64`).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=/g,``)}`,l=await fetch(`https://api.freemius.com${e}`,{headers:{Authorization:c,Date:i,Accept:`application/json`}});if(!l.ok){let t=await l.text();throw console.error(`[Freemius API] [ERROR] ${e} returned ${l.status}: ${t}`),Error(`Freemius API failed on ${e}: ${l.status} - ${t}`)}return l.json()}async function C(){let e=l(`FREEMIUS_DEVELOPER_ID`),t=l(`FREEMIUS_PUBLIC_KEY`),n=l(`FREEMIUS_SECRET_KEY`),r=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,i=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!t||!n||!r||!i)throw Error(`Missing necessary environment variables for Freemius Sync.`);let a=(0,o.createClient)(r,i,{auth:{autoRefreshToken:!1,persistSession:!1}}),s=r=>S(r,e,t,n);try{console.log(`[Freemius Sync] Fetching all plugins for developer ${e}...`);let t=m(await s(`/v1/developers/${e}/plugins.json`),[`plugins`,`plugin`]);console.log(`[Freemius Sync] Found ${t.length} plugins. Syncing plans...`);let n=0,{data:r}=await a.from(`languages`).select(`id`).eq(`code`,`en`).single(),i=r?.id;if(!i)throw Error(`English language not found in database. Cannot sync products.`);for(let r of t){let t=r.id?.toString();if(!t){console.warn(`[Freemius Sync] Skipping plugin without an id:`,r);continue}let o=await T(a,e,t,r.title||r.name||`Freemius Product ${t}`,s,i);n+=o}return{success:!0,count:n}}catch(e){throw console.error(`[Freemius Sync] Global Error:`,e),e}}async function w(e){let t=l(`FREEMIUS_DEVELOPER_ID`),n=l(`FREEMIUS_PUBLIC_KEY`),r=l(`FREEMIUS_SECRET_KEY`),i=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,a=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!t||!n||!r||!i||!a)throw Error(`Missing environment variables for Freemius Sync.`);let s=(0,o.createClient)(i,a),c=e=>S(e,t,n,r),{data:u}=await s.from(`languages`).select(`id`).eq(`code`,`en`).single(),d=u?.id;if(!d)throw Error(`English language not found in database. Cannot sync products.`);let f=await c(`/v1/developers/${t}/plugins/${e}.json`),p=f.plugin??f;return{success:!0,count:await T(s,t,e,p.title||p.name||`Freemius Product ${e}`,c,d)}}async function T(e,t,n,r,i,a){console.log(`[Freemius Sync] Fetching plans for plugin: ${r} (${n})...`);let o=0;try{let s=m(await i(`/v1/developers/${t}/plugins/${n}/plans.json`),[`plans`,`plan`]);console.log(`[Freemius Sync] Received ${s.length} plans for plugin ${n}.`);for(let c of s){let s=c.id?.toString();if(!s){console.warn(`[Freemius Sync] Skipping plan without an id:`,c);continue}let l=c.name||c.title||s,u=c.title||l;console.log(`[Freemius Sync] Processing plan: ${u} (${s})...`);let p=c;if(p.trial_period===void 0||p.is_require_subscription===void 0)try{let e=await i(`/v1/developers/${t}/plugins/${n}/plans/${s}.json`),r=e.plan??e;p={...p,...r}}catch(e){console.warn(`[Freemius Sync] Could not fetch trial details for plan ${s}:`,e instanceof Error?e.message:e)}let v=d(p.trial_period),y=v>0&&f(p.is_require_subscription),b=0,x=[];try{if(x=m(await i(`/v1/developers/${t}/plugins/${n}/plans/${s}/pricing.json`),[`pricing`,`prices`,`pricings`]),x.length>0){let e=x[0];b=g(h(e.annual_price)??h(e.monthly_price)??h(e.lifetime_price))}console.log(`[Freemius Sync] Plan: ${u} -> Resolved Price (cents): ${b}`)}catch(e){console.warn(`[Freemius Sync] Could not fetch pricing for plan ${s}:`,e instanceof Error?e.message:e)}let S=`${r}-${u}`.toLowerCase().replace(/[^\w\s-]/g,``).replace(/[\s_]+/g,`-`).replace(/^-+|-+$/g,``),C={title:`${r} - ${u}`,slug:S,short_description:c.description||``,price:b,product_type:`digital`,payment_provider:`freemius`,freemius_plan_id:s,freemius_product_id:n,trial_period_days:v,trial_requires_payment_method:y,status:`active`,stock:999,sku:`FM-${n}-${s}`,language_id:a},{data:w,error:T}=await e.from(`products`).upsert(C,{onConflict:`language_id, sku`}).select();if(T||!w||w.length===0){console.error(`[Freemius Sync] Error upserting product ${C.sku}:`,T);continue}let E=w[0].id,{data:D,error:O}=await e.from(`freemius_plans`).select(`id`).eq(`product_id`,E).eq(`name`,l).maybeSingle();O&&console.warn(`[Freemius Sync] Could not check existing local plan for ${C.sku}:`,O.message||O);let k=``;if(D){k=D.id;let{error:t}=await e.from(`freemius_plans`).update({title:u,updated_at:new Date().toISOString()}).eq(`id`,k);t&&console.warn(`[Freemius Sync] Could not update local plan ${k}:`,t.message||t)}else{let{data:t,error:n}=await e.from(`freemius_plans`).insert({product_id:E,name:l,title:u}).select(`id`).single();n&&console.warn(`[Freemius Sync] Could not insert local plan for ${C.sku}:`,n.message||n),t&&(k=t.id)}if(k&&x.length>0)for(let t of x){let n=_(t.licenses??t.license_quota??t.quota),{data:r,error:i}=await e.from(`freemius_pricing`).select(`id`).eq(`plan_id`,k).eq(`license_quota`,n).maybeSingle();i&&console.warn(`[Freemius Sync] Could not check pricing for plan ${k}, quota ${n}:`,i.message||i);let a={api_monthly_price:h(t.monthly_price),api_annual_price:h(t.annual_price),api_lifetime_price:h(t.lifetime_price),updated_at:new Date().toISOString()};if(r){let{error:t}=await e.from(`freemius_pricing`).update(a).eq(`id`,r.id);t&&console.warn(`[Freemius Sync] Could not update pricing ${r.id}:`,t.message||t)}else{let{error:t}=await e.from(`freemius_pricing`).insert({plan_id:k,license_quota:n,...a});t&&console.warn(`[Freemius Sync] Could not insert pricing for plan ${k}, quota ${n}:`,t.message||t)}}console.log(`[Freemius Sync] Successfully fully synced product ${C.sku}.`),o++}}catch(e){console.error(`[Freemius Sync] Failed sync for plugin ${n}:`,e.message)}return o}exports.FreemiusProvider=x,exports.parseFreemiusCheckoutCredentialsMap=v,exports.readFreemiusEnvValue=l,exports.resolveFreemiusCheckoutCredentials=y,exports.syncFreemiusProductsToSupabase=C,exports.syncSingleFreemiusProduct=w;