@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 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.52
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
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/server-payment",
4
- "version": "0.1.18-rc.33",
5
- "generatedAt": "2026-10-08T21:27:54.309Z",
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.33`
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
 
@@ -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) {
@@ -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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"}
@@ -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":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EACL,sBAAsB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,oBAAoB,EAC1F,wBAAwB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,wBAAwB,GAC9F,MAAM,mBAAmB,CAAA;AAO1B;;;;;GAKG;AAEH,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAW,CAAA;AACvC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAA;AAC1D,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAW,CAAA;AACvC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAA;AAC1D,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAA;AAC5D,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,MAAM,OAAO,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACjD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAA;AAEtD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;QACnG,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;KACrE;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACnC,oBAAoB,EAAE,KAAK;CACwB,CAAA;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;QAC7F,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;QACpG,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;QACzF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;QACnG,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO;QAClG,WAAW,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;QACnE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;QACrG,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM;QAChG,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,IAAI;oBACd,oBAAoB,EAAE;wBACpB,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,KAAK;qBAC7F;oBACD,QAAQ,EAAE,EAAE;iBACb;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,OAAO;gBACrF,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM;aAC5C;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC;YACvC,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW;KACvG;IACD,oBAAoB,EAAE,KAAK;CAC4B,CAAA;AAEzD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;QAChG,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB;QAC7F,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;QAC3F,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI;QAC5D,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;QACnF,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM;QAC1C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;QACnG,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;KAC3C;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC;IAC7F,oBAAoB,EAAE,KAAK;CAC2B,CAAA;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;QACzD,sFAAsF;QACtF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE;QACxC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO;KACvG;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;IAC5G,oBAAoB,EAAE,KAAK;CACuB,CAAA;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACrG,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO;KACtD;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC;IAC9E,oBAAoB,EAAE,KAAK;CACqB,CAAA;AAElD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;QACrF,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO;KAC3D;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC;IAC1E,oBAAoB,EAAE,KAAK;CAC4B,CAAA;AAEzD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;QAC9D,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG;oBAC1E,wFAAwF;oBACxF,OAAO,EAAE;wBACP,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;4BAC9D,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,oBAAoB,EAAE,KAAK;yBAClE;qBACF;oBACD,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI;iBAClG;gBACD,QAAQ,EAAE;oBACR,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,kBAAkB;oBAC1F,gBAAgB,EAAE,UAAU;iBAC7B;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,SAAS,EAAE,IAAI;KAChB;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;IACtC,oBAAoB,EAAE,KAAK;CACoB,CAAA;AAEjD,4EAA4E;AAC5E,MAAM,YAAY,GAAG,CAAC,MAA0B,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAElH,yEAAyE;AACzE,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CACnG,CAAA;AAEV,MAAM,KAAK,GAAG;IACZ,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,YAAY,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM;QACpG,YAAY,EAAE,MAAM;KACrB;IACD,QAAQ,EAAE,CAAC,cAAc,CAAC;IAC1B,oBAAoB,EAAE,KAAK;CACnB,CAAA;AAEV,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;QAC3F,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM;QACtG,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI;QACpG,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO;KACpC;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;IACjH,oBAAoB,EAAE,KAAK;CACuB,CAAA;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG;QAC5F,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;QAC5G,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;QAC3F,MAAM,EAAE,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAChG,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,mBAAmB,EAAE,GAAG;QACtG,cAAc,EAAE,GAAG,EAAE,gBAAgB,EAAE,GAAG,EAAE,mBAAmB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM;QACvG,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO;QAC1G,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO;QAC5F,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO;QAC1G,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM;QAC9G,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO;KAChE;IACD,QAAQ,EAAE;QACR,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU;QAC3G,qBAAqB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW;KACxF;IACD,oBAAoB,EAAE,KAAK;CACiB,CAAA;AAE9C,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;QAC1F,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE;QAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG;QACrH,OAAO,EAAE,MAAM;QACf,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjE,QAAQ,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,UAAU,CAAC;YACpD,oBAAoB,EAAE,KAAK;SAC5B;QACD,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM;KACzE;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;QACtG,WAAW;KACZ;IACD,oBAAoB,EAAE,KAAK;CACwB,CAAA;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;QACxG,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG;QAClE,gBAAgB,EAAE,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM;QAC3E,SAAS,EAAE,YAAY,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM;QACpE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpG,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;QAC1F,WAAW,EAAE,OAAO,EAAE,GAAG,MAAM;KAChC;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;IAC5G,oBAAoB,EAAE,KAAK;CAC4B,CAAA;AAEzD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,QAAQ,EAAE,GAAG;QACjB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE;QACnG,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE;gBACJ,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,WAAW;gBAC5G,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB;aACpF;SACF;QACD,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;QAChG,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI;KAC1D;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;IAC1D,oBAAoB,EAAE,KAAK;CACsB,CAAA"}
@@ -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,cAwLpD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,UAAU,+EAAyC,CAAA"}
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
- const fetchFxRate = async (stripe, currency, localCurrency, apiVersion, settlementCurrency = currency) => {
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: localRate.exchangeRate / sourceRate.referenceRate,
149
- ...(localRate.fxFeeRate != null ? { fxFeeRate: localRate.fxFeeRate } : {}),
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 fx = await cached(cache.fx, cache.inflight, `fx:${currency}:${settlementCurrency}:${localCurrency}:${apiVersion}`, cache.fxTtlMs, () => fetchFxRate(stripe, currency, localCurrency, apiVersion, settlementCurrency)).catch(() => null);
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,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAA;IACpB,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
+ {"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,QA6E9C,CAAA;AAED,wDAAwD;AACxD,eAAO,MAAM,IAAI,yEAAmC,CAAA"}
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"}
@@ -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
  };
@@ -1 +1 @@
1
- {"version":3,"file":"fx.js","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fx.js","sourceRoot":"","sources":["../../src/plugins/fx.ts"],"names":[],"mappings":"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"}
@@ -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;AAwD1E,eAAO,MAAM,eAAe,QAAS,UAAU,KAAG,WAkWjD,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,OAAO,4EAAsC,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 or month; nothing for the others. */
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
  }
@@ -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.33",
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.52",
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.50",
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.53",
41
- "@owlmeans/server-app": "^0.1.18-rc.54",
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.47",
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",
@@ -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) {
@@ -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: localRate.exchangeRate / sourceRate.referenceRate,
172
- ...(localRate.fxFeeRate != null ? { fxFeeRate: localRate.fxFeeRate } : {}),
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 } : {}) }
@@ -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 or month; nothing for the others. */
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
  },
@@ -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 })