@owlmeans/server-payment 0.1.18-rc.33 → 0.1.18-rc.35
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.
- package/README.md +1 -1
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/server-payment/SKILL.md +16 -2
- package/build/entitlement.js +1 -1
- package/build/entitlement.js.map +1 -1
- package/build/model.d.ts +15 -0
- package/build/model.d.ts.map +1 -0
- package/build/model.js +247 -0
- package/build/model.js.map +1 -0
- package/build/plugins/estimate.d.ts.map +1 -1
- package/build/plugins/estimate.js +12 -5
- package/build/plugins/estimate.js.map +1 -1
- package/build/plugins/fx/types.d.ts +3 -1
- package/build/plugins/fx/types.d.ts.map +1 -1
- package/build/plugins/fx.d.ts.map +1 -1
- package/build/plugins/fx.js +2 -1
- package/build/plugins/fx.js.map +1 -1
- package/build/usage.d.ts.map +1 -1
- package/build/usage.js +14 -6
- package/build/usage.js.map +1 -1
- package/package.json +6 -6
- package/src/entitlement.ts +1 -1
- package/src/plugins/estimate.ts +13 -6
- package/src/plugins/fx/types.ts +3 -1
- package/src/plugins/fx.ts +2 -1
- package/src/usage.ts +14 -6
- package/tests/context.ts +1 -0
- package/tests/estimate.spec.ts +76 -1
- package/tests/usage.integration.spec.ts +35 -1
package/README.md
CHANGED
|
@@ -178,7 +178,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
178
178
|
your project's skill store (`.agents/skills/`):
|
|
179
179
|
|
|
180
180
|
```sh
|
|
181
|
-
npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
181
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.54
|
|
182
182
|
```
|
|
183
183
|
|
|
184
184
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/server-payment",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-10-
|
|
4
|
+
"version": "0.1.18-rc.35",
|
|
5
|
+
"generatedAt": "2026-10-15T10:20:01.304Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -7,7 +7,7 @@ user-invocable: false
|
|
|
7
7
|
|
|
8
8
|
# @owlmeans/server-payment
|
|
9
9
|
|
|
10
|
-
**Install:** `bun add @owlmeans/server-payment@^0.1.18-rc.
|
|
10
|
+
**Install:** `bun add @owlmeans/server-payment@^0.1.18-rc.35`
|
|
11
11
|
|
|
12
12
|
Public MIT package. It embeds Stripe into an application backend and owns everything between
|
|
13
13
|
Stripe and an entity's entitlements: the subscription store, one-time fulfillments, the usage
|
|
@@ -26,7 +26,7 @@ stripeSecrets(cfg, { api: '/secrets/stripe-key' }) // webhook secret: option
|
|
|
26
26
|
portalBranding(cfg, { returnUrl: 'https://app.example.com/billing', headline: 'Example' })
|
|
27
27
|
declarePaymentPricing(cfg, { // absent entirely: today's fixed behaviour, unchanged
|
|
28
28
|
tax: { automatic: true, behavior: TaxBehavior.Exclusive, collectTaxId: true, estimate: true },
|
|
29
|
-
currency: { adaptive: true, estimate: true },
|
|
29
|
+
currency: { adaptive: true, adaptiveFeeRate: 0.04, estimate: true }, // the fee is optional: see "Price sync and the tax estimate"
|
|
30
30
|
stripe: { settlementCurrency: 'eur', subscriptionPaymentMethodTypes: ['card', 'link', 'klarna'],
|
|
31
31
|
subscriptionPaymentMethodTypesByCurrency: { usd: ['card', 'link'] },
|
|
32
32
|
lockCustomerEmail: true, lockCustomerCountry: true }, // optional: see "Customer locks"
|
|
@@ -318,6 +318,18 @@ registry: a plugin whose `alias` is registered already replaces it). All hooks a
|
|
|
318
318
|
`adaptive_pricing` takes. An amount plan stays estimated in its policy currency but is charged in
|
|
319
319
|
the region's currency, so an EU top-up gets its local line through the policy → settlement →
|
|
320
320
|
local chain, and an exact-USD one none.
|
|
321
|
+
- **The local line prices the conversion the way Checkout does.** Adaptive Pricing shows a buyer's
|
|
322
|
+
currency at the quote's `base_rate` plus its own conversion fee (`price × (1 + fee)`, Stripe's 2–4%,
|
|
323
|
+
decided per currency — test mode showed 4% for PLN: `1 EUR = 4.5626 PLN = 1 / 0.227941 × 1.04`),
|
|
324
|
+
while the FX Quotes `exchange_rate` is `base_rate × (1 − fx_fee_rate)` with the quote's 2% — so it
|
|
325
|
+
understates Checkout (99.11 against 101.02 PLN for a €22.14 total). `currency.adaptiveFeeRate`
|
|
326
|
+
declares that fee: `local.exchangeRate` = `base_rate / (1 + fee)` (and `fxFeeRate` = the fee),
|
|
327
|
+
divided by the source's reference rate for an amount plan, so a subscription and a top-up share the
|
|
328
|
+
one rule. Absent, `local.exchangeRate` is the quote's own `exchange_rate`. A buyer whose local
|
|
329
|
+
currency IS the settlement currency pays no conversion fee and gets none. `StripeFxRate.baseRate`
|
|
330
|
+
is `rate_details.base_rate` (derived from `exchange_rate` and `fx_fee_rate` when absent); the fee
|
|
331
|
+
is part of the FX cache key. The fee Stripe really applies is not exposed by any API — probe it by
|
|
332
|
+
reading a test-mode Checkout page ("includes N% conversion fee") and set the declared value.
|
|
321
333
|
|
|
322
334
|
## The subscription store
|
|
323
335
|
|
|
@@ -611,6 +623,8 @@ concurrent withdrawals.
|
|
|
611
623
|
- https://docs.stripe.com/api/customer_portal/configurations/create — `features.customer_update.allowed_updates`, subscription cancel/update features; configurations are never deletable.
|
|
612
624
|
- https://docs.stripe.com/api/tax/calculations/create — `percentage_decimal` is a STRING; parse it exactly.
|
|
613
625
|
- https://docs.stripe.com/api/fx_quotes/create — a PREVIEW endpoint (`stripe.rawRequest`); `reference_rate` for settlement conversion.
|
|
626
|
+
- https://docs.stripe.com/currencies/localize-prices/fx-quotes-api — `exchange_rate` is fee-inclusive (`base_rate × (1 − fx_fee_rate)`, 2%); dividing a price by `base_rate` is the fee-free local price.
|
|
627
|
+
- https://docs.stripe.com/payments/currencies/localize-prices/adaptive-pricing — the buyer pays a 2–4% conversion fee that Stripe decides ("includes 4% conversion fee" on a PLN Checkout, 2026-10): the mid-market rate × (1 + fee), a different fee from the FX Quotes' `fx_fee_rate`.
|
|
614
628
|
|
|
615
629
|
## Related
|
|
616
630
|
|
package/build/entitlement.js
CHANGED
|
@@ -39,7 +39,7 @@ export const makeEntitlementService = (alias = ENTITLEMENT_SERVICE) => {
|
|
|
39
39
|
const effective = await catalogueOf(ctx).resolveEffectivePlan(entityId, at);
|
|
40
40
|
const declared = Object.entries(effective.plan.limits ?? {});
|
|
41
41
|
const windows = new Map(declared.map(([key, declaration]) => [
|
|
42
|
-
key, planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at),
|
|
42
|
+
key, planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective.subscription?.createdAt),
|
|
43
43
|
]));
|
|
44
44
|
const usage = [];
|
|
45
45
|
if (declared.length > 0) {
|
package/build/entitlement.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entitlement.js","sourceRoot":"","sources":["../src/entitlement.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"entitlement.js","sourceRoot":"","sources":["../src/entitlement.ts"],"names":[],"mappings":"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"}
|
package/build/model.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { JSONSchemaType } from 'ajv';
|
|
2
|
+
import type { BillingProfileRecord, ConsumerConsentRecord, ConsumerDeclarationRecord, ConsumerEventRecord, FingerprintRecord, PaygateCustomerRecord, PaymentFulfillmentRecord, PaymentSubscriptionRecord, PaymentUsageCounterRecord, PaymentUsageRecord, PaymentWebhookRecord, PurchaseRecord } from './types.js';
|
|
3
|
+
export declare const PaygateCustomerSchema: JSONSchemaType<PaygateCustomerRecord>;
|
|
4
|
+
export declare const PaymentSubscriptionSchema: JSONSchemaType<PaymentSubscriptionRecord>;
|
|
5
|
+
export declare const PaymentFulfillmentSchema: JSONSchemaType<PaymentFulfillmentRecord>;
|
|
6
|
+
export declare const PaymentWebhookSchema: JSONSchemaType<PaymentWebhookRecord>;
|
|
7
|
+
export declare const PaymentUsageSchema: JSONSchemaType<PaymentUsageRecord>;
|
|
8
|
+
export declare const PaymentUsageCounterSchema: JSONSchemaType<PaymentUsageCounterRecord>;
|
|
9
|
+
export declare const FingerprintSchema: JSONSchemaType<FingerprintRecord>;
|
|
10
|
+
export declare const BillingProfileSchema: JSONSchemaType<BillingProfileRecord>;
|
|
11
|
+
export declare const PurchaseSchema: JSONSchemaType<PurchaseRecord>;
|
|
12
|
+
export declare const ConsumerConsentSchema: JSONSchemaType<ConsumerConsentRecord>;
|
|
13
|
+
export declare const ConsumerDeclarationSchema: JSONSchemaType<ConsumerDeclarationRecord>;
|
|
14
|
+
export declare const ConsumerEventSchema: JSONSchemaType<ConsumerEventRecord>;
|
|
15
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAMzC,OAAO,KAAK,EACV,oBAAoB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,iBAAiB,EAC9G,qBAAqB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,yBAAyB,EACrG,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EACzD,MAAM,YAAY,CAAA;AAkBnB,eAAO,MAAM,qBAAqB,EAQlB,cAAc,CAAC,qBAAqB,CAAC,CAAA;AAErD,eAAO,MAAM,yBAAyB,EA0CtB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,wBAAwB,EAcrB,cAAc,CAAC,wBAAwB,CAAC,CAAA;AAExD,eAAO,MAAM,oBAAoB,EAUjB,cAAc,CAAC,oBAAoB,CAAC,CAAA;AAEpD,eAAO,MAAM,kBAAkB,EAQf,cAAc,CAAC,kBAAkB,CAAC,CAAA;AAElD,eAAO,MAAM,yBAAyB,EAQtB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAgCd,cAAc,CAAC,iBAAiB,CAAC,CAAA;AAoBjD,eAAO,MAAM,oBAAoB,EAUjB,cAAc,CAAC,oBAAoB,CAAC,CAAA;AAEpD,eAAO,MAAM,cAAc,EAoBX,cAAc,CAAC,cAAc,CAAC,CAAA;AAE9C,eAAO,MAAM,qBAAqB,EAoBlB,cAAc,CAAC,qBAAqB,CAAC,CAAA;AAErD,eAAO,MAAM,yBAAyB,EAatB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,mBAAmB,EAkBhB,cAAc,CAAC,mBAAmB,CAAC,CAAA"}
|
package/build/model.js
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { DateSchema } from '@owlmeans/auth';
|
|
2
|
+
import { CancellationKindSchema, CheckoutPricingModeSchema, ConsentKindSchema, ConsumerRegionSchema, DeclarationChannelSchema, DeclarationKindSchema, PurchaseKindSchema, SubscriptionStatusSchema, } from '@owlmeans/payment';
|
|
3
|
+
/**
|
|
4
|
+
* Record schemas. Every stored property is declared: the resource coerces a write through its
|
|
5
|
+
* schema, and a property the schema does not know is written as a string. Dates follow the record
|
|
6
|
+
* convention (`DateSchema`). None of these records declares an ObjectId reference — `entityId`
|
|
7
|
+
* is an organization key and every other id is the paygate's.
|
|
8
|
+
*/
|
|
9
|
+
const str = { type: 'string' };
|
|
10
|
+
const optStr = { type: 'string', nullable: true };
|
|
11
|
+
const num = { type: 'number' };
|
|
12
|
+
const optNum = { type: 'number', nullable: true };
|
|
13
|
+
const optBool = { type: 'boolean', nullable: true };
|
|
14
|
+
const date = DateSchema;
|
|
15
|
+
const optDate = { ...DateSchema, nullable: true };
|
|
16
|
+
const id = { type: 'string', nullable: true };
|
|
17
|
+
export const PaygateCustomerSchema = {
|
|
18
|
+
type: 'object',
|
|
19
|
+
properties: {
|
|
20
|
+
id, paygate: str, externalId: str, entityId: optStr, profileId: optStr, email: optStr, name: optStr,
|
|
21
|
+
taxId: optStr, country: optStr, currency: optStr, deletedAt: optDate,
|
|
22
|
+
},
|
|
23
|
+
required: ['paygate', 'externalId'],
|
|
24
|
+
additionalProperties: false,
|
|
25
|
+
};
|
|
26
|
+
export const PaymentSubscriptionSchema = {
|
|
27
|
+
type: 'object',
|
|
28
|
+
properties: {
|
|
29
|
+
id, entityId: str, planSku: str, productSku: str, service: str, paygate: str, externalId: str,
|
|
30
|
+
itemId: optStr, priceId: optStr, status: SubscriptionStatusSchema, externalStatus: optStr, rank: num,
|
|
31
|
+
periodStart: optDate, periodEnd: optDate, cancelAtPeriodEnd: optBool, canceledAt: optDate,
|
|
32
|
+
endedAt: optDate, pausedAt: optDate, trialEnd: optDate, latestInvoiceId: optStr, customerId: optStr,
|
|
33
|
+
disputedAt: optDate, disputeStatus: optStr, createdAt: date, updatedAt: optDate, syncedAt: optDate,
|
|
34
|
+
lastEventId: optStr, initialPropagatedAt: optDate, currency: optStr,
|
|
35
|
+
checkoutSessionId: optStr, purchaseId: optStr, firstInvoiceId: optStr, country: optStr, email: optStr,
|
|
36
|
+
amountTotalMinor: optNum, amountTaxMinor: optNum, termsAccepted: optBool, startRequestId: optStr,
|
|
37
|
+
withdrawnAt: optDate,
|
|
38
|
+
overrides: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
nullable: true,
|
|
41
|
+
properties: {
|
|
42
|
+
limits: {
|
|
43
|
+
type: 'object',
|
|
44
|
+
nullable: true,
|
|
45
|
+
additionalProperties: {
|
|
46
|
+
type: 'object', properties: { limit: num }, required: ['limit'], additionalProperties: false,
|
|
47
|
+
},
|
|
48
|
+
required: [],
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
additionalProperties: false,
|
|
52
|
+
},
|
|
53
|
+
propagated: {
|
|
54
|
+
type: 'object',
|
|
55
|
+
nullable: true,
|
|
56
|
+
properties: {
|
|
57
|
+
planSku: str, rank: num, status: SubscriptionStatusSchema, cancelAtPeriodEnd: optBool,
|
|
58
|
+
pausedAt: optDate, renewedInvoiceId: optStr,
|
|
59
|
+
},
|
|
60
|
+
required: ['planSku', 'rank', 'status'],
|
|
61
|
+
additionalProperties: false,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
required: [
|
|
65
|
+
'entityId', 'planSku', 'productSku', 'service', 'paygate', 'externalId', 'status', 'rank', 'createdAt',
|
|
66
|
+
],
|
|
67
|
+
additionalProperties: false,
|
|
68
|
+
};
|
|
69
|
+
export const PaymentFulfillmentSchema = {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: {
|
|
72
|
+
id, entityId: str, productSku: str, planSku: optStr, service: str, paygate: str, externalId: str,
|
|
73
|
+
paymentIntentId: optStr, chargeId: optStr, invoiceId: optStr, mode: CheckoutPricingModeSchema,
|
|
74
|
+
units: optNum, amountMinor: optNum, sourceChargeAmountMinor: optNum, amountCurrency: optStr,
|
|
75
|
+
chargeAmountMinor: optNum, currency: optStr, createdAt: date,
|
|
76
|
+
fulfilledAt: optDate, failedAt: optDate, refundedMinor: optNum, refundedAt: optDate,
|
|
77
|
+
disputedAt: optDate, disputeStatus: optStr,
|
|
78
|
+
country: optStr, email: optStr, profileId: optStr, amountTotalMinor: optNum, amountTaxMinor: optNum,
|
|
79
|
+
termsAccepted: optBool, purchaseId: optStr,
|
|
80
|
+
},
|
|
81
|
+
required: ['entityId', 'productSku', 'service', 'paygate', 'externalId', 'mode', 'createdAt'],
|
|
82
|
+
additionalProperties: false,
|
|
83
|
+
};
|
|
84
|
+
export const PaymentWebhookSchema = {
|
|
85
|
+
type: 'object',
|
|
86
|
+
properties: {
|
|
87
|
+
id, paygate: str, service: str, url: str, externalId: str,
|
|
88
|
+
/** The signing secret: field-encrypted when the database is configured with a key. */
|
|
89
|
+
secret: { type: 'string', secure: true },
|
|
90
|
+
apiVersion: str, events: { type: 'array', items: str }, hash: str, createdAt: date, updatedAt: optDate,
|
|
91
|
+
},
|
|
92
|
+
required: ['paygate', 'service', 'url', 'externalId', 'secret', 'apiVersion', 'events', 'hash', 'createdAt'],
|
|
93
|
+
additionalProperties: false,
|
|
94
|
+
};
|
|
95
|
+
export const PaymentUsageSchema = {
|
|
96
|
+
type: 'object',
|
|
97
|
+
properties: {
|
|
98
|
+
id, entityId: str, limitKey: str, window: str, delta: num, eventKey: str, ref: optStr, reason: optStr,
|
|
99
|
+
planSku: optStr, createdAt: date, releasedAt: optDate,
|
|
100
|
+
},
|
|
101
|
+
required: ['entityId', 'limitKey', 'window', 'delta', 'eventKey', 'createdAt'],
|
|
102
|
+
additionalProperties: false,
|
|
103
|
+
};
|
|
104
|
+
export const PaymentUsageCounterSchema = {
|
|
105
|
+
type: 'object',
|
|
106
|
+
properties: {
|
|
107
|
+
id, entityId: str, limitKey: str, window: str, used: num, limit: num, planSku: optStr,
|
|
108
|
+
overSince: optDate, updatedAt: date, reconciledAt: optDate,
|
|
109
|
+
},
|
|
110
|
+
required: ['entityId', 'limitKey', 'window', 'used', 'limit', 'updatedAt'],
|
|
111
|
+
additionalProperties: false,
|
|
112
|
+
};
|
|
113
|
+
export const FingerprintSchema = {
|
|
114
|
+
type: 'object',
|
|
115
|
+
properties: {
|
|
116
|
+
id, sku: str, hash: str, productId: optStr, externalId: optStr,
|
|
117
|
+
prices: {
|
|
118
|
+
type: 'array',
|
|
119
|
+
nullable: true,
|
|
120
|
+
items: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
planSku: str, priceId: str, lookupKey: str, currency: str, unitAmount: num,
|
|
124
|
+
// An array, never a currency-keyed map: the resource coerces a map's values to strings.
|
|
125
|
+
options: {
|
|
126
|
+
type: 'array',
|
|
127
|
+
items: {
|
|
128
|
+
type: 'object', properties: { currency: str, unitAmount: num },
|
|
129
|
+
required: ['currency', 'unitAmount'], additionalProperties: false,
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
taxBehavior: optStr, interval: optStr, sourceUnitAmount: num, sourceCurrency: str, syncedAt: date,
|
|
133
|
+
},
|
|
134
|
+
required: [
|
|
135
|
+
'planSku', 'priceId', 'lookupKey', 'currency', 'unitAmount', 'options', 'sourceUnitAmount',
|
|
136
|
+
'sourceCurrency', 'syncedAt',
|
|
137
|
+
],
|
|
138
|
+
additionalProperties: false,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
updatedAt: date,
|
|
142
|
+
},
|
|
143
|
+
required: ['sku', 'hash', 'updatedAt'],
|
|
144
|
+
additionalProperties: false,
|
|
145
|
+
};
|
|
146
|
+
/** An optional enum: `null` must be listed for a validator to accept it. */
|
|
147
|
+
const nullableEnum = (values) => ({ type: 'string', enum: [...values, null], nullable: true });
|
|
148
|
+
/** The request evidence every consumer act carries (`RequestOrigin`). */
|
|
149
|
+
const origin = {
|
|
150
|
+
ip: optStr, forwardedFor: optStr, userAgent: optStr, ipCountry: optStr, acceptLanguage: optStr, via: optStr,
|
|
151
|
+
};
|
|
152
|
+
const links = {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: {
|
|
155
|
+
billingTerms: str, withdrawalInformation: optStr, withdrawalForm: optStr, withdrawalFunction: optStr,
|
|
156
|
+
cancellation: optStr,
|
|
157
|
+
},
|
|
158
|
+
required: ['billingTerms'],
|
|
159
|
+
additionalProperties: false,
|
|
160
|
+
};
|
|
161
|
+
export const BillingProfileSchema = {
|
|
162
|
+
type: 'object',
|
|
163
|
+
properties: {
|
|
164
|
+
id, entityId: str, country: str, region: ConsumerRegionSchema, currency: str, language: str,
|
|
165
|
+
source: { type: 'string', enum: ['checkout', 'customer', 'manual'] }, paygate: str, customerId: optStr,
|
|
166
|
+
sessionId: optStr, ipCountry: optStr, email: optStr, name: optStr, business: optBool, lockedAt: date,
|
|
167
|
+
createdAt: date, updatedAt: optDate,
|
|
168
|
+
},
|
|
169
|
+
required: ['entityId', 'country', 'region', 'currency', 'language', 'source', 'paygate', 'lockedAt', 'createdAt'],
|
|
170
|
+
additionalProperties: false,
|
|
171
|
+
};
|
|
172
|
+
export const PurchaseSchema = {
|
|
173
|
+
type: 'object',
|
|
174
|
+
properties: {
|
|
175
|
+
id, purchaseId: str, contractRef: str, entityId: str, kind: PurchaseKindSchema, paygate: str,
|
|
176
|
+
sessionId: optStr, subscriptionId: optStr, paymentIntentId: optStr, invoiceId: optStr, invoiceNumber: optStr,
|
|
177
|
+
invoiceLineId: optStr, productSku: str, planSku: optStr, profileId: optStr, country: optStr,
|
|
178
|
+
region: nullableEnum(ConsumerRegionSchema.enum), ipCountry: optStr, inScope: { type: 'boolean' },
|
|
179
|
+
language: str, email: optStr, name: optStr, business: optBool, currency: str, amountSubtotalMinor: num,
|
|
180
|
+
amountTaxMinor: num, amountTotalMinor: num, presentmentCurrency: optStr, presentmentAmountMinor: optNum,
|
|
181
|
+
netAmountMinor: optNum, amountCurrency: optStr, units: optNum, taxBehavior: optStr, termsAccepted: optBool,
|
|
182
|
+
textVersion: optStr, copyVersion: optStr, startRequestId: optStr, servicesStartedAt: optDate,
|
|
183
|
+
confirmationMailAt: optDate, purchasedAt: date, deadline: optDate, consentId: optStr, consentedAt: optDate,
|
|
184
|
+
withdrawalId: optStr, withdrawnAt: optDate, refundedMinor: optNum, refundedAt: optDate, cancellationId: optStr,
|
|
185
|
+
cancelEffectiveAt: optDate, createdAt: date, updatedAt: optDate,
|
|
186
|
+
},
|
|
187
|
+
required: [
|
|
188
|
+
'purchaseId', 'contractRef', 'entityId', 'kind', 'paygate', 'productSku', 'inScope', 'language', 'currency',
|
|
189
|
+
'amountSubtotalMinor', 'amountTaxMinor', 'amountTotalMinor', 'purchasedAt', 'createdAt',
|
|
190
|
+
],
|
|
191
|
+
additionalProperties: false,
|
|
192
|
+
};
|
|
193
|
+
export const ConsumerConsentSchema = {
|
|
194
|
+
type: 'object',
|
|
195
|
+
properties: {
|
|
196
|
+
id, kind: ConsentKindSchema, entityId: str, profileId: optStr, name: optStr, email: optStr,
|
|
197
|
+
purchaseIds: { type: 'array', items: str },
|
|
198
|
+
planSku: optStr, planName: optStr, textVersion: str, copyVersion: str, language: str, uiLanguage: optStr, trader: str,
|
|
199
|
+
context: optStr,
|
|
200
|
+
text: {
|
|
201
|
+
type: 'object',
|
|
202
|
+
properties: { request: str, acknowledgement: str, checkbox: str },
|
|
203
|
+
required: ['request', 'acknowledgement', 'checkbox'],
|
|
204
|
+
additionalProperties: false,
|
|
205
|
+
},
|
|
206
|
+
links, deadline: optDate, decidedAt: date, expiresAt: optDate, ...origin,
|
|
207
|
+
},
|
|
208
|
+
required: [
|
|
209
|
+
'kind', 'entityId', 'purchaseIds', 'textVersion', 'copyVersion', 'language', 'trader', 'text', 'links',
|
|
210
|
+
'decidedAt',
|
|
211
|
+
],
|
|
212
|
+
additionalProperties: false,
|
|
213
|
+
};
|
|
214
|
+
export const ConsumerDeclarationSchema = {
|
|
215
|
+
type: 'object',
|
|
216
|
+
properties: {
|
|
217
|
+
id, kind: DeclarationKindSchema, channel: DeclarationChannelSchema, entityId: optStr, purchaseId: optStr,
|
|
218
|
+
subscriptionId: optStr, contractRef: optStr, name: str, email: str,
|
|
219
|
+
cancellationKind: nullableEnum(CancellationKindSchema.enum), reason: optStr,
|
|
220
|
+
effective: nullableEnum(['earliest', 'date']), requestedDate: optStr,
|
|
221
|
+
language: str, textVersion: optStr, copyVersion: str, receivedAt: date, matched: { type: 'boolean' },
|
|
222
|
+
profileId: optStr, duplicateOf: optStr, status: str, refundMinor: optNum, currency: optStr,
|
|
223
|
+
effectiveAt: optDate, ...origin,
|
|
224
|
+
},
|
|
225
|
+
required: ['kind', 'channel', 'name', 'email', 'language', 'copyVersion', 'receivedAt', 'matched', 'status'],
|
|
226
|
+
additionalProperties: false,
|
|
227
|
+
};
|
|
228
|
+
export const ConsumerEventSchema = {
|
|
229
|
+
type: 'object',
|
|
230
|
+
properties: {
|
|
231
|
+
id, recordId: str,
|
|
232
|
+
recordKind: { type: 'string', enum: ['purchase', 'consent', 'declaration', 'profile', 'checkout'] },
|
|
233
|
+
entityId: optStr,
|
|
234
|
+
action: {
|
|
235
|
+
type: 'string',
|
|
236
|
+
enum: [
|
|
237
|
+
'mail', 'computed', 'meter', 'refund', 'credit-note', 'subscription-cancel', 'cancel-scheduled', 'observers',
|
|
238
|
+
'lock', 'lock-mismatch', 'relock', 'unlock', 'duplicate', 'checkout-terms-fallback',
|
|
239
|
+
],
|
|
240
|
+
},
|
|
241
|
+
step: optStr, ok: { type: 'boolean' }, skipped: optBool, externalId: optStr, amountMinor: optNum,
|
|
242
|
+
currency: optStr, detail: optStr, error: optStr, at: date,
|
|
243
|
+
},
|
|
244
|
+
required: ['recordId', 'recordKind', 'action', 'ok', 'at'],
|
|
245
|
+
additionalProperties: false,
|
|
246
|
+
};
|
|
247
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/plugins/estimate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjE,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAsGxE,eAAO,MAAM,kBAAkB,QAAS,UAAU,KAAG,
|
|
1
|
+
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/plugins/estimate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAMjE,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAsGxE,eAAO,MAAM,kBAAkB,QAAS,UAAU,KAAG,cA+LpD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,UAAU,+EAAyC,CAAA"}
|
|
@@ -130,8 +130,12 @@ export const makeEstimateHelper = (ctx) => {
|
|
|
130
130
|
const option = synced.options.find(entry => entry.currency === chargeCurrency);
|
|
131
131
|
return option != null ? { subtotalMinor: option.unitAmount, currency: chargeCurrency } : reference;
|
|
132
132
|
};
|
|
133
|
-
// Currency: Stripe FX Quotes, a PREVIEW endpoint — see `STRIPE_FX_QUOTES_API_VERSION`.
|
|
134
|
-
|
|
133
|
+
// Currency: Stripe FX Quotes, a PREVIEW endpoint — see `STRIPE_FX_QUOTES_API_VERSION`. A buyer's
|
|
134
|
+
// local currency is priced by Adaptive Pricing at the BASE rate plus its own conversion fee
|
|
135
|
+
// (`price × (1 + fee)`, 2–4% as Stripe decides), which the quote's fee-inclusive `exchange_rate`
|
|
136
|
+
// (base × (1 − `fx_fee_rate`), 2%) understates; a policy declaring `adaptiveFeeRate` is estimated
|
|
137
|
+
// the way Checkout prices it, one without keeps the quote's rate.
|
|
138
|
+
const fetchFxRate = async (stripe, currency, localCurrency, apiVersion, settlementCurrency = currency, adaptiveFeeRate) => {
|
|
135
139
|
const settlement = settlementCurrency.toLowerCase();
|
|
136
140
|
const sourceRate = settlement === currency
|
|
137
141
|
? { referenceRate: 1 }
|
|
@@ -144,9 +148,11 @@ export const makeEstimateHelper = (ctx) => {
|
|
|
144
148
|
const localRate = await fxOf(ctx).stripeFxRate(stripe, localCurrency, settlement, apiVersion);
|
|
145
149
|
if (localRate == null)
|
|
146
150
|
return null;
|
|
151
|
+
const settlementPerLocal = adaptiveFeeRate != null ? localRate.baseRate / (1 + adaptiveFeeRate) : localRate.exchangeRate;
|
|
152
|
+
const feeRate = adaptiveFeeRate ?? localRate.fxFeeRate;
|
|
147
153
|
return {
|
|
148
|
-
currency: localCurrency, exchangeRate:
|
|
149
|
-
...(
|
|
154
|
+
currency: localCurrency, exchangeRate: settlementPerLocal / sourceRate.referenceRate,
|
|
155
|
+
...(feeRate != null ? { fxFeeRate: feeRate } : {}),
|
|
150
156
|
};
|
|
151
157
|
};
|
|
152
158
|
const estimateStripePrice = async (stripe, params, cache) => {
|
|
@@ -249,7 +255,8 @@ export const makeEstimateHelper = (ctx) => {
|
|
|
249
255
|
const apiVersion = stripePricing?.fxApiVersion ?? STRIPE_FX_QUOTES_API_VERSION;
|
|
250
256
|
const settlementCurrency = stripePricing?.settlementCurrency?.toLowerCase() ?? currency;
|
|
251
257
|
// A preview endpoint: unreachable or erroring never fails the estimate, it only drops `local`.
|
|
252
|
-
const
|
|
258
|
+
const feeRate = pricing.currency.adaptiveFeeRate;
|
|
259
|
+
const fx = await cached(cache.fx, cache.inflight, `fx:${currency}:${settlementCurrency}:${localCurrency}:${apiVersion}:${feeRate ?? ''}`, cache.fxTtlMs, () => fetchFxRate(stripe, currency, localCurrency, apiVersion, settlementCurrency, feeRate)).catch(() => null);
|
|
253
260
|
if (fx != null) {
|
|
254
261
|
result.local = { currency: fx.currency, exchangeRate: fx.exchangeRate, ...(fx.fxFeeRate != null ? { fxFeeRate: fx.fxFeeRate } : {}) };
|
|
255
262
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/plugins/estimate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/plugins/estimate.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,10 @@ import type Stripe from 'stripe';
|
|
|
2
2
|
export interface StripeFxRate {
|
|
3
3
|
fromCurrency: string;
|
|
4
4
|
toCurrency: string;
|
|
5
|
-
/** Stripe's fee-inclusive conversion rate. */
|
|
5
|
+
/** Stripe's fee-inclusive conversion rate (`base_rate × (1 − fx_fee_rate)`). */
|
|
6
6
|
exchangeRate: number;
|
|
7
|
+
/** The rate before any fee (Stripe's `base_rate`; derived from `exchangeRate` and `fxFeeRate` when absent). */
|
|
8
|
+
baseRate: number;
|
|
7
9
|
/** Market/reference rate used to translate catalogue value into settlement value. */
|
|
8
10
|
referenceRate: number;
|
|
9
11
|
fxFeeRate?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/fx/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/fx/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAA;IACpB,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAA;IAChB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAA;AAEzE,0FAA0F;AAC1F,MAAM,WAAW,QAAQ;IACvB,oFAAoF;IACpF,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAC5H;;;OAGG;IACH,YAAY,EAAE,CACZ,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,KACjH,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC9B,mFAAmF;IACnF,gBAAgB,EAAE,CAChB,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,KACzF,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx.d.ts","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjE,OAAO,KAAK,EAAqD,QAAQ,EAAE,MAAM,eAAe,CAAA;AAahG,eAAO,MAAM,YAAY,QAAS,UAAU,KAAG,
|
|
1
|
+
{"version":3,"file":"fx.d.ts","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjE,OAAO,KAAK,EAAqD,QAAQ,EAAE,MAAM,eAAe,CAAA;AAahG,eAAO,MAAM,YAAY,QAAS,UAAU,KAAG,QA8E9C,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,IAAI,yEAAmC,CAAA"}
|
package/build/plugins/fx.js
CHANGED
|
@@ -17,7 +17,7 @@ export const makeFxHelper = (ctx) => {
|
|
|
17
17
|
const from = fromCurrency.toLowerCase();
|
|
18
18
|
const to = toCurrency.toLowerCase();
|
|
19
19
|
if (from === to)
|
|
20
|
-
return { fromCurrency: from, toCurrency: to, exchangeRate: 1, referenceRate: 1 };
|
|
20
|
+
return { fromCurrency: from, toCurrency: to, exchangeRate: 1, baseRate: 1, referenceRate: 1 };
|
|
21
21
|
const response = await stripe.rawRequest('POST', '/v1/fx_quotes', { to_currency: to, 'from_currencies[]': from, lock_duration: 'none' }, { apiVersion });
|
|
22
22
|
const rate = response.rates?.[from];
|
|
23
23
|
if (rate?.exchange_rate == null)
|
|
@@ -26,6 +26,7 @@ export const makeFxHelper = (ctx) => {
|
|
|
26
26
|
fromCurrency: from,
|
|
27
27
|
toCurrency: to,
|
|
28
28
|
exchangeRate: rate.exchange_rate,
|
|
29
|
+
baseRate: rate.rate_details?.base_rate ?? rate.exchange_rate / (1 - (rate.rate_details?.fx_fee_rate ?? 0)),
|
|
29
30
|
referenceRate: rate.rate_details?.reference_rate ?? rate.rate_details?.base_rate ?? rate.exchange_rate,
|
|
30
31
|
...(rate.rate_details?.fx_fee_rate != null ? { fxFeeRate: rate.rate_details.fx_fee_rate } : {}),
|
|
31
32
|
};
|
package/build/plugins/fx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx.js","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAA;AAG3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,kGAAkG;AAClG,MAAM,YAAY,GAAG,CAAC,WAAmB,EAAE,IAAY,EAAU,EAAE;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;WAC3F,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,YAAY,CAAC,WAAW,CAAC,CAAA;IACrC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAe,EAAY,EAAE;IACxD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEnC,MAAM,YAAY,GAAG,KAAK,EACxB,MAAc,EAAE,YAAoB,EAAE,UAAkB,EAAE,UAAkB,EAC9C,EAAE;QAChC,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,CAAA;QACvC,MAAM,EAAE,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;QACnC,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"fx.js","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"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"}
|
package/build/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQjE,OAAO,KAAK,EAAyB,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAQjE,OAAO,KAAK,EAAyB,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAgE1E,eAAO,MAAM,eAAe,QAAS,UAAU,KAAG,WAkWjD,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,OAAO,4EAAsC,CAAA"}
|
package/build/usage.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LimitExhausted, LimitKind, LimitMisdeclared, LimitUnknown, LimitWindow, OCCUPANCY_WINDOW, entitlementViewHelper, planLimitHelper, promoHelper } from '@owlmeans/payment';
|
|
1
|
+
import { LimitExhausted, LimitKind, LimitMisdeclared, LimitUnknown, LimitWindow, OCCUPANCY_WINDOW, SUBSCRIPTION_WEEK_MS, SUBSCRIPTION_WEEK_PREFIX, entitlementViewHelper, planLimitHelper, promoHelper } from '@owlmeans/payment';
|
|
2
2
|
import { UnsupportedArgumentError } from '@owlmeans/resource';
|
|
3
3
|
import { memoHelper } from '@owlmeans/context';
|
|
4
4
|
import { log } from './log.js';
|
|
@@ -16,8 +16,12 @@ import { catalogueOf } from './catalogue.js';
|
|
|
16
16
|
* event spent, which `reconcileCounters` repairs from the ledger; the opposite order would let two
|
|
17
17
|
* concurrent requests both read "room left" and both spend it.
|
|
18
18
|
*/
|
|
19
|
-
/** When a stored window renews: the first instant of the next day
|
|
19
|
+
/** When a stored window renews: the first instant of the next day, month or subscription week. */
|
|
20
20
|
const resetsAtOfWindow = (window) => {
|
|
21
|
+
if (window.startsWith(SUBSCRIPTION_WEEK_PREFIX)) {
|
|
22
|
+
const start = new Date(window.slice(SUBSCRIPTION_WEEK_PREFIX.length)).getTime();
|
|
23
|
+
return Number.isFinite(start) ? new Date(start + SUBSCRIPTION_WEEK_MS) : undefined;
|
|
24
|
+
}
|
|
21
25
|
const day = DAY_WINDOW.exec(window);
|
|
22
26
|
if (day != null) {
|
|
23
27
|
return new Date(Date.UTC(Number(day[1]), Number(day[2]) - 1, Number(day[3]) + 1));
|
|
@@ -38,6 +42,10 @@ const declarationOf = (effective, limitKey) => {
|
|
|
38
42
|
};
|
|
39
43
|
const isActiveConsumption = (event) => event != null && event.delta > 0 && event.releasedAt == null;
|
|
40
44
|
const isPastWindow = (window, at) => {
|
|
45
|
+
if (window.startsWith(SUBSCRIPTION_WEEK_PREFIX)) {
|
|
46
|
+
const reset = resetsAtOfWindow(window);
|
|
47
|
+
return reset != null && reset.getTime() <= at.getTime();
|
|
48
|
+
}
|
|
41
49
|
if (DAY_WINDOW.test(window)) {
|
|
42
50
|
return window < planLimitHelper.windowKeyOf(LimitKind.Window, LimitWindow.Day, at);
|
|
43
51
|
}
|
|
@@ -103,7 +111,7 @@ export const makeUsageHelper = (ctx) => {
|
|
|
103
111
|
const declaration = declarationOf(effective, req.limitKey);
|
|
104
112
|
const limit = ceilingOf(declaration, effective, at);
|
|
105
113
|
const key = {
|
|
106
|
-
entityId: req.entityId, limitKey: req.limitKey, window: planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at),
|
|
114
|
+
entityId: req.entityId, limitKey: req.limitKey, window: planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt),
|
|
107
115
|
};
|
|
108
116
|
const ledger = access.usageEvents();
|
|
109
117
|
// A retry of an event already written answers from the ledger before admission is asked: at the
|
|
@@ -125,7 +133,7 @@ export const makeUsageHelper = (ctx) => {
|
|
|
125
133
|
}
|
|
126
134
|
const current = await readCounter(key);
|
|
127
135
|
const resetsAt = declaration.kind === LimitKind.Window && declaration.window != null
|
|
128
|
-
? planLimitHelper.windowBoundsOf(declaration.window, at).resetsAt : undefined;
|
|
136
|
+
? planLimitHelper.windowBoundsOf(declaration.window, at, effective?.subscription?.createdAt).resetsAt : undefined;
|
|
129
137
|
throw new LimitExhausted({ key: req.limitKey, used: current?.used ?? 0, limit, resetsAt });
|
|
130
138
|
}
|
|
131
139
|
try {
|
|
@@ -200,7 +208,7 @@ export const makeUsageHelper = (ctx) => {
|
|
|
200
208
|
const at = new Date();
|
|
201
209
|
const effective = await catalogueOf(ctx).resolveEffectivePlan(entityId, at);
|
|
202
210
|
const declaration = declarationOf(effective, limitKey);
|
|
203
|
-
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at);
|
|
211
|
+
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt);
|
|
204
212
|
const counter = await readCounter({ entityId, limitKey, window });
|
|
205
213
|
const [view] = entitlementViewHelper.limitViewsOf({ limits: { [limitKey]: declaration } }, counter != null ? [{ key: limitKey, window, used: counter.used }] : [], effective.subscription?.createdAt, at);
|
|
206
214
|
return view;
|
|
@@ -335,7 +343,7 @@ export const makeUsageHelper = (ctx) => {
|
|
|
335
343
|
if (declaration.kind !== LimitKind.Window) {
|
|
336
344
|
continue;
|
|
337
345
|
}
|
|
338
|
-
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at);
|
|
346
|
+
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt);
|
|
339
347
|
if (seen.has(`${limitKey}${window}`)) {
|
|
340
348
|
continue;
|
|
341
349
|
}
|
package/build/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/server-payment",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.35",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Protocol-bound payment resources, entitlement gates, and Stripe checkout for OwlMeans servers.",
|
|
6
6
|
"type": "module",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
"@owlmeans/config": "^0.1.18-rc.44",
|
|
31
31
|
"@owlmeans/context": "^0.1.18-rc.34",
|
|
32
32
|
"@owlmeans/entrypoint": "^0.1.18-rc.41",
|
|
33
|
-
"@owlmeans/iam": "^0.1.18-rc.
|
|
33
|
+
"@owlmeans/iam": "^0.1.18-rc.53",
|
|
34
34
|
"@owlmeans/mailer": "^0.1.18-rc.37",
|
|
35
35
|
"@owlmeans/mongo-resource": "^0.1.18-rc.44",
|
|
36
|
-
"@owlmeans/payment": "^0.1.18-rc.
|
|
36
|
+
"@owlmeans/payment": "^0.1.18-rc.51",
|
|
37
37
|
"@owlmeans/resource": "^0.1.18-rc.40",
|
|
38
38
|
"@owlmeans/log": "^0.1.18-rc.3",
|
|
39
39
|
"@owlmeans/route": "^0.1.18-rc.35",
|
|
40
|
-
"@owlmeans/server-api": "^0.1.18-rc.
|
|
41
|
-
"@owlmeans/server-app": "^0.1.18-rc.
|
|
40
|
+
"@owlmeans/server-api": "^0.1.18-rc.54",
|
|
41
|
+
"@owlmeans/server-app": "^0.1.18-rc.56",
|
|
42
42
|
"@owlmeans/server-context": "^0.1.18-rc.44",
|
|
43
43
|
"@owlmeans/server-entrypoint": "^0.1.18-rc.40",
|
|
44
44
|
"async-mutex": "^0.5.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@owlmeans/dep-config": "workspace:*",
|
|
49
|
-
"@owlmeans/mongo": "^0.1.18-rc.
|
|
49
|
+
"@owlmeans/mongo": "^0.1.18-rc.48",
|
|
50
50
|
"@owlmeans/test-integration": "^0.1.18-rc.34",
|
|
51
51
|
"@types/bun": "^1.4.2",
|
|
52
52
|
"@types/node": "^26.6.4",
|
package/src/entitlement.ts
CHANGED
|
@@ -47,7 +47,7 @@ export const makeEntitlementService = (alias: string = ENTITLEMENT_SERVICE): Ent
|
|
|
47
47
|
const effective = await catalogueOf(ctx).resolveEffectivePlan(entityId, at)
|
|
48
48
|
const declared = Object.entries(effective.plan.limits ?? {})
|
|
49
49
|
const windows = new Map(declared.map(([key, declaration]) => [
|
|
50
|
-
key, planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at),
|
|
50
|
+
key, planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective.subscription?.createdAt),
|
|
51
51
|
]))
|
|
52
52
|
const usage: LimitUsage[] = []
|
|
53
53
|
if (declared.length > 0) {
|
package/src/plugins/estimate.ts
CHANGED
|
@@ -152,10 +152,14 @@ export const makeEstimateHelper = (ctx: ApiContext): EstimateHelper => {
|
|
|
152
152
|
return option != null ? { subtotalMinor: option.unitAmount, currency: chargeCurrency } : reference
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
// Currency: Stripe FX Quotes, a PREVIEW endpoint — see `STRIPE_FX_QUOTES_API_VERSION`.
|
|
155
|
+
// Currency: Stripe FX Quotes, a PREVIEW endpoint — see `STRIPE_FX_QUOTES_API_VERSION`. A buyer's
|
|
156
|
+
// local currency is priced by Adaptive Pricing at the BASE rate plus its own conversion fee
|
|
157
|
+
// (`price × (1 + fee)`, 2–4% as Stripe decides), which the quote's fee-inclusive `exchange_rate`
|
|
158
|
+
// (base × (1 − `fx_fee_rate`), 2%) understates; a policy declaring `adaptiveFeeRate` is estimated
|
|
159
|
+
// the way Checkout prices it, one without keeps the quote's rate.
|
|
156
160
|
const fetchFxRate = async (
|
|
157
161
|
stripe: Stripe, currency: string, localCurrency: string, apiVersion: string,
|
|
158
|
-
settlementCurrency: string = currency,
|
|
162
|
+
settlementCurrency: string = currency, adaptiveFeeRate?: number,
|
|
159
163
|
): Promise<FxOutcome> => {
|
|
160
164
|
const settlement = settlementCurrency.toLowerCase()
|
|
161
165
|
const sourceRate = settlement === currency
|
|
@@ -167,9 +171,11 @@ export const makeEstimateHelper = (ctx: ApiContext): EstimateHelper => {
|
|
|
167
171
|
}
|
|
168
172
|
const localRate = await fxOf(ctx).stripeFxRate(stripe, localCurrency, settlement, apiVersion)
|
|
169
173
|
if (localRate == null) return null
|
|
174
|
+
const settlementPerLocal = adaptiveFeeRate != null ? localRate.baseRate / (1 + adaptiveFeeRate) : localRate.exchangeRate
|
|
175
|
+
const feeRate = adaptiveFeeRate ?? localRate.fxFeeRate
|
|
170
176
|
return {
|
|
171
|
-
currency: localCurrency, exchangeRate:
|
|
172
|
-
...(
|
|
177
|
+
currency: localCurrency, exchangeRate: settlementPerLocal / sourceRate.referenceRate,
|
|
178
|
+
...(feeRate != null ? { fxFeeRate: feeRate } : {}),
|
|
173
179
|
}
|
|
174
180
|
}
|
|
175
181
|
|
|
@@ -278,9 +284,10 @@ export const makeEstimateHelper = (ctx: ApiContext): EstimateHelper => {
|
|
|
278
284
|
const apiVersion = stripePricing?.fxApiVersion ?? STRIPE_FX_QUOTES_API_VERSION
|
|
279
285
|
const settlementCurrency = stripePricing?.settlementCurrency?.toLowerCase() ?? currency
|
|
280
286
|
// A preview endpoint: unreachable or erroring never fails the estimate, it only drops `local`.
|
|
287
|
+
const feeRate = pricing.currency.adaptiveFeeRate
|
|
281
288
|
const fx = await cached(
|
|
282
|
-
cache.fx, cache.inflight, `fx:${currency}:${settlementCurrency}:${localCurrency}:${apiVersion}`, cache.fxTtlMs,
|
|
283
|
-
() => fetchFxRate(stripe, currency, localCurrency, apiVersion, settlementCurrency),
|
|
289
|
+
cache.fx, cache.inflight, `fx:${currency}:${settlementCurrency}:${localCurrency}:${apiVersion}:${feeRate ?? ''}`, cache.fxTtlMs,
|
|
290
|
+
() => fetchFxRate(stripe, currency, localCurrency, apiVersion, settlementCurrency, feeRate),
|
|
284
291
|
).catch(() => null)
|
|
285
292
|
if (fx != null) {
|
|
286
293
|
result.local = { currency: fx.currency, exchangeRate: fx.exchangeRate, ...(fx.fxFeeRate != null ? { fxFeeRate: fx.fxFeeRate } : {}) }
|
package/src/plugins/fx/types.ts
CHANGED
|
@@ -3,8 +3,10 @@ import type Stripe from 'stripe'
|
|
|
3
3
|
export interface StripeFxRate {
|
|
4
4
|
fromCurrency: string
|
|
5
5
|
toCurrency: string
|
|
6
|
-
/** Stripe's fee-inclusive conversion rate. */
|
|
6
|
+
/** Stripe's fee-inclusive conversion rate (`base_rate × (1 − fx_fee_rate)`). */
|
|
7
7
|
exchangeRate: number
|
|
8
|
+
/** The rate before any fee (Stripe's `base_rate`; derived from `exchangeRate` and `fxFeeRate` when absent). */
|
|
9
|
+
baseRate: number
|
|
8
10
|
/** Market/reference rate used to translate catalogue value into settlement value. */
|
|
9
11
|
referenceRate: number
|
|
10
12
|
fxFeeRate?: number
|
package/src/plugins/fx.ts
CHANGED
|
@@ -25,7 +25,7 @@ export const makeFxHelper = (ctx: ApiContext): FxHelper => {
|
|
|
25
25
|
): Promise<StripeFxRate | null> => {
|
|
26
26
|
const from = fromCurrency.toLowerCase()
|
|
27
27
|
const to = toCurrency.toLowerCase()
|
|
28
|
-
if (from === to) return { fromCurrency: from, toCurrency: to, exchangeRate: 1, referenceRate: 1 }
|
|
28
|
+
if (from === to) return { fromCurrency: from, toCurrency: to, exchangeRate: 1, baseRate: 1, referenceRate: 1 }
|
|
29
29
|
const response = await stripe.rawRequest(
|
|
30
30
|
'POST', '/v1/fx_quotes',
|
|
31
31
|
{ to_currency: to, 'from_currencies[]': from, lock_duration: 'none' },
|
|
@@ -37,6 +37,7 @@ export const makeFxHelper = (ctx: ApiContext): FxHelper => {
|
|
|
37
37
|
fromCurrency: from,
|
|
38
38
|
toCurrency: to,
|
|
39
39
|
exchangeRate: rate.exchange_rate,
|
|
40
|
+
baseRate: rate.rate_details?.base_rate ?? rate.exchange_rate / (1 - (rate.rate_details?.fx_fee_rate ?? 0)),
|
|
40
41
|
referenceRate: rate.rate_details?.reference_rate ?? rate.rate_details?.base_rate ?? rate.exchange_rate,
|
|
41
42
|
...(rate.rate_details?.fx_fee_rate != null ? { fxFeeRate: rate.rate_details.fx_fee_rate } : {}),
|
|
42
43
|
}
|
package/src/usage.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LimitExhausted, LimitKind, LimitMisdeclared, LimitUnknown, LimitWindow, OCCUPANCY_WINDOW, type LimitDeclaration, type LimitView, entitlementViewHelper, planLimitHelper, promoHelper } from '@owlmeans/payment'
|
|
1
|
+
import { LimitExhausted, LimitKind, LimitMisdeclared, LimitUnknown, LimitWindow, OCCUPANCY_WINDOW, SUBSCRIPTION_WEEK_MS, SUBSCRIPTION_WEEK_PREFIX, type LimitDeclaration, type LimitView, entitlementViewHelper, planLimitHelper, promoHelper } from '@owlmeans/payment'
|
|
2
2
|
import { UnsupportedArgumentError } from '@owlmeans/resource'
|
|
3
3
|
import type { Context as ApiContext } from '@owlmeans/server-api'
|
|
4
4
|
import { memoHelper } from '@owlmeans/context'
|
|
@@ -24,8 +24,12 @@ import { catalogueOf } from './catalogue.js'
|
|
|
24
24
|
* concurrent requests both read "room left" and both spend it.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
/** When a stored window renews: the first instant of the next day
|
|
27
|
+
/** When a stored window renews: the first instant of the next day, month or subscription week. */
|
|
28
28
|
const resetsAtOfWindow = (window: string): Date | undefined => {
|
|
29
|
+
if (window.startsWith(SUBSCRIPTION_WEEK_PREFIX)) {
|
|
30
|
+
const start = new Date(window.slice(SUBSCRIPTION_WEEK_PREFIX.length)).getTime()
|
|
31
|
+
return Number.isFinite(start) ? new Date(start + SUBSCRIPTION_WEEK_MS) : undefined
|
|
32
|
+
}
|
|
29
33
|
const day = DAY_WINDOW.exec(window)
|
|
30
34
|
if (day != null) {
|
|
31
35
|
return new Date(Date.UTC(Number(day[1]), Number(day[2]) - 1, Number(day[3]) + 1))
|
|
@@ -54,6 +58,10 @@ const isActiveConsumption = (event: PaymentUsageRecord | null): boolean =>
|
|
|
54
58
|
event != null && event.delta > 0 && event.releasedAt == null
|
|
55
59
|
|
|
56
60
|
const isPastWindow = (window: string, at: Date): boolean => {
|
|
61
|
+
if (window.startsWith(SUBSCRIPTION_WEEK_PREFIX)) {
|
|
62
|
+
const reset = resetsAtOfWindow(window)
|
|
63
|
+
return reset != null && reset.getTime() <= at.getTime()
|
|
64
|
+
}
|
|
57
65
|
if (DAY_WINDOW.test(window)) {
|
|
58
66
|
return window < planLimitHelper.windowKeyOf(LimitKind.Window, LimitWindow.Day, at)
|
|
59
67
|
}
|
|
@@ -136,7 +144,7 @@ export const makeUsageHelper = (ctx: ApiContext): UsageHelper => {
|
|
|
136
144
|
const declaration = declarationOf(effective, req.limitKey)
|
|
137
145
|
const limit = ceilingOf(declaration, effective, at)
|
|
138
146
|
const key: CounterKey = {
|
|
139
|
-
entityId: req.entityId, limitKey: req.limitKey, window: planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at),
|
|
147
|
+
entityId: req.entityId, limitKey: req.limitKey, window: planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt),
|
|
140
148
|
}
|
|
141
149
|
const ledger = access.usageEvents()
|
|
142
150
|
|
|
@@ -160,7 +168,7 @@ export const makeUsageHelper = (ctx: ApiContext): UsageHelper => {
|
|
|
160
168
|
}
|
|
161
169
|
const current = await readCounter(key)
|
|
162
170
|
const resetsAt = declaration.kind === LimitKind.Window && declaration.window != null
|
|
163
|
-
? planLimitHelper.windowBoundsOf(declaration.window, at).resetsAt : undefined
|
|
171
|
+
? planLimitHelper.windowBoundsOf(declaration.window, at, effective?.subscription?.createdAt).resetsAt : undefined
|
|
164
172
|
throw new LimitExhausted({ key: req.limitKey, used: current?.used ?? 0, limit, resetsAt })
|
|
165
173
|
}
|
|
166
174
|
|
|
@@ -250,7 +258,7 @@ export const makeUsageHelper = (ctx: ApiContext): UsageHelper => {
|
|
|
250
258
|
const at = new Date()
|
|
251
259
|
const effective = await catalogueOf(ctx).resolveEffectivePlan(entityId, at)
|
|
252
260
|
const declaration = declarationOf(effective, limitKey)
|
|
253
|
-
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at)
|
|
261
|
+
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt)
|
|
254
262
|
const counter = await readCounter({ entityId, limitKey, window })
|
|
255
263
|
const [view] = entitlementViewHelper.limitViewsOf({ limits: { [limitKey]: declaration } }, counter != null ? [{ key: limitKey, window, used: counter.used }] : [], effective.subscription?.createdAt, at)
|
|
256
264
|
|
|
@@ -400,7 +408,7 @@ export const makeUsageHelper = (ctx: ApiContext): UsageHelper => {
|
|
|
400
408
|
if (declaration.kind !== LimitKind.Window) {
|
|
401
409
|
continue
|
|
402
410
|
}
|
|
403
|
-
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at)
|
|
411
|
+
const window = planLimitHelper.windowKeyOf(declaration.kind, declaration.window, at, effective?.subscription?.createdAt)
|
|
404
412
|
if (seen.has(`${limitKey}${window}`)) {
|
|
405
413
|
continue
|
|
406
414
|
}
|
package/tests/context.ts
CHANGED
|
@@ -65,6 +65,7 @@ export const makeSuite = (label: string, opts: SuiteOptions = {}): MongoSuite =>
|
|
|
65
65
|
productSku: PLANS_PRODUCT, sku: BURST_PLAN, duration: PlanDuration.Monthly, rank: 30, price: 90,
|
|
66
66
|
recurring: { interval: 'month' },
|
|
67
67
|
limits: {
|
|
68
|
+
weekly: { kind: LimitKind.Window, window: LimitWindow.SubscriptionWeek, limit: 1 },
|
|
68
69
|
burst: { kind: LimitKind.Window, window: LimitWindow.Day, limit: 5 },
|
|
69
70
|
seats: { kind: LimitKind.Occupancy, limit: 1 },
|
|
70
71
|
},
|
package/tests/estimate.spec.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
import { PaygateError, TaxBehavior, TaxEstimateStatus, TaxType } from '@owlmeans/payment'
|
|
2
|
+
import { PaygateError, PlanDuration, priceEstimateHelper, TaxBehavior, TaxEstimateStatus, TaxType } from '@owlmeans/payment'
|
|
3
3
|
import { CREDITS_PRODUCT, makeFakeContext, PLANS_PRODUCT, PRO } from './fake-stripe.js'
|
|
4
4
|
import type { FakeContext } from './fake-stripe.js'
|
|
5
5
|
import { EUR_SETTLEMENT, makeRightsContext } from './consumer-fixtures.js'
|
|
@@ -219,6 +219,81 @@ describe('@owlmeans/server-payment — Stripe Tax price estimate', () => {
|
|
|
219
219
|
expect(result.local?.exchangeRate).toBeCloseTo(0.22 / 0.8726)
|
|
220
220
|
})
|
|
221
221
|
|
|
222
|
+
describe('the Adaptive Pricing conversion fee (`currency.adaptiveFeeRate`)', () => {
|
|
223
|
+
// Stripe test mode, 2026-10: 1 PLN = 0.227941 EUR before fees, 0.223382 with the FX Quotes 2% fee;
|
|
224
|
+
// Checkout showed 1 EUR = 4.5626 PLN, "includes 4% conversion fee" — 0.227941 / 1.04.
|
|
225
|
+
const PLN = { exchangeRate: 0.223382, baseRate: 0.227941, referenceRate: 0.228128, fxFeeRate: 0.02 }
|
|
226
|
+
const EUR_PRO = 'pro-eur'
|
|
227
|
+
const eurPro = {
|
|
228
|
+
catalogue: {
|
|
229
|
+
plans: [{
|
|
230
|
+
productSku: PLANS_PRODUCT, sku: EUR_PRO, duration: PlanDuration.Monthly, rank: 30, price: 18, currency: 'eur',
|
|
231
|
+
recurring: { interval: 'month' as const },
|
|
232
|
+
}],
|
|
233
|
+
},
|
|
234
|
+
}
|
|
235
|
+
const pricing = (adaptiveFeeRate?: number) => ({
|
|
236
|
+
...EUR_SETTLEMENT,
|
|
237
|
+
currency: { adaptive: true, estimate: true, ...(adaptiveFeeRate != null ? { adaptiveFeeRate } : {}) },
|
|
238
|
+
})
|
|
239
|
+
const estimate = async (fake: FakeContext, product: string, planSku?: string) => {
|
|
240
|
+
const result = await estimateOf(fake.ctx).estimateStripePrice(fake.stripe, {
|
|
241
|
+
entityId: 'entity-1', productSku: product, ...(planSku != null ? { planSku } : {}), country: 'PL',
|
|
242
|
+
}, makeEstimateCache())
|
|
243
|
+
return { result, quoted: priceEstimateHelper.estimateOf(result.tax.subtotalMinor, result) }
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
test('a EUR subscription is estimated at the base rate plus the fee — what Checkout shows (€22.14 → 101.02 PLN)', async () => {
|
|
247
|
+
const fake = await makeFakeContext({
|
|
248
|
+
...eurPro, pricing: pricing(0.04),
|
|
249
|
+
stripe: { taxRates: { PL: [{ type: 'vat', percentage: '23' }] }, fxRates: { pln: PLN } },
|
|
250
|
+
})
|
|
251
|
+
const { result, quoted } = await estimate(fake, PLANS_PRODUCT, EUR_PRO)
|
|
252
|
+
expect(result.currency).toBe('eur')
|
|
253
|
+
expect(result.local?.exchangeRate).toBeCloseTo(0.227941 / 1.04, 9)
|
|
254
|
+
expect(result.local?.fxFeeRate).toBe(0.04)
|
|
255
|
+
expect(quoted.totalMinor).toBe(2_214)
|
|
256
|
+
expect(quoted.local?.totalAmount).toBeCloseTo(101.02, 1)
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
test('without the fee the estimate keeps the FX Quotes rate (€22.14 → 99.11 PLN)', async () => {
|
|
260
|
+
const fake = await makeFakeContext({
|
|
261
|
+
...eurPro, pricing: pricing(),
|
|
262
|
+
stripe: { taxRates: { PL: [{ type: 'vat', percentage: '23' }] }, fxRates: { pln: PLN } },
|
|
263
|
+
})
|
|
264
|
+
const { result, quoted } = await estimate(fake, PLANS_PRODUCT, EUR_PRO)
|
|
265
|
+
expect(result.local).toEqual({ currency: 'pln', exchangeRate: 0.223382, fxFeeRate: 0.02 })
|
|
266
|
+
expect(quoted.local?.totalAmount).toBeCloseTo(99.11, 1)
|
|
267
|
+
})
|
|
268
|
+
|
|
269
|
+
test('a top-up (USD → EUR reference rate, then the fee) applies it as well', async () => {
|
|
270
|
+
const fake = await makeRightsContext({
|
|
271
|
+
pricing: pricing(0.04),
|
|
272
|
+
stripe: {
|
|
273
|
+
taxRates: { PL: [{ type: 'vat', percentage: '23' }] },
|
|
274
|
+
fxRates: { usd: { exchangeRate: 0.853568, referenceRate: 0.8726 }, pln: PLN },
|
|
275
|
+
},
|
|
276
|
+
})
|
|
277
|
+
const { result } = await estimate(fake, CREDITS_PRODUCT)
|
|
278
|
+
expect(result.currency).toBe('usd')
|
|
279
|
+
expect(result.local?.exchangeRate).toBeCloseTo(0.227941 / 1.04 / 0.8726, 9)
|
|
280
|
+
expect(result.local?.fxFeeRate).toBe(0.04)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
test('a buyer whose local currency IS the settlement currency pays no conversion fee', async () => {
|
|
284
|
+
const fake = await makeRightsContext({
|
|
285
|
+
pricing: pricing(0.04),
|
|
286
|
+
stripe: { taxRates: { DE: [{ type: 'vat', percentage: '19' }] }, fxRates: { usd: { exchangeRate: 0.853568, referenceRate: 0.8726 } } },
|
|
287
|
+
})
|
|
288
|
+
const result = await estimateOf(fake.ctx).estimateStripePrice(fake.stripe, {
|
|
289
|
+
entityId: 'entity-1', productSku: CREDITS_PRODUCT, country: 'DE',
|
|
290
|
+
}, makeEstimateCache())
|
|
291
|
+
expect(result.local?.currency).toBe('eur')
|
|
292
|
+
expect(result.local?.exchangeRate).toBeCloseTo(1 / 0.8726, 9)
|
|
293
|
+
expect(result.local?.fxFeeRate).toBeUndefined()
|
|
294
|
+
})
|
|
295
|
+
})
|
|
296
|
+
|
|
222
297
|
test('a top-up charged in exact USD (outside the EU) carries no local line, with no FX call', async () => {
|
|
223
298
|
const fake = await makeRightsContext({
|
|
224
299
|
pricing: { ...EUR_SETTLEMENT, currency: { adaptive: true, estimate: true } },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { afterAll, beforeAll, describe, expect, test } from 'bun:test'
|
|
2
|
-
import { LimitExhausted, SubscriptionStatus } from '@owlmeans/payment'
|
|
2
|
+
import { LimitExhausted, LimitKind, LimitWindow, SUBSCRIPTION_WEEK_MS, planLimitHelper, SubscriptionStatus } from '@owlmeans/payment'
|
|
3
3
|
import { createEventHandler } from '../src/plugins/events.js'
|
|
4
4
|
import { BURST_PLAN, gate, makeSuite } from './context.js'
|
|
5
5
|
import type { Booted } from './context.js'
|
|
@@ -20,6 +20,40 @@ describe('@owlmeans/server-payment — usage ledger on Mongo', () => {
|
|
|
20
20
|
beforeAll(async () => { booted = await suite.boot() }, 60_000)
|
|
21
21
|
afterAll(async () => { await suite.teardown() }, 60_000)
|
|
22
22
|
|
|
23
|
+
it('uses subscription weeks for admission, views, reconciliation, replay and release', async () => {
|
|
24
|
+
const { ctx } = booted
|
|
25
|
+
const access = paymentAccessOf(ctx)
|
|
26
|
+
const service = access.entitlements()
|
|
27
|
+
await access.gateway().grantInternalPlan(ctx, 'weekly-1', BURST_PLAN, { force: true })
|
|
28
|
+
const anchor = new Date(Date.now() - 2 * 24 * 60 * 60 * 1000)
|
|
29
|
+
await access.subscriptions().collection.updateOne({ entityId: 'weekly-1', planSku: BURST_PLAN }, { $set: { createdAt: anchor } })
|
|
30
|
+
const window = planLimitHelper.windowKeyOf(LimitKind.Window, LimitWindow.SubscriptionWeek, new Date(), anchor)
|
|
31
|
+
const outcomes = await Promise.allSettled(Array.from({ length: 8 }, (_, index) =>
|
|
32
|
+
service.consume({ entityId: 'weekly-1', limitKey: 'weekly', eventKey: `weekly:${index}` })))
|
|
33
|
+
expect(outcomes.filter(row => row.status === 'fulfilled')).toHaveLength(1)
|
|
34
|
+
const winner = outcomes.find(row => row.status === 'fulfilled')!
|
|
35
|
+
if (winner.status !== 'fulfilled') throw new Error('No admitted weekly unit')
|
|
36
|
+
expect(winner.value.window).toBe(window)
|
|
37
|
+
expect(winner.value.resetsAt).toEqual(new Date(anchor.getTime() + SUBSCRIPTION_WEEK_MS))
|
|
38
|
+
expect((await service.entitlements('weekly-1')).limits.find(row => row.key === 'weekly')).toMatchObject({ used: 1, remaining: 0, windowStart: anchor })
|
|
39
|
+
await access.usageCounters().collection.updateOne({ entityId: 'weekly-1', limitKey: 'weekly', window }, { $set: { used: 9 } })
|
|
40
|
+
await service.reconcileCounters('weekly-1')
|
|
41
|
+
expect((await service.limitState('weekly-1', 'weekly')).used).toBe(1)
|
|
42
|
+
const request = { entityId: 'weekly-1', limitKey: 'weekly', eventKey: winner.value.eventKey }
|
|
43
|
+
expect((await service.consume(request)).replayed).toBe(true)
|
|
44
|
+
expect((await service.release(request)).remaining).toBe(1)
|
|
45
|
+
expect((await service.consume(request)).admitted).toBe(false)
|
|
46
|
+
const oldStart = new Date(anchor.getTime() - SUBSCRIPTION_WEEK_MS)
|
|
47
|
+
const oldWindow = planLimitHelper.windowKeyOf(LimitKind.Window, LimitWindow.SubscriptionWeek, oldStart, anchor)
|
|
48
|
+
await access.usageEvents().create({ entityId: 'weekly-1', limitKey: 'weekly', window: oldWindow,
|
|
49
|
+
delta: 1, eventKey: 'weekly:past', createdAt: oldStart, planSku: BURST_PLAN })
|
|
50
|
+
await service.reconcileCounters('weekly-1')
|
|
51
|
+
expect((await service.consume({ ...request, eventKey: 'weekly:past' })).resetsAt).toEqual(anchor)
|
|
52
|
+
await service.release({ ...request, eventKey: 'weekly:past' })
|
|
53
|
+
expect((await service.limitState('weekly-1', 'weekly')).used).toBe(0)
|
|
54
|
+
expect((await service.consume({ ...request, eventKey: 'weekly:new' })).admitted).toBe(true)
|
|
55
|
+
}, 60_000)
|
|
56
|
+
|
|
23
57
|
it('admits exactly the limit out of 20 concurrent consumes', async () => {
|
|
24
58
|
const { ctx } = booted
|
|
25
59
|
await paymentAccessOf(ctx).gateway().grantInternalPlan(ctx, 'burst-1', BURST_PLAN, { force: true })
|