@owlmeans/payment 0.1.18-rc.8 → 0.1.18
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 +95 -57
- package/agent-meta/manifest.json +10 -3
- package/agent-meta/skills/entitlements/SKILL.md +159 -0
- package/agent-meta/skills/payment/SKILL.md +491 -28
- package/build/advertise.d.ts +2 -0
- package/build/advertise.d.ts.map +1 -0
- package/build/advertise.js +10 -0
- package/build/advertise.js.map +1 -0
- package/build/checkout/consts.d.ts +2 -0
- package/build/checkout/consts.d.ts.map +1 -0
- package/build/checkout/consts.js +2 -0
- package/build/checkout/consts.js.map +1 -0
- package/build/checkout/index.d.ts +6 -0
- package/build/checkout/index.d.ts.map +1 -0
- package/build/checkout/index.js +4 -0
- package/build/checkout/index.js.map +1 -0
- package/build/checkout/narrow/types.d.ts +25 -0
- package/build/checkout/narrow/types.d.ts.map +1 -0
- package/build/checkout/narrow/types.js +2 -0
- package/build/checkout/narrow/types.js.map +1 -0
- package/build/checkout/narrow.d.ts +8 -0
- package/build/checkout/narrow.d.ts.map +1 -0
- package/build/checkout/narrow.js +47 -0
- package/build/checkout/narrow.js.map +1 -0
- package/build/checkout/protocols.d.ts +8 -0
- package/build/checkout/protocols.d.ts.map +1 -0
- package/build/checkout/protocols.js +28 -0
- package/build/checkout/protocols.js.map +1 -0
- package/build/checkout/types.d.ts +29 -0
- package/build/checkout/types.d.ts.map +1 -0
- package/build/checkout/types.js +2 -0
- package/build/checkout/types.js.map +1 -0
- package/build/consts.d.ts +242 -25
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +377 -24
- package/build/consts.js.map +1 -1
- package/build/consts.local.d.ts +20 -0
- package/build/consts.local.d.ts.map +1 -0
- package/build/consts.local.js +23 -0
- package/build/consts.local.js.map +1 -0
- package/build/consumer/cancel.d.ts +11 -0
- package/build/consumer/cancel.d.ts.map +1 -0
- package/build/consumer/cancel.js +33 -0
- package/build/consumer/cancel.js.map +1 -0
- package/build/consumer/consts.d.ts +20 -0
- package/build/consumer/consts.d.ts.map +1 -0
- package/build/consumer/consts.js +39 -0
- package/build/consumer/consts.js.map +1 -0
- package/build/consumer/consts.local.d.ts +7 -0
- package/build/consumer/consts.local.d.ts.map +1 -0
- package/build/consumer/consts.local.js +13 -0
- package/build/consumer/consts.local.js.map +1 -0
- package/build/consumer/copy/types.d.ts +56 -0
- package/build/consumer/copy/types.d.ts.map +1 -0
- package/build/consumer/copy/types.js +2 -0
- package/build/consumer/copy/types.js.map +1 -0
- package/build/consumer/copy.d.ts +22 -0
- package/build/consumer/copy.d.ts.map +1 -0
- package/build/consumer/copy.js +87 -0
- package/build/consumer/copy.js.map +1 -0
- package/build/consumer/deadline/types.d.ts +30 -0
- package/build/consumer/deadline/types.d.ts.map +1 -0
- package/build/consumer/deadline/types.js +2 -0
- package/build/consumer/deadline/types.js.map +1 -0
- package/build/consumer/deadline.d.ts +12 -0
- package/build/consumer/deadline.d.ts.map +1 -0
- package/build/consumer/deadline.js +44 -0
- package/build/consumer/deadline.js.map +1 -0
- package/build/consumer/fifo/types.d.ts +17 -0
- package/build/consumer/fifo/types.d.ts.map +1 -0
- package/build/consumer/fifo/types.js +2 -0
- package/build/consumer/fifo/types.js.map +1 -0
- package/build/consumer/fifo.d.ts +4 -0
- package/build/consumer/fifo.d.ts.map +1 -0
- package/build/consumer/fifo.js +34 -0
- package/build/consumer/fifo.js.map +1 -0
- package/build/consumer/index.d.ts +18 -0
- package/build/consumer/index.d.ts.map +1 -0
- package/build/consumer/index.js +11 -0
- package/build/consumer/index.js.map +1 -0
- package/build/consumer/policy/types.d.ts +20 -0
- package/build/consumer/policy/types.d.ts.map +1 -0
- package/build/consumer/policy/types.js +2 -0
- package/build/consumer/policy/types.js.map +1 -0
- package/build/consumer/policy.d.ts +17 -0
- package/build/consumer/policy.d.ts.map +1 -0
- package/build/consumer/policy.js +91 -0
- package/build/consumer/policy.js.map +1 -0
- package/build/consumer/protocols.d.ts +20 -0
- package/build/consumer/protocols.d.ts.map +1 -0
- package/build/consumer/protocols.js +70 -0
- package/build/consumer/protocols.js.map +1 -0
- package/build/consumer/refund/types.d.ts +27 -0
- package/build/consumer/refund/types.d.ts.map +1 -0
- package/build/consumer/refund/types.js +2 -0
- package/build/consumer/refund/types.js.map +1 -0
- package/build/consumer/refund.d.ts +9 -0
- package/build/consumer/refund.d.ts.map +1 -0
- package/build/consumer/refund.js +112 -0
- package/build/consumer/refund.js.map +1 -0
- package/build/consumer/refusal.d.ts +10 -0
- package/build/consumer/refusal.d.ts.map +1 -0
- package/build/consumer/refusal.js +35 -0
- package/build/consumer/refusal.js.map +1 -0
- package/build/consumer/revive/types.d.ts +19 -0
- package/build/consumer/revive/types.d.ts.map +1 -0
- package/build/consumer/revive/types.js +2 -0
- package/build/consumer/revive/types.js.map +1 -0
- package/build/consumer/revive.d.ts +13 -0
- package/build/consumer/revive.d.ts.map +1 -0
- package/build/consumer/revive.js +43 -0
- package/build/consumer/revive.js.map +1 -0
- package/build/consumer/types.d.ts +196 -0
- package/build/consumer/types.d.ts.map +1 -0
- package/build/consumer/types.js +2 -0
- package/build/consumer/types.js.map +1 -0
- package/build/consumer/types.local.d.ts +11 -0
- package/build/consumer/types.local.d.ts.map +1 -0
- package/build/consumer/types.local.js +2 -0
- package/build/consumer/types.local.js.map +1 -0
- package/build/countries.d.ts +3 -0
- package/build/countries.d.ts.map +1 -0
- package/build/countries.js +4 -0
- package/build/countries.js.map +1 -0
- package/build/entitled.d.ts +14 -0
- package/build/entitled.d.ts.map +1 -0
- package/build/entitled.js +17 -0
- package/build/entitled.js.map +1 -0
- package/build/entitlement/types.d.ts +29 -0
- package/build/entitlement/types.d.ts.map +1 -0
- package/build/entitlement/types.js +2 -0
- package/build/entitlement/types.js.map +1 -0
- package/build/entitlement.d.ts +12 -0
- package/build/entitlement.d.ts.map +1 -0
- package/build/entitlement.js +64 -0
- package/build/entitlement.js.map +1 -0
- package/build/errors.d.ts +189 -0
- package/build/errors.d.ts.map +1 -1
- package/build/errors.js +361 -0
- package/build/errors.js.map +1 -1
- package/build/estimate/types.d.ts +34 -0
- package/build/estimate/types.d.ts.map +1 -0
- package/build/estimate/types.js +2 -0
- package/build/estimate/types.js.map +1 -0
- package/build/estimate.d.ts +11 -0
- package/build/estimate.d.ts.map +1 -0
- package/build/estimate.js +76 -0
- package/build/estimate.js.map +1 -0
- package/build/i18n/consumer-rights/be.json +131 -0
- package/build/i18n/consumer-rights/de.json +131 -0
- package/build/i18n/consumer-rights/en.json +131 -0
- package/build/i18n/consumer-rights/es.json +131 -0
- package/build/i18n/consumer-rights/fr.json +131 -0
- package/build/i18n/consumer-rights/pl.json +131 -0
- package/build/i18n/consumer-rights/ru.json +131 -0
- package/build/i18n/consumer-rights/uk.json +131 -0
- package/build/i18n/errors/be.json +30 -0
- package/build/i18n/errors/de.json +30 -0
- package/build/i18n/errors/en.json +30 -0
- package/build/i18n/errors/es.json +30 -0
- package/build/i18n/errors/fr.json +30 -0
- package/build/i18n/errors/pl.json +30 -0
- package/build/i18n/errors/ru.json +30 -0
- package/build/i18n/errors/uk.json +30 -0
- package/build/i18n/fr.json +39 -0
- package/build/i18n.js +53 -8
- package/build/i18n.js.map +1 -1
- package/build/index.d.ts +19 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +12 -1
- package/build/index.js.map +1 -1
- package/build/limit/types.d.ts +44 -0
- package/build/limit/types.d.ts.map +1 -0
- package/build/limit/types.js +2 -0
- package/build/limit/types.js.map +1 -0
- package/build/limit.d.ts +23 -0
- package/build/limit.d.ts.map +1 -0
- package/build/limit.js +97 -0
- package/build/limit.js.map +1 -0
- package/build/model/checkout.d.ts +2 -3
- package/build/model/checkout.d.ts.map +1 -1
- package/build/model/checkout.js +12 -7
- package/build/model/checkout.js.map +1 -1
- package/build/model/consts.d.ts +15 -0
- package/build/model/consts.d.ts.map +1 -0
- package/build/model/consts.js +193 -0
- package/build/model/consts.js.map +1 -0
- package/build/model/consts.local.d.ts +35 -0
- package/build/model/consts.local.d.ts.map +1 -0
- package/build/model/consts.local.js +65 -0
- package/build/model/consts.local.js.map +1 -0
- package/build/model/consumer.d.ts +23 -0
- package/build/model/consumer.d.ts.map +1 -0
- package/build/model/consumer.js +272 -0
- package/build/model/consumer.js.map +1 -0
- package/build/model/estimate.d.ts +5 -0
- package/build/model/estimate.d.ts.map +1 -0
- package/build/model/estimate.js +69 -0
- package/build/model/estimate.js.map +1 -0
- package/build/model/index.d.ts +7 -2
- package/build/model/index.d.ts.map +1 -1
- package/build/model/index.js +7 -2
- package/build/model/index.js.map +1 -1
- package/build/model/limit.d.ts +7 -0
- package/build/model/limit.d.ts.map +1 -0
- package/build/model/limit.js +32 -0
- package/build/model/limit.js.map +1 -0
- package/build/model/plan.d.ts.map +1 -1
- package/build/model/plan.js +24 -11
- package/build/model/plan.js.map +1 -1
- package/build/model/portal.d.ts +4 -0
- package/build/model/portal.d.ts.map +1 -0
- package/build/model/portal.js +22 -0
- package/build/model/portal.js.map +1 -0
- package/build/model/pricing.d.ts +4 -0
- package/build/model/pricing.d.ts.map +1 -0
- package/build/model/pricing.js +31 -0
- package/build/model/pricing.js.map +1 -0
- package/build/model/view.d.ts +3 -0
- package/build/model/view.d.ts.map +1 -0
- package/build/model/view.js +15 -0
- package/build/model/view.js.map +1 -0
- package/build/pricing/types.d.ts +13 -0
- package/build/pricing/types.d.ts.map +1 -0
- package/build/pricing/types.js +2 -0
- package/build/pricing/types.js.map +1 -0
- package/build/pricing.d.ts +13 -0
- package/build/pricing.d.ts.map +1 -0
- package/build/pricing.js +74 -0
- package/build/pricing.js.map +1 -0
- package/build/promo/types.d.ts +14 -0
- package/build/promo/types.d.ts.map +1 -0
- package/build/promo/types.js +2 -0
- package/build/promo/types.js.map +1 -0
- package/build/promo.d.ts +7 -0
- package/build/promo.d.ts.map +1 -0
- package/build/promo.js +25 -0
- package/build/promo.js.map +1 -0
- package/build/regions/types.d.ts +32 -0
- package/build/regions/types.d.ts.map +1 -0
- package/build/regions/types.js +2 -0
- package/build/regions/types.js.map +1 -0
- package/build/regions.d.ts +15 -0
- package/build/regions.d.ts.map +1 -0
- package/build/regions.js +43 -0
- package/build/regions.js.map +1 -0
- package/build/service.d.ts.map +1 -1
- package/build/service.js +24 -9
- package/build/service.js.map +1 -1
- package/build/types.d.ts +619 -52
- package/build/types.d.ts.map +1 -1
- package/build/types.local.d.ts +4 -0
- package/build/types.local.d.ts.map +1 -0
- package/build/types.local.js +2 -0
- package/build/types.local.js.map +1 -0
- package/build/view/types.d.ts +33 -0
- package/build/view/types.d.ts.map +1 -0
- package/build/view/types.js +2 -0
- package/build/view/types.js.map +1 -0
- package/build/view.d.ts +13 -0
- package/build/view.d.ts.map +1 -0
- package/build/view.js +78 -0
- package/build/view.js.map +1 -0
- package/package.json +14 -12
- package/src/advertise.ts +13 -0
- package/src/checkout/consts.ts +1 -0
- package/src/checkout/index.ts +5 -0
- package/src/checkout/narrow/types.ts +27 -0
- package/src/checkout/narrow.ts +63 -0
- package/src/checkout/protocols.ts +39 -0
- package/src/checkout/types.ts +27 -0
- package/src/consts.local.ts +34 -0
- package/src/consts.ts +417 -24
- package/src/consumer/cancel.ts +40 -0
- package/src/consumer/consts.local.ts +16 -0
- package/src/consumer/consts.ts +46 -0
- package/src/consumer/copy/types.ts +54 -0
- package/src/consumer/copy.ts +121 -0
- package/src/consumer/deadline/types.ts +30 -0
- package/src/consumer/deadline.ts +61 -0
- package/src/consumer/fifo/types.ts +17 -0
- package/src/consumer/fifo.ts +42 -0
- package/src/consumer/index.ts +17 -0
- package/src/consumer/policy/types.ts +20 -0
- package/src/consumer/policy.ts +101 -0
- package/src/consumer/protocols.ts +116 -0
- package/src/consumer/refund/types.ts +27 -0
- package/src/consumer/refund.ts +136 -0
- package/src/consumer/refusal.ts +35 -0
- package/src/consumer/revive/types.ts +23 -0
- package/src/consumer/revive.ts +82 -0
- package/src/consumer/types.local.ts +10 -0
- package/src/consumer/types.ts +189 -0
- package/src/countries.ts +5 -0
- package/src/entitled.ts +20 -0
- package/src/entitlement/types.ts +29 -0
- package/src/entitlement.ts +86 -0
- package/src/errors.ts +445 -0
- package/src/estimate/types.ts +34 -0
- package/src/estimate.ts +90 -0
- package/src/i18n/consumer-rights/be.json +131 -0
- package/src/i18n/consumer-rights/de.json +131 -0
- package/src/i18n/consumer-rights/en.json +131 -0
- package/src/i18n/consumer-rights/es.json +131 -0
- package/src/i18n/consumer-rights/fr.json +131 -0
- package/src/i18n/consumer-rights/pl.json +131 -0
- package/src/i18n/consumer-rights/ru.json +131 -0
- package/src/i18n/consumer-rights/uk.json +131 -0
- package/src/i18n/errors/be.json +30 -0
- package/src/i18n/errors/de.json +30 -0
- package/src/i18n/errors/en.json +30 -0
- package/src/i18n/errors/es.json +30 -0
- package/src/i18n/errors/fr.json +30 -0
- package/src/i18n/errors/pl.json +30 -0
- package/src/i18n/errors/ru.json +30 -0
- package/src/i18n/errors/uk.json +30 -0
- package/src/i18n/fr.json +39 -0
- package/src/i18n.ts +58 -8
- package/src/index.ts +19 -2
- package/src/limit/types.ts +41 -0
- package/src/limit.ts +132 -0
- package/src/model/checkout.ts +12 -7
- package/src/model/consts.local.ts +83 -0
- package/src/model/consts.ts +206 -0
- package/src/model/consumer.ts +294 -0
- package/src/model/estimate.ts +73 -0
- package/src/model/index.ts +7 -2
- package/src/model/limit.ts +36 -0
- package/src/model/plan.ts +25 -12
- package/src/model/portal.ts +25 -0
- package/src/model/pricing.ts +34 -0
- package/src/model/view.ts +17 -0
- package/src/pricing/types.ts +13 -0
- package/src/pricing.ts +110 -0
- package/src/promo/types.ts +18 -0
- package/src/promo.ts +46 -0
- package/src/regions/types.ts +42 -0
- package/src/regions.ts +85 -0
- package/src/service.ts +32 -15
- package/src/types.local.ts +5 -0
- package/src/types.ts +669 -49
- package/src/view/types.ts +39 -0
- package/src/view.ts +119 -0
- package/tests/checkout-narrow.spec.ts +75 -0
- package/tests/consumer-copy.spec.ts +378 -0
- package/tests/consumer-deadline.spec.ts +85 -0
- package/tests/consumer-fifo.spec.ts +61 -0
- package/tests/consumer-protocols.spec.ts +103 -0
- package/tests/consumer-refund.spec.ts +134 -0
- package/tests/consumer-regions.spec.ts +140 -0
- package/tests/consumer-wire.spec.ts +170 -0
- package/tests/contract.spec.ts +183 -0
- package/tests/entitlement.spec.ts +103 -0
- package/tests/errors.spec.ts +168 -0
- package/tests/estimate.spec.ts +139 -0
- package/tests/limit.spec.ts +117 -0
- package/tests/pricing.spec.ts +30 -0
- package/tests/tsconfig.json +11 -0
- package/tests/view.spec.ts +130 -0
- package/tsconfig.json +6 -1
- package/build/.gitkeep +0 -0
- package/src/model/subscription.ts +0 -63
- package/src/model/utils.ts +0 -32
- package/src/modules.ts +0 -43
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { schema } from '@owlmeans/entrypoint';
|
|
2
|
+
export const AmountCheckoutPolicySchema = schema({
|
|
3
|
+
type: 'object',
|
|
4
|
+
properties: {
|
|
5
|
+
currency: { type: 'string', minLength: 3, maxLength: 3 },
|
|
6
|
+
minimumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
7
|
+
maximumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
8
|
+
defaultMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
9
|
+
presetsMinor: {
|
|
10
|
+
type: 'array', items: { type: 'number', minimum: 0, multipleOf: 1 }, uniqueItems: true,
|
|
11
|
+
},
|
|
12
|
+
fixedMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
13
|
+
rateBps: { type: 'number', minimum: 0, maximum: 9999, multipleOf: 1 },
|
|
14
|
+
},
|
|
15
|
+
required: [
|
|
16
|
+
'currency', 'minimumMinor', 'maximumMinor', 'defaultMinor', 'presetsMinor',
|
|
17
|
+
'fixedMinor', 'rateBps',
|
|
18
|
+
],
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
});
|
|
21
|
+
export const QuantityCheckoutPolicySchema = schema({
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
minimum: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
25
|
+
maximum: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
26
|
+
default: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
27
|
+
},
|
|
28
|
+
required: ['minimum', 'maximum', 'default'],
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/model/pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAuB;IACrE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QACxD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI;SACvF;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;KACtE;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;QAC1E,YAAY,EAAE,SAAS;KACxB;IACD,oBAAoB,EAAE,KAAK;CACY,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAyB;IACzE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;KACvD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC3C,oBAAoB,EAAE,KAAK;CACc,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/model/view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,qBAAqB,kEAUG,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { schema } from '@owlmeans/entrypoint';
|
|
2
|
+
import { IsoDateSchema } from './consts.local.js';
|
|
3
|
+
import { CapabilityViewSchema, EntitlementPlanViewSchema, LimitViewSchema } from './consts.js';
|
|
4
|
+
export const EntitlementViewSchema = schema({
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
plan: EntitlementPlanViewSchema,
|
|
8
|
+
capabilities: { type: 'array', items: CapabilityViewSchema },
|
|
9
|
+
limits: { type: 'array', items: LimitViewSchema },
|
|
10
|
+
at: IsoDateSchema,
|
|
11
|
+
},
|
|
12
|
+
required: ['plan', 'capabilities', 'limits', 'at'],
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/model/view.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAkB;IAC3D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE,yBAAyB;QAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE;QAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;QACjD,EAAE,EAAE,aAAa;KAClB;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC;IAClD,oBAAoB,EAAE,KAAK;CACO,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from '../types.js';
|
|
2
|
+
/** The checkout policies' invariants and the charge an amount grosses up to. */
|
|
3
|
+
export interface CheckoutPricingHelper {
|
|
4
|
+
/** @throws PaymentError (`checkout-policy:amount`, `checkout-policy:presets`) for an invalid policy. */
|
|
5
|
+
assertAmountCheckoutPolicy: (policy: AmountCheckoutPolicy) => AmountCheckoutPolicy;
|
|
6
|
+
/** @throws PaymentError (`checkout-policy:quantity`) for an invalid policy. */
|
|
7
|
+
assertQuantityCheckoutPolicy: (policy: QuantityCheckoutPolicy) => QuantityCheckoutPolicy;
|
|
8
|
+
/** @throws PaymentError (`checkout-amount:*`) for an amount the policy does not allow. */
|
|
9
|
+
assertCheckoutAmount: (policy: AmountCheckoutPolicy, amountMinor: number) => number;
|
|
10
|
+
/** Gross up a net credit value so the configured adjustment remains outside the credit grant. */
|
|
11
|
+
chargeAmountMinor: (amountMinor: number, policy: Pick<AmountCheckoutPolicy, 'fixedMinor' | 'rateBps'>) => number;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pricing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAE/E,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,wGAAwG;IACxG,0BAA0B,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,oBAAoB,CAAA;IAClF,+EAA+E;IAC/E,4BAA4B,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,sBAAsB,CAAA;IACxF,0FAA0F;IAC1F,oBAAoB,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IACnF,iGAAiG;IACjG,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,SAAS,CAAC,KAAK,MAAM,CAAA;CACjH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pricing/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from './types.js';
|
|
2
|
+
import type { CheckoutPricingHelper } from './pricing/types.js';
|
|
3
|
+
export declare const createCheckoutPricingHelper: () => CheckoutPricingHelper;
|
|
4
|
+
export declare const checkoutPricingHelper: CheckoutPricingHelper;
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertAmountCheckoutPolicy(…)` */
|
|
6
|
+
export declare const assertAmountCheckoutPolicy: (policy: AmountCheckoutPolicy) => AmountCheckoutPolicy;
|
|
7
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertQuantityCheckoutPolicy(…)` */
|
|
8
|
+
export declare const assertQuantityCheckoutPolicy: (policy: QuantityCheckoutPolicy) => QuantityCheckoutPolicy;
|
|
9
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertCheckoutAmount(…)` */
|
|
10
|
+
export declare const assertCheckoutAmount: (policy: AmountCheckoutPolicy, amountMinor: number) => number;
|
|
11
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.chargeAmountMinor(…)` */
|
|
12
|
+
export declare const chargeAmountMinor: (amountMinor: number, policy: Pick<AmountCheckoutPolicy, 'fixedMinor' | 'rateBps'>) => number;
|
|
13
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAI/D,eAAO,MAAM,2BAA2B,QAAO,qBAoF9C,CAAA;AAED,eAAO,MAAM,qBAAqB,uBAAgC,CAAA;AAElE,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,WAAY,oBAAoB,KAAG,oBAChB,CAAA;AAE1D,wGAAwG;AACxG,eAAO,MAAM,4BAA4B,WAAY,sBAAsB,KAAG,sBAClB,CAAA;AAE5D,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,WAAY,oBAAoB,eAAe,MAAM,KAAG,MACxB,CAAA;AAEjE,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,gBACf,MAAM,UAAU,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,SAAS,CAAC,KAChF,MAAsE,CAAA"}
|
package/build/pricing.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { PaymentError } from './errors.js';
|
|
2
|
+
const integer = (value) => Number.isSafeInteger(value);
|
|
3
|
+
export const createCheckoutPricingHelper = () => {
|
|
4
|
+
const assertAmountCheckoutPolicy = (policy) => {
|
|
5
|
+
if (!integer(policy.minimumMinor)
|
|
6
|
+
|| !integer(policy.maximumMinor)
|
|
7
|
+
|| !integer(policy.defaultMinor)
|
|
8
|
+
|| !integer(policy.fixedMinor)
|
|
9
|
+
|| !integer(policy.rateBps)
|
|
10
|
+
|| policy.minimumMinor < 0
|
|
11
|
+
|| policy.minimumMinor > policy.defaultMinor
|
|
12
|
+
|| policy.defaultMinor > policy.maximumMinor
|
|
13
|
+
|| policy.fixedMinor < 0
|
|
14
|
+
|| policy.rateBps < 0
|
|
15
|
+
|| policy.rateBps >= 10_000
|
|
16
|
+
|| policy.currency.trim().length !== 3) {
|
|
17
|
+
throw new PaymentError('checkout-policy:amount');
|
|
18
|
+
}
|
|
19
|
+
const presets = new Set(policy.presetsMinor);
|
|
20
|
+
if (presets.size !== policy.presetsMinor.length
|
|
21
|
+
|| policy.presetsMinor.some(value => !integer(value) || value < policy.minimumMinor || value > policy.maximumMinor)) {
|
|
22
|
+
throw new PaymentError('checkout-policy:presets');
|
|
23
|
+
}
|
|
24
|
+
return policy;
|
|
25
|
+
};
|
|
26
|
+
const assertQuantityCheckoutPolicy = (policy) => {
|
|
27
|
+
if (!integer(policy.minimum)
|
|
28
|
+
|| !integer(policy.maximum)
|
|
29
|
+
|| !integer(policy.default)
|
|
30
|
+
|| policy.minimum < 1
|
|
31
|
+
|| policy.minimum > policy.default
|
|
32
|
+
|| policy.default > policy.maximum) {
|
|
33
|
+
throw new PaymentError('checkout-policy:quantity');
|
|
34
|
+
}
|
|
35
|
+
return policy;
|
|
36
|
+
};
|
|
37
|
+
const assertCheckoutAmount = (policy, amountMinor) => {
|
|
38
|
+
assertAmountCheckoutPolicy(policy);
|
|
39
|
+
if (!integer(amountMinor)) {
|
|
40
|
+
throw new PaymentError('checkout-amount:integer');
|
|
41
|
+
}
|
|
42
|
+
if (amountMinor < policy.minimumMinor) {
|
|
43
|
+
throw new PaymentError('checkout-amount:minimum');
|
|
44
|
+
}
|
|
45
|
+
if (amountMinor > policy.maximumMinor) {
|
|
46
|
+
throw new PaymentError('checkout-amount:maximum');
|
|
47
|
+
}
|
|
48
|
+
return amountMinor;
|
|
49
|
+
};
|
|
50
|
+
const chargeAmountMinor = (amountMinor, policy) => {
|
|
51
|
+
const adjusted = amountMinor + policy.fixedMinor;
|
|
52
|
+
const numerator = adjusted * 10_000;
|
|
53
|
+
if (!integer(amountMinor) || !integer(policy.fixedMinor) || !integer(policy.rateBps)
|
|
54
|
+
|| amountMinor < 0 || policy.fixedMinor < 0 || policy.rateBps < 0 || policy.rateBps >= 10_000
|
|
55
|
+
|| !integer(adjusted) || !integer(numerator)) {
|
|
56
|
+
throw new PaymentError('checkout-charge');
|
|
57
|
+
}
|
|
58
|
+
const charge = Math.ceil(numerator / (10_000 - policy.rateBps));
|
|
59
|
+
if (!integer(charge))
|
|
60
|
+
throw new PaymentError('checkout-charge');
|
|
61
|
+
return charge;
|
|
62
|
+
};
|
|
63
|
+
return { assertAmountCheckoutPolicy, assertQuantityCheckoutPolicy, assertCheckoutAmount, chargeAmountMinor };
|
|
64
|
+
};
|
|
65
|
+
export const checkoutPricingHelper = createCheckoutPricingHelper();
|
|
66
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertAmountCheckoutPolicy(…)` */
|
|
67
|
+
export const assertAmountCheckoutPolicy = (policy) => checkoutPricingHelper.assertAmountCheckoutPolicy(policy);
|
|
68
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertQuantityCheckoutPolicy(…)` */
|
|
69
|
+
export const assertQuantityCheckoutPolicy = (policy) => checkoutPricingHelper.assertQuantityCheckoutPolicy(policy);
|
|
70
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertCheckoutAmount(…)` */
|
|
71
|
+
export const assertCheckoutAmount = (policy, amountMinor) => checkoutPricingHelper.assertCheckoutAmount(policy, amountMinor);
|
|
72
|
+
/** @deprecated compat:factory-refactor — use `checkoutPricingHelper.chargeAmountMinor(…)` */
|
|
73
|
+
export const chargeAmountMinor = (amountMinor, policy) => checkoutPricingHelper.chargeAmountMinor(amountMinor, policy);
|
|
74
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PromoDeclaration, PromoView } from '../types.js';
|
|
2
|
+
/** Whether a promo is in force, and how a UI inscribes it. */
|
|
3
|
+
export interface PromoHelper {
|
|
4
|
+
/**
|
|
5
|
+
* Whether a grant behind a promo is in force.
|
|
6
|
+
*
|
|
7
|
+
* No promo ⇒ always. Otherwise while `at < until`, or — with `grandfather` — for a subscription
|
|
8
|
+
* created before `until`. `at === until` is already over.
|
|
9
|
+
*/
|
|
10
|
+
promoActive: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => boolean;
|
|
11
|
+
/** What a UI needs to inscribe a promo: `undefined` when the grant has none. */
|
|
12
|
+
promoViewOf: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => PromoView | undefined;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/promo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE9D,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,WAAW,EAAE,CACX,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,KACzF,OAAO,CAAA;IACZ,gFAAgF;IAChF,WAAW,EAAE,CACX,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,KACzF,SAAS,GAAG,SAAS,CAAA;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/promo/types.ts"],"names":[],"mappings":""}
|
package/build/promo.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PromoDeclaration } from './types.js';
|
|
2
|
+
import type { PromoHelper } from './promo/types.js';
|
|
3
|
+
export declare const createPromoHelper: () => PromoHelper;
|
|
4
|
+
export declare const promoHelper: PromoHelper;
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `promoHelper.promoActive(…)` */
|
|
6
|
+
export declare const promoActive: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => boolean;
|
|
7
|
+
//# sourceMappingURL=promo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo.d.ts","sourceRoot":"","sources":["../src/promo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAUnD,eAAO,MAAM,iBAAiB,QAAO,WA2BpC,CAAA;AAED,eAAO,MAAM,WAAW,aAAsB,CAAA;AAE9C,6EAA6E;AAC7E,eAAO,MAAM,WAAW,UACf,gBAAgB,GAAG,IAAI,GAAG,SAAS,gBAAgB,IAAI,GAAG,IAAI,GAAG,SAAS,OAAO,IAAI,KAC3F,OAA2D,CAAA"}
|
package/build/promo.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A date as epoch milliseconds. A declaration read back from JSON carries an ISO string where the
|
|
3
|
+
* type says `Date`; an unparseable value is `NaN`, which fails every comparison — so a broken
|
|
4
|
+
* promo is never in force.
|
|
5
|
+
*/
|
|
6
|
+
const timeOf = (value) => value == null ? Number.NaN : value instanceof Date ? value.getTime() : new Date(value).getTime();
|
|
7
|
+
export const createPromoHelper = () => {
|
|
8
|
+
const grandfathers = (promo, subscribedAt) => promo.grandfather === true && timeOf(subscribedAt) < timeOf(promo.until);
|
|
9
|
+
const promoActive = (promo, subscribedAt, at = new Date()) => {
|
|
10
|
+
if (promo == null) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
return timeOf(at) < timeOf(promo.until) || grandfathers(promo, subscribedAt);
|
|
14
|
+
};
|
|
15
|
+
const promoViewOf = (promo, subscribedAt, at = new Date()) => promo == null ? undefined : {
|
|
16
|
+
until: new Date(timeOf(promo.until)),
|
|
17
|
+
grandfathered: grandfathers(promo, subscribedAt),
|
|
18
|
+
active: promoActive(promo, subscribedAt, at),
|
|
19
|
+
};
|
|
20
|
+
return { promoActive, promoViewOf };
|
|
21
|
+
};
|
|
22
|
+
export const promoHelper = createPromoHelper();
|
|
23
|
+
/** @deprecated compat:factory-refactor — use `promoHelper.promoActive(…)` */
|
|
24
|
+
export const promoActive = (promo, subscribedAt, at) => promoHelper.promoActive(promo, subscribedAt, at);
|
|
25
|
+
//# sourceMappingURL=promo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promo.js","sourceRoot":"","sources":["../src/promo.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,KAAgD,EAAU,EAAE,CAC1E,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;AAElG,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAgB,EAAE;IACjD,MAAM,YAAY,GAAG,CAAC,KAAuB,EAAE,YAAqC,EAAW,EAAE,CAC/F,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE1E,MAAM,WAAW,GAAG,CAClB,KAA0C,EAC1C,YAAqC,EACrC,EAAE,GAAS,IAAI,IAAI,EAAE,EACZ,EAAE;QACX,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC9E,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAClB,KAA0C,EAC1C,YAAqC,EACrC,EAAE,GAAS,IAAI,IAAI,EAAE,EACE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;QAChD,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;KAC7C,CAAA;IAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAA;AAE9C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAA0C,EAAE,YAAqC,EAAE,EAAS,EACnF,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ConsumerRegion } from '../consts.js';
|
|
2
|
+
import type { ConsumerRightsPolicy } from '../types.js';
|
|
3
|
+
import type { RegionPolicy } from '../types.local.js';
|
|
4
|
+
/** The consumer region of a billing country and what it decides: scope, currency and legal language. */
|
|
5
|
+
export interface ConsumerRegionHelper {
|
|
6
|
+
/** A member state of the EU (not a territory with its own code). */
|
|
7
|
+
isEuCountry: (country: string | null | undefined) => boolean;
|
|
8
|
+
/** A member state of the EEA: the EU's 27 plus Iceland, Liechtenstein and Norway. */
|
|
9
|
+
isEeaCountry: (country: string | null | undefined) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The consumer region of a billing country: `Eu` inside the policy's territories (the default
|
|
12
|
+
* ones without a policy), `Other` outside, `null` when the country is unknown.
|
|
13
|
+
*/
|
|
14
|
+
regionOf: (country: string | null | undefined, policy?: RegionPolicy) => ConsumerRegion | null;
|
|
15
|
+
/**
|
|
16
|
+
* Whether a buyer has the consumer rights: a known country decides by the policy's territories;
|
|
17
|
+
* without one, a known region decides; with neither, `unknownCountry: 'protect'` (the default) puts
|
|
18
|
+
* the buyer in scope — the safe side.
|
|
19
|
+
*/
|
|
20
|
+
inScope: (region: ConsumerRegion | null | undefined, country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'countries' | 'unknownCountry'> | null) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* The currency a region is charged in (lowercase ISO 4217): the policy's currency for the region,
|
|
23
|
+
* an unknown region reading as `Eu`; `fallback` when the policy names none.
|
|
24
|
+
*/
|
|
25
|
+
chargeCurrencyOf: (region: ConsumerRegion | null | undefined, policy: Pick<ConsumerRightsPolicy, 'currencies'> | null | undefined, fallback: string) => string;
|
|
26
|
+
/**
|
|
27
|
+
* The language of a billing country's legal copy: the policy's own map, then
|
|
28
|
+
* `COUNTRY_LANGUAGES`, then `fallback`, then the policy's default language, then `en`.
|
|
29
|
+
*/
|
|
30
|
+
billingLanguageOf: (country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'languages' | 'defaultLanguage'> | null, fallback?: string) => string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/regions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,wGAAwG;AACxG,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,OAAO,CAAA;IAC5D,qFAAqF;IACrF,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,OAAO,CAAA;IAC7D;;;OAGG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,KAAK,cAAc,GAAG,IAAI,CAAA;IAC9F;;;;OAIG;IACH,OAAO,EAAE,CACP,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7E,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,KACvE,OAAO,CAAA;IACZ;;;OAGG;IACH,gBAAgB,EAAE,CAChB,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9G,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX;;;OAGG;IACH,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,IAAI,EAC3E,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAA;CACZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/regions/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ConsumerRegion } from './consts.js';
|
|
2
|
+
import type { ConsumerRightsPolicy } from './types.js';
|
|
3
|
+
import type { RegionPolicy } from './types.local.js';
|
|
4
|
+
import type { ConsumerRegionHelper } from './regions/types.js';
|
|
5
|
+
export declare const createConsumerRegionHelper: () => ConsumerRegionHelper;
|
|
6
|
+
export declare const consumerRegionHelper: ConsumerRegionHelper;
|
|
7
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.regionOf(…)` */
|
|
8
|
+
export declare const regionOf: (country: string | null | undefined, policy?: RegionPolicy) => ConsumerRegion | null;
|
|
9
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.inScope(…)` */
|
|
10
|
+
export declare const inScope: (region: ConsumerRegion | null | undefined, country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'countries' | 'unknownCountry'> | null) => boolean;
|
|
11
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.chargeCurrencyOf(…)` */
|
|
12
|
+
export declare const chargeCurrencyOf: (region: ConsumerRegion | null | undefined, policy: Pick<ConsumerRightsPolicy, 'currencies'> | null | undefined, fallback: string) => string;
|
|
13
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.billingLanguageOf(…)` */
|
|
14
|
+
export declare const billingLanguageOf: (country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'languages' | 'defaultLanguage'> | null, fallback?: string) => string;
|
|
15
|
+
//# sourceMappingURL=regions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../src/regions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2E,MAAM,aAAa,CAAA;AACrH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAK9D,eAAO,MAAM,0BAA0B,QAAO,oBAmD7C,CAAA;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAA;AAEhE,mFAAmF;AACnF,eAAO,MAAM,QAAQ,YAAa,MAAM,GAAG,IAAI,GAAG,SAAS,WAAW,YAAY,KAAG,cAAc,GAAG,IACtD,CAAA;AAEhD,kFAAkF;AAClF,eAAO,MAAM,OAAO,WACV,cAAc,GAAG,IAAI,GAAG,SAAS,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,WACpE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,KACzE,OAAgE,CAAA;AAEnE,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,WACnB,cAAc,GAAG,IAAI,GAAG,SAAS,UAAU,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,YACpG,MAAM,KACf,MAAyE,CAAA;AAE5E,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,YACnB,MAAM,GAAG,IAAI,GAAG,SAAS,WACzB,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,IAAI,aAChE,MAAM,KAChB,MAA2E,CAAA"}
|
package/build/regions.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ConsumerRegion, CONSUMER_RIGHTS_TERRITORIES, COUNTRY_LANGUAGES, EEA_EXTRA, EU_COUNTRIES } from './consts.js';
|
|
2
|
+
const codeOf = (country) => country == null || country.trim() === '' ? null : country.trim().toUpperCase();
|
|
3
|
+
export const createConsumerRegionHelper = () => {
|
|
4
|
+
const isEuCountry = (country) => EU_COUNTRIES.includes(codeOf(country) ?? '');
|
|
5
|
+
const isEeaCountry = (country) => {
|
|
6
|
+
const code = codeOf(country) ?? '';
|
|
7
|
+
return EU_COUNTRIES.includes(code) || EEA_EXTRA.includes(code);
|
|
8
|
+
};
|
|
9
|
+
const regionOf = (country, policy) => {
|
|
10
|
+
const code = codeOf(country);
|
|
11
|
+
if (code == null) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
return (policy?.countries ?? CONSUMER_RIGHTS_TERRITORIES).includes(code) ? ConsumerRegion.Eu : ConsumerRegion.Other;
|
|
15
|
+
};
|
|
16
|
+
const inScope = (region, country, policy) => {
|
|
17
|
+
const code = codeOf(country);
|
|
18
|
+
if (code != null) {
|
|
19
|
+
return (policy?.countries ?? CONSUMER_RIGHTS_TERRITORIES).includes(code);
|
|
20
|
+
}
|
|
21
|
+
if (region != null) {
|
|
22
|
+
return region === ConsumerRegion.Eu;
|
|
23
|
+
}
|
|
24
|
+
return (policy?.unknownCountry ?? 'protect') === 'protect';
|
|
25
|
+
};
|
|
26
|
+
const chargeCurrencyOf = (region, policy, fallback) => (policy?.currencies?.[region ?? ConsumerRegion.Eu] ?? fallback).toLowerCase();
|
|
27
|
+
const billingLanguageOf = (country, policy, fallback) => {
|
|
28
|
+
const code = codeOf(country);
|
|
29
|
+
const mapped = code == null ? undefined : policy?.languages?.[code] ?? COUNTRY_LANGUAGES[code];
|
|
30
|
+
return mapped ?? fallback ?? policy?.defaultLanguage ?? 'en';
|
|
31
|
+
};
|
|
32
|
+
return { isEuCountry, isEeaCountry, regionOf, inScope, chargeCurrencyOf, billingLanguageOf };
|
|
33
|
+
};
|
|
34
|
+
export const consumerRegionHelper = createConsumerRegionHelper();
|
|
35
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.regionOf(…)` */
|
|
36
|
+
export const regionOf = (country, policy) => consumerRegionHelper.regionOf(country, policy);
|
|
37
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.inScope(…)` */
|
|
38
|
+
export const inScope = (region, country, policy) => consumerRegionHelper.inScope(region, country, policy);
|
|
39
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.chargeCurrencyOf(…)` */
|
|
40
|
+
export const chargeCurrencyOf = (region, policy, fallback) => consumerRegionHelper.chargeCurrencyOf(region, policy, fallback);
|
|
41
|
+
/** @deprecated compat:factory-refactor — use `consumerRegionHelper.billingLanguageOf(…)` */
|
|
42
|
+
export const billingLanguageOf = (country, policy, fallback) => consumerRegionHelper.billingLanguageOf(country, policy, fallback);
|
|
43
|
+
//# sourceMappingURL=regions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regions.js","sourceRoot":"","sources":["../src/regions.ts"],"names":[],"mappings":"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"}
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsC,cAAc,EAAuC,MAAM,YAAY,CAAA;AACzH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AASvD,eAAO,MAAM,kBAAkB,WAAW,MAAM,KAAmB,cAmIlE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,WAChE,CAAC,UAAS,MAAM,KACxB,CAAuD,CAAA"}
|
package/build/service.js
CHANGED
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { createService } from '@owlmeans/context';
|
|
2
|
-
import { DEFAULT_ALIAS, PaymentEntityType, PLAN_RECORD_PREFIX, PRODUCT_RECORD_TYPE } from './consts.js';
|
|
3
|
-
import { PLAN_RECORD_TYPE, PRODUCT_RECORD_PREFIX } from './consts.js';
|
|
2
|
+
import { CONSUMER_RIGHTS_RECORD_ID, DEFAULT_ALIAS, PaymentEntityType, PLAN_RECORD_PREFIX, PRICING_POLICY_RECORD_ID, PRODUCT_RECORD_TYPE, PLAN_RECORD_TYPE, PRODUCT_RECORD_PREFIX, DEFAULT_PRICING_POLICY } from './consts.js';
|
|
4
3
|
import { PaymentIdentificationError, UnknownPlan, UnknownProduct } from './errors.js';
|
|
5
|
-
import { fromConfigRecord } from '@owlmeans/config';
|
|
6
4
|
import { l10nToId } from './helper.js';
|
|
7
5
|
import { DEFAULT_LNG } from '@owlmeans/i18n';
|
|
8
6
|
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
7
|
+
import { configHelper } from '@owlmeans/config';
|
|
9
8
|
export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
10
9
|
const service = createService(alias, {
|
|
11
10
|
product: async (sku) => {
|
|
12
11
|
const context = service.assertCtx();
|
|
13
12
|
const configRes = context.getConfigResource();
|
|
14
|
-
const result = fromConfigRecord(await configRes.get(`${PRODUCT_RECORD_PREFIX}:${sku}`));
|
|
13
|
+
const result = configHelper.fromConfigRecord(await configRes.get(`${PRODUCT_RECORD_PREFIX}:${sku}`));
|
|
15
14
|
if (result == null) {
|
|
16
15
|
throw new UnknownProduct(sku);
|
|
17
16
|
}
|
|
@@ -21,7 +20,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
21
20
|
const context = service.assertCtx();
|
|
22
21
|
const configRes = context.getConfigResource();
|
|
23
22
|
const { items } = await configRes.list({ recordType: PRODUCT_RECORD_TYPE });
|
|
24
|
-
return items.map(i => fromConfigRecord(i));
|
|
23
|
+
return items.map(i => configHelper.fromConfigRecord(i));
|
|
25
24
|
},
|
|
26
25
|
plans: async (productSku, duration) => {
|
|
27
26
|
const context = service.assertCtx();
|
|
@@ -29,7 +28,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
29
28
|
const result = await configRes.list({
|
|
30
29
|
productSku, duration, recordType: PLAN_RECORD_TYPE
|
|
31
30
|
});
|
|
32
|
-
return result.items.map(item => fromConfigRecord(item));
|
|
31
|
+
return result.items.map(item => configHelper.fromConfigRecord(item));
|
|
33
32
|
},
|
|
34
33
|
plan: async (planSku) => {
|
|
35
34
|
const context = service.assertCtx();
|
|
@@ -38,7 +37,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
38
37
|
if (result == null) {
|
|
39
38
|
throw new UnknownPlan(planSku);
|
|
40
39
|
}
|
|
41
|
-
return fromConfigRecord(result);
|
|
40
|
+
return configHelper.fromConfigRecord(result);
|
|
42
41
|
},
|
|
43
42
|
allPlans: async (productSku) => {
|
|
44
43
|
const context = service.assertCtx();
|
|
@@ -46,7 +45,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
46
45
|
const { items } = await configRes.list({
|
|
47
46
|
productSku, recordType: PLAN_RECORD_TYPE
|
|
48
47
|
});
|
|
49
|
-
return items.map(item => fromConfigRecord(item));
|
|
48
|
+
return items.map(item => configHelper.fromConfigRecord(item));
|
|
50
49
|
},
|
|
51
50
|
localize: async (lng, entity) => {
|
|
52
51
|
const context = service.assertCtx();
|
|
@@ -69,7 +68,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
69
68
|
for (let id of idsToCheck) {
|
|
70
69
|
const l10n = await configRes.load(id);
|
|
71
70
|
if (l10n != null) {
|
|
72
|
-
return fromConfigRecord(l10n);
|
|
71
|
+
return configHelper.fromConfigRecord(l10n);
|
|
73
72
|
}
|
|
74
73
|
}
|
|
75
74
|
return null;
|
|
@@ -84,6 +83,22 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
|
|
|
84
83
|
throw new PaymentIdentificationError('profileId');
|
|
85
84
|
}
|
|
86
85
|
return auth.profileId;
|
|
86
|
+
},
|
|
87
|
+
pricingPolicy: async () => {
|
|
88
|
+
const context = service.assertCtx();
|
|
89
|
+
const configRes = context.getConfigResource();
|
|
90
|
+
const record = await configRes.load(PRICING_POLICY_RECORD_ID);
|
|
91
|
+
return record == null
|
|
92
|
+
? DEFAULT_PRICING_POLICY
|
|
93
|
+
: configHelper.fromConfigRecord(record);
|
|
94
|
+
},
|
|
95
|
+
consumerRightsPolicy: async () => {
|
|
96
|
+
const context = service.assertCtx();
|
|
97
|
+
const configRes = context.getConfigResource();
|
|
98
|
+
const record = await configRes.load(CONSUMER_RIGHTS_RECORD_ID);
|
|
99
|
+
return record == null
|
|
100
|
+
? null
|
|
101
|
+
: configHelper.fromConfigRecord(record);
|
|
87
102
|
}
|
|
88
103
|
}, service => async () => {
|
|
89
104
|
service.initialized = true;
|
package/build/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|