@owlmeans/server-payment 0.1.18-rc.11 → 0.1.18-rc.13

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 (69) hide show
  1. package/README.md +1 -1
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/server-payment/SKILL.md +67 -7
  4. package/build/config.d.ts +15 -1
  5. package/build/config.d.ts.map +1 -1
  6. package/build/config.js +40 -2
  7. package/build/config.js.map +1 -1
  8. package/build/consts.d.ts +10 -0
  9. package/build/consts.d.ts.map +1 -1
  10. package/build/consts.js +10 -0
  11. package/build/consts.js.map +1 -1
  12. package/build/index.d.ts +2 -0
  13. package/build/index.d.ts.map +1 -1
  14. package/build/index.js +1 -0
  15. package/build/index.js.map +1 -1
  16. package/build/model.d.ts.map +1 -1
  17. package/build/model.js +2 -1
  18. package/build/model.js.map +1 -1
  19. package/build/plugins/estimate.d.ts +43 -0
  20. package/build/plugins/estimate.d.ts.map +1 -0
  21. package/build/plugins/estimate.js +235 -0
  22. package/build/plugins/estimate.js.map +1 -0
  23. package/build/plugins/events.d.ts.map +1 -1
  24. package/build/plugins/events.js +17 -4
  25. package/build/plugins/events.js.map +1 -1
  26. package/build/plugins/fx.d.ts +26 -0
  27. package/build/plugins/fx.d.ts.map +1 -0
  28. package/build/plugins/fx.js +56 -0
  29. package/build/plugins/fx.js.map +1 -0
  30. package/build/plugins/portal.d.ts.map +1 -1
  31. package/build/plugins/portal.js +6 -2
  32. package/build/plugins/portal.js.map +1 -1
  33. package/build/plugins/stripe.d.ts +2 -1
  34. package/build/plugins/stripe.d.ts.map +1 -1
  35. package/build/plugins/stripe.js +51 -19
  36. package/build/plugins/stripe.js.map +1 -1
  37. package/build/service.d.ts.map +1 -1
  38. package/build/service.js +6 -0
  39. package/build/service.js.map +1 -1
  40. package/build/sync.d.ts +5 -0
  41. package/build/sync.d.ts.map +1 -1
  42. package/build/sync.js +80 -14
  43. package/build/sync.js.map +1 -1
  44. package/build/types.d.ts +46 -1
  45. package/build/types.d.ts.map +1 -1
  46. package/build/utils.d.ts +3 -1
  47. package/build/utils.d.ts.map +1 -1
  48. package/build/utils.js +3 -1
  49. package/build/utils.js.map +1 -1
  50. package/package.json +16 -16
  51. package/src/config.ts +47 -5
  52. package/src/consts.ts +11 -0
  53. package/src/index.ts +2 -0
  54. package/src/model.ts +2 -1
  55. package/src/plugins/estimate.ts +299 -0
  56. package/src/plugins/events.ts +17 -4
  57. package/src/plugins/fx.ts +93 -0
  58. package/src/plugins/portal.ts +6 -2
  59. package/src/plugins/stripe.ts +55 -19
  60. package/src/service.ts +6 -0
  61. package/src/sync.ts +101 -13
  62. package/src/types.ts +49 -2
  63. package/src/utils.ts +6 -2
  64. package/tests/checkout.spec.ts +118 -2
  65. package/tests/estimate.spec.ts +240 -0
  66. package/tests/events.spec.ts +13 -0
  67. package/tests/fake-stripe.ts +130 -6
  68. package/tests/portal.spec.ts +19 -2
  69. package/tests/sync.spec.ts +114 -0
@@ -1 +1 @@
1
- {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/plugins/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAKhC,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA8DhF,eAAO,MAAM,sBAAsB,YACxB,cAAc,QAAQ,WAAW,eAAe,MAAM,KAC9D;IAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAejG,CAAA;AAED,eAAO,MAAM,wBAAwB,UAC5B,MAAM,CAAC,KAAK,UAAU;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KACjF,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAIrC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAe,UAAU,UAAU,MAAM,UAAU,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAgElH,CAAA;AAQD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAAe,UAAU,UAAU,MAAM,WAAW,OAAO,KAAG,OAAO,CAAC,IAAI,CAwBzG,CAAA"}
1
+ {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/plugins/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,EAEL,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAOjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA+EhF,eAAO,MAAM,sBAAsB,YACxB,cAAc,QAAQ,WAAW,eAAe,MAAM,aAAY,WAAW,KACrF;IAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAejG,CAAA;AAED,eAAO,MAAM,wBAAwB,UAC5B,MAAM,CAAC,KAAK,UAAU;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KACjF,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,QAIrC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAe,UAAU,UAAU,MAAM,UAAU,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAiFlH,CAAA;AAQD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,QAAe,UAAU,UAAU,MAAM,WAAW,OAAO,KAAG,OAAO,CAAC,IAAI,CAwBzG,CAAA"}
@@ -1,16 +1,35 @@
1
- import { assertCheckoutAmount, chargeAmountMinor, CheckoutPricingMode, PaygateError, ProductError, ProductType, WebhookSetupError, } from '@owlmeans/payment';
1
+ import { assertCheckoutAmount, chargeAmountMinor, CheckoutPricingMode, PaygateError, ProductError, ProductType, TaxBehavior, WebhookSetupError, } from '@owlmeans/payment';
2
2
  import { STRIPE_PAYGATE_ALIAS, STRIPE_SIGNATURE } from '../consts.js';
3
- import { paygateCustomers, payment } from '../utils.js';
3
+ import { paygateCustomers, payment, stripePricingConfig } from '../utils.js';
4
4
  import { isSoldThrough, planLookupKey } from '../sync.js';
5
5
  import { createEventHandler } from './events.js';
6
+ import { settlementAmount } from './fx.js';
6
7
  import { stripeWebhookSecrets } from './webhook-manager.js';
7
- const taxOptions = (promotions) => ({
8
- automatic_tax: { enabled: true },
9
- billing_address_collection: 'required',
10
- tax_id_collection: { enabled: true },
11
- customer_update: { address: 'auto', name: 'auto' },
12
- allow_promotion_codes: promotions,
13
- });
8
+ /**
9
+ * A Checkout Session's tax and currency options, entirely driven by the declared `PricingPolicy` —
10
+ * an undeclared one (`DEFAULT_PRICING_POLICY`) reproduces exactly what every session hard-coded
11
+ * before this policy existed: automatic tax and tax-id collection on, no Adaptive Pricing.
12
+ *
13
+ * `customer_update.address` lets automatic tax use the billing address Checkout just collected
14
+ * rather than only a previously saved one; `customer_update.name` lets tax-id collection save the
15
+ * business name it collects. Each is included only for the concern that needs it.
16
+ */
17
+ const checkoutOptions = (policy, promotions) => {
18
+ const customerUpdate = {};
19
+ if (policy.tax.automatic)
20
+ customerUpdate.address = 'auto';
21
+ if (policy.tax.collectTaxId)
22
+ customerUpdate.name = 'auto';
23
+ return {
24
+ ...(policy.tax.automatic
25
+ ? { automatic_tax: { enabled: true }, billing_address_collection: 'required' }
26
+ : {}),
27
+ ...(policy.tax.collectTaxId ? { tax_id_collection: { enabled: true } } : {}),
28
+ ...(Object.keys(customerUpdate).length > 0 ? { customer_update: customerUpdate } : {}),
29
+ ...(policy.currency.adaptive === true ? { adaptive_pricing: { enabled: true } } : {}),
30
+ allow_promotion_codes: promotions,
31
+ };
32
+ };
14
33
  const ensureStripeCustomer = async (ctx, stripe, params) => {
15
34
  const resource = paygateCustomers(ctx);
16
35
  const existing = await resource.byEntity(params.entityId, STRIPE_PAYGATE_ALIAS);
@@ -58,7 +77,7 @@ const sharedSession = (customer, params, product, plan, metadata) => ({
58
77
  ...metadata,
59
78
  },
60
79
  });
61
- export const amountCheckoutLineItem = (product, plan, amountMinor) => {
80
+ export const amountCheckoutLineItem = (product, plan, amountMinor, behavior = TaxBehavior.Exclusive) => {
62
81
  if (plan.amountPolicy == null)
63
82
  throw new ProductError(`amount-policy:${plan.sku}`);
64
83
  assertCheckoutAmount(plan.amountPolicy, amountMinor);
@@ -67,7 +86,7 @@ export const amountCheckoutLineItem = (product, plan, amountMinor) => {
67
86
  return {
68
87
  lineItem: {
69
88
  price_data: {
70
- product: product.sku, currency, unit_amount: chargeMinor, tax_behavior: 'exclusive',
89
+ product: product.sku, currency, unit_amount: chargeMinor, tax_behavior: behavior,
71
90
  },
72
91
  quantity: 1,
73
92
  },
@@ -92,6 +111,7 @@ export const createCheckoutLink = async (ctx, stripe, params) => {
92
111
  throw new ProductError(`plan:${params.planSku}`);
93
112
  }
94
113
  const customer = await ensureStripeCustomer(ctx, stripe, params);
114
+ const pricing = await payment(ctx).pricingPolicy();
95
115
  if (product.type === ProductType.Consumable) {
96
116
  const plan = plans.find(item => item.sku === params.planSku) ?? plans[0];
97
117
  if (plan == null)
@@ -99,15 +119,25 @@ export const createCheckoutLink = async (ctx, stripe, params) => {
99
119
  if (plan.pricingMode === CheckoutPricingMode.Amount) {
100
120
  if (params.amountMinor == null)
101
121
  throw new ProductError('amount');
102
- const { lineItem, chargeMinor, currency } = amountCheckoutLineItem(product, plan, params.amountMinor);
122
+ const { chargeMinor: sourceChargeMinor, currency: amountCurrency } = amountCheckoutLineItem(product, plan, params.amountMinor, pricing.tax.behavior);
123
+ const settled = await settlementAmount(ctx, stripe, sourceChargeMinor, amountCurrency);
124
+ const lineItem = {
125
+ price_data: {
126
+ product: product.sku, currency: settled.currency, unit_amount: settled.amountMinor,
127
+ tax_behavior: pricing.tax.behavior,
128
+ },
129
+ quantity: 1,
130
+ };
103
131
  const session = await stripe.checkout.sessions.create({
104
132
  mode: 'payment', line_items: [lineItem], invoice_creation: { enabled: true },
105
- ...taxOptions(false),
133
+ ...checkoutOptions(pricing, false),
106
134
  ...sharedSession(customer, params, product, plan, {
107
135
  pricingMode: CheckoutPricingMode.Amount,
108
- currency,
136
+ currency: settled.currency,
137
+ amountCurrency,
109
138
  amountMinor: String(params.amountMinor),
110
- chargeAmountMinor: String(chargeMinor),
139
+ sourceChargeAmountMinor: String(sourceChargeMinor),
140
+ chargeAmountMinor: String(settled.amountMinor),
111
141
  }),
112
142
  });
113
143
  if (session.url == null)
@@ -115,16 +145,16 @@ export const createCheckoutLink = async (ctx, stripe, params) => {
115
145
  return session.url;
116
146
  }
117
147
  const price = await findPrice(stripe, product.sku, planLookupKey(product, plan));
118
- const policy = plan.quantityPolicy ?? {
148
+ const quantityPolicy = plan.quantityPolicy ?? {
119
149
  minimum: plan.minQuantity ?? 1,
120
150
  maximum: plan.maxQuantity ?? Math.max(100_000, plan.minQuantity ?? 1),
121
151
  default: plan.defaultQuantity ?? plan.minQuantity ?? 1,
122
152
  };
123
153
  const session = await stripe.checkout.sessions.create({
124
154
  mode: 'payment',
125
- line_items: [quantityCheckoutLineItem(price, policy)],
155
+ line_items: [quantityCheckoutLineItem(price, quantityPolicy)],
126
156
  invoice_creation: { enabled: true },
127
- ...taxOptions(true),
157
+ ...checkoutOptions(pricing, true),
128
158
  ...sharedSession(customer, params, product, plan, { pricingMode: CheckoutPricingMode.Quantity }),
129
159
  });
130
160
  if (session.url == null)
@@ -136,15 +166,17 @@ export const createCheckoutLink = async (ctx, stripe, params) => {
136
166
  if (plan == null)
137
167
  throw new ProductError('plan');
138
168
  const price = await findPrice(stripe, product.sku, planLookupKey(product, plan));
169
+ const subscriptionPaymentMethodTypes = (await stripePricingConfig(ctx))?.subscriptionPaymentMethodTypes;
139
170
  const session = await stripe.checkout.sessions.create({
140
171
  mode: 'subscription', line_items: [{ price: price.id, quantity: 1 }],
172
+ ...(subscriptionPaymentMethodTypes != null ? { payment_method_types: subscriptionPaymentMethodTypes } : {}),
141
173
  subscription_data: {
142
174
  metadata: {
143
175
  pricingMode: CheckoutPricingMode.Quantity, entityId: params.entityId,
144
176
  service: params.service, productSku: product.sku, planSku: plan.sku,
145
177
  },
146
178
  },
147
- ...taxOptions(true),
179
+ ...checkoutOptions(pricing, true),
148
180
  ...sharedSession(customer, params, product, plan, {}),
149
181
  });
150
182
  if (session.url == null)
@@ -1 +1 @@
1
- {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/plugins/stripe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../src/plugins/stripe.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAMhC,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAsBjE,OAAO,KAAK,EACV,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,qBAAqB,EAChF,yBAAyB,EAC1B,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,QACrB,UAAU,UAAU,MAAM,SAAQ,sBAAsB,KAC5D,OAAO,CAAC,IAAI,CAad,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QACvB,UAAU,YAAY,MAAM,WAAW,MAAM,SAAQ,wBAAwB,KACjF,OAAO,CAAC,yBAAyB,CA+BnC,CAAA;AAID,eAAO,MAAM,kBAAkB,WACtB,MAAM,SAA0B,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,KAC3E,cAyBF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,OAC3E,CAAC,SAAS,qBAAqB,KACnC,CAuBF,CAAA"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAMhC,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAuBjE,OAAO,KAAK,EACV,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,qBAAqB,EAChF,yBAAyB,EAC1B,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,QACrB,UAAU,UAAU,MAAM,SAAQ,sBAAsB,KAC5D,OAAO,CAAC,IAAI,CAad,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QACvB,UAAU,YAAY,MAAM,WAAW,MAAM,SAAQ,wBAAwB,KACjF,OAAO,CAAC,yBAAyB,CA+BnC,CAAA;AAID,eAAO,MAAM,kBAAkB,WACtB,MAAM,SAA0B,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,KAC3E,cA8BF,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,OAC3E,CAAC,SAAS,qBAAqB,KACnC,CAuBF,CAAA"}
package/build/service.js CHANGED
@@ -8,6 +8,7 @@ import { makeLimitGate } from './limit.js';
8
8
  import { appendCompletionObserver } from './observer.js';
9
9
  import { findPlan, findProduct, planRank } from './plan.js';
10
10
  import { resyncStripeSubscription, resyncStripeSubscriptions } from './plugins/events.js';
11
+ import { makeEstimateCache, estimateStripePrice } from './plugins/estimate.js';
11
12
  import { createPortalLink, ensurePortalConfiguration } from './plugins/portal.js';
12
13
  import { createCheckoutLink } from './plugins/stripe.js';
13
14
  import { ensureWebhookEndpoint } from './plugins/webhook-manager.js';
@@ -72,6 +73,9 @@ export const grantInternalPlan = async (ctx, entityId, planSku, opts = {}) => {
72
73
  const unmanaged = () => { throw new PaygateError('unmanaged'); };
73
74
  export const makeGatewayService = (alias = GATEWAY_SERVICE, opts = {}) => {
74
75
  const managed = opts.manage !== false;
76
+ // One estimate cache per gateway SERVICE instance, never module-level: several service
77
+ // instances (several tests, several deployments in one process) must never share hits.
78
+ const estimateCache = makeEstimateCache();
75
79
  const service = createService(alias, {
76
80
  managed,
77
81
  createLink: async (ctx, params) => managed
@@ -83,6 +87,8 @@ export const makeGatewayService = (alias = GATEWAY_SERVICE, opts = {}) => {
83
87
  ? await resyncStripeSubscription(ctx, await stripeClient(ctx), ref) : unmanaged(),
84
88
  resyncAll: async (ctx) => managed
85
89
  ? await resyncStripeSubscriptions(ctx, await stripeClient(ctx)) : unmanaged(),
90
+ estimatePrice: async (ctx, params) => managed
91
+ ? await estimateStripePrice(ctx, await stripeClient(ctx), params, estimateCache) : unmanaged(),
86
92
  }, service => async () => {
87
93
  const ctx = service.assertCtx();
88
94
  assertPlanDeclarations(ctx.cfg);
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
package/build/sync.d.ts CHANGED
@@ -13,6 +13,11 @@ export declare const stripePlansOf: (ctx: ApiContext) => Promise<Array<{
13
13
  * Synchronize every product sold through Stripe, and its Stripe-sold plans, to Stripe products and
14
14
  * prices. A product whose declaration fingerprint is unchanged makes no paygate call. Free plans
15
15
  * and plans sold through no Stripe gateway are never synchronized.
16
+ *
17
+ * The declared `PricingPolicy.tax.behavior` (absent by default, so a price's `tax_behavior` stays
18
+ * whatever it already was) is applied to a matching price only while it is `unspecified` — Stripe
19
+ * forbids changing a price once set to `exclusive` or `inclusive` — and to a fresh one on creation.
20
+ * A price carrying the OPPOSITE behavior is deactivated and replaced, same as any other mismatch.
16
21
  */
17
22
  export declare const syncStripeProducts: (ctx: ApiContext, stripe: Stripe) => Promise<void>;
18
23
  /** `syncStripeProducts` with this context's own Stripe client. */
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE7D,eAAO,MAAM,aAAa,YAAa,cAAc,QAAQ,WAAW,KAAG,MACO,CAAA;AAElF,mHAAmH;AACnH,eAAO,MAAM,aAAa,YAAa,cAAc,QAAQ,WAAW,WAAW,MAAM,KAAG,OACT,CAAA;AAEnF,uEAAuE;AACvE,eAAO,MAAM,aAAa,QAAe,UAAU,KAAG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAerH,CAAA;AAkED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAe,UAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAetF,CAAA;AAED,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,QAAe,UAAU,KAAG,OAAO,CAAC,IAAI,CAChB,CAAA"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAY7D,eAAO,MAAM,aAAa,YAAa,cAAc,QAAQ,WAAW,KAAG,MACO,CAAA;AAElF,mHAAmH;AACnH,eAAO,MAAM,aAAa,YAAa,cAAc,QAAQ,WAAW,WAAW,MAAM,KAAG,OACT,CAAA;AAEnF,uEAAuE;AACvE,eAAO,MAAM,aAAa,QAAe,UAAU,KAAG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,CAerH,CAAA;AA6HD;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,QAAe,UAAU,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CA6BtF,CAAA;AAED,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,QAAe,UAAU,KAAG,OAAO,CAAC,IAAI,CAChB,CAAA"}
package/build/sync.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createHash } from 'node:crypto';
2
- import { CheckoutPricingMode, ProductType } from '@owlmeans/payment';
2
+ import { CheckoutPricingMode, ProductType, TaxBehavior } from '@owlmeans/payment';
3
3
  import { STRIPE_PAYGATE_ALIAS } from './consts.js';
4
- import { fingerprints, payment, stripeClient } from './utils.js';
4
+ import { fingerprints, payment, stripeClient, stripePricingConfig } from './utils.js';
5
+ import { settlementAmount } from './plugins/fx.js';
5
6
  export const planLookupKey = (product, plan) => product.type === ProductType.Consumable ? `${product.sku}-consumable` : plan.sku;
6
7
  /** Whether a plan is sold through a paygate: never a free plan; otherwise its own gateways, else the product's. */
7
8
  export const isSoldThrough = (product, plan, paygate) => plan.free !== true && (plan.gateways ?? product.gateways ?? []).includes(paygate);
@@ -21,14 +22,20 @@ export const stripePlansOf = async (ctx) => {
21
22
  }
22
23
  return result;
23
24
  };
24
- const fingerprintOf = (product, plans) => createHash('sha256')
25
+ /**
26
+ * `behavior` is hashed alongside the catalogue: an undeclared policy hashes as `null`, so declaring
27
+ * or changing `tax.behavior` re-syncs every product exactly once, the same as any other catalogue
28
+ * edit.
29
+ */
30
+ const fingerprintOf = (product, plans, behavior) => createHash('sha256')
25
31
  .update(JSON.stringify({
26
32
  sku: product.sku, type: product.type, name: product.title,
27
33
  description: product.description ?? null, taxCode: product.taxCode ?? null,
28
34
  unitLabel: product.unitLabel ?? null, services: [...(product.services ?? [])].sort(),
29
- plans: plans.map(plan => ({
30
- sku: plan.sku, price: plan.price, currency: plan.currency ?? 'usd', duration: plan.duration,
31
- recurring: plan.recurring ?? null, pricingMode: plan.pricingMode ?? null,
35
+ behavior,
36
+ plans: plans.map(({ plan, unitAmount, currency, sourceUnitAmount, sourceCurrency }) => ({
37
+ sku: plan.sku, price: plan.price, currency, unitAmount, sourceUnitAmount, sourceCurrency,
38
+ duration: plan.duration, recurring: plan.recurring ?? null, pricingMode: plan.pricingMode ?? null,
32
39
  amountPolicy: plan.amountPolicy ?? null, quantityPolicy: plan.quantityPolicy ?? null,
33
40
  lookup: planLookupKey(product, plan),
34
41
  })).sort((a, b) => a.sku.localeCompare(b.sku)),
@@ -56,22 +63,62 @@ const deactivateAmountPrice = async (stripe, product, plan) => {
56
63
  await stripe.prices.update(price.id, { active: false });
57
64
  }
58
65
  };
59
- const ensureStripePrice = async (stripe, product, plan) => {
66
+ /** Whether `price` already carries the OPPOSITE of `behavior` — never `unspecified`, which is not a conflict. */
67
+ const opposesBehavior = (price, behavior) => behavior != null && price.tax_behavior !== 'unspecified' && price.tax_behavior !== behavior;
68
+ /**
69
+ * The behavior the Stripe account's own Tax Settings resolve to for `currency`, or `null` when no
70
+ * default is configured yet (nothing established to disrupt). `inferred_by_currency` follows
71
+ * Stripe's own rule: exclusive for USD/CAD, inclusive otherwise.
72
+ */
73
+ const accountDefaultBehavior = async (stripe, currency) => {
74
+ const { defaults } = await stripe.tax.settings.retrieve();
75
+ if (defaults.tax_behavior === 'inferred_by_currency') {
76
+ return ['usd', 'cad'].includes(currency.toLowerCase()) ? TaxBehavior.Exclusive : TaxBehavior.Inclusive;
77
+ }
78
+ if (defaults.tax_behavior === 'exclusive')
79
+ return TaxBehavior.Exclusive;
80
+ if (defaults.tax_behavior === 'inclusive')
81
+ return TaxBehavior.Inclusive;
82
+ return null;
83
+ };
84
+ /**
85
+ * Give `price` the declared `behavior` while it is still `unspecified` (the only state Stripe lets
86
+ * an existing price's `tax_behavior` be set from). Skipped, with a `console.error`, when the
87
+ * account's own default resolves to the opposite behavior — applying ours would then change what an
88
+ * existing renewal actually charges — unless `migrateUnspecifiedPrices` opts into that migration.
89
+ */
90
+ const applyUnspecifiedBehavior = async (stripe, price, lookupKey, behavior, migrateUnspecifiedPrices) => {
91
+ if (!migrateUnspecifiedPrices) {
92
+ const resolved = await accountDefaultBehavior(stripe, price.currency);
93
+ if (resolved != null && resolved !== behavior) {
94
+ console.error(`[payment] price '${lookupKey}' left 'unspecified': the Stripe account's default tax `
95
+ + `behavior for ${price.currency.toUpperCase()} is '${resolved}', not the declared `
96
+ + `'${behavior}' — applying it would change existing renewal amounts. Set `
97
+ + '`stripe.migrateUnspecifiedPrices` to override.');
98
+ return;
99
+ }
100
+ }
101
+ await stripe.prices.update(price.id, { tax_behavior: behavior });
102
+ };
103
+ const ensureStripePrice = async (stripe, product, resolved, behavior, migrateUnspecifiedPrices) => {
104
+ const { plan, unitAmount, currency } = resolved;
60
105
  if (plan.pricingMode === CheckoutPricingMode.Amount) {
61
106
  await deactivateAmountPrice(stripe, product, plan);
62
107
  return;
63
108
  }
64
109
  const lookupKey = planLookupKey(product, plan);
65
- const unitAmount = Math.round(plan.price * 100);
66
- const currency = plan.currency ?? 'usd';
67
110
  const recurring = plan.recurring != null
68
111
  ? { interval: plan.recurring.interval } : undefined;
69
112
  const existing = await activePrices(stripe, product);
70
- const match = existing.find(price => price.lookup_key === lookupKey && price.unit_amount === unitAmount
113
+ const candidate = existing.find(price => price.lookup_key === lookupKey && price.unit_amount === unitAmount
71
114
  && price.currency === currency
72
115
  && ((price.recurring?.interval ?? null) === (recurring?.interval ?? null)));
73
- if (match != null)
116
+ if (candidate != null && !opposesBehavior(candidate, behavior)) {
117
+ if (behavior != null && candidate.tax_behavior === 'unspecified') {
118
+ await applyUnspecifiedBehavior(stripe, candidate, lookupKey, behavior, migrateUnspecifiedPrices);
119
+ }
74
120
  return;
121
+ }
75
122
  for (const price of existing.filter(item => item.lookup_key === lookupKey)) {
76
123
  await stripe.prices.update(price.id, { active: false });
77
124
  }
@@ -79,6 +126,7 @@ const ensureStripePrice = async (stripe, product, plan) => {
79
126
  product: product.sku, currency, unit_amount: unitAmount, lookup_key: lookupKey,
80
127
  transfer_lookup_key: true, nickname: plan.sku,
81
128
  ...(recurring != null ? { recurring } : { billing_scheme: 'per_unit' }),
129
+ ...(behavior != null ? { tax_behavior: behavior } : {}),
82
130
  metadata: { sku: plan.sku, ...(product.services && { services: product.services.join(',') }) },
83
131
  });
84
132
  };
@@ -86,17 +134,35 @@ const ensureStripePrice = async (stripe, product, plan) => {
86
134
  * Synchronize every product sold through Stripe, and its Stripe-sold plans, to Stripe products and
87
135
  * prices. A product whose declaration fingerprint is unchanged makes no paygate call. Free plans
88
136
  * and plans sold through no Stripe gateway are never synchronized.
137
+ *
138
+ * The declared `PricingPolicy.tax.behavior` (absent by default, so a price's `tax_behavior` stays
139
+ * whatever it already was) is applied to a matching price only while it is `unspecified` — Stripe
140
+ * forbids changing a price once set to `exclusive` or `inclusive` — and to a fresh one on creation.
141
+ * A price carrying the OPPOSITE behavior is deactivated and replaced, same as any other mismatch.
89
142
  */
90
143
  export const syncStripeProducts = async (ctx, stripe) => {
91
144
  const fpRes = fingerprints(ctx);
145
+ const behavior = (await payment(ctx).pricingPolicy()).tax.behavior ?? null;
146
+ const migrateUnspecifiedPrices = (await stripePricingConfig(ctx))?.migrateUnspecifiedPrices ?? false;
147
+ const fxRates = new Map();
92
148
  for (const { product, plans } of await stripePlansOf(ctx)) {
93
- const hash = fingerprintOf(product, plans);
149
+ const resolvedPlans = [];
150
+ for (const plan of plans) {
151
+ const sourceUnitAmount = Math.round(plan.price * 100);
152
+ const sourceCurrency = (plan.currency ?? 'usd').toLowerCase();
153
+ const settled = plan.pricingMode === CheckoutPricingMode.Amount
154
+ ? { amountMinor: sourceUnitAmount, currency: sourceCurrency }
155
+ : await settlementAmount(ctx, stripe, sourceUnitAmount, sourceCurrency, fxRates);
156
+ resolvedPlans.push({ plan, unitAmount: settled.amountMinor, currency: settled.currency, sourceUnitAmount, sourceCurrency });
157
+ }
158
+ const hash = fingerprintOf(product, resolvedPlans, behavior);
94
159
  const stored = await fpRes.bySku(product.sku);
95
160
  if (stored != null && stored.hash === hash)
96
161
  continue;
97
162
  const stripeProduct = await ensureStripeProduct(stripe, product);
98
- for (const plan of plans)
99
- await ensureStripePrice(stripe, product, plan);
163
+ for (const resolved of resolvedPlans) {
164
+ await ensureStripePrice(stripe, product, resolved, behavior, migrateUnspecifiedPrices);
165
+ }
100
166
  if (stored != null) {
101
167
  await fpRes.update({ ...stored, hash, productId: stripeProduct.id, updatedAt: new Date() });
102
168
  }
package/build/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
package/build/types.d.ts CHANGED
@@ -4,7 +4,7 @@ import type { MongoResource } from '@owlmeans/mongo-resource';
4
4
  import type { PluginConfig } from '@owlmeans/config';
5
5
  import type { PermissionSet } from '@owlmeans/auth';
6
6
  import type { Config as ApiConfig, Context as ApiContext } from '@owlmeans/server-api';
7
- import type { AmountCheckoutPolicy, CheckoutPricingMode, EntitlementView, LimitDeclaration, LimitView, PlanCapability, PlanDuration, PortalFlow, Product, ProductPlan, ProductType, QuantityCheckoutPolicy, SubscriptionStatus } from '@owlmeans/payment';
7
+ import type { AmountCheckoutPolicy, CheckoutPricingMode, EntitlementView, LimitDeclaration, LimitView, PlanCapability, PlanDuration, PortalFlow, PriceEstimate, PricingPolicy, Product, ProductPlan, ProductType, QuantityCheckoutPolicy, SubscriptionStatus } from '@owlmeans/payment';
8
8
  export interface Config extends ApiConfig {
9
9
  }
10
10
  export interface Context<C extends Config = Config> extends ApiContext<C> {
@@ -75,6 +75,31 @@ export interface StripePluginConfig extends PluginConfig {
75
75
  api: string;
76
76
  webhook?: string;
77
77
  }
78
+ /** Stripe-only pricing settings — never a browser-visible field (see `PricingPolicy` for those). */
79
+ export interface StripePricingDef {
80
+ /** Overrides `STRIPE_FX_QUOTES_API_VERSION`, when Stripe moves or renames the preview. */
81
+ fxApiVersion?: string;
82
+ /**
83
+ * Stripe settlement currency used when a catalogue price is declared in another currency.
84
+ * Recurring prices are converted during product sync; amount checkout is converted per session.
85
+ */
86
+ settlementCurrency?: string;
87
+ /** Explicit Stripe payment methods for subscription Checkout; absent keeps Stripe's dynamic selection. */
88
+ subscriptionPaymentMethodTypes?: string[];
89
+ /**
90
+ * Let a matching `unspecified` price take the declared `tax.behavior` even when the Stripe
91
+ * account's own tax-settings default resolves to the opposite one — which changes what an
92
+ * existing subscriber is charged at their next renewal. Absent/`false`: such a price is left
93
+ * `unspecified` and a `console.error` explains why.
94
+ */
95
+ migrateUnspecifiedPrices?: boolean;
96
+ }
97
+ export interface StripePricingPluginConfig extends PluginConfig, StripePricingDef {
98
+ }
99
+ /** `declarePaymentPricing`'s argument: the browser-safe `PricingPolicy` plus Stripe-only settings. */
100
+ export interface PricingDef extends PricingPolicy {
101
+ stripe?: StripePricingDef;
102
+ }
78
103
  /** What the managed customer portal configuration shows. */
79
104
  export interface PortalBrandingDef {
80
105
  headline?: string;
@@ -102,6 +127,15 @@ export interface PortalLinkOptions {
102
127
  planSku?: string;
103
128
  returnUrl: string;
104
129
  }
130
+ export interface PriceEstimateParams {
131
+ productSku: string;
132
+ /** Stable database key resolved by the application before this in-process call. */
133
+ entityId: string;
134
+ /** Absent: the product's own reference plan (an amount-priced consumable). */
135
+ planSku?: string;
136
+ /** ISO 3166-1 alpha-2. Absent: taken from the entity's paygate customer address. */
137
+ country?: string;
138
+ }
105
139
  export interface GrantInternalPlanOptions {
106
140
  /** Required to grant a plan that is not `free`. */
107
141
  force?: boolean;
@@ -118,6 +152,8 @@ export interface GatewayService extends InitializedService {
118
152
  managed: boolean;
119
153
  createLink: (ctx: ApiContext, params: CreateLinkParams) => Promise<string>;
120
154
  portalLink: (ctx: ApiContext, entityId: string, opts: PortalLinkOptions) => Promise<string>;
155
+ /** @throws PaygateError('unmanaged') when `managed` is `false`. */
156
+ estimatePrice: (ctx: ApiContext, params: PriceEstimateParams) => Promise<PriceEstimate>;
121
157
  grantInternalPlan: (ctx: ApiContext, entityId: string, planSku: string, opts?: GrantInternalPlanOptions) => Promise<PaymentSubscriptionRecord>;
122
158
  /** @returns how many subscription rows changed */
123
159
  resyncSubscription: (ctx: ApiContext, ref: SubscriptionRef) => Promise<number>;
@@ -152,8 +188,15 @@ export interface QuantityTopUpCompletion extends TopUpBase {
152
188
  }
153
189
  export interface AmountTopUpCompletion extends TopUpBase {
154
190
  mode: 'amount';
191
+ /** Net value in the amount policy's catalogue currency. */
155
192
  amountMinor: number;
193
+ /** Grossed-up value in the amount policy's catalogue currency, before settlement conversion. */
194
+ sourceChargeAmountMinor: number;
195
+ /** The amount policy's catalogue currency. */
196
+ amountCurrency: string;
197
+ /** Pre-tax subtotal actually charged by Stripe, in `currency`. */
156
198
  chargeAmountMinor: number;
199
+ /** Stripe integration/settlement currency. */
157
200
  currency: string;
158
201
  }
159
202
  export type TopUpCompletion = QuantityTopUpCompletion | AmountTopUpCompletion;
@@ -347,6 +390,8 @@ export interface PaymentFulfillmentRecord extends ResourceRecord {
347
390
  mode: CheckoutPricingMode;
348
391
  units?: number;
349
392
  amountMinor?: number;
393
+ sourceChargeAmountMinor?: number;
394
+ amountCurrency?: string;
350
395
  chargeAmountMinor?: number;
351
396
  currency?: string;
352
397
  createdAt: Date;