@nextblock-cms/ecom 0.22.2 → 0.22.3

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 (87) hide show
  1. package/index.cjs +1 -1
  2. package/index.es.js +31 -31
  3. package/lib/components/Checkout.cjs +1 -1
  4. package/lib/components/Checkout.es.js +1 -0
  5. package/lib/components/SubscriptionSelector.cjs +1 -1
  6. package/lib/components/SubscriptionSelector.es.js +91 -92
  7. package/lib/coupon-server.cjs +1 -1
  8. package/lib/coupon-server.es.js +78 -61
  9. package/lib/coupons.cjs +1 -1
  10. package/lib/coupons.d.ts +9 -0
  11. package/lib/coupons.es.js +11 -2
  12. package/lib/currency-sync.cjs +1 -1
  13. package/lib/currency-sync.es.js +1 -1
  14. package/lib/freemius-coupons.cjs +1 -1
  15. package/lib/freemius-coupons.es.js +88 -92
  16. package/lib/freemius-license-claim.cjs +1 -1
  17. package/lib/freemius-license-claim.d.ts +13 -0
  18. package/lib/freemius-license-claim.es.js +44 -29
  19. package/lib/freemius-license.cjs +1 -1
  20. package/lib/freemius-license.es.js +19 -17
  21. package/lib/freemius-order-sync.cjs +1 -1
  22. package/lib/freemius-order-sync.d.ts +44 -0
  23. package/lib/freemius-order-sync.es.js +164 -77
  24. package/lib/freemius-pricing-server.cjs +1 -0
  25. package/lib/freemius-pricing-server.d.ts +65 -0
  26. package/lib/freemius-pricing-server.es.js +82 -0
  27. package/lib/freemius-pricing.cjs +1 -0
  28. package/lib/freemius-pricing.d.ts +53 -0
  29. package/lib/freemius-pricing.es.js +51 -0
  30. package/lib/invoice-server.cjs +1 -1
  31. package/lib/invoice-server.es.js +1 -0
  32. package/lib/pages/cms/coupons/CouponsPage.cjs +1 -1
  33. package/lib/pages/cms/coupons/CouponsPage.es.js +1 -0
  34. package/lib/pages/cms/coupons/EditCouponPage.cjs +1 -1
  35. package/lib/pages/cms/coupons/EditCouponPage.es.js +1 -0
  36. package/lib/pages/cms/coupons/actions.cjs +1 -1
  37. package/lib/pages/cms/coupons/actions.es.js +1 -0
  38. package/lib/pages/cms/orders/actions.cjs +1 -1
  39. package/lib/pages/cms/orders/actions.es.js +1 -0
  40. package/lib/pages/cms/orders/export-actions.cjs +1 -1
  41. package/lib/pages/cms/orders/export-actions.es.js +1 -0
  42. package/lib/pages/cms/orders/server-actions.cjs +1 -1
  43. package/lib/pages/cms/orders/server-actions.es.js +1 -0
  44. package/lib/pages/cms/products/ProductsPage.cjs +1 -1
  45. package/lib/pages/cms/products/ProductsPage.es.js +1 -0
  46. package/lib/pages/cms/products/[id]/edit/EditProductPage.cjs +1 -1
  47. package/lib/pages/cms/products/[id]/edit/EditProductPage.es.js +1 -0
  48. package/lib/pages/cms/products/actions.cjs +3 -3
  49. package/lib/pages/cms/products/actions.d.ts +11 -5
  50. package/lib/pages/cms/products/actions.es.js +45 -12
  51. package/lib/pages/cms/products/inventory/actions.cjs +1 -1
  52. package/lib/pages/cms/products/inventory/actions.es.js +1 -0
  53. package/lib/pages/cms/products/new/NewProductPage.cjs +1 -1
  54. package/lib/pages/cms/products/new/NewProductPage.es.js +1 -0
  55. package/lib/pages/cms/products/server-actions.cjs +1 -1
  56. package/lib/pages/cms/products/server-actions.es.js +1 -0
  57. package/lib/pages/cms/shipping/ShippingPage.cjs +1 -1
  58. package/lib/pages/cms/shipping/ShippingPage.es.js +1 -0
  59. package/lib/pages/cms/shipping/server-actions.cjs +1 -1
  60. package/lib/pages/cms/shipping/server-actions.es.js +1 -0
  61. package/lib/pages/cms/taxes/TaxesPage.cjs +1 -1
  62. package/lib/pages/cms/taxes/TaxesPage.es.js +1 -0
  63. package/lib/payment-config.cjs +1 -1
  64. package/lib/payment-config.es.js +1 -0
  65. package/lib/providers/freemius.cjs +1 -1
  66. package/lib/providers/freemius.es.js +200 -187
  67. package/lib/providers/stripe.cjs +1 -1
  68. package/lib/providers/stripe.es.js +151 -150
  69. package/lib/server-actions/coupon-actions.cjs +1 -1
  70. package/lib/server-actions/coupon-actions.es.js +1 -0
  71. package/lib/server-actions/customer-actions.d.ts +6 -1
  72. package/lib/server-actions/require-ecom-role.cjs +1 -1
  73. package/lib/server-actions/require-ecom-role.es.js +22 -10
  74. package/lib/server-actions/tax-actions.cjs +1 -1
  75. package/lib/server-actions/tax-actions.es.js +1 -0
  76. package/lib/shared-inventory.cjs +1 -1
  77. package/lib/shared-inventory.es.js +1 -1
  78. package/lib/stripe/checkout.cjs +1 -1
  79. package/lib/stripe/checkout.es.js +1 -0
  80. package/lib/stripe/order-sync.cjs +1 -1
  81. package/lib/stripe/order-sync.es.js +1 -0
  82. package/lib/stripe/webhooks.cjs +1 -1
  83. package/lib/stripe/webhooks.d.ts +10 -0
  84. package/lib/stripe/webhooks.es.js +23 -10
  85. package/package.json +4 -4
  86. package/server.cjs +1 -1
  87. package/server.es.js +31 -31
@@ -11,7 +11,12 @@ export interface ProfileUpdateData {
11
11
  export declare function updateProfile(data: ProfileUpdateData): Promise<{
12
12
  success: boolean;
13
13
  }>;
14
- export declare function validateCheckoutEligibility(userId: string): Promise<{
14
+ /**
15
+ * Is the signed-in customer's profile complete enough to check out? Always the session's
16
+ * user: a server action never takes a user id from the caller. The old `userId` argument is
17
+ * still accepted so existing callers compile, and ignored.
18
+ */
19
+ export declare function validateCheckoutEligibility(..._ignoredArgs: unknown[]): Promise<{
15
20
  ready: boolean;
16
21
  missingFields: string[];
17
22
  }>;
@@ -1 +1 @@
1
- let e=require("@nextblock-cms/db/server");require("server-only");async function t(){return n()}async function n(){let t=(0,e.createClient)(),{data:{user:n}}=await t.auth.getUser();if(!n)return null;let{data:r}=await t.from(`profiles`).select(`role`).eq(`id`,n.id).single(),i=r?.role;return i===`ADMIN`||i===`WRITER`?i:null}async function r(){let t=await n();if(!t)throw Error(`Unauthorized`);if(t!==`ADMIN`)throw Error(`Forbidden`);return(0,e.getServiceRoleSupabaseClient)()}async function i(){if(!await n())throw Error(`Unauthorized`);return(0,e.getServiceRoleSupabaseClient)()}exports.getEcomActorRole=t,exports.requireEcomAdmin=r,exports.requireEcomStaff=i;
1
+ require("server-only");let e=require("@nextblock-cms/db/server");async function t(){return i()}var n=Symbol.for(`nextblock.cms.secondFactorGate`);async function r(e,t){let r=globalThis[n];if(typeof r==`function`)return!!await r();let{data:i}=await e.from(`user_security_settings`).select(`mfa_enabled, mfa_type`).eq(`user_id`,t).maybeSingle();if(!i?.mfa_enabled||!i?.mfa_type)return!0;if(i.mfa_type===`totp`){let{data:t}=await e.auth.mfa.getAuthenticatorAssuranceLevel();return t?.currentLevel===`aal2`}return!1}async function i(){let t=(0,e.createClient)(),{data:{user:n}}=await t.auth.getUser();if(!n)return null;let{data:i}=await t.from(`profiles`).select(`role`).eq(`id`,n.id).single(),a=i?.role;return a!==`ADMIN`&&a!==`WRITER`||!await r(t,n.id)?null:a}async function a(){let t=await i();if(!t)throw Error(`Unauthorized`);if(t!==`ADMIN`)throw Error(`Forbidden`);return(0,e.getServiceRoleSupabaseClient)()}async function o(){if(!await i())throw Error(`Unauthorized`);return(0,e.getServiceRoleSupabaseClient)()}exports.getEcomActorRole=t,exports.requireEcomAdmin=a,exports.requireEcomStaff=o;
@@ -1,24 +1,36 @@
1
- import { createClient as e, getServiceRoleSupabaseClient as t } from "@nextblock-cms/db/server";
2
1
  import "server-only";
2
+ import { createClient as e, getServiceRoleSupabaseClient as t } from "@nextblock-cms/db/server";
3
3
  //#region src/lib/server-actions/require-ecom-role.ts
4
4
  async function n() {
5
- return r();
5
+ return a();
6
+ }
7
+ var r = Symbol.for("nextblock.cms.secondFactorGate");
8
+ async function i(e, t) {
9
+ let n = globalThis[r];
10
+ if (typeof n == "function") return !!await n();
11
+ let { data: i } = await e.from("user_security_settings").select("mfa_enabled, mfa_type").eq("user_id", t).maybeSingle();
12
+ if (!i?.mfa_enabled || !i?.mfa_type) return !0;
13
+ if (i.mfa_type === "totp") {
14
+ let { data: t } = await e.auth.mfa.getAuthenticatorAssuranceLevel();
15
+ return t?.currentLevel === "aal2";
16
+ }
17
+ return !1;
6
18
  }
7
- async function r() {
19
+ async function a() {
8
20
  let t = e(), { data: { user: n } } = await t.auth.getUser();
9
21
  if (!n) return null;
10
- let { data: r } = await t.from("profiles").select("role").eq("id", n.id).single(), i = r?.role;
11
- return i === "ADMIN" || i === "WRITER" ? i : null;
22
+ let { data: r } = await t.from("profiles").select("role").eq("id", n.id).single(), a = r?.role;
23
+ return a !== "ADMIN" && a !== "WRITER" || !await i(t, n.id) ? null : a;
12
24
  }
13
- async function i() {
14
- let e = await r();
25
+ async function o() {
26
+ let e = await a();
15
27
  if (!e) throw Error("Unauthorized");
16
28
  if (e !== "ADMIN") throw Error("Forbidden");
17
29
  return t();
18
30
  }
19
- async function a() {
20
- if (!await r()) throw Error("Unauthorized");
31
+ async function s() {
32
+ if (!await a()) throw Error("Unauthorized");
21
33
  return t();
22
34
  }
23
35
  //#endregion
24
- export { n as getEcomActorRole, i as requireEcomAdmin, a as requireEcomStaff };
36
+ export { n as getEcomActorRole, o as requireEcomAdmin, s as requireEcomStaff };
@@ -1 +1 @@
1
- "use server";const e=require("../coupon-server.cjs"),t=require("../tax-calculation.cjs");let n=require("next/headers"),r=require("@nextblock-cms/db/server");async function i(i,a,o=`USD`,s,c){try{let l=(0,r.createClient)(),u=(0,r.getServiceRoleSupabaseClient)(),{data:d}=await l.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}),f=d??[],p;if(s){let t=e.resolveCouponValidationThrottleKey(await(0,n.headers)());if(e.consumeCouponValidationToken(t)){let t=await e.getCouponQuote({client:u,code:s,items:c&&c.length>0?c:i,currencyCode:o});t.success&&(p=e.getQuoteLineDiscountMap(t.quote))}}let m=await t.buildCheckoutTaxableItemsFromCart(l,i,o,f,p);return{success:!0,tax:await t.calculateCheckoutTaxes(l,{items:m,destination:a})}}catch(e){return console.error(`Failed to estimate taxes:`,e),{success:!1,error:e.message||`Failed to calculate taxes`}}}exports.getTaxEstimate=i;
1
+ "use server";const e=require("../coupon-server.cjs"),t=require("../tax-calculation.cjs");require("server-only");let n=require("next/headers"),r=require("@nextblock-cms/db/server");async function i(i,a,o=`USD`,s,c){try{let l=(0,r.createClient)(),u=(0,r.getServiceRoleSupabaseClient)(),{data:d}=await l.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}),f=d??[],p;if(s){let t=e.resolveCouponValidationThrottleKey(await(0,n.headers)());if(e.consumeCouponValidationToken(t)){let t=await e.getCouponQuote({client:u,code:s,items:c&&c.length>0?c:i,currencyCode:o});t.success&&(p=e.getQuoteLineDiscountMap(t.quote))}}let m=await t.buildCheckoutTaxableItemsFromCart(l,i,o,f,p);return{success:!0,tax:await t.calculateCheckoutTaxes(l,{items:m,destination:a})}}catch(e){return console.error(`Failed to estimate taxes:`,e),{success:!1,error:e.message||`Failed to calculate taxes`}}}exports.getTaxEstimate=i;
@@ -1,6 +1,7 @@
1
1
  "use server";
2
2
  import { consumeCouponValidationToken as e, getCouponQuote as t, getQuoteLineDiscountMap as n, resolveCouponValidationThrottleKey as r } from "../coupon-server.es.js";
3
3
  import { buildCheckoutTaxableItemsFromCart as i, calculateCheckoutTaxes as a } from "../tax-calculation.es.js";
4
+ import "server-only";
4
5
  import { headers as o } from "next/headers";
5
6
  import { createClient as s, getServiceRoleSupabaseClient as c } from "@nextblock-cms/db/server";
6
7
  //#region src/lib/server-actions/tax-actions.ts
@@ -1,4 +1,4 @@
1
- let e=require("@nextblock-cms/db/server");require("server-only");function t(t){return t??(0,e.getServiceRoleSupabaseClient)()}function n(e){return e?(Array.isArray(e)?e:[e]).map(e=>e?.code?.toUpperCase().trim()).filter(e=>!!e):[]}function r(e){return[...new Set(e)].sort((e,t)=>e.localeCompare(t))}function i(e,t){return!e||e===t?t:`mixed`}async function a(e,t){let n=Array.from(t.reduce((e,t)=>{let n=t.sku.trim();return n&&e.set(n,{sku:n,quantity:Math.max(0,Math.trunc(t.quantity))}),e},new Map).values());if(n.length===0)return;let{error:r}=await e.from(`inventory_items`).upsert(n,{onConflict:`sku`});if(r)throw Error(r.message)}async function o(e,t){let n=r(t.map(e=>e.trim()).filter(Boolean));if(n.length===0)return new Map;let{data:i,error:a}=await e.from(`inventory_items`).select(`sku, quantity`).in(`sku`,n);if(a)throw Error(a.message);return new Map((i||[]).map(e=>[e.sku,Math.max(0,e.quantity??0)]))}async function s(e){let{data:t,error:r}=await e.from(`products`).select(`
1
+ require("server-only");let e=require("@nextblock-cms/db/server");function t(t){return t??(0,e.getServiceRoleSupabaseClient)()}function n(e){return e?(Array.isArray(e)?e:[e]).map(e=>e?.code?.toUpperCase().trim()).filter(e=>!!e):[]}function r(e){return[...new Set(e)].sort((e,t)=>e.localeCompare(t))}function i(e,t){return!e||e===t?t:`mixed`}async function a(e,t){let n=Array.from(t.reduce((e,t)=>{let n=t.sku.trim();return n&&e.set(n,{sku:n,quantity:Math.max(0,Math.trunc(t.quantity))}),e},new Map).values());if(n.length===0)return;let{error:r}=await e.from(`inventory_items`).upsert(n,{onConflict:`sku`});if(r)throw Error(r.message)}async function o(e,t){let n=r(t.map(e=>e.trim()).filter(Boolean));if(n.length===0)return new Map;let{data:i,error:a}=await e.from(`inventory_items`).select(`sku, quantity`).in(`sku`,n);if(a)throw Error(a.message);return new Map((i||[]).map(e=>[e.sku,Math.max(0,e.quantity??0)]))}async function s(e){let{data:t,error:r}=await e.from(`products`).select(`
2
2
  id,
3
3
  title,
4
4
  sku,
@@ -1,5 +1,5 @@
1
- import { getServiceRoleSupabaseClient as e } from "@nextblock-cms/db/server";
2
1
  import "server-only";
2
+ import { getServiceRoleSupabaseClient as e } from "@nextblock-cms/db/server";
3
3
  //#region src/lib/shared-inventory.ts
4
4
  function t(t) {
5
5
  return t ?? e();
@@ -1 +1 @@
1
- const e=require("../currency.cjs"),t=require("../shipping/resolver.cjs"),n=require("./client.cjs");let r=require("@nextblock-cms/db/server"),i=require("@supabase/supabase-js");var a=async(a,o,s,c)=>{let l=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,u=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!l||!u)return console.error(`Missing Supabase credentials for checkout (Service Key required).`),{error:`Internal Server Error`,url:null};let d=(0,i.createClient)(l,u),f=process.env.NEXT_PUBLIC_URL||`http://localhost:4200`;if(!a.length)return{error:`Cart is empty`,url:null};let{data:p}=await d.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}),m=p??[],h=e.getDefaultCurrency(m),g=m.find(e=>e.code===(c||``).toUpperCase())??h;if(!await(0,r.verifyPackageOnline)(`ecommerce`))return{error:`E-Commerce Package not active. Please purchase a license to accept payments.`,url:null};let _=a.map(e=>e.product_id),{data:v,error:y}=await d.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at`).in(`id`,_);if(y||!v)return console.error(`Error fetching products for validation:`,y),{error:`Failed to validate product prices`,url:null};let b=new Map(v.map(e=>[e.id,e])),x=[],S=0,C=[];for(let t of a){let n=b.get(t.product_id);if(!n){console.warn(`Product ${t.product_id} not found in DB, skipping.`);continue}let r=e.resolveEffectivePriceForCurrency({prices:n.prices||{},salePrices:n.sale_prices||{},fallbackPrice:n.price,fallbackSalePrice:n.sale_price,saleStartAt:n.sale_start_at,saleEndAt:n.sale_end_at,scheduledPrice:n.scheduled_price,scheduledPrices:n.scheduled_prices||{},scheduledPriceAt:n.scheduled_price_at,currencyCode:g.code,currencies:m}),i=r.sale_price??r.price;i<=0&&console.warn(`[Checkout Session Warning] Product ${n.title} has zero or negative price!`),x.push({price_data:{currency:g.code.toLowerCase(),product_data:{name:n.title,images:[],metadata:{productId:n.id}},unit_amount:i},quantity:t.quantity}),S+=i*t.quantity,C.push({product_id:n.id,quantity:t.quantity,price_at_purchase:i})}if(x.length===0)return{error:`No valid items in cart`,url:null};let{data:w,error:T}=await d.from(`orders`).insert({total:S,user_id:o,currency:g.code,exchange_rate_at_purchase:g.exchange_rate}).select(`id`).single();if(T||!w)return console.error(`Failed to create pending order:`,T),console.error(`Order Data attempted:`,{status:`pending`,total:S}),{error:`Failed to initiate order: ${T?.message||`Unknown error`}`,url:null};let E=C.map(e=>({order_id:w.id,product_id:e.product_id,quantity:e.quantity,price_at_purchase:e.price_at_purchase})),{error:D}=await d.from(`order_items`).insert(E);D&&console.error(`Failed to insert order items:`,D);let O=[],k=s;if(!k&&o){let{data:e}=await d.from(`user_addresses`).select(`country_code, state_code, postal_code`).eq(`user_id`,o).eq(`address_type`,`shipping`).limit(1).single();e&&(k={country:e.country_code,state:e.state_code,postal_code:e.postal_code})}k&&(O=(await t.resolveShippingOptions(S,k,null,g.code)).map(e=>({shipping_rate_data:{type:`fixed_amount`,fixed_amount:{amount:e.amount,currency:e.currency.toLowerCase()},display_name:e.name}})));try{let e=await(await n.getStripeClient()).checkout.sessions.create({mode:`payment`,success_url:`${f}/checkout/success?session_id={CHECKOUT_SESSION_ID}`,cancel_url:`${f}/`,line_items:x,billing_address_collection:`required`,shipping_address_collection:{allowed_countries:`US.CA.GB.AU.NZ.IE.FR.DE.IT.ES.MX.BR.AR.CL.CO.PE.ZA.NG.KE.IN.JP.KR.CN.SG.MY.PH.TH.VN.ID.AE.SA.EG.MA.DZ.TN.PT.NL.BE.CH.AT.SE.NO.DK.FI.PL.CZ.HU.RO.BG.GR.TR.IL.CY.MT`.split(`.`)},shipping_options:O.length>0?O:void 0,metadata:{orderId:w.id}});return await d.from(`orders`).update({stripe_session_id:e.id}).eq(`id`,w.id),{url:e.url}}catch(e){return console.error(`Stripe session creation failed:`,e),{error:e.message,url:null}}};exports.createCheckoutSession=a;
1
+ const e=require("../currency.cjs"),t=require("../shipping/resolver.cjs"),n=require("./client.cjs");require("server-only");let r=require("@nextblock-cms/db/server"),i=require("@supabase/supabase-js");var a=async(a,o,s,c)=>{let l=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,u=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!l||!u)return console.error(`Missing Supabase credentials for checkout (Service Key required).`),{error:`Internal Server Error`,url:null};let d=(0,i.createClient)(l,u),f=process.env.NEXT_PUBLIC_URL||`http://localhost:4200`;if(!a.length)return{error:`Cart is empty`,url:null};let{data:p}=await d.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}),m=p??[],h=e.getDefaultCurrency(m),g=m.find(e=>e.code===(c||``).toUpperCase())??h;if(!await(0,r.verifyPackageOnline)(`ecommerce`))return{error:`E-Commerce Package not active. Please purchase a license to accept payments.`,url:null};let _=a.map(e=>e.product_id),{data:v,error:y}=await d.from(`products`).select(`id, title, price, prices, sale_price, sale_prices, sale_start_at, sale_end_at, scheduled_price, scheduled_prices, scheduled_price_at`).in(`id`,_);if(y||!v)return console.error(`Error fetching products for validation:`,y),{error:`Failed to validate product prices`,url:null};let b=new Map(v.map(e=>[e.id,e])),x=[],S=0,C=[];for(let t of a){let n=b.get(t.product_id);if(!n){console.warn(`Product ${t.product_id} not found in DB, skipping.`);continue}let r=e.resolveEffectivePriceForCurrency({prices:n.prices||{},salePrices:n.sale_prices||{},fallbackPrice:n.price,fallbackSalePrice:n.sale_price,saleStartAt:n.sale_start_at,saleEndAt:n.sale_end_at,scheduledPrice:n.scheduled_price,scheduledPrices:n.scheduled_prices||{},scheduledPriceAt:n.scheduled_price_at,currencyCode:g.code,currencies:m}),i=r.sale_price??r.price;i<=0&&console.warn(`[Checkout Session Warning] Product ${n.title} has zero or negative price!`),x.push({price_data:{currency:g.code.toLowerCase(),product_data:{name:n.title,images:[],metadata:{productId:n.id}},unit_amount:i},quantity:t.quantity}),S+=i*t.quantity,C.push({product_id:n.id,quantity:t.quantity,price_at_purchase:i})}if(x.length===0)return{error:`No valid items in cart`,url:null};let{data:w,error:T}=await d.from(`orders`).insert({total:S,user_id:o,currency:g.code,exchange_rate_at_purchase:g.exchange_rate}).select(`id`).single();if(T||!w)return console.error(`Failed to create pending order:`,T),console.error(`Order Data attempted:`,{status:`pending`,total:S}),{error:`Failed to initiate order: ${T?.message||`Unknown error`}`,url:null};let E=C.map(e=>({order_id:w.id,product_id:e.product_id,quantity:e.quantity,price_at_purchase:e.price_at_purchase})),{error:D}=await d.from(`order_items`).insert(E);D&&console.error(`Failed to insert order items:`,D);let O=[],k=s;if(!k&&o){let{data:e}=await d.from(`user_addresses`).select(`country_code, state_code, postal_code`).eq(`user_id`,o).eq(`address_type`,`shipping`).limit(1).single();e&&(k={country:e.country_code,state:e.state_code,postal_code:e.postal_code})}k&&(O=(await t.resolveShippingOptions(S,k,null,g.code)).map(e=>({shipping_rate_data:{type:`fixed_amount`,fixed_amount:{amount:e.amount,currency:e.currency.toLowerCase()},display_name:e.name}})));try{let e=await(await n.getStripeClient()).checkout.sessions.create({mode:`payment`,success_url:`${f}/checkout/success?session_id={CHECKOUT_SESSION_ID}`,cancel_url:`${f}/`,line_items:x,billing_address_collection:`required`,shipping_address_collection:{allowed_countries:`US.CA.GB.AU.NZ.IE.FR.DE.IT.ES.MX.BR.AR.CL.CO.PE.ZA.NG.KE.IN.JP.KR.CN.SG.MY.PH.TH.VN.ID.AE.SA.EG.MA.DZ.TN.PT.NL.BE.CH.AT.SE.NO.DK.FI.PL.CZ.HU.RO.BG.GR.TR.IL.CY.MT`.split(`.`)},shipping_options:O.length>0?O:void 0,metadata:{orderId:w.id}});return await d.from(`orders`).update({stripe_session_id:e.id}).eq(`id`,w.id),{url:e.url}}catch(e){return console.error(`Stripe session creation failed:`,e),{error:e.message,url:null}}};exports.createCheckoutSession=a;
@@ -1,6 +1,7 @@
1
1
  import { getDefaultCurrency as e, resolveEffectivePriceForCurrency as t } from "../currency.es.js";
2
2
  import { resolveShippingOptions as n } from "../shipping/resolver.es.js";
3
3
  import { getStripeClient as r } from "./client.es.js";
4
+ import "server-only";
4
5
  import { verifyPackageOnline as i } from "@nextblock-cms/db/server";
5
6
  import { createClient as a } from "@supabase/supabase-js";
6
7
  //#region src/lib/stripe/checkout.ts
@@ -1 +1 @@
1
- const e=require("../customer.cjs"),t=require("../customer-addresses.cjs"),n=require("../order-tax-details.cjs"),r=require("./client.cjs"),i=require("../order-inventory.cjs"),a=require("../invoice-server.cjs");let o=require("@supabase/supabase-js");var s=[`total_details.breakdown`],c=[`data.taxes.rate`];function l(){let e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,t=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!t)throw Error(`Missing Supabase Service Role environment variables`);return(0,o.createClient)(e,t,{auth:{autoRefreshToken:!1,persistSession:!1}})}function u(t,n){return t?e.normalizeCustomerAddress({recipient_name:n,line1:t.line1??null,line2:t.line2??null,city:t.city??null,state:t.state??null,postal_code:t.postal_code??null,country_code:t.country??null}):null}function d(t){let n=t??{};return e.normalizeOrderCustomerDetails({email:typeof n.email==`string`?n.email:null,name:typeof n.name==`string`?n.name:null,phone:typeof n.phone==`string`?n.phone:null,billing:n.billing??null,shipping:n.shipping??null})}async function f(o){let f=l(),p=await r.getStripeClient(),m=o;try{m=await p.checkout.sessions.retrieve(o.id,{expand:[...s]})}catch(e){console.error(`[Stripe Sync] Failed to rehydrate session tax details:`,e)}let h=m.metadata?.orderId,g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`stripe_session_id`,o.id).maybeSingle();h&&(g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`id`,h).maybeSingle());let{data:_,error:v}=await g;if(v||!_)throw Error(v?.message||`Order lookup failed`);let y=d(_.customer_details),b=n.normalizeOrderTaxDetails(_.tax_details),x=u(m.customer_details?.address,m.customer_details?.name??y.name),S=m.shipping_details,C=m.collected_information?.shipping_details??S??null,w=u(C?.address,C?.name??y.name),T=e.normalizeOrderCustomerDetails({email:m.customer_details?.email??y.email,name:m.customer_details?.name??y.name,phone:m.customer_details?.phone??y.phone,billing:y.billing??x,shipping:y.shipping??w}),E=_.status===`paid`,D=await p.checkout.sessions.listLineItems(m.id,{limit:100,expand:[...c]}),O=n.buildOrderTaxDetailsFromStripeSession({session:m,lineItems:D.data,subtotal:typeof _.subtotal==`number`?_.subtotal:b?.subtotal??0,shippingTotal:typeof _.shipping_total==`number`?_.shipping_total:b?.shipping_total??0,fallbackMode:b?.mode??`automatic`,currency:(m.currency??_.currency??b?.currency??`USD`).toUpperCase()}),k=O.tax_total>0||O.lines.length>0?O:b??O,A=k?.tax_total??(typeof _.tax_total==`number`?_.tax_total:0),j=(m.currency??_.currency??k?.currency??`USD`).toUpperCase(),M={status:`paid`,stripe_session_id:m.id,payment_intent_id:typeof m.payment_intent==`string`?m.payment_intent:null,provider:`stripe`,customer_details:T,total:typeof m.amount_total==`number`?m.amount_total:_.total,currency:j,tax_total:A,tax_details:k},{error:N}=await f.from(`orders`).update(M).eq(`id`,_.id);if(N)throw Error(N.message);if(_.user_id)try{await t.upsertDefaultUserAddresses({userId:_.user_id,billingAddress:T.billing,shippingAddress:T.shipping,client:f})}catch(e){console.error(`[Stripe Sync] Failed to refresh saved customer addresses:`,e)}let P=await a.assignInvoiceMetadata({orderId:_.id,client:f});return await i.applyOrderInventoryDeduction(f,_.id),{orderId:_.id,alreadyPaid:E,customerDetails:T,order:{id:_.id,invoice_number:P.invoiceNumber,paid_at:P.paidAt,total:M.total,currency:j,subtotal:typeof _.subtotal==`number`?_.subtotal:k?.subtotal??0,shipping_total:typeof _.shipping_total==`number`?_.shipping_total:k?.shipping_total??0,tax_total:A,tax_details:k}}}exports.syncStripeOrderFromSession=f;
1
+ const e=require("../customer.cjs"),t=require("../customer-addresses.cjs"),n=require("../order-tax-details.cjs"),r=require("./client.cjs"),i=require("../order-inventory.cjs"),a=require("../invoice-server.cjs");require("server-only");let o=require("@supabase/supabase-js");var s=[`total_details.breakdown`],c=[`data.taxes.rate`];function l(){let e=process.env.NEXT_PUBLIC_SUPABASE_URL||process.env.SUPABASE_URL,t=process.env.SUPABASE_SERVICE_ROLE_KEY||process.env.SUPABASE_SECRET_KEY;if(!e||!t)throw Error(`Missing Supabase Service Role environment variables`);return(0,o.createClient)(e,t,{auth:{autoRefreshToken:!1,persistSession:!1}})}function u(t,n){return t?e.normalizeCustomerAddress({recipient_name:n,line1:t.line1??null,line2:t.line2??null,city:t.city??null,state:t.state??null,postal_code:t.postal_code??null,country_code:t.country??null}):null}function d(t){let n=t??{};return e.normalizeOrderCustomerDetails({email:typeof n.email==`string`?n.email:null,name:typeof n.name==`string`?n.name:null,phone:typeof n.phone==`string`?n.phone:null,billing:n.billing??null,shipping:n.shipping??null})}async function f(o){let f=l(),p=await r.getStripeClient(),m=o;try{m=await p.checkout.sessions.retrieve(o.id,{expand:[...s]})}catch(e){console.error(`[Stripe Sync] Failed to rehydrate session tax details:`,e)}let h=m.metadata?.orderId,g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`stripe_session_id`,o.id).maybeSingle();h&&(g=f.from(`orders`).select(`id, user_id, status, total, currency, subtotal, shipping_total, tax_total, tax_details, customer_details`).eq(`id`,h).maybeSingle());let{data:_,error:v}=await g;if(v||!_)throw Error(v?.message||`Order lookup failed`);let y=d(_.customer_details),b=n.normalizeOrderTaxDetails(_.tax_details),x=u(m.customer_details?.address,m.customer_details?.name??y.name),S=m.shipping_details,C=m.collected_information?.shipping_details??S??null,w=u(C?.address,C?.name??y.name),T=e.normalizeOrderCustomerDetails({email:m.customer_details?.email??y.email,name:m.customer_details?.name??y.name,phone:m.customer_details?.phone??y.phone,billing:y.billing??x,shipping:y.shipping??w}),E=_.status===`paid`,D=await p.checkout.sessions.listLineItems(m.id,{limit:100,expand:[...c]}),O=n.buildOrderTaxDetailsFromStripeSession({session:m,lineItems:D.data,subtotal:typeof _.subtotal==`number`?_.subtotal:b?.subtotal??0,shippingTotal:typeof _.shipping_total==`number`?_.shipping_total:b?.shipping_total??0,fallbackMode:b?.mode??`automatic`,currency:(m.currency??_.currency??b?.currency??`USD`).toUpperCase()}),k=O.tax_total>0||O.lines.length>0?O:b??O,A=k?.tax_total??(typeof _.tax_total==`number`?_.tax_total:0),j=(m.currency??_.currency??k?.currency??`USD`).toUpperCase(),M={status:`paid`,stripe_session_id:m.id,payment_intent_id:typeof m.payment_intent==`string`?m.payment_intent:null,provider:`stripe`,customer_details:T,total:typeof m.amount_total==`number`?m.amount_total:_.total,currency:j,tax_total:A,tax_details:k},{error:N}=await f.from(`orders`).update(M).eq(`id`,_.id);if(N)throw Error(N.message);if(_.user_id)try{await t.upsertDefaultUserAddresses({userId:_.user_id,billingAddress:T.billing,shippingAddress:T.shipping,client:f})}catch(e){console.error(`[Stripe Sync] Failed to refresh saved customer addresses:`,e)}let P=await a.assignInvoiceMetadata({orderId:_.id,client:f});return await i.applyOrderInventoryDeduction(f,_.id),{orderId:_.id,alreadyPaid:E,customerDetails:T,order:{id:_.id,invoice_number:P.invoiceNumber,paid_at:P.paidAt,total:M.total,currency:j,subtotal:typeof _.subtotal==`number`?_.subtotal:k?.subtotal??0,shipping_total:typeof _.shipping_total==`number`?_.shipping_total:k?.shipping_total??0,tax_total:A,tax_details:k}}}exports.syncStripeOrderFromSession=f;
@@ -4,6 +4,7 @@ import { buildOrderTaxDetailsFromStripeSession as r, normalizeOrderTaxDetails as
4
4
  import { getStripeClient as a } from "./client.es.js";
5
5
  import { applyOrderInventoryDeduction as o } from "../order-inventory.es.js";
6
6
  import { assignInvoiceMetadata as s } from "../invoice-server.es.js";
7
+ import "server-only";
7
8
  import { createClient as c } from "@supabase/supabase-js";
8
9
  //#region src/lib/stripe/order-sync.ts
9
10
  var l = ["total_details.breakdown"], u = ["data.taxes.rate"];
@@ -1 +1 @@
1
- const e=require("../payment-config.cjs"),t=require("./client.cjs"),n=require("./order-sync.cjs");var r=async(r,i)=>{let a=await e.resolveStripeWebhookSecret();if(!a)return console.error(`Missing Stripe webhook secret (configure it in CMS or STRIPE_WEBHOOK_SECRET)`),{received:!1,error:`Server configuration error`};let o=await t.getStripeClient(),s;try{s=o.webhooks.constructEvent(i,r,a)}catch(e){return console.error(`Webhook signature verification failed: ${e.message}`),{received:!1,error:`Webhook Error: ${e.message}`}}switch(s.type){case`checkout.session.completed`:{let e=s.data.object;try{await n.syncStripeOrderFromSession(e)}catch(e){return console.error(`[Stripe Webhook Error] Failed to sync completed session:`,e),{received:!1,error:e.message||`Failed to sync Stripe session`}}break}default:console.log(`Unhandled event type ${s.type}`)}return{received:!0}};exports.handleStripeWebhook=r;
1
+ const e=require("../payment-config.cjs"),t=require("./client.cjs"),n=require("./order-sync.cjs");function r(e){return e.payment_status===`paid`||e.payment_status===`no_payment_required`}var i=async(i,a)=>{let o=await e.resolveStripeWebhookSecret();if(!o)return console.error(`Missing Stripe webhook secret (configure it in CMS or STRIPE_WEBHOOK_SECRET)`),{received:!1,error:`Server configuration error`};let s=await t.getStripeClient(),c;try{c=s.webhooks.constructEvent(a,i,o)}catch(e){return console.error(`Webhook signature verification failed: ${e.message}`),{received:!1,error:`Webhook Error: ${e.message}`}}switch(c.type){case`checkout.session.completed`:case`checkout.session.async_payment_succeeded`:{let e=c.data.object;if(!r(e)){console.log(`[Stripe Webhook] Session ${e.id} is ${e.payment_status}; waiting for the payment to settle`);break}try{await n.syncStripeOrderFromSession(e)}catch(e){return console.error(`[Stripe Webhook Error] Failed to sync completed session:`,e),{received:!1,error:e.message||`Failed to sync Stripe session`}}break}case`checkout.session.async_payment_failed`:{let e=c.data.object;console.warn(`[Stripe Webhook] Delayed payment failed for session ${e.id}; order stays unpaid`);break}default:console.log(`Unhandled event type ${c.type}`)}return{received:!0}};exports.handleStripeWebhook=i,exports.isStripeSessionSettled=r;
@@ -1,3 +1,13 @@
1
+ import { default as Stripe } from 'stripe';
2
+ /**
3
+ * Only a session whose money has actually arrived may mark an order paid (which also issues the
4
+ * invoice and deducts stock). With a delayed payment method enabled in the Stripe dashboard
5
+ * (SEPA/ACH/Bacs debit, Boleto, OXXO, Konbini, bank transfer), `checkout.session.completed`
6
+ * arrives with `payment_status: 'unpaid'` and the money follows, or never does, in
7
+ * `checkout.session.async_payment_succeeded` / `_failed`. Until 2026-10-21 the completed event
8
+ * alone marked the order paid, so a buyer could pick a voucher, never pay, and receive the goods.
9
+ */
10
+ export declare function isStripeSessionSettled(session: Pick<Stripe.Checkout.Session, 'payment_status'>): boolean;
1
11
  export declare const handleStripeWebhook: (signature: string, body: string | Buffer) => Promise<{
2
12
  received: boolean;
3
13
  error?: string;
@@ -2,24 +2,32 @@ import { resolveStripeWebhookSecret as e } from "../payment-config.es.js";
2
2
  import { getStripeClient as t } from "./client.es.js";
3
3
  import { syncStripeOrderFromSession as n } from "./order-sync.es.js";
4
4
  //#region src/lib/stripe/webhooks.ts
5
- var r = async (r, i) => {
6
- let a = await e();
7
- if (!a) return console.error("Missing Stripe webhook secret (configure it in CMS or STRIPE_WEBHOOK_SECRET)"), {
5
+ function r(e) {
6
+ return e.payment_status === "paid" || e.payment_status === "no_payment_required";
7
+ }
8
+ var i = async (i, a) => {
9
+ let o = await e();
10
+ if (!o) return console.error("Missing Stripe webhook secret (configure it in CMS or STRIPE_WEBHOOK_SECRET)"), {
8
11
  received: !1,
9
12
  error: "Server configuration error"
10
13
  };
11
- let o = await t(), s;
14
+ let s = await t(), c;
12
15
  try {
13
- s = o.webhooks.constructEvent(i, r, a);
16
+ c = s.webhooks.constructEvent(a, i, o);
14
17
  } catch (e) {
15
18
  return console.error(`Webhook signature verification failed: ${e.message}`), {
16
19
  received: !1,
17
20
  error: `Webhook Error: ${e.message}`
18
21
  };
19
22
  }
20
- switch (s.type) {
21
- case "checkout.session.completed": {
22
- let e = s.data.object;
23
+ switch (c.type) {
24
+ case "checkout.session.completed":
25
+ case "checkout.session.async_payment_succeeded": {
26
+ let e = c.data.object;
27
+ if (!r(e)) {
28
+ console.log(`[Stripe Webhook] Session ${e.id} is ${e.payment_status}; waiting for the payment to settle`);
29
+ break;
30
+ }
23
31
  try {
24
32
  await n(e);
25
33
  } catch (e) {
@@ -30,9 +38,14 @@ var r = async (r, i) => {
30
38
  }
31
39
  break;
32
40
  }
33
- default: console.log(`Unhandled event type ${s.type}`);
41
+ case "checkout.session.async_payment_failed": {
42
+ let e = c.data.object;
43
+ console.warn(`[Stripe Webhook] Delayed payment failed for session ${e.id}; order stays unpaid`);
44
+ break;
45
+ }
46
+ default: console.log(`Unhandled event type ${c.type}`);
34
47
  }
35
48
  return { received: !0 };
36
49
  };
37
50
  //#endregion
38
- export { r as handleStripeWebhook };
51
+ export { i as handleStripeWebhook, r as isStripeSessionSettled };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextblock-cms/ecom",
3
- "version": "0.22.2",
3
+ "version": "0.22.3",
4
4
  "license": "AGPL-3.0-or-later",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -12,9 +12,9 @@
12
12
  },
13
13
  "type": "module",
14
14
  "dependencies": {
15
- "@nextblock-cms/db": "^0.22.2",
16
- "@nextblock-cms/ui": "^0.22.2",
17
- "@nextblock-cms/utils": "^0.22.2",
15
+ "@nextblock-cms/db": "^0.22.3",
16
+ "@nextblock-cms/ui": "^0.22.3",
17
+ "@nextblock-cms/utils": "^0.22.3",
18
18
  "@freemius/checkout": "^1.5.1",
19
19
  "@freemius/sdk": "^0.5.0",
20
20
  "@hookform/resolvers": "^5.9.1",
package/server.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./lib/currency.cjs"),t=require("./lib/currency-constants.cjs"),n=require("./lib/coupon-server.cjs"),r=require("./lib/customer.cjs"),i=require("./lib/customer-addresses.cjs"),a=require("./lib/product-actions.cjs"),o=require("./lib/payment-config.cjs"),s=require("./lib/order-access-token.cjs"),c=require("./lib/providers/freemius.cjs"),l=require("./lib/pages/cms/products/actions.cjs"),u=require("./lib/invoice.cjs"),d=require("./lib/order-tax-details.cjs"),f=require("./lib/product-schema.cjs"),p=require("./lib/freemius-coupons.cjs"),m=require("./lib/pages/cms/products/server-actions.cjs"),h=require("./lib/stripe/client.cjs"),g=require("./lib/stripe/checkout.cjs"),_=require("./lib/order-inventory.cjs"),v=require("./lib/invoice-server.cjs"),y=require("./lib/stripe/order-sync.cjs"),b=require("./lib/stripe/webhooks.cjs"),x=require("./lib/freemius-license.cjs"),S=require("./lib/customer-orders.cjs"),C=require("./lib/freemius-license-claim.cjs"),w=require("./lib/freemius-trial-provision.cjs"),T=require("./lib/currency-sync.cjs"),E=require("./lib/providers/stripe.cjs"),D=require("./lib/factory.cjs"),O=require("./lib/freemius-order-sync.cjs"),k=require("./lib/pages/cms/payments/queries.cjs"),A=require("./lib/pages/cms/orders/actions.cjs"),j=require("./lib/pages/cms/orders/export-actions.cjs"),M=require("./lib/pages/cms/orders/ExportReportsDialog.cjs"),N=require("./lib/pages/cms/orders/OrdersPage.cjs"),P=require("./lib/pages/cms/orders/OrderDetailPage.cjs");require("./lib/pages/cms/orders/index.cjs");const F=require("./lib/pages/cms/products/ProductsPage.cjs"),I=require("./lib/pages/cms/products/inventory/InventoryPage.cjs"),L=require("./lib/pages/cms/products/attributes/AttributeManagementPage.cjs"),R=require("./lib/pages/cms/products/new/NewProductPage.cjs"),z=require("./lib/pages/cms/products/[id]/edit/EditProductPage.cjs"),B=require("./lib/pages/cms/products/components/CopyProductFromLanguage.cjs"),V=require("./lib/pages/cms/products/categories/CategoryManagementPage.cjs");require("./lib/pages/cms/products/index.cjs");const H=require("./lib/pages/cms/payments/actions.cjs"),U=require("./lib/pages/cms/payments/PaymentsPage.cjs");require("./lib/pages/cms/payments/index.cjs");const W=require("./lib/pages/cms/shipping/server-actions.cjs"),G=require("./lib/pages/cms/shipping/ShippingPage.cjs");require("./lib/pages/cms/shipping/index.cjs");const K=require("./lib/pages/cms/taxes/actions.cjs"),q=require("./lib/pages/cms/taxes/TaxesPage.cjs");require("./lib/pages/cms/taxes/index.cjs");const J=require("./lib/pages/cms/coupons/CouponsPage.cjs"),Y=require("./lib/pages/cms/coupons/EditCouponPage.cjs");require("./lib/pages/cms/coupons/index.cjs"),exports.AttributeManagementPage=L.AttributeManagementPage,exports.COUPON_VALIDATION_UNKNOWN_CLIENT_KEY=n.COUPON_VALIDATION_UNKNOWN_CLIENT_KEY,exports.CURRENCY_COOKIE_NAME=t.CURRENCY_COOKIE_NAME,exports.CURRENCY_ROUNDING_MODES=e.CURRENCY_ROUNDING_MODES,exports.CategoryManagementPage=V.CategoryManagementPage,exports.CopyProductFromLanguage=B.CopyProductFromLanguage,exports.CouponsPage=J.CouponsPage,exports.DEFAULT_INVOICE_SETTINGS=u.DEFAULT_INVOICE_SETTINGS,exports.EditCouponPage=Y.EditCouponPage,exports.EditProductPage=z.EditProductPage,exports.ExportReportsDialog=M.ExportReportsDialog,exports.FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES=C.FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES,exports.FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE=C.FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE,exports.FREEMIUS_TRIAL_ALREADY_USED_MESSAGE=w.FREEMIUS_TRIAL_ALREADY_USED_MESSAGE,exports.FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE=w.FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE,exports.FreemiusProvider=c.FreemiusProvider,exports.INVOICE_SETTINGS_KEY=u.INVOICE_SETTINGS_KEY,exports.InventoryPage=I.InventoryPage,exports.NewProductPage=R.NewProductPage,exports.OrderDetailPage=P.OrderDetailPage,exports.OrdersPage=N.OrdersPage,exports.PaymentsPage=U.PaymentsPage,exports.ProductsPage=F.ProductsPage,exports.ShippingPage=G.ShippingPage,exports.StripeNotConfiguredError=h.StripeNotConfiguredError,exports.StripeProvider=E.StripeProvider,exports.TaxesPage=q.TaxesPage,exports.addressesMatch=r.addressesMatch,exports.aggregateOrderTaxLines=d.aggregateOrderTaxLines,exports.applyCurrencyRounding=e.applyCurrencyRounding,exports.applyOrderInventoryDeduction=_.applyOrderInventoryDeduction,exports.assignInvoiceMetadata=v.assignInvoiceMetadata,exports.buildOrderTaxDetailsFromCalculation=d.buildOrderTaxDetailsFromCalculation,exports.buildOrderTaxDetailsFromStripeSession=d.buildOrderTaxDetailsFromStripeSession,exports.claimFreemiusLicenseKey=C.claimFreemiusLicenseKey,exports.clearAutoSyncedCurrencyPriceOverrides=T.clearAutoSyncedCurrencyPriceOverrides,exports.clearPaymentConfigCache=o.clearPaymentConfigCache,exports.computeTrialExpiry=w.computeTrialExpiry,exports.consumeCouponValidationToken=n.consumeCouponValidationToken,exports.convertMinorUnitAmount=e.convertMinorUnitAmount,exports.copyProductFromLanguage=a.copyProductFromLanguage,exports.createCategoryAction=m.createCategoryAction,exports.createCheckoutSession=g.createCheckoutSession,exports.createCouponValidationThrottle=n.createCouponValidationThrottle,exports.createProduct=a.createProduct,exports.createProductAction=m.createProductAction,exports.createShippingRate=W.createShippingRate,exports.createShippingZone=W.createShippingZone,exports.deleteCategoryAction=m.deleteCategoryAction,exports.deleteCouponFromFreemius=p.deleteCouponFromFreemius,exports.deleteProduct=a.deleteProduct,exports.deleteProductAction=m.deleteProductAction,exports.deleteShippingRate=W.deleteShippingRate,exports.deleteShippingZone=W.deleteShippingZone,exports.deleteTaxRateAction=K.deleteTaxRateAction,exports.describeCurrencyRoundingRule=e.describeCurrencyRoundingRule,exports.emptyCustomerAddress=r.emptyCustomerAddress,exports.evaluateFreemiusLicenseClaim=C.evaluateFreemiusLicenseClaim,exports.evaluateTrialEligibility=w.evaluateTrialEligibility,exports.extractFreemiusCheckoutMetadata=O.extractFreemiusCheckoutMetadata,exports.fetchOrderReportData=j.fetchOrderReportData,exports.fetchTranslatedProductsForCartInternal=a.fetchTranslatedProductsForCartInternal,exports.fillMissingUserProfileCheckoutDetails=i.fillMissingUserProfileCheckoutDetails,exports.formatFreemiusTimestamp=w.formatFreemiusTimestamp,exports.formatInvoiceCurrency=u.formatInvoiceCurrency,exports.formatInvoiceDate=u.formatInvoiceDate,exports.getCategoriesWithCount=l.getCategoriesWithCount,exports.getCategoryBySlug=l.getCategoryBySlug,exports.getCmsProduct=l.getProduct,exports.getCmsProducts=l.getProducts,exports.getCouponQuote=n.getCouponQuote,exports.getCurrencyLookup=e.getCurrencyLookup,exports.getCurrentCustomerOrder=S.getCurrentCustomerOrder,exports.getCurrentCustomerOrderInvoice=S.getCurrentCustomerOrderInvoice,exports.getCurrentCustomerOrders=S.getCurrentCustomerOrders,exports.getDefaultCurrency=e.getDefaultCurrency,exports.getDefaultUserAddresses=i.getDefaultUserAddresses,exports.getEnabledPaymentProviders=k.getEnabledPaymentProviders,exports.getExchangeRateForCurrency=e.getExchangeRateForCurrency,exports.getFreemiusOrderLicense=x.getFreemiusOrderLicense,exports.getFreemiusWebhookSecretCandidates=O.getFreemiusWebhookSecretCandidates,exports.getGlobalProductAttributes=l.getGlobalProductAttributes,exports.getInvoiceAddressLines=u.getInvoiceAddressLines,exports.getInvoiceBrandingData=v.getInvoiceBrandingData,exports.getInvoiceOrder=v.getInvoiceOrder,exports.getInvoicePresentationData=v.getInvoicePresentationData,exports.getOrderDetails=A.getOrderDetails,exports.getOrderTaxRateJurisdiction=d.getOrderTaxRateJurisdiction,exports.getOrderTaxRateLabel=d.getOrderTaxRateLabel,exports.getOrderTaxRatePercentage=d.getOrderTaxRatePercentage,exports.getOrders=A.getOrders,exports.getPaymentConfigStatus=o.getPaymentConfigStatus,exports.getPaymentCredentialsView=o.getPaymentCredentialsView,exports.getPaymentProvider=D.getPaymentProvider,exports.getPaymentSettings=k.getPaymentSettings,exports.getProduct=a.getProduct,exports.getProductBySlug=a.getProductBySlug,exports.getProductCategories=l.getProductCategories,exports.getProductTranslations=l.getProductTranslations,exports.getProducts=a.getProducts,exports.getProviderReadiness=k.getProviderReadiness,exports.getQuoteLineDiscountMap=n.getQuoteLineDiscountMap,exports.getReadinessForProductType=k.getReadinessForProductType,exports.getStoreConfigStatus=k.getStoreConfigStatus,exports.getStoreReadiness=k.getStoreReadiness,exports.getStripeClient=h.getStripeClient,exports.handleStripeWebhook=b.handleStripeWebhook,exports.hydrateFreemiusEnvFromDb=o.hydrateFreemiusEnvFromDb,exports.inferCurrencyCodeFromLocale=e.inferCurrencyCodeFromLocale,exports.isCustomerAddressComplete=r.isCustomerAddressComplete,exports.isSaleWindowActive=e.isSaleWindowActive,exports.isScheduledPriceDue=e.isScheduledPriceDue,exports.mintOrderAccessToken=s.mintOrderAccessToken,exports.normalizeCurrencyRecord=e.normalizeCurrencyRecord,exports.normalizeCurrencyRoundingMode=e.normalizeCurrencyRoundingMode,exports.normalizeCustomerAddress=r.normalizeCustomerAddress,exports.normalizeInvoiceSettings=u.normalizeInvoiceSettings,exports.normalizeOrderCustomerDetails=r.normalizeOrderCustomerDetails,exports.normalizeOrderTaxDetails=d.normalizeOrderTaxDetails,exports.normalizePriceMap=e.normalizePriceMap,exports.normalizeSalePriceMap=e.normalizeSalePriceMap,exports.parseFreemiusCheckoutCredentialsMap=c.parseFreemiusCheckoutCredentialsMap,exports.parseFreemiusTimestamp=C.parseFreemiusTimestamp,exports.pickTrialPricing=w.pickTrialPricing,exports.productSchema=f.productSchema,exports.provisionFreemiusTrialLicense=w.provisionFreemiusTrialLicense,exports.publishProductAction=m.publishProductAction,exports.readFreemiusEnvValue=c.readFreemiusEnvValue,exports.rebaseStoreCurrencyExchangeRates=T.rebaseStoreCurrencyExchangeRates,exports.recordCouponRedemption=n.recordCouponRedemption,exports.resolveCouponValidationThrottleKey=n.resolveCouponValidationThrottleKey,exports.resolveEffectivePriceForCurrency=e.resolveEffectivePriceForCurrency,exports.resolveFreemiusCheckoutCredentials=c.resolveFreemiusCheckoutCredentials,exports.resolveFreemiusStatusFromCheckoutResponse=O.resolveFreemiusStatusFromCheckoutResponse,exports.resolveFreemiusStatusFromWebhookEvent=O.resolveFreemiusStatusFromWebhookEvent,exports.resolvePriceForCurrency=e.resolvePriceForCurrency,exports.resolvePriceRangeForCurrency=e.resolvePriceRangeForCurrency,exports.resolveStripePublishableKey=o.resolveStripePublishableKey,exports.resolveStripeSecretKey=o.resolveStripeSecretKey,exports.resolveStripeWebhookSecret=o.resolveStripeWebhookSecret,exports.savePaymentCredentials=o.savePaymentCredentials,exports.savePaymentProviderCredentials=H.savePaymentProviderCredentials,exports.saveTaxRateAction=K.saveTaxRateAction,exports.serializeInvoiceSettings=u.serializeInvoiceSettings,exports.sortCurrencies=e.sortCurrencies,exports.syncCategoriesForTranslationGroup=a.syncCategoriesForTranslationGroup,exports.syncCouponToFreemius=p.syncCouponToFreemius,exports.syncFreemiusCheckoutOrder=O.syncFreemiusCheckoutOrder,exports.syncFreemiusOrderFromWebhookEvent=O.syncFreemiusOrderFromWebhookEvent,exports.syncFreemiusProductsToSupabase=c.syncFreemiusProductsToSupabase,exports.syncProductCategoriesAction=m.syncProductCategoriesAction,exports.syncProductSaleCouponToFreemius=p.syncProductSaleCouponToFreemius,exports.syncSingleFreemiusProduct=c.syncSingleFreemiusProduct,exports.syncStoreCurrencyRates=T.syncStoreCurrencyRates,exports.syncStripeOrderFromSession=y.syncStripeOrderFromSession,exports.updateCategoryAction=m.updateCategoryAction,exports.updateInventoryTrackingAction=W.updateInventoryTrackingAction,exports.updatePaymentSettings=H.updatePaymentSettings,exports.updateProduct=a.updateProduct,exports.updateProductAction=m.updateProductAction,exports.updateShippingRate=W.updateShippingRate,exports.updateShippingZone=W.updateShippingZone,exports.updateTaxSettingsAction=K.updateTaxSettingsAction,exports.upsertDefaultUserAddresses=i.upsertDefaultUserAddresses,exports.verifyFreemiusWebhookSignature=O.verifyFreemiusWebhookSignature,exports.verifyOrderAccessToken=s.verifyOrderAccessToken;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./lib/currency.cjs"),t=require("./lib/currency-constants.cjs"),n=require("./lib/coupon-server.cjs"),r=require("./lib/customer.cjs"),i=require("./lib/customer-addresses.cjs"),a=require("./lib/product-actions.cjs"),o=require("./lib/payment-config.cjs"),s=require("./lib/order-access-token.cjs"),c=require("./lib/providers/freemius.cjs"),l=require("./lib/pages/cms/products/actions.cjs"),u=require("./lib/invoice.cjs"),d=require("./lib/order-tax-details.cjs"),f=require("./lib/product-schema.cjs"),p=require("./lib/freemius-coupons.cjs"),m=require("./lib/pages/cms/products/server-actions.cjs"),h=require("./lib/stripe/client.cjs"),g=require("./lib/stripe/checkout.cjs"),_=require("./lib/order-inventory.cjs"),v=require("./lib/invoice-server.cjs"),y=require("./lib/stripe/order-sync.cjs"),b=require("./lib/stripe/webhooks.cjs"),x=require("./lib/freemius-license-claim.cjs"),S=require("./lib/freemius-license.cjs"),C=require("./lib/customer-orders.cjs"),w=require("./lib/freemius-trial-provision.cjs"),T=require("./lib/currency-sync.cjs"),E=require("./lib/providers/stripe.cjs"),D=require("./lib/factory.cjs"),O=require("./lib/freemius-order-sync.cjs"),k=require("./lib/pages/cms/payments/queries.cjs"),A=require("./lib/pages/cms/orders/actions.cjs"),j=require("./lib/pages/cms/orders/export-actions.cjs"),M=require("./lib/pages/cms/orders/ExportReportsDialog.cjs"),N=require("./lib/pages/cms/orders/OrdersPage.cjs"),P=require("./lib/pages/cms/orders/OrderDetailPage.cjs");require("./lib/pages/cms/orders/index.cjs");const F=require("./lib/pages/cms/products/ProductsPage.cjs"),I=require("./lib/pages/cms/products/inventory/InventoryPage.cjs"),L=require("./lib/pages/cms/products/attributes/AttributeManagementPage.cjs"),R=require("./lib/pages/cms/products/new/NewProductPage.cjs"),z=require("./lib/pages/cms/products/[id]/edit/EditProductPage.cjs"),B=require("./lib/pages/cms/products/components/CopyProductFromLanguage.cjs"),V=require("./lib/pages/cms/products/categories/CategoryManagementPage.cjs");require("./lib/pages/cms/products/index.cjs");const H=require("./lib/pages/cms/payments/actions.cjs"),U=require("./lib/pages/cms/payments/PaymentsPage.cjs");require("./lib/pages/cms/payments/index.cjs");const W=require("./lib/pages/cms/shipping/server-actions.cjs"),G=require("./lib/pages/cms/shipping/ShippingPage.cjs");require("./lib/pages/cms/shipping/index.cjs");const K=require("./lib/pages/cms/taxes/actions.cjs"),q=require("./lib/pages/cms/taxes/TaxesPage.cjs");require("./lib/pages/cms/taxes/index.cjs");const J=require("./lib/pages/cms/coupons/CouponsPage.cjs"),Y=require("./lib/pages/cms/coupons/EditCouponPage.cjs");require("./lib/pages/cms/coupons/index.cjs"),exports.AttributeManagementPage=L.AttributeManagementPage,exports.COUPON_VALIDATION_UNKNOWN_CLIENT_KEY=n.COUPON_VALIDATION_UNKNOWN_CLIENT_KEY,exports.CURRENCY_COOKIE_NAME=t.CURRENCY_COOKIE_NAME,exports.CURRENCY_ROUNDING_MODES=e.CURRENCY_ROUNDING_MODES,exports.CategoryManagementPage=V.CategoryManagementPage,exports.CopyProductFromLanguage=B.CopyProductFromLanguage,exports.CouponsPage=J.CouponsPage,exports.DEFAULT_INVOICE_SETTINGS=u.DEFAULT_INVOICE_SETTINGS,exports.EditCouponPage=Y.EditCouponPage,exports.EditProductPage=z.EditProductPage,exports.ExportReportsDialog=M.ExportReportsDialog,exports.FREEMIUS_CHECKOUT_SYNC_REFUSED_MESSAGE=O.FREEMIUS_CHECKOUT_SYNC_REFUSED_MESSAGE,exports.FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES=x.FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES,exports.FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE=x.FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE,exports.FREEMIUS_TRIAL_ALREADY_USED_MESSAGE=w.FREEMIUS_TRIAL_ALREADY_USED_MESSAGE,exports.FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE=w.FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE,exports.FreemiusProvider=c.FreemiusProvider,exports.INVOICE_SETTINGS_KEY=u.INVOICE_SETTINGS_KEY,exports.InventoryPage=I.InventoryPage,exports.NewProductPage=R.NewProductPage,exports.OrderDetailPage=P.OrderDetailPage,exports.OrdersPage=N.OrdersPage,exports.PaymentsPage=U.PaymentsPage,exports.ProductsPage=F.ProductsPage,exports.ShippingPage=G.ShippingPage,exports.StripeNotConfiguredError=h.StripeNotConfiguredError,exports.StripeProvider=E.StripeProvider,exports.TaxesPage=q.TaxesPage,exports.addressesMatch=r.addressesMatch,exports.aggregateOrderTaxLines=d.aggregateOrderTaxLines,exports.applyCurrencyRounding=e.applyCurrencyRounding,exports.applyOrderInventoryDeduction=_.applyOrderInventoryDeduction,exports.assignInvoiceMetadata=v.assignInvoiceMetadata,exports.buildOrderTaxDetailsFromCalculation=d.buildOrderTaxDetailsFromCalculation,exports.buildOrderTaxDetailsFromStripeSession=d.buildOrderTaxDetailsFromStripeSession,exports.claimFreemiusLicenseKey=x.claimFreemiusLicenseKey,exports.clearAutoSyncedCurrencyPriceOverrides=T.clearAutoSyncedCurrencyPriceOverrides,exports.clearPaymentConfigCache=o.clearPaymentConfigCache,exports.computeTrialExpiry=w.computeTrialExpiry,exports.consumeCouponValidationToken=n.consumeCouponValidationToken,exports.convertMinorUnitAmount=e.convertMinorUnitAmount,exports.copyProductFromLanguage=a.copyProductFromLanguage,exports.createCategoryAction=m.createCategoryAction,exports.createCheckoutSession=g.createCheckoutSession,exports.createCouponValidationThrottle=n.createCouponValidationThrottle,exports.createProduct=a.createProduct,exports.createProductAction=m.createProductAction,exports.createShippingRate=W.createShippingRate,exports.createShippingZone=W.createShippingZone,exports.deleteCategoryAction=m.deleteCategoryAction,exports.deleteCouponFromFreemius=p.deleteCouponFromFreemius,exports.deleteProduct=a.deleteProduct,exports.deleteProductAction=m.deleteProductAction,exports.deleteShippingRate=W.deleteShippingRate,exports.deleteShippingZone=W.deleteShippingZone,exports.deleteTaxRateAction=K.deleteTaxRateAction,exports.describeCurrencyRoundingRule=e.describeCurrencyRoundingRule,exports.emptyCustomerAddress=r.emptyCustomerAddress,exports.evaluateFreemiusCheckoutLicense=O.evaluateFreemiusCheckoutLicense,exports.evaluateFreemiusLicenseClaim=x.evaluateFreemiusLicenseClaim,exports.evaluateTrialEligibility=w.evaluateTrialEligibility,exports.extractFreemiusCheckoutMetadata=O.extractFreemiusCheckoutMetadata,exports.fetchOrderReportData=j.fetchOrderReportData,exports.fetchTranslatedProductsForCartInternal=a.fetchTranslatedProductsForCartInternal,exports.fillMissingUserProfileCheckoutDetails=i.fillMissingUserProfileCheckoutDetails,exports.formatFreemiusTimestamp=w.formatFreemiusTimestamp,exports.formatInvoiceCurrency=u.formatInvoiceCurrency,exports.formatInvoiceDate=u.formatInvoiceDate,exports.getCategoriesWithCount=l.getCategoriesWithCount,exports.getCategoryBySlug=l.getCategoryBySlug,exports.getCmsProduct=l.getProduct,exports.getCmsProducts=l.getProducts,exports.getCouponQuote=n.getCouponQuote,exports.getCurrencyLookup=e.getCurrencyLookup,exports.getCurrentCustomerOrder=C.getCurrentCustomerOrder,exports.getCurrentCustomerOrderInvoice=C.getCurrentCustomerOrderInvoice,exports.getCurrentCustomerOrders=C.getCurrentCustomerOrders,exports.getDefaultCurrency=e.getDefaultCurrency,exports.getDefaultUserAddresses=i.getDefaultUserAddresses,exports.getEnabledPaymentProviders=k.getEnabledPaymentProviders,exports.getExchangeRateForCurrency=e.getExchangeRateForCurrency,exports.getFreemiusOrderLicense=S.getFreemiusOrderLicense,exports.getFreemiusWebhookSecretCandidates=O.getFreemiusWebhookSecretCandidates,exports.getGlobalProductAttributes=l.getGlobalProductAttributes,exports.getInvoiceAddressLines=u.getInvoiceAddressLines,exports.getInvoiceBrandingData=v.getInvoiceBrandingData,exports.getInvoiceOrder=v.getInvoiceOrder,exports.getInvoicePresentationData=v.getInvoicePresentationData,exports.getOrderDetails=A.getOrderDetails,exports.getOrderTaxRateJurisdiction=d.getOrderTaxRateJurisdiction,exports.getOrderTaxRateLabel=d.getOrderTaxRateLabel,exports.getOrderTaxRatePercentage=d.getOrderTaxRatePercentage,exports.getOrders=A.getOrders,exports.getPaymentConfigStatus=o.getPaymentConfigStatus,exports.getPaymentCredentialsView=o.getPaymentCredentialsView,exports.getPaymentProvider=D.getPaymentProvider,exports.getPaymentSettings=k.getPaymentSettings,exports.getProduct=a.getProduct,exports.getProductBySlug=a.getProductBySlug,exports.getProductCategories=l.getProductCategories,exports.getProductTranslations=l.getProductTranslations,exports.getProducts=a.getProducts,exports.getProviderReadiness=k.getProviderReadiness,exports.getQuoteLineDiscountMap=n.getQuoteLineDiscountMap,exports.getReadinessForProductType=k.getReadinessForProductType,exports.getStoreConfigStatus=k.getStoreConfigStatus,exports.getStoreReadiness=k.getStoreReadiness,exports.getStripeClient=h.getStripeClient,exports.handleStripeWebhook=b.handleStripeWebhook,exports.hydrateFreemiusEnvFromDb=o.hydrateFreemiusEnvFromDb,exports.inferCurrencyCodeFromLocale=e.inferCurrencyCodeFromLocale,exports.isCustomerAddressComplete=r.isCustomerAddressComplete,exports.isSaleWindowActive=e.isSaleWindowActive,exports.isScheduledPriceDue=e.isScheduledPriceDue,exports.isStripeSessionSettled=b.isStripeSessionSettled,exports.mintOrderAccessToken=s.mintOrderAccessToken,exports.normalizeCurrencyRecord=e.normalizeCurrencyRecord,exports.normalizeCurrencyRoundingMode=e.normalizeCurrencyRoundingMode,exports.normalizeCustomerAddress=r.normalizeCustomerAddress,exports.normalizeInvoiceSettings=u.normalizeInvoiceSettings,exports.normalizeOrderCustomerDetails=r.normalizeOrderCustomerDetails,exports.normalizeOrderTaxDetails=d.normalizeOrderTaxDetails,exports.normalizePriceMap=e.normalizePriceMap,exports.normalizeSalePriceMap=e.normalizeSalePriceMap,exports.parseFreemiusCheckoutCredentialsMap=c.parseFreemiusCheckoutCredentialsMap,exports.parseFreemiusTimestamp=x.parseFreemiusTimestamp,exports.pickTrialPricing=w.pickTrialPricing,exports.productSchema=f.productSchema,exports.provisionFreemiusTrialLicense=w.provisionFreemiusTrialLicense,exports.publishProductAction=m.publishProductAction,exports.readFreemiusEnvValue=c.readFreemiusEnvValue,exports.rebaseStoreCurrencyExchangeRates=T.rebaseStoreCurrencyExchangeRates,exports.recordCouponRedemption=n.recordCouponRedemption,exports.resolveCouponValidationThrottleKey=n.resolveCouponValidationThrottleKey,exports.resolveEffectivePriceForCurrency=e.resolveEffectivePriceForCurrency,exports.resolveFreemiusCheckoutCredentials=c.resolveFreemiusCheckoutCredentials,exports.resolveFreemiusStatusFromCheckoutResponse=O.resolveFreemiusStatusFromCheckoutResponse,exports.resolveFreemiusStatusFromWebhookEvent=O.resolveFreemiusStatusFromWebhookEvent,exports.resolvePriceForCurrency=e.resolvePriceForCurrency,exports.resolvePriceRangeForCurrency=e.resolvePriceRangeForCurrency,exports.resolveStripePublishableKey=o.resolveStripePublishableKey,exports.resolveStripeSecretKey=o.resolveStripeSecretKey,exports.resolveStripeWebhookSecret=o.resolveStripeWebhookSecret,exports.retrieveFreemiusLicenseRecords=x.retrieveFreemiusLicenseRecords,exports.savePaymentCredentials=o.savePaymentCredentials,exports.savePaymentProviderCredentials=H.savePaymentProviderCredentials,exports.saveTaxRateAction=K.saveTaxRateAction,exports.serializeInvoiceSettings=u.serializeInvoiceSettings,exports.sortCurrencies=e.sortCurrencies,exports.syncCategoriesForTranslationGroup=a.syncCategoriesForTranslationGroup,exports.syncCouponToFreemius=p.syncCouponToFreemius,exports.syncFreemiusCheckoutOrder=O.syncFreemiusCheckoutOrder,exports.syncFreemiusOrderFromWebhookEvent=O.syncFreemiusOrderFromWebhookEvent,exports.syncFreemiusProductsToSupabase=c.syncFreemiusProductsToSupabase,exports.syncProductCategoriesAction=m.syncProductCategoriesAction,exports.syncProductSaleCouponToFreemius=p.syncProductSaleCouponToFreemius,exports.syncSingleFreemiusProduct=c.syncSingleFreemiusProduct,exports.syncStoreCurrencyRates=T.syncStoreCurrencyRates,exports.syncStripeOrderFromSession=y.syncStripeOrderFromSession,exports.updateCategoryAction=m.updateCategoryAction,exports.updateInventoryTrackingAction=W.updateInventoryTrackingAction,exports.updatePaymentSettings=H.updatePaymentSettings,exports.updateProduct=a.updateProduct,exports.updateProductAction=m.updateProductAction,exports.updateShippingRate=W.updateShippingRate,exports.updateShippingZone=W.updateShippingZone,exports.updateTaxSettingsAction=K.updateTaxSettingsAction,exports.upsertDefaultUserAddresses=i.upsertDefaultUserAddresses,exports.verifyFreemiusWebhookSignature=O.verifyFreemiusWebhookSignature,exports.verifyOrderAccessToken=s.verifyOrderAccessToken;
package/server.es.js CHANGED
@@ -18,40 +18,40 @@ import { createCheckoutSession as Be } from "./lib/stripe/checkout.es.js";
18
18
  import { applyOrderInventoryDeduction as Ve } from "./lib/order-inventory.es.js";
19
19
  import { assignInvoiceMetadata as He, getInvoiceBrandingData as Ue, getInvoiceOrder as We, getInvoicePresentationData as Ge } from "./lib/invoice-server.es.js";
20
20
  import { syncStripeOrderFromSession as Ke } from "./lib/stripe/order-sync.es.js";
21
- import { handleStripeWebhook as qe } from "./lib/stripe/webhooks.es.js";
22
- import { getFreemiusOrderLicense as Je } from "./lib/freemius-license.es.js";
23
- import { getCurrentCustomerOrder as Ye, getCurrentCustomerOrderInvoice as Xe, getCurrentCustomerOrders as Ze } from "./lib/customer-orders.es.js";
24
- import { FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES as Qe, FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE as $e, claimFreemiusLicenseKey as et, evaluateFreemiusLicenseClaim as tt, parseFreemiusTimestamp as nt } from "./lib/freemius-license-claim.es.js";
25
- import { FREEMIUS_TRIAL_ALREADY_USED_MESSAGE as rt, FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE as it, computeTrialExpiry as at, evaluateTrialEligibility as ot, formatFreemiusTimestamp as st, pickTrialPricing as ct, provisionFreemiusTrialLicense as lt } from "./lib/freemius-trial-provision.es.js";
26
- import { clearAutoSyncedCurrencyPriceOverrides as ut, rebaseStoreCurrencyExchangeRates as dt, syncStoreCurrencyRates as ft } from "./lib/currency-sync.es.js";
27
- import { StripeProvider as pt } from "./lib/providers/stripe.es.js";
28
- import { getPaymentProvider as mt } from "./lib/factory.es.js";
29
- import { extractFreemiusCheckoutMetadata as ht, getFreemiusWebhookSecretCandidates as gt, resolveFreemiusStatusFromCheckoutResponse as _t, resolveFreemiusStatusFromWebhookEvent as vt, syncFreemiusCheckoutOrder as yt, syncFreemiusOrderFromWebhookEvent as bt, verifyFreemiusWebhookSignature as xt } from "./lib/freemius-order-sync.es.js";
30
- import { getEnabledPaymentProviders as St, getPaymentSettings as Ct, getProviderReadiness as wt, getReadinessForProductType as Tt, getStoreConfigStatus as Et, getStoreReadiness as Dt } from "./lib/pages/cms/payments/queries.es.js";
31
- import { getOrderDetails as Ot, getOrders as kt } from "./lib/pages/cms/orders/actions.es.js";
32
- import { fetchOrderReportData as At } from "./lib/pages/cms/orders/export-actions.es.js";
33
- import { ExportReportsDialog as jt } from "./lib/pages/cms/orders/ExportReportsDialog.es.js";
34
- import { OrdersPage as Mt } from "./lib/pages/cms/orders/OrdersPage.es.js";
35
- import { OrderDetailPage as Nt } from "./lib/pages/cms/orders/OrderDetailPage.es.js";
21
+ import { handleStripeWebhook as qe, isStripeSessionSettled as Je } from "./lib/stripe/webhooks.es.js";
22
+ import { FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES as Ye, FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE as Xe, claimFreemiusLicenseKey as Ze, evaluateFreemiusLicenseClaim as Qe, parseFreemiusTimestamp as $e, retrieveFreemiusLicenseRecords as et } from "./lib/freemius-license-claim.es.js";
23
+ import { getFreemiusOrderLicense as tt } from "./lib/freemius-license.es.js";
24
+ import { getCurrentCustomerOrder as nt, getCurrentCustomerOrderInvoice as rt, getCurrentCustomerOrders as it } from "./lib/customer-orders.es.js";
25
+ import { FREEMIUS_TRIAL_ALREADY_USED_MESSAGE as at, FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE as ot, computeTrialExpiry as st, evaluateTrialEligibility as ct, formatFreemiusTimestamp as lt, pickTrialPricing as ut, provisionFreemiusTrialLicense as dt } from "./lib/freemius-trial-provision.es.js";
26
+ import { clearAutoSyncedCurrencyPriceOverrides as ft, rebaseStoreCurrencyExchangeRates as pt, syncStoreCurrencyRates as mt } from "./lib/currency-sync.es.js";
27
+ import { StripeProvider as ht } from "./lib/providers/stripe.es.js";
28
+ import { getPaymentProvider as gt } from "./lib/factory.es.js";
29
+ import { FREEMIUS_CHECKOUT_SYNC_REFUSED_MESSAGE as _t, evaluateFreemiusCheckoutLicense as vt, extractFreemiusCheckoutMetadata as yt, getFreemiusWebhookSecretCandidates as bt, resolveFreemiusStatusFromCheckoutResponse as xt, resolveFreemiusStatusFromWebhookEvent as St, syncFreemiusCheckoutOrder as Ct, syncFreemiusOrderFromWebhookEvent as wt, verifyFreemiusWebhookSignature as Tt } from "./lib/freemius-order-sync.es.js";
30
+ import { getEnabledPaymentProviders as Et, getPaymentSettings as Dt, getProviderReadiness as Ot, getReadinessForProductType as kt, getStoreConfigStatus as At, getStoreReadiness as jt } from "./lib/pages/cms/payments/queries.es.js";
31
+ import { getOrderDetails as Mt, getOrders as Nt } from "./lib/pages/cms/orders/actions.es.js";
32
+ import { fetchOrderReportData as Pt } from "./lib/pages/cms/orders/export-actions.es.js";
33
+ import { ExportReportsDialog as Ft } from "./lib/pages/cms/orders/ExportReportsDialog.es.js";
34
+ import { OrdersPage as It } from "./lib/pages/cms/orders/OrdersPage.es.js";
35
+ import { OrderDetailPage as Lt } from "./lib/pages/cms/orders/OrderDetailPage.es.js";
36
36
  import "./lib/pages/cms/orders/index.es.js";
37
- import { ProductsPage as Pt } from "./lib/pages/cms/products/ProductsPage.es.js";
38
- import { InventoryPage as Ft } from "./lib/pages/cms/products/inventory/InventoryPage.es.js";
39
- import { AttributeManagementPage as It } from "./lib/pages/cms/products/attributes/AttributeManagementPage.es.js";
40
- import { NewProductPage as Lt } from "./lib/pages/cms/products/new/NewProductPage.es.js";
41
- import { EditProductPage as Rt } from "./lib/pages/cms/products/[id]/edit/EditProductPage.es.js";
42
- import { CopyProductFromLanguage as zt } from "./lib/pages/cms/products/components/CopyProductFromLanguage.es.js";
43
- import { CategoryManagementPage as Bt } from "./lib/pages/cms/products/categories/CategoryManagementPage.es.js";
37
+ import { ProductsPage as Rt } from "./lib/pages/cms/products/ProductsPage.es.js";
38
+ import { InventoryPage as zt } from "./lib/pages/cms/products/inventory/InventoryPage.es.js";
39
+ import { AttributeManagementPage as Bt } from "./lib/pages/cms/products/attributes/AttributeManagementPage.es.js";
40
+ import { NewProductPage as Vt } from "./lib/pages/cms/products/new/NewProductPage.es.js";
41
+ import { EditProductPage as Ht } from "./lib/pages/cms/products/[id]/edit/EditProductPage.es.js";
42
+ import { CopyProductFromLanguage as Ut } from "./lib/pages/cms/products/components/CopyProductFromLanguage.es.js";
43
+ import { CategoryManagementPage as Wt } from "./lib/pages/cms/products/categories/CategoryManagementPage.es.js";
44
44
  import "./lib/pages/cms/products/index.es.js";
45
- import { savePaymentProviderCredentials as Vt, updatePaymentSettings as Ht } from "./lib/pages/cms/payments/actions.es.js";
46
- import { PaymentsPage as Ut } from "./lib/pages/cms/payments/PaymentsPage.es.js";
45
+ import { savePaymentProviderCredentials as Gt, updatePaymentSettings as Kt } from "./lib/pages/cms/payments/actions.es.js";
46
+ import { PaymentsPage as qt } from "./lib/pages/cms/payments/PaymentsPage.es.js";
47
47
  import "./lib/pages/cms/payments/index.es.js";
48
- import { createShippingRate as Wt, createShippingZone as Gt, deleteShippingRate as Kt, deleteShippingZone as qt, updateInventoryTrackingAction as Jt, updateShippingRate as Yt, updateShippingZone as Xt } from "./lib/pages/cms/shipping/server-actions.es.js";
49
- import { ShippingPage as Zt } from "./lib/pages/cms/shipping/ShippingPage.es.js";
48
+ import { createShippingRate as Jt, createShippingZone as Yt, deleteShippingRate as Xt, deleteShippingZone as Zt, updateInventoryTrackingAction as Qt, updateShippingRate as $t, updateShippingZone as en } from "./lib/pages/cms/shipping/server-actions.es.js";
49
+ import { ShippingPage as tn } from "./lib/pages/cms/shipping/ShippingPage.es.js";
50
50
  import "./lib/pages/cms/shipping/index.es.js";
51
- import { deleteTaxRateAction as Qt, saveTaxRateAction as $t, updateTaxSettingsAction as en } from "./lib/pages/cms/taxes/actions.es.js";
52
- import { TaxesPage as tn } from "./lib/pages/cms/taxes/TaxesPage.es.js";
51
+ import { deleteTaxRateAction as nn, saveTaxRateAction as rn, updateTaxSettingsAction as an } from "./lib/pages/cms/taxes/actions.es.js";
52
+ import { TaxesPage as on } from "./lib/pages/cms/taxes/TaxesPage.es.js";
53
53
  import "./lib/pages/cms/taxes/index.es.js";
54
- import { CouponsPage as nn } from "./lib/pages/cms/coupons/CouponsPage.es.js";
55
- import { EditCouponPage as rn } from "./lib/pages/cms/coupons/EditCouponPage.es.js";
54
+ import { CouponsPage as sn } from "./lib/pages/cms/coupons/CouponsPage.es.js";
55
+ import { EditCouponPage as cn } from "./lib/pages/cms/coupons/EditCouponPage.es.js";
56
56
  import "./lib/pages/cms/coupons/index.es.js";
57
- export { It as AttributeManagementPage, y as COUPON_VALIDATION_UNKNOWN_CLIENT_KEY, v as CURRENCY_COOKIE_NAME, e as CURRENCY_ROUNDING_MODES, Bt as CategoryManagementPage, zt as CopyProductFromLanguage, nn as CouponsPage, fe as DEFAULT_INVOICE_SETTINGS, rn as EditCouponPage, Rt as EditProductPage, jt as ExportReportsDialog, Qe as FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES, $e as FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE, rt as FREEMIUS_TRIAL_ALREADY_USED_MESSAGE, it as FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE, $ as FreemiusProvider, pe as INVOICE_SETTINGS_KEY, Ft as InventoryPage, Lt as NewProductPage, Nt as OrderDetailPage, Mt as OrdersPage, Ut as PaymentsPage, Pt as ProductsPage, Zt as ShippingPage, Re as StripeNotConfiguredError, pt as StripeProvider, tn as TaxesPage, E as addressesMatch, ye as aggregateOrderTaxLines, t as applyCurrencyRounding, Ve as applyOrderInventoryDeduction, He as assignInvoiceMetadata, be as buildOrderTaxDetailsFromCalculation, xe as buildOrderTaxDetailsFromStripeSession, et as claimFreemiusLicenseKey, ut as clearAutoSyncedCurrencyPriceOverrides, U as clearPaymentConfigCache, at as computeTrialExpiry, b as consumeCouponValidationToken, n as convertMinorUnitAmount, P as copyProductFromLanguage, Ae as createCategoryAction, Be as createCheckoutSession, x as createCouponValidationThrottle, F as createProduct, je as createProductAction, Wt as createShippingRate, Gt as createShippingZone, Me as deleteCategoryAction, De as deleteCouponFromFreemius, I as deleteProduct, Ne as deleteProductAction, Kt as deleteShippingRate, qt as deleteShippingZone, Qt as deleteTaxRateAction, r as describeCurrencyRoundingRule, D as emptyCustomerAddress, tt as evaluateFreemiusLicenseClaim, ot as evaluateTrialEligibility, ht as extractFreemiusCheckoutMetadata, At as fetchOrderReportData, L as fetchTranslatedProductsForCartInternal, j as fillMissingUserProfileCheckoutDetails, st as formatFreemiusTimestamp, me as formatInvoiceCurrency, he as formatInvoiceDate, ae as getCategoriesWithCount, oe as getCategoryBySlug, ce as getCmsProduct, de as getCmsProducts, S as getCouponQuote, i as getCurrencyLookup, Ye as getCurrentCustomerOrder, Xe as getCurrentCustomerOrderInvoice, Ze as getCurrentCustomerOrders, a as getDefaultCurrency, M as getDefaultUserAddresses, St as getEnabledPaymentProviders, o as getExchangeRateForCurrency, Je as getFreemiusOrderLicense, gt as getFreemiusWebhookSecretCandidates, se as getGlobalProductAttributes, ge as getInvoiceAddressLines, Ue as getInvoiceBrandingData, We as getInvoiceOrder, Ge as getInvoicePresentationData, Ot as getOrderDetails, Se as getOrderTaxRateJurisdiction, Ce as getOrderTaxRateLabel, we as getOrderTaxRatePercentage, kt as getOrders, W as getPaymentConfigStatus, G as getPaymentCredentialsView, mt as getPaymentProvider, Ct as getPaymentSettings, R as getProduct, z as getProductBySlug, le as getProductCategories, ue as getProductTranslations, B as getProducts, wt as getProviderReadiness, C as getQuoteLineDiscountMap, Tt as getReadinessForProductType, Et as getStoreConfigStatus, Dt as getStoreReadiness, ze as getStripeClient, qe as handleStripeWebhook, K as hydrateFreemiusEnvFromDb, s as inferCurrencyCodeFromLocale, O as isCustomerAddressComplete, c as isSaleWindowActive, l as isScheduledPriceDue, Z as mintOrderAccessToken, u as normalizeCurrencyRecord, d as normalizeCurrencyRoundingMode, k as normalizeCustomerAddress, _e as normalizeInvoiceSettings, A as normalizeOrderCustomerDetails, Te as normalizeOrderTaxDetails, f as normalizePriceMap, p as normalizeSalePriceMap, ee as parseFreemiusCheckoutCredentialsMap, nt as parseFreemiusTimestamp, ct as pickTrialPricing, Ee as productSchema, lt as provisionFreemiusTrialLicense, Pe as publishProductAction, te as readFreemiusEnvValue, dt as rebaseStoreCurrencyExchangeRates, w as recordCouponRedemption, T as resolveCouponValidationThrottleKey, m as resolveEffectivePriceForCurrency, ne as resolveFreemiusCheckoutCredentials, _t as resolveFreemiusStatusFromCheckoutResponse, vt as resolveFreemiusStatusFromWebhookEvent, h as resolvePriceForCurrency, g as resolvePriceRangeForCurrency, q as resolveStripePublishableKey, J as resolveStripeSecretKey, Y as resolveStripeWebhookSecret, X as savePaymentCredentials, Vt as savePaymentProviderCredentials, $t as saveTaxRateAction, ve as serializeInvoiceSettings, _ as sortCurrencies, V as syncCategoriesForTranslationGroup, Oe as syncCouponToFreemius, yt as syncFreemiusCheckoutOrder, bt as syncFreemiusOrderFromWebhookEvent, re as syncFreemiusProductsToSupabase, Fe as syncProductCategoriesAction, ke as syncProductSaleCouponToFreemius, ie as syncSingleFreemiusProduct, ft as syncStoreCurrencyRates, Ke as syncStripeOrderFromSession, Ie as updateCategoryAction, Jt as updateInventoryTrackingAction, Ht as updatePaymentSettings, H as updateProduct, Le as updateProductAction, Yt as updateShippingRate, Xt as updateShippingZone, en as updateTaxSettingsAction, N as upsertDefaultUserAddresses, xt as verifyFreemiusWebhookSignature, Q as verifyOrderAccessToken };
57
+ export { Bt as AttributeManagementPage, y as COUPON_VALIDATION_UNKNOWN_CLIENT_KEY, v as CURRENCY_COOKIE_NAME, e as CURRENCY_ROUNDING_MODES, Wt as CategoryManagementPage, Ut as CopyProductFromLanguage, sn as CouponsPage, fe as DEFAULT_INVOICE_SETTINGS, cn as EditCouponPage, Ht as EditProductPage, Ft as ExportReportsDialog, _t as FREEMIUS_CHECKOUT_SYNC_REFUSED_MESSAGE, Ye as FREEMIUS_LICENSE_CLAIM_MAX_AGE_MINUTES, Xe as FREEMIUS_LICENSE_CLAIM_REFUSED_MESSAGE, at as FREEMIUS_TRIAL_ALREADY_USED_MESSAGE, ot as FREEMIUS_TRIAL_PROVISION_FAILED_MESSAGE, $ as FreemiusProvider, pe as INVOICE_SETTINGS_KEY, zt as InventoryPage, Vt as NewProductPage, Lt as OrderDetailPage, It as OrdersPage, qt as PaymentsPage, Rt as ProductsPage, tn as ShippingPage, Re as StripeNotConfiguredError, ht as StripeProvider, on as TaxesPage, E as addressesMatch, ye as aggregateOrderTaxLines, t as applyCurrencyRounding, Ve as applyOrderInventoryDeduction, He as assignInvoiceMetadata, be as buildOrderTaxDetailsFromCalculation, xe as buildOrderTaxDetailsFromStripeSession, Ze as claimFreemiusLicenseKey, ft as clearAutoSyncedCurrencyPriceOverrides, U as clearPaymentConfigCache, st as computeTrialExpiry, b as consumeCouponValidationToken, n as convertMinorUnitAmount, P as copyProductFromLanguage, Ae as createCategoryAction, Be as createCheckoutSession, x as createCouponValidationThrottle, F as createProduct, je as createProductAction, Jt as createShippingRate, Yt as createShippingZone, Me as deleteCategoryAction, De as deleteCouponFromFreemius, I as deleteProduct, Ne as deleteProductAction, Xt as deleteShippingRate, Zt as deleteShippingZone, nn as deleteTaxRateAction, r as describeCurrencyRoundingRule, D as emptyCustomerAddress, vt as evaluateFreemiusCheckoutLicense, Qe as evaluateFreemiusLicenseClaim, ct as evaluateTrialEligibility, yt as extractFreemiusCheckoutMetadata, Pt as fetchOrderReportData, L as fetchTranslatedProductsForCartInternal, j as fillMissingUserProfileCheckoutDetails, lt as formatFreemiusTimestamp, me as formatInvoiceCurrency, he as formatInvoiceDate, ae as getCategoriesWithCount, oe as getCategoryBySlug, ce as getCmsProduct, de as getCmsProducts, S as getCouponQuote, i as getCurrencyLookup, nt as getCurrentCustomerOrder, rt as getCurrentCustomerOrderInvoice, it as getCurrentCustomerOrders, a as getDefaultCurrency, M as getDefaultUserAddresses, Et as getEnabledPaymentProviders, o as getExchangeRateForCurrency, tt as getFreemiusOrderLicense, bt as getFreemiusWebhookSecretCandidates, se as getGlobalProductAttributes, ge as getInvoiceAddressLines, Ue as getInvoiceBrandingData, We as getInvoiceOrder, Ge as getInvoicePresentationData, Mt as getOrderDetails, Se as getOrderTaxRateJurisdiction, Ce as getOrderTaxRateLabel, we as getOrderTaxRatePercentage, Nt as getOrders, W as getPaymentConfigStatus, G as getPaymentCredentialsView, gt as getPaymentProvider, Dt as getPaymentSettings, R as getProduct, z as getProductBySlug, le as getProductCategories, ue as getProductTranslations, B as getProducts, Ot as getProviderReadiness, C as getQuoteLineDiscountMap, kt as getReadinessForProductType, At as getStoreConfigStatus, jt as getStoreReadiness, ze as getStripeClient, qe as handleStripeWebhook, K as hydrateFreemiusEnvFromDb, s as inferCurrencyCodeFromLocale, O as isCustomerAddressComplete, c as isSaleWindowActive, l as isScheduledPriceDue, Je as isStripeSessionSettled, Z as mintOrderAccessToken, u as normalizeCurrencyRecord, d as normalizeCurrencyRoundingMode, k as normalizeCustomerAddress, _e as normalizeInvoiceSettings, A as normalizeOrderCustomerDetails, Te as normalizeOrderTaxDetails, f as normalizePriceMap, p as normalizeSalePriceMap, ee as parseFreemiusCheckoutCredentialsMap, $e as parseFreemiusTimestamp, ut as pickTrialPricing, Ee as productSchema, dt as provisionFreemiusTrialLicense, Pe as publishProductAction, te as readFreemiusEnvValue, pt as rebaseStoreCurrencyExchangeRates, w as recordCouponRedemption, T as resolveCouponValidationThrottleKey, m as resolveEffectivePriceForCurrency, ne as resolveFreemiusCheckoutCredentials, xt as resolveFreemiusStatusFromCheckoutResponse, St as resolveFreemiusStatusFromWebhookEvent, h as resolvePriceForCurrency, g as resolvePriceRangeForCurrency, q as resolveStripePublishableKey, J as resolveStripeSecretKey, Y as resolveStripeWebhookSecret, et as retrieveFreemiusLicenseRecords, X as savePaymentCredentials, Gt as savePaymentProviderCredentials, rn as saveTaxRateAction, ve as serializeInvoiceSettings, _ as sortCurrencies, V as syncCategoriesForTranslationGroup, Oe as syncCouponToFreemius, Ct as syncFreemiusCheckoutOrder, wt as syncFreemiusOrderFromWebhookEvent, re as syncFreemiusProductsToSupabase, Fe as syncProductCategoriesAction, ke as syncProductSaleCouponToFreemius, ie as syncSingleFreemiusProduct, mt as syncStoreCurrencyRates, Ke as syncStripeOrderFromSession, Ie as updateCategoryAction, Qt as updateInventoryTrackingAction, Kt as updatePaymentSettings, H as updateProduct, Le as updateProductAction, $t as updateShippingRate, en as updateShippingZone, an as updateTaxSettingsAction, N as upsertDefaultUserAddresses, Tt as verifyFreemiusWebhookSignature, Q as verifyOrderAccessToken };