@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,91 @@
|
|
|
1
|
+
import { ConsumerRightsError } from '../errors.js';
|
|
2
|
+
import { CONSENT_CONTEXT, COUNTRY, CURRENCY } from './consts.local.js';
|
|
3
|
+
import { DEFAULT_CONSUMER_RIGHTS } from './consts.js';
|
|
4
|
+
/**
|
|
5
|
+
* A declaration filled with `DEFAULT_CONSUMER_RIGHTS` and asserted. Only the policy's own fields are
|
|
6
|
+
* copied — anything else on `def` (a server's mail options) never reaches the advertised record.
|
|
7
|
+
*/
|
|
8
|
+
export const makeConsumerRightsPolicy = (def) => {
|
|
9
|
+
const defaults = DEFAULT_CONSUMER_RIGHTS;
|
|
10
|
+
const present = (key, value) => (value == null ? {} : { [key]: value });
|
|
11
|
+
return consumerRightsPolicyHelper.assertConsumerRightsPolicy({
|
|
12
|
+
textVersion: def.textVersion,
|
|
13
|
+
countries: [...(def.countries ?? defaults.countries)].map(country => country.toUpperCase()),
|
|
14
|
+
unknownCountry: def.unknownCountry ?? defaults.unknownCountry,
|
|
15
|
+
withdrawalDays: def.withdrawalDays ?? defaults.withdrawalDays,
|
|
16
|
+
deadline: { ...defaults.deadline, ...def.deadline },
|
|
17
|
+
mechanisms: { ...defaults.mechanisms, ...def.mechanisms },
|
|
18
|
+
...present('currencies', def.currencies),
|
|
19
|
+
...present('languages', def.languages),
|
|
20
|
+
defaultLanguage: def.defaultLanguage ?? defaults.defaultLanguage,
|
|
21
|
+
links: def.links,
|
|
22
|
+
...present('renewalOpensWindow', def.renewalOpensWindow ?? defaults.renewalOpensWindow),
|
|
23
|
+
...present('startRequestTtlSeconds', def.startRequestTtlSeconds ?? defaults.startRequestTtlSeconds),
|
|
24
|
+
...present('exemptBusinesses', def.exemptBusinesses ?? defaults.exemptBusinesses),
|
|
25
|
+
...present('consentContext', def.consentContext),
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export const createConsumerRightsPolicyHelper = () => {
|
|
29
|
+
const isHttpsUrl = (value) => {
|
|
30
|
+
if (typeof value !== 'string') {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return new URL(value).protocol === 'https:';
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const fail = (field) => {
|
|
41
|
+
throw new ConsumerRightsError(`policy:${field}`);
|
|
42
|
+
};
|
|
43
|
+
const assertConsumerRightsPolicy = (policy) => {
|
|
44
|
+
if (typeof policy.textVersion !== 'string' || policy.textVersion.trim() === '')
|
|
45
|
+
fail('text-version');
|
|
46
|
+
if (policy.mechanisms == null || typeof policy.mechanisms !== 'object')
|
|
47
|
+
fail('mechanisms');
|
|
48
|
+
if (!Array.isArray(policy.countries) || policy.countries.some(country => !COUNTRY.test(country)))
|
|
49
|
+
fail('countries');
|
|
50
|
+
if (policy.unknownCountry !== 'protect' && policy.unknownCountry !== 'ignore')
|
|
51
|
+
fail('unknown-country');
|
|
52
|
+
if (!Number.isSafeInteger(policy.withdrawalDays) || policy.withdrawalDays < 14)
|
|
53
|
+
fail('withdrawal-days');
|
|
54
|
+
const margin = policy.deadline?.marginDays ?? -1;
|
|
55
|
+
if (!Number.isSafeInteger(margin) || margin < 0 || margin > 7)
|
|
56
|
+
fail('margin-days');
|
|
57
|
+
if (Object.values(policy.currencies ?? {}).some(currency => !CURRENCY.test(currency ?? '')))
|
|
58
|
+
fail('currencies');
|
|
59
|
+
if (policy.startRequestTtlSeconds != null
|
|
60
|
+
&& (!Number.isSafeInteger(policy.startRequestTtlSeconds) || policy.startRequestTtlSeconds < 1))
|
|
61
|
+
fail('start-request-ttl');
|
|
62
|
+
if (policy.consentContext != null && !CONSENT_CONTEXT.test(policy.consentContext))
|
|
63
|
+
fail('consent-context');
|
|
64
|
+
const defaults = policy.links?.[policy.defaultLanguage];
|
|
65
|
+
if (defaults == null || !isHttpsUrl(defaults.billingTerms))
|
|
66
|
+
fail('links');
|
|
67
|
+
for (const [lng, links] of Object.entries(policy.links)) {
|
|
68
|
+
if (Object.values(links).some(url => url != null && !isHttpsUrl(url)))
|
|
69
|
+
fail(`links:${lng}`);
|
|
70
|
+
}
|
|
71
|
+
if ((policy.mechanisms.withdrawal || policy.mechanisms.performanceConsent) && defaults.withdrawalInformation == null) {
|
|
72
|
+
fail('links:withdrawal-information');
|
|
73
|
+
}
|
|
74
|
+
return policy;
|
|
75
|
+
};
|
|
76
|
+
const baseLanguageOf = (lng) => (lng ?? '').trim().split(/[-_]/)[0].toLowerCase();
|
|
77
|
+
const linksOf = (policy, lng) => {
|
|
78
|
+
const fallback = policy.links[policy.defaultLanguage];
|
|
79
|
+
const own = lng != null ? policy.links[lng] ?? policy.links[baseLanguageOf(lng)] : undefined;
|
|
80
|
+
return { ...fallback, ...Object.fromEntries(Object.entries(own ?? {}).filter(([, url]) => url != null)) };
|
|
81
|
+
};
|
|
82
|
+
return { assertConsumerRightsPolicy, baseLanguageOf, linksOf };
|
|
83
|
+
};
|
|
84
|
+
export const consumerRightsPolicyHelper = createConsumerRightsPolicyHelper();
|
|
85
|
+
/** @deprecated compat:factory-refactor — use `consumerRightsPolicyHelper.assertConsumerRightsPolicy(…)` */
|
|
86
|
+
export const assertConsumerRightsPolicy = (policy) => consumerRightsPolicyHelper.assertConsumerRightsPolicy(policy);
|
|
87
|
+
/** @deprecated compat:factory-refactor — use `consumerRightsPolicyHelper.baseLanguageOf(…)` */
|
|
88
|
+
export const baseLanguageOf = (lng) => consumerRightsPolicyHelper.baseLanguageOf(lng);
|
|
89
|
+
/** @deprecated compat:factory-refactor — use `consumerRightsPolicyHelper.linksOf(…)` */
|
|
90
|
+
export const linksOf = (policy, lng) => consumerRightsPolicyHelper.linksOf(policy, lng);
|
|
91
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/consumer/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ConsumerRightsProtocolOptions, ConsumerRightsProtocols } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The standard consumer-rights protocol tree, the way `makeMarketingConsentProtocols` builds
|
|
4
|
+
* its own:
|
|
5
|
+
*
|
|
6
|
+
* - `base` under the application's guarded `parent` (its account base, whose guards and gate
|
|
7
|
+
* every route inherits) with `profile` GET `/profile`, `purchases` GET `/purchases`, `consent`
|
|
8
|
+
* GET / `giveConsent` POST `/consent`, `start` GET `/start?planSku` / `requestStart` POST
|
|
9
|
+
* `/start`, `withdrawals` GET / `withdraw` POST `/withdrawal`, `cancel` POST `/cancellation`;
|
|
10
|
+
* - with `public`, an UNGUARDED `public` subtree — `policy` GET `/policy`, `withdraw` POST
|
|
11
|
+
* `/withdrawal`, `cancel` POST `/cancellation` — like `paymentGate.webhook`, plus optional
|
|
12
|
+
* sticky frontend `screens`.
|
|
13
|
+
*
|
|
14
|
+
* Aliases are `<prefix>:<name>` (`<prefix>:public:<name>` below `public`). A tree with neither a
|
|
15
|
+
* parent nor guards is a declaration error: the account routes act on the caller's own records.
|
|
16
|
+
* Absent parts are left out of the tree rather than set to `undefined`, so `protocols(tree)` and
|
|
17
|
+
* `mapProtocols(tree, …)` walk it as is.
|
|
18
|
+
*/
|
|
19
|
+
export declare const makeConsumerRightsProtocols: <O extends ConsumerRightsProtocolOptions>(opts: O) => ConsumerRightsProtocols<O>;
|
|
20
|
+
//# sourceMappingURL=protocols.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocols.d.ts","sourceRoot":"","sources":["../../src/consumer/protocols.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAkC,6BAA6B,EAAE,uBAAuB,EAAwD,MAAM,YAAY,CAAA;AAS9K;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,SAAS,6BAA6B,QAAQ,CAAC,KAAG,uBAAuB,CAAC,CAAC,CA8EvH,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { contract, openProtocol, protocol, typed } from '@owlmeans/entrypoint';
|
|
2
|
+
import { backend, frontend, route, RouteMethod } from '@owlmeans/route';
|
|
3
|
+
import { BillingProfileViewSchema, CancellationBodySchema, CancellationReceiptSchema, ConsumerRightsPublicViewSchema, DeclarationReceiptSchema, PerformanceConsentBodySchema, PerformanceConsentResponseSchema, PerformanceConsentViewSchema, PurchaseListSchema, SubscriptionStartBodySchema, SubscriptionStartQuerySchema, SubscriptionStartResponseSchema, SubscriptionStartViewSchema, WithdrawalBodySchema, WithdrawalCandidateListSchema, WithdrawalReceiptSchema, } from '../model/consumer.js';
|
|
4
|
+
import { CONSUMER_RIGHTS_API_PATH, CONSUMER_RIGHTS_CANCELLATION_SCREEN_PATH, CONSUMER_RIGHTS_PUBLIC_PATH, CONSUMER_RIGHTS_WITHDRAWAL_SCREEN_PATH } from './consts.js';
|
|
5
|
+
const get = (alias, path, parent) => route(alias, path, backend({ parent, method: RouteMethod.GET }));
|
|
6
|
+
const post = (alias, path, parent) => route(alias, path, backend({ parent, method: RouteMethod.POST }));
|
|
7
|
+
/**
|
|
8
|
+
* The standard consumer-rights protocol tree, the way `makeMarketingConsentProtocols` builds
|
|
9
|
+
* its own:
|
|
10
|
+
*
|
|
11
|
+
* - `base` under the application's guarded `parent` (its account base, whose guards and gate
|
|
12
|
+
* every route inherits) with `profile` GET `/profile`, `purchases` GET `/purchases`, `consent`
|
|
13
|
+
* GET / `giveConsent` POST `/consent`, `start` GET `/start?planSku` / `requestStart` POST
|
|
14
|
+
* `/start`, `withdrawals` GET / `withdraw` POST `/withdrawal`, `cancel` POST `/cancellation`;
|
|
15
|
+
* - with `public`, an UNGUARDED `public` subtree — `policy` GET `/policy`, `withdraw` POST
|
|
16
|
+
* `/withdrawal`, `cancel` POST `/cancellation` — like `paymentGate.webhook`, plus optional
|
|
17
|
+
* sticky frontend `screens`.
|
|
18
|
+
*
|
|
19
|
+
* Aliases are `<prefix>:<name>` (`<prefix>:public:<name>` below `public`). A tree with neither a
|
|
20
|
+
* parent nor guards is a declaration error: the account routes act on the caller's own records.
|
|
21
|
+
* Absent parts are left out of the tree rather than set to `undefined`, so `protocols(tree)` and
|
|
22
|
+
* `mapProtocols(tree, …)` walk it as is.
|
|
23
|
+
*/
|
|
24
|
+
export const makeConsumerRightsProtocols = (opts) => {
|
|
25
|
+
if (opts.parent == null && opts.guards == null) {
|
|
26
|
+
throw new SyntaxError('consumer-rights: the account routes need either a parent or explicit guards');
|
|
27
|
+
}
|
|
28
|
+
const alias = (name) => `${opts.prefix}:${name}`;
|
|
29
|
+
const path = opts.path ?? CONSUMER_RIGHTS_API_PATH;
|
|
30
|
+
const base = opts.parent != null
|
|
31
|
+
? openProtocol(route(alias('base'), path, backend({ parent: opts.parent })))
|
|
32
|
+
: openProtocol(route(alias('base'), path, backend()), {
|
|
33
|
+
guards: opts.guards,
|
|
34
|
+
...(opts.gate != null ? { gate: opts.gate } : {}),
|
|
35
|
+
});
|
|
36
|
+
const account = {
|
|
37
|
+
base,
|
|
38
|
+
profile: protocol(get(alias('profile'), '/profile', base), contract(BillingProfileViewSchema)),
|
|
39
|
+
purchases: protocol(get(alias('purchases'), '/purchases', base), contract(PurchaseListSchema)),
|
|
40
|
+
consent: protocol(get(alias('consent'), '/consent', base), contract(PerformanceConsentViewSchema)),
|
|
41
|
+
giveConsent: protocol(post(alias('consent:give'), '/consent', base), contract(PerformanceConsentBodySchema, PerformanceConsentResponseSchema)),
|
|
42
|
+
start: protocol(get(alias('start'), '/start', base), contract.request({ query: typed(SubscriptionStartQuerySchema) }, SubscriptionStartViewSchema)),
|
|
43
|
+
requestStart: protocol(post(alias('start:request'), '/start', base), contract(SubscriptionStartBodySchema, SubscriptionStartResponseSchema)),
|
|
44
|
+
withdrawals: protocol(get(alias('withdrawals'), '/withdrawal', base), contract(WithdrawalCandidateListSchema)),
|
|
45
|
+
withdraw: protocol(post(alias('withdraw'), '/withdrawal', base), contract(WithdrawalBodySchema, WithdrawalReceiptSchema)),
|
|
46
|
+
cancel: protocol(post(alias('cancel'), '/cancellation', base), contract(CancellationBodySchema, CancellationReceiptSchema)),
|
|
47
|
+
};
|
|
48
|
+
if (opts.public == null || opts.public === false) {
|
|
49
|
+
return account;
|
|
50
|
+
}
|
|
51
|
+
const pub = opts.public;
|
|
52
|
+
const publicAlias = (name) => alias(`public:${name}`);
|
|
53
|
+
const publicBase = openProtocol(route(publicAlias('base'), pub.path ?? CONSUMER_RIGHTS_PUBLIC_PATH, backend(pub.parent != null ? { parent: pub.parent } : null)));
|
|
54
|
+
const publicTree = {
|
|
55
|
+
base: publicBase,
|
|
56
|
+
policy: protocol(get(publicAlias('policy'), '/policy', publicBase), contract(ConsumerRightsPublicViewSchema)),
|
|
57
|
+
withdraw: protocol(post(publicAlias('withdraw'), '/withdrawal', publicBase), contract(WithdrawalBodySchema, DeclarationReceiptSchema)),
|
|
58
|
+
cancel: protocol(post(publicAlias('cancel'), '/cancellation', publicBase), contract(CancellationBodySchema, DeclarationReceiptSchema)),
|
|
59
|
+
};
|
|
60
|
+
const screens = pub.screens == null ? {} : {
|
|
61
|
+
screens: {
|
|
62
|
+
// Top-level frontend screens, `sticky` so the router keeps them regardless of `cfg.service`
|
|
63
|
+
// filtering — the same shape as every other legal page.
|
|
64
|
+
withdrawal: openProtocol(route(publicAlias('screen:withdrawal'), pub.screens.withdrawal ?? CONSUMER_RIGHTS_WITHDRAWAL_SCREEN_PATH, frontend({ parent: pub.screens.parent })), { sticky: true }),
|
|
65
|
+
cancellation: openProtocol(route(publicAlias('screen:cancellation'), pub.screens.cancellation ?? CONSUMER_RIGHTS_CANCELLATION_SCREEN_PATH, frontend({ parent: pub.screens.parent })), { sticky: true }),
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
return { ...account, public: { ...publicTree, ...screens } };
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=protocols.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocols.js","sourceRoot":"","sources":["../../src/consumer/protocols.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { OneTimeRefund, OneTimeRefundInput, SubscriptionRefund, SubscriptionRefundInput } from '../types.js';
|
|
2
|
+
/** The refund a withdrawal owes, computed in BigInt and rounded in the consumer's favour. */
|
|
3
|
+
export interface WithdrawalRefundHelper {
|
|
4
|
+
/**
|
|
5
|
+
* Split `totalMinor` in proportion to `shares` by the largest remainder: every part is the floor
|
|
6
|
+
* of its exact share, and the units left over go one each to the largest fractional parts (the
|
|
7
|
+
* earlier part on a tie). The parts always sum to the total. All-zero shares split evenly.
|
|
8
|
+
*/
|
|
9
|
+
splitByShares: (totalMinor: number, shares: number[]) => number[];
|
|
10
|
+
/**
|
|
11
|
+
* The refund of a one-time purchase (prepaid credits):
|
|
12
|
+
* `min(paid − refunded, ceil(paid × (granted − used) / granted))`. Nothing granted means nothing
|
|
13
|
+
* performed — the whole unrefunded amount. 1256 paid, 125 000 of 500 000 used → 942.
|
|
14
|
+
*/
|
|
15
|
+
oneTimeWithdrawalRefund: (input: OneTimeRefundInput) => OneTimeRefund;
|
|
16
|
+
/**
|
|
17
|
+
* The refund of a subscription's first invoice (CJEU C-641/19 PE Digital). The net price splits
|
|
18
|
+
* into its components by `shareMinor` (largest remainder). A `time` component loses
|
|
19
|
+
* `floor(c × elapsedDays / periodDays)`, the days counted from `max(periodStart,
|
|
20
|
+
* servicesRequestedAt)` and floored — and nothing without a start request. A `units` component
|
|
21
|
+
* loses `floor(c × used / granted)`. The gross refund is `ceil(paid × refundNet / net)`, capped at
|
|
22
|
+
* what is still unrefunded. Net 2000 / paid 2460, services 1000 at 3 of 30 days (−100), credits
|
|
23
|
+
* 1000 with 100 000 of 500 000 used (−200) → net 1700, gross 2091.
|
|
24
|
+
*/
|
|
25
|
+
subscriptionWithdrawalRefund: (input: SubscriptionRefundInput) => SubscriptionRefund;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/consumer/refund/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAEjH,6FAA6F;AAC7F,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;IACjE;;;;OAIG;IACH,uBAAuB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,aAAa,CAAA;IACrE;;;;;;;;OAQG;IACH,4BAA4B,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,kBAAkB,CAAA;CACrF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/consumer/refund/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OneTimeRefund, OneTimeRefundInput, SubscriptionRefund, SubscriptionRefundInput } from './types.js';
|
|
2
|
+
import type { WithdrawalRefundHelper } from './refund/types.js';
|
|
3
|
+
export declare const createWithdrawalRefundHelper: () => WithdrawalRefundHelper;
|
|
4
|
+
export declare const withdrawalRefundHelper: WithdrawalRefundHelper;
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `withdrawalRefundHelper.oneTimeWithdrawalRefund(…)` */
|
|
6
|
+
export declare const oneTimeWithdrawalRefund: (input: OneTimeRefundInput) => OneTimeRefund;
|
|
7
|
+
/** @deprecated compat:factory-refactor — use `withdrawalRefundHelper.subscriptionWithdrawalRefund(…)` */
|
|
8
|
+
export declare const subscriptionWithdrawalRefund: (input: SubscriptionRefundInput) => SubscriptionRefund;
|
|
9
|
+
//# sourceMappingURL=refund.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["../../src/consumer/refund.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAA+B,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAC7I,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AA0B/D,eAAO,MAAM,4BAA4B,QAAO,sBA+F/C,CAAA;AAED,eAAO,MAAM,sBAAsB,wBAAiC,CAAA;AAEpE,oGAAoG;AACpG,eAAO,MAAM,uBAAuB,UAAW,kBAAkB,KAAG,aACb,CAAA;AAEvD,yGAAyG;AACzG,eAAO,MAAM,4BAA4B,UAAW,uBAAuB,KAAG,kBAClB,CAAA"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { ConsumerRightsError } from '../errors.js';
|
|
2
|
+
import { DAY_MS } from './consts.js';
|
|
3
|
+
// Every amount is computed in BigInt and rounded in the consumer's favour: a deduction rounds
|
|
4
|
+
// down, a refund rounds up, and a refund never exceeds what is still unrefunded.
|
|
5
|
+
const big = (value, field) => {
|
|
6
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
7
|
+
throw new ConsumerRightsError(`refund:${field}`);
|
|
8
|
+
}
|
|
9
|
+
return BigInt(value);
|
|
10
|
+
};
|
|
11
|
+
/** A usage figure: fractions round DOWN (fewer units used, more reimbursed). */
|
|
12
|
+
const units = (value, field) => {
|
|
13
|
+
if (!Number.isFinite(value)) {
|
|
14
|
+
throw new ConsumerRightsError(`refund:${field}`);
|
|
15
|
+
}
|
|
16
|
+
return BigInt(Math.max(0, Math.floor(value)));
|
|
17
|
+
};
|
|
18
|
+
const ceilDiv = (a, b) => (a + b - 1n) / b;
|
|
19
|
+
const min = (a, b) => a < b ? a : b;
|
|
20
|
+
const clamp = (value, low, high) => value < low ? low : value > high ? high : value;
|
|
21
|
+
export const createWithdrawalRefundHelper = () => {
|
|
22
|
+
const splitByShares = (totalMinor, shares) => {
|
|
23
|
+
if (shares.length === 0) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const total = big(totalMinor, 'total');
|
|
27
|
+
const weights = shares.map((share, index) => big(share, `share:${index}`));
|
|
28
|
+
const even = weights.every(weight => weight === 0n);
|
|
29
|
+
const effective = even ? weights.map(() => 1n) : weights;
|
|
30
|
+
const sum = effective.reduce((acc, weight) => acc + weight, 0n);
|
|
31
|
+
const parts = effective.map(weight => (total * weight) / sum);
|
|
32
|
+
const remainders = effective.map((weight, index) => ({ index, rest: (total * weight) % sum }));
|
|
33
|
+
let left = total - parts.reduce((acc, part) => acc + part, 0n);
|
|
34
|
+
remainders.sort((a, b) => a.rest === b.rest ? a.index - b.index : a.rest > b.rest ? -1 : 1);
|
|
35
|
+
for (const { index } of remainders) {
|
|
36
|
+
if (left === 0n) {
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
parts[index] += 1n;
|
|
40
|
+
left -= 1n;
|
|
41
|
+
}
|
|
42
|
+
return parts.map(Number);
|
|
43
|
+
};
|
|
44
|
+
const oneTimeWithdrawalRefund = (input) => {
|
|
45
|
+
const paid = big(input.paidMinor, 'paid');
|
|
46
|
+
const open = paid - min(paid, big(input.refundedMinor ?? 0, 'refunded'));
|
|
47
|
+
const granted = units(input.unitsGranted, 'granted');
|
|
48
|
+
if (granted === 0n) {
|
|
49
|
+
return { refundMinor: Number(open), netRatio: 1, unitsReturned: 0 };
|
|
50
|
+
}
|
|
51
|
+
const unused = granted - clamp(units(input.unitsUsed, 'used'), 0n, granted);
|
|
52
|
+
return {
|
|
53
|
+
refundMinor: Number(min(open, ceilDiv(paid * unused, granted))),
|
|
54
|
+
netRatio: Number(unused) / Number(granted),
|
|
55
|
+
unitsReturned: Number(unused),
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
const subscriptionWithdrawalRefund = (input) => {
|
|
59
|
+
const paid = big(input.paidMinor, 'paid');
|
|
60
|
+
const open = paid - min(paid, big(input.refundedMinor ?? 0, 'refunded'));
|
|
61
|
+
const net = big(input.netMinor, 'net');
|
|
62
|
+
const declared = input.components != null && input.components.length > 0
|
|
63
|
+
? input.components
|
|
64
|
+
: [{ key: 'price', basis: 'time', shareMinor: input.netMinor }];
|
|
65
|
+
const amounts = splitByShares(input.netMinor, declared.map(component => component.shareMinor));
|
|
66
|
+
const span = input.periodEnd.getTime() - input.periodStart.getTime();
|
|
67
|
+
if (Number.isNaN(span) || Number.isNaN(input.withdrawnAt.getTime())) {
|
|
68
|
+
throw new ConsumerRightsError('refund:period');
|
|
69
|
+
}
|
|
70
|
+
const periodDays = Math.max(1, Math.round(span / DAY_MS));
|
|
71
|
+
const requestedAt = input.servicesRequestedAt;
|
|
72
|
+
const from = requestedAt == null ? null : Math.max(input.periodStart.getTime(), requestedAt.getTime());
|
|
73
|
+
const elapsedDays = from == null ? 0
|
|
74
|
+
: Math.min(periodDays, Math.max(0, Math.floor((input.withdrawnAt.getTime() - from) / DAY_MS)));
|
|
75
|
+
const granted = input.units != null ? units(input.units.granted, 'granted') : 0n;
|
|
76
|
+
const used = input.units != null ? clamp(units(input.units.used, 'used'), 0n, granted) : 0n;
|
|
77
|
+
let timeDeduction = 0n;
|
|
78
|
+
let unitsDeduction = 0n;
|
|
79
|
+
const components = declared.map((component, index) => {
|
|
80
|
+
const amount = BigInt(amounts[index]);
|
|
81
|
+
let deduction = 0n;
|
|
82
|
+
if (component.basis === 'time') {
|
|
83
|
+
deduction = (amount * BigInt(elapsedDays)) / BigInt(periodDays);
|
|
84
|
+
timeDeduction += deduction;
|
|
85
|
+
}
|
|
86
|
+
else if (granted > 0n) {
|
|
87
|
+
deduction = (amount * used) / granted;
|
|
88
|
+
unitsDeduction += deduction;
|
|
89
|
+
}
|
|
90
|
+
return { ...component, amountMinor: amounts[index], deductionMinor: Number(deduction) };
|
|
91
|
+
});
|
|
92
|
+
const refundNet = net - min(net, timeDeduction + unitsDeduction);
|
|
93
|
+
const refund = net === 0n ? open : min(open, ceilDiv(paid * refundNet, net));
|
|
94
|
+
return {
|
|
95
|
+
refundMinor: Number(refund),
|
|
96
|
+
refundNetMinor: Number(refundNet),
|
|
97
|
+
timeDeductionMinor: Number(timeDeduction),
|
|
98
|
+
unitsDeductionMinor: Number(unitsDeduction),
|
|
99
|
+
elapsedDays,
|
|
100
|
+
periodDays,
|
|
101
|
+
...(input.units != null ? { unitsUsed: Number(used), unitsGranted: Number(granted) } : {}),
|
|
102
|
+
components,
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
return { splitByShares, oneTimeWithdrawalRefund, subscriptionWithdrawalRefund };
|
|
106
|
+
};
|
|
107
|
+
export const withdrawalRefundHelper = createWithdrawalRefundHelper();
|
|
108
|
+
/** @deprecated compat:factory-refactor — use `withdrawalRefundHelper.oneTimeWithdrawalRefund(…)` */
|
|
109
|
+
export const oneTimeWithdrawalRefund = (input) => withdrawalRefundHelper.oneTimeWithdrawalRefund(input);
|
|
110
|
+
/** @deprecated compat:factory-refactor — use `withdrawalRefundHelper.subscriptionWithdrawalRefund(…)` */
|
|
111
|
+
export const subscriptionWithdrawalRefund = (input) => withdrawalRefundHelper.subscriptionWithdrawalRefund(input);
|
|
112
|
+
//# sourceMappingURL=refund.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refund.js","sourceRoot":"","sources":["../../src/consumer/refund.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAIpC,8FAA8F;AAC9F,iFAAiF;AAEjF,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE;IACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,mBAAmB,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,gFAAgF;AAChF,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE;IACrD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,mBAAmB,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;AAClE,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAU,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;AAEnH,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAA2B,EAAE;IACvE,MAAM,aAAa,GAAG,CAAC,UAAkB,EAAE,MAAgB,EAAY,EAAE;QACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC,CAAA;QAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QACxD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,EAAE,EAAE,CAAC,CAAA;QAC/D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA;QAC7D,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAA;QAC9F,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;QAC9D,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3F,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;gBAChB,MAAK;YACP,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAClB,IAAI,IAAI,EAAE,CAAA;QACZ,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,uBAAuB,GAAG,CAAC,KAAyB,EAAiB,EAAE;QAC3E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;QACxE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QACpD,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAA;QACrE,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;QAE3E,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YAC/D,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1C,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC;SAC9B,CAAA;IACH,CAAC,CAAA;IAED,MAAM,4BAA4B,GAAG,CAAC,KAA8B,EAAsB,EAAE;QAC1F,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAA;QACxE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YACtE,CAAC,CAAC,KAAK,CAAC,UAAU;YAClB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAoC,CAAC,CAAA;QACnG,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;QAE9F,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAA;QACpE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAA;QAChD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAA;QACzD,MAAM,WAAW,GAAG,KAAK,CAAC,mBAAmB,CAAA;QAC7C,MAAM,IAAI,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QACtG,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEhG,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAE3F,IAAI,aAAa,GAAG,EAAE,CAAA;QACtB,IAAI,cAAc,GAAG,EAAE,CAAA;QACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAA+B,EAAE;YAChF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YACrC,IAAI,SAAS,GAAG,EAAE,CAAA;YAClB,IAAI,SAAS,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC/B,SAAS,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAA;gBAC/D,aAAa,IAAI,SAAS,CAAA;YAC5B,CAAC;iBAAM,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACxB,SAAS,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,OAAO,CAAA;gBACrC,cAAc,IAAI,SAAS,CAAA;YAC7B,CAAC;YAED,OAAO,EAAE,GAAG,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAA;QACzF,CAAC,CAAC,CAAA;QAEF,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,cAAc,CAAC,CAAA;QAChE,MAAM,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,CAAC,CAAA;QAE5E,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC;YAC3B,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC;YACjC,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC;YACzC,mBAAmB,EAAE,MAAM,CAAC,cAAc,CAAC;YAC3C,WAAW;YACX,UAAU;YACV,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,UAAU;SACX,CAAA;IACH,CAAC,CAAA;IAED,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,CAAA;AACjF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAA;AAEpE,oGAAoG;AACpG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAyB,EAAiB,EAAE,CAClF,sBAAsB,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;AAEvD,yGAAyG;AACzG,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAA8B,EAAsB,EAAE,CACjG,sBAAsB,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ConsentKind } from '../consts.js';
|
|
2
|
+
/**
|
|
3
|
+
* Which express request a refusal asks for: `performance` (spend consent), `subscription-start`,
|
|
4
|
+
* or `null` for anything else. Recognises the class after `ResilientError.ensure` — a marshaled
|
|
5
|
+
* error that crossed a hop is rebuilt first — and otherwise the marker or type name in the
|
|
6
|
+
* `message` or `type`, so an error wrapped by another layer still answers. A bare HTTP 428 with
|
|
7
|
+
* no marker (a production incident body) is the caller's to check (`@owlmeans/api/status`).
|
|
8
|
+
*/
|
|
9
|
+
export declare const consentRefusalOf: (error: unknown) => ConsentKind | null;
|
|
10
|
+
//# sourceMappingURL=refusal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.d.ts","sourceRoot":"","sources":["../../src/consumer/refusal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAI1C;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,UAAW,OAAO,KAAG,WAAW,GAAG,IAsB/D,CAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { isResilientError, ResilientError } from '@owlmeans/error';
|
|
2
|
+
import { ConsentKind } from '../consts.js';
|
|
3
|
+
import { PerformanceConsentRequired, SubscriptionStartRequired } from '../errors.js';
|
|
4
|
+
import { CONSENT_REFUSAL_MARKERS } from './consts.local.js';
|
|
5
|
+
/**
|
|
6
|
+
* Which express request a refusal asks for: `performance` (spend consent), `subscription-start`,
|
|
7
|
+
* or `null` for anything else. Recognises the class after `ResilientError.ensure` — a marshaled
|
|
8
|
+
* error that crossed a hop is rebuilt first — and otherwise the marker or type name in the
|
|
9
|
+
* `message` or `type`, so an error wrapped by another layer still answers. A bare HTTP 428 with
|
|
10
|
+
* no marker (a production incident body) is the caller's to check (`@owlmeans/api/status`).
|
|
11
|
+
*/
|
|
12
|
+
export const consentRefusalOf = (error) => {
|
|
13
|
+
if (error == null || typeof error !== 'object') {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
let candidate = error;
|
|
17
|
+
if (!isResilientError(error) && error instanceof Error) {
|
|
18
|
+
try {
|
|
19
|
+
candidate = ResilientError.ensure(error);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
candidate = error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (candidate instanceof PerformanceConsentRequired) {
|
|
26
|
+
return ConsentKind.Performance;
|
|
27
|
+
}
|
|
28
|
+
if (candidate instanceof SubscriptionStartRequired) {
|
|
29
|
+
return ConsentKind.SubscriptionStart;
|
|
30
|
+
}
|
|
31
|
+
const { message, type } = error;
|
|
32
|
+
const texts = [message, type].filter((text) => typeof text === 'string');
|
|
33
|
+
return CONSENT_REFUSAL_MARKERS.find(([marker]) => texts.some(text => text.includes(marker)))?.[1] ?? null;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=refusal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refusal.js","sourceRoot":"","sources":["../../src/consumer/refusal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAsB,EAAE;IACrE,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,SAAS,GAAY,KAAK,CAAA;IAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IACD,IAAI,SAAS,YAAY,0BAA0B,EAAE,CAAC;QACpD,OAAO,WAAW,CAAC,WAAW,CAAA;IAChC,CAAC;IACD,IAAI,SAAS,YAAY,yBAAyB,EAAE,CAAC;QACnD,OAAO,WAAW,CAAC,iBAAiB,CAAA;IACtC,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAA8C,CAAA;IACxE,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAA;IAExF,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC3G,CAAC,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AmountPolicyView, BillingProfileView, CancellationReceipt, CheckoutLimitView, DeclarationReceipt, PerformanceConsentResponse, PerformanceConsentView, PurchaseList, PurchaseView, SubscriptionStartResponse, WithdrawalCandidateList, WithdrawalReceipt } from '../../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The consumer-rights wire values with their dates turned back into `Date`s. Each reviver copies
|
|
4
|
+
* the value; a value that already holds dates is copied as is, so reviving twice is harmless.
|
|
5
|
+
*/
|
|
6
|
+
export interface ConsumerReviveHelper {
|
|
7
|
+
revivePurchase: (purchase: PurchaseView) => PurchaseView;
|
|
8
|
+
revivePurchaseList: (list: PurchaseList) => PurchaseList;
|
|
9
|
+
reviveBillingProfile: (profile: BillingProfileView) => BillingProfileView;
|
|
10
|
+
reviveConsentView: (view: PerformanceConsentView) => PerformanceConsentView;
|
|
11
|
+
reviveConsentResponse: (response: PerformanceConsentResponse) => PerformanceConsentResponse;
|
|
12
|
+
reviveStartResponse: (response: SubscriptionStartResponse) => SubscriptionStartResponse;
|
|
13
|
+
reviveWithdrawalList: (list: WithdrawalCandidateList) => WithdrawalCandidateList;
|
|
14
|
+
/** Any declaration receipt — withdrawal or cancellation. */
|
|
15
|
+
reviveReceipt: <T extends DeclarationReceipt | WithdrawalReceipt | CancellationReceipt>(receipt: T) => T;
|
|
16
|
+
reviveCheckoutLimit: (limit: CheckoutLimitView) => CheckoutLimitView;
|
|
17
|
+
reviveAmountPolicyView: (view: AmountPolicyView) => AmountPolicyView;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/consumer/revive/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAChG,0BAA0B,EAAE,sBAAsB,EAAE,YAAY,EAAE,YAAY,EAAE,yBAAyB,EACzG,uBAAuB,EAAE,iBAAiB,EAC3C,MAAM,gBAAgB,CAAA;AAEvB;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,YAAY,CAAA;IACxD,kBAAkB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,CAAA;IACxD,oBAAoB,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,kBAAkB,CAAA;IACzE,iBAAiB,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,sBAAsB,CAAA;IAC3E,qBAAqB,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,0BAA0B,CAAA;IAC3F,mBAAmB,EAAE,CAAC,QAAQ,EAAE,yBAAyB,KAAK,yBAAyB,CAAA;IACvF,oBAAoB,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,uBAAuB,CAAA;IAChF,4DAA4D;IAC5D,aAAa,EAAE,CAAC,CAAC,SAAS,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;IACxG,mBAAmB,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,iBAAiB,CAAA;IACpE,sBAAsB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,gBAAgB,CAAA;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/consumer/revive/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { AmountPolicyView, BillingProfileView, PerformanceConsentView, PurchaseList } from '../types.js';
|
|
2
|
+
import type { ConsumerReviveHelper } from './revive/types.js';
|
|
3
|
+
export declare const createConsumerReviveHelper: () => ConsumerReviveHelper;
|
|
4
|
+
export declare const consumerReviveHelper: ConsumerReviveHelper;
|
|
5
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.revivePurchaseList(…)` */
|
|
6
|
+
export declare const revivePurchaseList: (list: PurchaseList) => PurchaseList;
|
|
7
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveBillingProfile(…)` */
|
|
8
|
+
export declare const reviveBillingProfile: (profile: BillingProfileView) => BillingProfileView;
|
|
9
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveConsentView(…)` */
|
|
10
|
+
export declare const reviveConsentView: (view: PerformanceConsentView) => PerformanceConsentView;
|
|
11
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveAmountPolicyView(…)` */
|
|
12
|
+
export declare const reviveAmountPolicyView: (view: AmountPolicyView) => AmountPolicyView;
|
|
13
|
+
//# sourceMappingURL=revive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revive.d.ts","sourceRoot":"","sources":["../../src/consumer/revive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAAE,kBAAkB,EACR,sBAAsB,EAAE,YAAY,EAEjE,MAAM,aAAa,CAAA;AAEpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAM7D,eAAO,MAAM,0BAA0B,QAAO,oBAoD7C,CAAA;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAA;AAEhE,6FAA6F;AAC7F,eAAO,MAAM,kBAAkB,SAAU,YAAY,KAAG,YAA6D,CAAA;AAErH,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,YAAa,kBAAkB,KAAG,kBACf,CAAA;AAEpD,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,SAAU,sBAAsB,KAAG,sBACnB,CAAA;AAE9C,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,SAAU,gBAAgB,KAAG,gBACb,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// The wire carries every date as an ISO string (see `model/consumer.ts`). Each reviver copies the
|
|
2
|
+
// value and turns the named fields back into `Date`s; a value that already holds dates is copied
|
|
3
|
+
// as is, so reviving twice is harmless.
|
|
4
|
+
export const createConsumerReviveHelper = () => {
|
|
5
|
+
const revive = (value, fields) => {
|
|
6
|
+
const copy = { ...value };
|
|
7
|
+
for (const field of fields) {
|
|
8
|
+
const raw = copy[field];
|
|
9
|
+
if (raw != null && !(raw instanceof Date)) {
|
|
10
|
+
copy[field] = new Date(raw);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return copy;
|
|
14
|
+
};
|
|
15
|
+
const revivePurchase = (purchase) => revive(purchase, ['purchasedAt', 'deadline', 'consentedAt', 'withdrawnAt']);
|
|
16
|
+
const revivePurchaseList = (list) => ({ ...list, purchases: list.purchases.map(revivePurchase) });
|
|
17
|
+
const reviveBillingProfile = (profile) => revive(profile, ['lockedAt']);
|
|
18
|
+
const reviveConsentView = (view) => ({
|
|
19
|
+
...revive(view, ['deadline', 'at']),
|
|
20
|
+
purchases: view.purchases.map(revivePurchase),
|
|
21
|
+
});
|
|
22
|
+
const reviveConsentResponse = (response) => revive(response, ['consentedAt']);
|
|
23
|
+
const reviveStartResponse = (response) => revive(response, ['requestedAt', 'expiresAt']);
|
|
24
|
+
const reviveCandidate = (candidate) => revive(candidate, ['purchasedAt', 'deadline']);
|
|
25
|
+
const reviveWithdrawalList = (list) => ({ ...list, candidates: list.candidates.map(reviveCandidate) });
|
|
26
|
+
const reviveReceipt = (receipt) => revive(receipt, ['receivedAt', 'effectiveAt']);
|
|
27
|
+
const reviveCheckoutLimit = (limit) => revive(limit, ['resetsAt']);
|
|
28
|
+
const reviveAmountPolicyView = (view) => ({ ...view, limit: view.limit == null ? null : reviveCheckoutLimit(view.limit) });
|
|
29
|
+
return {
|
|
30
|
+
revivePurchase, revivePurchaseList, reviveBillingProfile, reviveConsentView, reviveConsentResponse,
|
|
31
|
+
reviveStartResponse, reviveWithdrawalList, reviveReceipt, reviveCheckoutLimit, reviveAmountPolicyView,
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export const consumerReviveHelper = createConsumerReviveHelper();
|
|
35
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.revivePurchaseList(…)` */
|
|
36
|
+
export const revivePurchaseList = (list) => consumerReviveHelper.revivePurchaseList(list);
|
|
37
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveBillingProfile(…)` */
|
|
38
|
+
export const reviveBillingProfile = (profile) => consumerReviveHelper.reviveBillingProfile(profile);
|
|
39
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveConsentView(…)` */
|
|
40
|
+
export const reviveConsentView = (view) => consumerReviveHelper.reviveConsentView(view);
|
|
41
|
+
/** @deprecated compat:factory-refactor — use `consumerReviveHelper.reviveAmountPolicyView(…)` */
|
|
42
|
+
export const reviveAmountPolicyView = (view) => consumerReviveHelper.reviveAmountPolicyView(view);
|
|
43
|
+
//# sourceMappingURL=revive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revive.js","sourceRoot":"","sources":["../../src/consumer/revive.ts"],"names":[],"mappings":"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"}
|