@owlmeans/server-payment 0.1.18-rc.2 → 0.1.18-rc.21
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 +109 -25
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/server-payment/SKILL.md +475 -52
- package/build/actions/index.d.ts +1 -0
- package/build/actions/index.d.ts.map +1 -1
- package/build/actions/index.js +1 -0
- package/build/actions/index.js.map +1 -1
- package/build/actions/resync-subscriptions.d.ts +3 -0
- package/build/actions/resync-subscriptions.d.ts.map +1 -0
- package/build/actions/resync-subscriptions.js +7 -0
- package/build/actions/resync-subscriptions.js.map +1 -0
- package/build/actions/resync.d.ts +1 -0
- package/build/actions/resync.d.ts.map +1 -1
- package/build/actions/resync.js +7 -3
- package/build/actions/resync.js.map +1 -1
- package/build/actions/webhook.d.ts.map +1 -1
- package/build/actions/webhook.js +6 -3
- package/build/actions/webhook.js.map +1 -1
- package/build/config.d.ts +60 -5
- package/build/config.d.ts.map +1 -1
- package/build/config.js +237 -5
- package/build/config.js.map +1 -1
- package/build/consts.d.ts +75 -3
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +94 -5
- package/build/consts.js.map +1 -1
- package/build/consumer/capture.d.ts +74 -0
- package/build/consumer/capture.d.ts.map +1 -0
- package/build/consumer/capture.js +291 -0
- package/build/consumer/capture.js.map +1 -0
- package/build/consumer/format.d.ts +27 -0
- package/build/consumer/format.d.ts.map +1 -0
- package/build/consumer/format.js +81 -0
- package/build/consumer/format.js.map +1 -0
- package/build/consumer/handlers.d.ts +28 -0
- package/build/consumer/handlers.d.ts.map +1 -0
- package/build/consumer/handlers.js +173 -0
- package/build/consumer/handlers.js.map +1 -0
- package/build/consumer/index.d.ts +7 -0
- package/build/consumer/index.d.ts.map +1 -0
- package/build/consumer/index.js +6 -0
- package/build/consumer/index.js.map +1 -0
- package/build/consumer/mail.d.ts +27 -0
- package/build/consumer/mail.d.ts.map +1 -0
- package/build/consumer/mail.js +314 -0
- package/build/consumer/mail.js.map +1 -0
- package/build/consumer/origin.d.ts +14 -0
- package/build/consumer/origin.d.ts.map +1 -0
- package/build/consumer/origin.js +47 -0
- package/build/consumer/origin.js.map +1 -0
- package/build/consumer/reconcile.d.ts +12 -0
- package/build/consumer/reconcile.d.ts.map +1 -0
- package/build/consumer/reconcile.js +317 -0
- package/build/consumer/reconcile.js.map +1 -0
- package/build/consumer/records.d.ts +78 -0
- package/build/consumer/records.d.ts.map +1 -0
- package/build/consumer/records.js +296 -0
- package/build/consumer/records.js.map +1 -0
- package/build/consumer/service.d.ts +51 -0
- package/build/consumer/service.d.ts.map +1 -0
- package/build/consumer/service.js +760 -0
- package/build/consumer/service.js.map +1 -0
- package/build/consumer/withdrawal.d.ts +57 -0
- package/build/consumer/withdrawal.d.ts.map +1 -0
- package/build/consumer/withdrawal.js +247 -0
- package/build/consumer/withdrawal.js.map +1 -0
- package/build/entitlement.d.ts +10 -0
- package/build/entitlement.d.ts.map +1 -0
- package/build/entitlement.js +69 -0
- package/build/entitlement.js.map +1 -0
- package/build/entrypoints.d.ts +1 -1
- package/build/entrypoints.d.ts.map +1 -1
- package/build/entrypoints.js +2 -1
- package/build/entrypoints.js.map +1 -1
- package/build/gate.d.ts +32 -4
- package/build/gate.d.ts.map +1 -1
- package/build/gate.js +59 -19
- package/build/gate.js.map +1 -1
- package/build/index.d.ts +18 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +15 -3
- package/build/index.js.map +1 -1
- package/build/limit.d.ts +13 -0
- package/build/limit.d.ts.map +1 -0
- package/build/limit.js +47 -0
- package/build/limit.js.map +1 -0
- package/build/model.d.ts +10 -1
- package/build/model.d.ts.map +1 -1
- package/build/model.js +215 -17
- package/build/model.js.map +1 -1
- package/build/observer.d.ts +9 -0
- package/build/observer.d.ts.map +1 -1
- package/build/observer.js +38 -12
- package/build/observer.js.map +1 -1
- package/build/plan.d.ts +22 -0
- package/build/plan.d.ts.map +1 -0
- package/build/plan.js +72 -0
- package/build/plan.js.map +1 -0
- package/build/plugins/checkout-plugins.d.ts +49 -0
- package/build/plugins/checkout-plugins.d.ts.map +1 -0
- package/build/plugins/checkout-plugins.js +124 -0
- package/build/plugins/checkout-plugins.js.map +1 -0
- package/build/plugins/estimate.d.ts +43 -0
- package/build/plugins/estimate.d.ts.map +1 -0
- package/build/plugins/estimate.js +268 -0
- package/build/plugins/estimate.js.map +1 -0
- package/build/plugins/events.d.ts +45 -10
- package/build/plugins/events.d.ts.map +1 -1
- package/build/plugins/events.js +605 -136
- package/build/plugins/events.js.map +1 -1
- package/build/plugins/fx.d.ts +31 -0
- package/build/plugins/fx.d.ts.map +1 -0
- package/build/plugins/fx.js +81 -0
- package/build/plugins/fx.js.map +1 -0
- package/build/plugins/portal.d.ts +37 -0
- package/build/plugins/portal.d.ts.map +1 -0
- package/build/plugins/portal.js +265 -0
- package/build/plugins/portal.js.map +1 -0
- package/build/plugins/refunds.d.ts +33 -0
- package/build/plugins/refunds.d.ts.map +1 -0
- package/build/plugins/refunds.js +80 -0
- package/build/plugins/refunds.js.map +1 -0
- package/build/plugins/stripe.d.ts +36 -4
- package/build/plugins/stripe.d.ts.map +1 -1
- package/build/plugins/stripe.js +492 -97
- package/build/plugins/stripe.js.map +1 -1
- package/build/plugins/webhook-manager.d.ts +46 -0
- package/build/plugins/webhook-manager.d.ts.map +1 -0
- package/build/plugins/webhook-manager.js +231 -0
- package/build/plugins/webhook-manager.js.map +1 -0
- package/build/reconcile.d.ts +15 -0
- package/build/reconcile.d.ts.map +1 -0
- package/build/reconcile.js +88 -0
- package/build/reconcile.js.map +1 -0
- package/build/resource.d.ts +12 -1
- package/build/resource.d.ts.map +1 -1
- package/build/resource.js +97 -6
- package/build/resource.js.map +1 -1
- package/build/service.d.ts +28 -3
- package/build/service.d.ts.map +1 -1
- package/build/service.js +146 -19
- package/build/service.js.map +1 -1
- package/build/subscription.d.ts +48 -0
- package/build/subscription.d.ts.map +1 -0
- package/build/subscription.js +176 -0
- package/build/subscription.js.map +1 -0
- package/build/sync.d.ts +28 -1
- package/build/sync.d.ts.map +1 -1
- package/build/sync.js +208 -31
- package/build/sync.js.map +1 -1
- package/build/types.d.ts +1115 -36
- package/build/types.d.ts.map +1 -1
- package/build/usage.d.ts +63 -0
- package/build/usage.d.ts.map +1 -0
- package/build/usage.js +363 -0
- package/build/usage.js.map +1 -0
- package/build/utils.d.ts +52 -1
- package/build/utils.d.ts.map +1 -1
- package/build/utils.js +69 -7
- package/build/utils.js.map +1 -1
- package/package.json +17 -13
- package/src/actions/index.ts +1 -0
- package/src/actions/resync-subscriptions.ts +10 -0
- package/src/actions/resync.ts +6 -3
- package/src/actions/webhook.ts +5 -3
- package/src/config.ts +264 -8
- package/src/consts.ts +114 -6
- package/src/consumer/capture.ts +362 -0
- package/src/consumer/format.ts +90 -0
- package/src/consumer/handlers.ts +211 -0
- package/src/consumer/index.ts +6 -0
- package/src/consumer/mail.ts +368 -0
- package/src/consumer/origin.ts +63 -0
- package/src/consumer/reconcile.ts +329 -0
- package/src/consumer/records.ts +374 -0
- package/src/consumer/service.ts +868 -0
- package/src/consumer/withdrawal.ts +302 -0
- package/src/entitlement.ts +84 -0
- package/src/entrypoints.ts +2 -1
- package/src/gate.ts +88 -21
- package/src/index.ts +24 -3
- package/src/limit.ts +57 -0
- package/src/model.ts +237 -18
- package/src/observer.ts +44 -11
- package/src/plan.ts +89 -0
- package/src/plugins/checkout-plugins.ts +155 -0
- package/src/plugins/estimate.ts +339 -0
- package/src/plugins/events.ts +677 -121
- package/src/plugins/fx.ts +122 -0
- package/src/plugins/portal.ts +306 -0
- package/src/plugins/refunds.ts +108 -0
- package/src/plugins/stripe.ts +581 -96
- package/src/plugins/webhook-manager.ts +270 -0
- package/src/reconcile.ts +103 -0
- package/src/resource.ts +152 -7
- package/src/service.ts +174 -18
- package/src/subscription.ts +231 -0
- package/src/sync.ts +249 -29
- package/src/types.ts +1227 -32
- package/src/usage.ts +453 -0
- package/src/utils.ts +127 -10
- package/tests/checkout-consumer.spec.ts +348 -0
- package/tests/checkout-plugins.spec.ts +164 -0
- package/tests/checkout.spec.ts +184 -83
- package/tests/consumer-events.spec.ts +218 -0
- package/tests/consumer-fixtures.ts +132 -0
- package/tests/consumer-ops.spec.ts +351 -0
- package/tests/consumer-rights.integration.spec.ts +150 -0
- package/tests/consumer-rights.spec.ts +501 -0
- package/tests/context.ts +109 -0
- package/tests/entitlement.spec.ts +103 -0
- package/tests/estimate.spec.ts +240 -0
- package/tests/events.spec.ts +356 -0
- package/tests/fake-stripe.ts +972 -0
- package/tests/gate.spec.ts +62 -72
- package/tests/limit-gate.spec.ts +68 -0
- package/tests/portal.spec.ts +200 -0
- package/tests/protocol.spec.ts +23 -6
- package/tests/sync.spec.ts +114 -0
- package/tests/usage.integration.spec.ts +101 -0
- package/tests/usage.spec.ts +171 -0
- package/tests/webhook-manager.spec.ts +152 -0
package/build/gate.js
CHANGED
|
@@ -1,37 +1,77 @@
|
|
|
1
1
|
import { createLazyService } from '@owlmeans/context';
|
|
2
2
|
import { AuthForbidden, entitySlugOf } from '@owlmeans/auth';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { hasPermission } from '@owlmeans/iam';
|
|
4
|
+
import { CapabilityRequired, ENTITLEMENT_GATE, parseEntitlementParam, promoActive, } from '@owlmeans/payment';
|
|
5
|
+
import { capabilityOf } from '@owlmeans/payment';
|
|
6
|
+
import { resolveEffectivePlan } from './plan.js';
|
|
7
|
+
import { entitlements } from './utils.js';
|
|
8
|
+
export const defaultEntity = (req) => req.entity?.id ?? entitySlugOf(req.auth) ?? null;
|
|
9
|
+
/**
|
|
10
|
+
* The capability sets an entity's effective plan grants now — sets behind a lapsed promo left out.
|
|
11
|
+
* Empty when the plan is not of one of `productSkus`.
|
|
12
|
+
*/
|
|
5
13
|
export const entitlementsOf = async (ctx, entityId, productSkus) => {
|
|
6
|
-
const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
const { plan, subscription } = await resolveEffectivePlan(ctx, entityId);
|
|
15
|
+
if (productSkus != null && !productSkus.includes(plan.productSku)) {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
const at = new Date();
|
|
19
|
+
return (plan.capabilities ?? [])
|
|
20
|
+
.filter(set => promoActive(set.promo, subscription?.createdAt, at))
|
|
21
|
+
.map(({ promo: _promo, ...set }) => set);
|
|
10
22
|
};
|
|
11
|
-
|
|
12
|
-
|
|
23
|
+
/** An explicit `false` for the permission in the token denies, whatever the plan grants. */
|
|
24
|
+
const tokenDenies = (auth, param) => {
|
|
25
|
+
const { scope, permission } = parseEntitlementParam(param);
|
|
26
|
+
return auth.permissions?.some(set => (scope == null || set.scope === scope) && set.permissions?.[permission] === false) ?? false;
|
|
27
|
+
};
|
|
28
|
+
const tokenGrants = (auth, param) => {
|
|
29
|
+
const { scope, permission } = parseEntitlementParam(param);
|
|
30
|
+
return hasPermission(auth, permission, scope != null ? { scope } : undefined);
|
|
31
|
+
};
|
|
32
|
+
/** Resolve the authenticated entity a gate asserts for, or refuse. */
|
|
33
|
+
export const gateEntityOf = (req, opts) => {
|
|
34
|
+
if (req.auth == null) {
|
|
35
|
+
throw new AuthForbidden('auth');
|
|
36
|
+
}
|
|
37
|
+
const entityId = (opts?.resolveEntity ?? defaultEntity)(req);
|
|
38
|
+
if (entityId == null || entityId === '') {
|
|
39
|
+
throw new AuthForbidden('entity');
|
|
40
|
+
}
|
|
41
|
+
return { auth: req.auth, entityId };
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The capability gate (`ENTITLEMENT_GATE`): passes when the effective plan grants ANY of the
|
|
45
|
+
* parameters (`[scope:]permission[>=n]`) and the token does not deny it. Fails closed — an unreadable
|
|
46
|
+
* store refuses. Refuses with `CapabilityRequired`, an `AuthForbidden`.
|
|
47
|
+
*/
|
|
48
|
+
export const makeCapabilityGate = (alias = ENTITLEMENT_GATE, opts) => {
|
|
13
49
|
const service = createLazyService(alias, {
|
|
14
50
|
assert: async (req, _, params) => {
|
|
15
51
|
await service.ready();
|
|
16
52
|
const ctx = service.assertCtx();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (entityId == null || entityId === '')
|
|
21
|
-
throw new AuthForbidden('entity');
|
|
22
|
-
let capabilities;
|
|
53
|
+
const { auth, entityId } = gateEntityOf(req, opts);
|
|
54
|
+
const list = (Array.isArray(params) ? params : [params]).filter(param => typeof param === 'string');
|
|
55
|
+
let view;
|
|
23
56
|
try {
|
|
24
|
-
|
|
57
|
+
view = await entitlements(ctx).entitlements(entityId);
|
|
25
58
|
}
|
|
26
59
|
catch (error) {
|
|
27
|
-
console.error(`
|
|
28
|
-
throw new
|
|
60
|
+
console.error(`capability gate: cannot resolve entitlements of "${entityId}"`, error);
|
|
61
|
+
throw new CapabilityRequired(list);
|
|
62
|
+
}
|
|
63
|
+
if (opts?.productSkus != null && !opts.productSkus.includes(view.plan.productSku)) {
|
|
64
|
+
throw new CapabilityRequired(list);
|
|
29
65
|
}
|
|
30
|
-
|
|
31
|
-
|
|
66
|
+
const allowed = list.some(param => capabilityOf(view, param) && !tokenDenies(auth, param)
|
|
67
|
+
&& (opts?.requirePermission !== true || tokenGrants(auth, param)));
|
|
68
|
+
if (!allowed) {
|
|
69
|
+
throw new CapabilityRequired(list);
|
|
32
70
|
}
|
|
33
71
|
},
|
|
34
72
|
});
|
|
35
73
|
return service;
|
|
36
74
|
};
|
|
75
|
+
/** The capability gate under its historical name. */
|
|
76
|
+
export const makeEntitlementGate = makeCapabilityGate;
|
|
37
77
|
//# sourceMappingURL=gate.js.map
|
package/build/gate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../src/gate.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -5,8 +5,23 @@ export * from './resource.js';
|
|
|
5
5
|
export * from './observer.js';
|
|
6
6
|
export * from './service.js';
|
|
7
7
|
export * from './gate.js';
|
|
8
|
+
export * from './limit.js';
|
|
9
|
+
export * from './entitlement.js';
|
|
10
|
+
export * from './reconcile.js';
|
|
8
11
|
export * from './entrypoints.js';
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
12
|
+
export { findPlan, findProduct, freePlanOf, planRank, resolveEffectivePlan } from './plan.js';
|
|
13
|
+
export { consumeLimit, consumptionByRefOf, consumptionOf, limitStateOf, reconcileLedgerCounters, reconcileOccupancyOf, releaseLimit } from './usage.js';
|
|
14
|
+
export { classifySubscriptionChange, commitSubscription, propagatedStateOf, subscriptionEventKey, } from './subscription.js';
|
|
15
|
+
export type { CommitOptions, CommitResult } from './subscription.js';
|
|
16
|
+
export { planLookupKey, syncedPlanPrices, syncPaymentProducts, syncStripeProducts } from './sync.js';
|
|
17
|
+
export { amountCheckoutLineItem, quantityCheckoutLineItem } from './plugins/stripe.js';
|
|
18
|
+
export { assertAmountAllowed, narrowAmountFor, sessionTtlOf } from './plugins/checkout-plugins.js';
|
|
19
|
+
export * from './consumer/index.js';
|
|
20
|
+
export { makeEstimateCache, estimateStripePrice } from './plugins/estimate.js';
|
|
21
|
+
export type { EstimateCache } from './plugins/estimate.js';
|
|
22
|
+
export { applySubscription, createEventHandler, mapStatus } from './plugins/events.js';
|
|
23
|
+
export type { ApplyOptions } from './plugins/events.js';
|
|
24
|
+
export { ensureWebhookEndpoint, stripeWebhookSecret, stripeWebhookSecrets, webhookUrlOf, } from './plugins/webhook-manager.js';
|
|
25
|
+
export { ensurePortalConfiguration } from './plugins/portal.js';
|
|
26
|
+
export { activeSubscription, apiVersionOf, billingProfiles, consumerConsents, consumerDeclarations, consumerEvents, consumerRights, consumerRightsOf, entitlements, fingerprints, fulfillments, gateway, observer, paygateCustomers, payment, paymentWebhooks, purchases, stripeClient, stripeConfig, subscriptions, usageCounters, usageEvents, } from './utils.js';
|
|
12
27
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACvJ,OAAO,EACL,0BAA0B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,GACxF,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAClG,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC9E,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACtF,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EACL,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,GAC/E,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EACzG,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAC/G,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,GAC3G,MAAM,YAAY,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -4,8 +4,20 @@ export * from './resource.js';
|
|
|
4
4
|
export * from './observer.js';
|
|
5
5
|
export * from './service.js';
|
|
6
6
|
export * from './gate.js';
|
|
7
|
+
export * from './limit.js';
|
|
8
|
+
export * from './entitlement.js';
|
|
9
|
+
export * from './reconcile.js';
|
|
7
10
|
export * from './entrypoints.js';
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
+
export { findPlan, findProduct, freePlanOf, planRank, resolveEffectivePlan } from './plan.js';
|
|
12
|
+
export { consumeLimit, consumptionByRefOf, consumptionOf, limitStateOf, reconcileLedgerCounters, reconcileOccupancyOf, releaseLimit } from './usage.js';
|
|
13
|
+
export { classifySubscriptionChange, commitSubscription, propagatedStateOf, subscriptionEventKey, } from './subscription.js';
|
|
14
|
+
export { planLookupKey, syncedPlanPrices, syncPaymentProducts, syncStripeProducts } from './sync.js';
|
|
15
|
+
export { amountCheckoutLineItem, quantityCheckoutLineItem } from './plugins/stripe.js';
|
|
16
|
+
export { assertAmountAllowed, narrowAmountFor, sessionTtlOf } from './plugins/checkout-plugins.js';
|
|
17
|
+
export * from './consumer/index.js';
|
|
18
|
+
export { makeEstimateCache, estimateStripePrice } from './plugins/estimate.js';
|
|
19
|
+
export { applySubscription, createEventHandler, mapStatus } from './plugins/events.js';
|
|
20
|
+
export { ensureWebhookEndpoint, stripeWebhookSecret, stripeWebhookSecrets, webhookUrlOf, } from './plugins/webhook-manager.js';
|
|
21
|
+
export { ensurePortalConfiguration } from './plugins/portal.js';
|
|
22
|
+
export { activeSubscription, apiVersionOf, billingProfiles, consumerConsents, consumerDeclarations, consumerEvents, consumerRights, consumerRightsOf, entitlements, fingerprints, fulfillments, gateway, observer, paygateCustomers, payment, paymentWebhooks, purchases, stripeClient, stripeConfig, subscriptions, usageCounters, usageEvents, } from './utils.js';
|
|
11
23
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACvJ,OAAO,EACL,0BAA0B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,GACxF,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACpG,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AACtF,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAClG,cAAc,qBAAqB,CAAA;AACnC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEtF,OAAO,EACL,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,YAAY,GAC/E,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,cAAc,EACzG,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAC/G,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,GAC3G,MAAM,YAAY,CAAA"}
|
package/build/limit.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { GateService } from '@owlmeans/entrypoint';
|
|
2
|
+
import type { EntityResolverOption } from './gate.js';
|
|
3
|
+
export interface LimitGateOptions extends EntityResolverOption {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The limit gate (`LIMIT_GATE`): passes when ANY `limit:<key>[>=n]` parameter has at least `n` left
|
|
7
|
+
* in its current window. It never consumes — checking room and spending it are different moments,
|
|
8
|
+
* and only the handler knows the work started. Malformed parameters and keys the plan does not
|
|
9
|
+
* declare are skipped; a store error refuses. Refuses with `LimitExhausted` naming the first
|
|
10
|
+
* declared key, an `AuthForbidden`.
|
|
11
|
+
*/
|
|
12
|
+
export declare const makeLimitGate: (alias?: string, opts?: LimitGateOptions) => GateService;
|
|
13
|
+
//# sourceMappingURL=limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limit.d.ts","sourceRoot":"","sources":["../src/limit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAKvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAIrD,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;CAAG;AAEjE;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,WAAW,MAAM,SAAsB,gBAAgB,KAAG,WAqCnF,CAAA"}
|
package/build/limit.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createLazyService } from '@owlmeans/context';
|
|
2
|
+
import { LIMIT_GATE, LimitExhausted, LimitUnknown, parseLimitParam } from '@owlmeans/payment';
|
|
3
|
+
import { gateEntityOf } from './gate.js';
|
|
4
|
+
import { entitlements } from './utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* The limit gate (`LIMIT_GATE`): passes when ANY `limit:<key>[>=n]` parameter has at least `n` left
|
|
7
|
+
* in its current window. It never consumes — checking room and spending it are different moments,
|
|
8
|
+
* and only the handler knows the work started. Malformed parameters and keys the plan does not
|
|
9
|
+
* declare are skipped; a store error refuses. Refuses with `LimitExhausted` naming the first
|
|
10
|
+
* declared key, an `AuthForbidden`.
|
|
11
|
+
*/
|
|
12
|
+
export const makeLimitGate = (alias = LIMIT_GATE, opts) => {
|
|
13
|
+
const service = createLazyService(alias, {
|
|
14
|
+
assert: async (req, _, params) => {
|
|
15
|
+
await service.ready();
|
|
16
|
+
const ctx = service.assertCtx();
|
|
17
|
+
const { entityId } = gateEntityOf(req, opts);
|
|
18
|
+
const list = (Array.isArray(params) ? params : [params]).filter(param => typeof param === 'string');
|
|
19
|
+
const parsed = list.map(parseLimitParam).filter((param) => param != null);
|
|
20
|
+
if (parsed.length === 0) {
|
|
21
|
+
throw new LimitExhausted({ key: list[0] ?? 'unknown', used: 0, limit: 0 });
|
|
22
|
+
}
|
|
23
|
+
let refused = null;
|
|
24
|
+
for (const param of parsed) {
|
|
25
|
+
let state;
|
|
26
|
+
try {
|
|
27
|
+
state = await entitlements(ctx).limitState(entityId, param.key);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (!(error instanceof LimitUnknown)) {
|
|
31
|
+
console.error(`limit gate: cannot read "${param.key}" of "${entityId}"`, error);
|
|
32
|
+
}
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (state.remaining >= param.atLeast) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
refused ??= state;
|
|
39
|
+
}
|
|
40
|
+
throw new LimitExhausted(refused != null
|
|
41
|
+
? { key: refused.key, used: refused.used, limit: refused.limit, resetsAt: refused.resetsAt }
|
|
42
|
+
: { key: parsed[0].key, used: 0, limit: 0 });
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
return service;
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limit.js","sourceRoot":"","sources":["../src/limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAG7F,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAKzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAK,GAAW,UAAU,EAAE,IAAuB,EAAe,EAAE;IAChG,MAAM,OAAO,GAAG,iBAAiB,CAAc,KAAK,EAAE;QACpD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;YAC/B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;YACrB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAA4C,CAAA;YACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAA;YAEnG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAA;YAC9F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5E,CAAC;YAED,IAAI,OAAO,GAAqB,IAAI,CAAA;YACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAgB,CAAA;gBACpB,IAAI,CAAC;oBACH,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;gBACjE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,GAAG,SAAS,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAA;oBACjF,CAAC;oBACD,SAAQ;gBACV,CAAC;gBACD,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACrC,OAAM;gBACR,CAAC;gBACD,OAAO,KAAK,KAAK,CAAA;YACnB,CAAC;YAED,MAAM,IAAI,cAAc,CAAC,OAAO,IAAI,IAAI;gBACtC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;gBAC5F,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAChD,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA"}
|
package/build/model.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import type { JSONSchemaType } from 'ajv';
|
|
2
|
-
import type { FingerprintRecord, PaygateCustomerRecord, PaymentSubscriptionRecord } from './types.js';
|
|
2
|
+
import type { BillingProfileRecord, ConsumerConsentRecord, ConsumerDeclarationRecord, ConsumerEventRecord, FingerprintRecord, PaygateCustomerRecord, PaymentFulfillmentRecord, PaymentSubscriptionRecord, PaymentUsageCounterRecord, PaymentUsageRecord, PaymentWebhookRecord, PurchaseRecord } from './types.js';
|
|
3
3
|
export declare const PaygateCustomerSchema: JSONSchemaType<PaygateCustomerRecord>;
|
|
4
4
|
export declare const PaymentSubscriptionSchema: JSONSchemaType<PaymentSubscriptionRecord>;
|
|
5
|
+
export declare const PaymentFulfillmentSchema: JSONSchemaType<PaymentFulfillmentRecord>;
|
|
6
|
+
export declare const PaymentWebhookSchema: JSONSchemaType<PaymentWebhookRecord>;
|
|
7
|
+
export declare const PaymentUsageSchema: JSONSchemaType<PaymentUsageRecord>;
|
|
8
|
+
export declare const PaymentUsageCounterSchema: JSONSchemaType<PaymentUsageCounterRecord>;
|
|
5
9
|
export declare const FingerprintSchema: JSONSchemaType<FingerprintRecord>;
|
|
10
|
+
export declare const BillingProfileSchema: JSONSchemaType<BillingProfileRecord>;
|
|
11
|
+
export declare const PurchaseSchema: JSONSchemaType<PurchaseRecord>;
|
|
12
|
+
export declare const ConsumerConsentSchema: JSONSchemaType<ConsumerConsentRecord>;
|
|
13
|
+
export declare const ConsumerDeclarationSchema: JSONSchemaType<ConsumerDeclarationRecord>;
|
|
14
|
+
export declare const ConsumerEventSchema: JSONSchemaType<ConsumerEventRecord>;
|
|
6
15
|
//# sourceMappingURL=model.d.ts.map
|
package/build/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AAMzC,OAAO,KAAK,EACV,oBAAoB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,iBAAiB,EAC9G,qBAAqB,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,yBAAyB,EACrG,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EACzD,MAAM,YAAY,CAAA;AAkBnB,eAAO,MAAM,qBAAqB,EAQlB,cAAc,CAAC,qBAAqB,CAAC,CAAA;AAErD,eAAO,MAAM,yBAAyB,EA2BtB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,wBAAwB,EAcrB,cAAc,CAAC,wBAAwB,CAAC,CAAA;AAExD,eAAO,MAAM,oBAAoB,EAUjB,cAAc,CAAC,oBAAoB,CAAC,CAAA;AAEpD,eAAO,MAAM,kBAAkB,EAQf,cAAc,CAAC,kBAAkB,CAAC,CAAA;AAElD,eAAO,MAAM,yBAAyB,EAQtB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,iBAAiB,EAgCd,cAAc,CAAC,iBAAiB,CAAC,CAAA;AAoBjD,eAAO,MAAM,oBAAoB,EAUjB,cAAc,CAAC,oBAAoB,CAAC,CAAA;AAEpD,eAAO,MAAM,cAAc,EAoBX,cAAc,CAAC,cAAc,CAAC,CAAA;AAE9C,eAAO,MAAM,qBAAqB,EAmBlB,cAAc,CAAC,qBAAqB,CAAC,CAAA;AAErD,eAAO,MAAM,yBAAyB,EAatB,cAAc,CAAC,yBAAyB,CAAC,CAAA;AAEzD,eAAO,MAAM,mBAAmB,EAkBhB,cAAc,CAAC,mBAAmB,CAAC,CAAA"}
|
package/build/model.js
CHANGED
|
@@ -1,33 +1,231 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { DateSchema } from '@owlmeans/auth';
|
|
2
|
+
import { CancellationKindSchema, CheckoutPricingModeSchema, ConsentKindSchema, ConsumerRegionSchema, DeclarationChannelSchema, DeclarationKindSchema, PurchaseKindSchema, SubscriptionStatusSchema, } from '@owlmeans/payment';
|
|
3
|
+
/**
|
|
4
|
+
* Record schemas. Every stored property is declared: the resource coerces a write through its
|
|
5
|
+
* schema, and a property the schema does not know is written as a string. Dates follow the record
|
|
6
|
+
* convention (`DateSchema`). None of these records declares an ObjectId reference — `entityId`
|
|
7
|
+
* is an organization key and every other id is the paygate's.
|
|
8
|
+
*/
|
|
9
|
+
const str = { type: 'string' };
|
|
10
|
+
const optStr = { type: 'string', nullable: true };
|
|
11
|
+
const num = { type: 'number' };
|
|
12
|
+
const optNum = { type: 'number', nullable: true };
|
|
13
|
+
const optBool = { type: 'boolean', nullable: true };
|
|
14
|
+
const date = DateSchema;
|
|
15
|
+
const optDate = { ...DateSchema, nullable: true };
|
|
16
|
+
const id = { type: 'string', nullable: true };
|
|
3
17
|
export const PaygateCustomerSchema = {
|
|
4
18
|
type: 'object',
|
|
5
19
|
properties: {
|
|
6
|
-
id
|
|
7
|
-
|
|
8
|
-
email: { type: 'string', nullable: true }, name: { type: 'string', nullable: true },
|
|
9
|
-
taxId: { type: 'string', nullable: true },
|
|
20
|
+
id, paygate: str, externalId: str, entityId: optStr, profileId: optStr, email: optStr, name: optStr,
|
|
21
|
+
taxId: optStr, country: optStr, currency: optStr, deletedAt: optDate,
|
|
10
22
|
},
|
|
11
|
-
required: ['paygate', 'externalId'],
|
|
23
|
+
required: ['paygate', 'externalId'],
|
|
24
|
+
additionalProperties: false,
|
|
12
25
|
};
|
|
13
26
|
export const PaymentSubscriptionSchema = {
|
|
14
27
|
type: 'object',
|
|
15
28
|
properties: {
|
|
16
|
-
id
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
id, entityId: str, planSku: str, productSku: str, service: str, paygate: str, externalId: str,
|
|
30
|
+
itemId: optStr, priceId: optStr, status: SubscriptionStatusSchema, externalStatus: optStr, rank: num,
|
|
31
|
+
periodStart: optDate, periodEnd: optDate, cancelAtPeriodEnd: optBool, canceledAt: optDate,
|
|
32
|
+
endedAt: optDate, pausedAt: optDate, trialEnd: optDate, latestInvoiceId: optStr, customerId: optStr,
|
|
33
|
+
disputedAt: optDate, disputeStatus: optStr, createdAt: date, updatedAt: optDate, syncedAt: optDate,
|
|
34
|
+
lastEventId: optStr, initialPropagatedAt: optDate, currency: optStr,
|
|
35
|
+
checkoutSessionId: optStr, purchaseId: optStr, firstInvoiceId: optStr, country: optStr, email: optStr,
|
|
36
|
+
amountTotalMinor: optNum, amountTaxMinor: optNum, termsAccepted: optBool, startRequestId: optStr,
|
|
37
|
+
withdrawnAt: optDate,
|
|
38
|
+
propagated: {
|
|
39
|
+
type: 'object',
|
|
40
|
+
nullable: true,
|
|
41
|
+
properties: {
|
|
42
|
+
planSku: str, rank: num, status: SubscriptionStatusSchema, cancelAtPeriodEnd: optBool,
|
|
43
|
+
pausedAt: optDate, renewedInvoiceId: optStr,
|
|
44
|
+
},
|
|
45
|
+
required: ['planSku', 'rank', 'status'],
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
},
|
|
21
48
|
},
|
|
22
|
-
required: [
|
|
23
|
-
|
|
49
|
+
required: [
|
|
50
|
+
'entityId', 'planSku', 'productSku', 'service', 'paygate', 'externalId', 'status', 'rank', 'createdAt',
|
|
51
|
+
],
|
|
52
|
+
additionalProperties: false,
|
|
53
|
+
};
|
|
54
|
+
export const PaymentFulfillmentSchema = {
|
|
55
|
+
type: 'object',
|
|
56
|
+
properties: {
|
|
57
|
+
id, entityId: str, productSku: str, planSku: optStr, service: str, paygate: str, externalId: str,
|
|
58
|
+
paymentIntentId: optStr, chargeId: optStr, invoiceId: optStr, mode: CheckoutPricingModeSchema,
|
|
59
|
+
units: optNum, amountMinor: optNum, sourceChargeAmountMinor: optNum, amountCurrency: optStr,
|
|
60
|
+
chargeAmountMinor: optNum, currency: optStr, createdAt: date,
|
|
61
|
+
fulfilledAt: optDate, failedAt: optDate, refundedMinor: optNum, refundedAt: optDate,
|
|
62
|
+
disputedAt: optDate, disputeStatus: optStr,
|
|
63
|
+
country: optStr, email: optStr, profileId: optStr, amountTotalMinor: optNum, amountTaxMinor: optNum,
|
|
64
|
+
termsAccepted: optBool, purchaseId: optStr,
|
|
65
|
+
},
|
|
66
|
+
required: ['entityId', 'productSku', 'service', 'paygate', 'externalId', 'mode', 'createdAt'],
|
|
67
|
+
additionalProperties: false,
|
|
68
|
+
};
|
|
69
|
+
export const PaymentWebhookSchema = {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: {
|
|
72
|
+
id, paygate: str, service: str, url: str, externalId: str,
|
|
73
|
+
/** The signing secret: field-encrypted when the database is configured with a key. */
|
|
74
|
+
secret: { type: 'string', secure: true },
|
|
75
|
+
apiVersion: str, events: { type: 'array', items: str }, hash: str, createdAt: date, updatedAt: optDate,
|
|
76
|
+
},
|
|
77
|
+
required: ['paygate', 'service', 'url', 'externalId', 'secret', 'apiVersion', 'events', 'hash', 'createdAt'],
|
|
78
|
+
additionalProperties: false,
|
|
79
|
+
};
|
|
80
|
+
export const PaymentUsageSchema = {
|
|
81
|
+
type: 'object',
|
|
82
|
+
properties: {
|
|
83
|
+
id, entityId: str, limitKey: str, window: str, delta: num, eventKey: str, ref: optStr, reason: optStr,
|
|
84
|
+
planSku: optStr, createdAt: date, releasedAt: optDate,
|
|
85
|
+
},
|
|
86
|
+
required: ['entityId', 'limitKey', 'window', 'delta', 'eventKey', 'createdAt'],
|
|
87
|
+
additionalProperties: false,
|
|
88
|
+
};
|
|
89
|
+
export const PaymentUsageCounterSchema = {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
id, entityId: str, limitKey: str, window: str, used: num, limit: num, planSku: optStr,
|
|
93
|
+
overSince: optDate, updatedAt: date, reconciledAt: optDate,
|
|
94
|
+
},
|
|
95
|
+
required: ['entityId', 'limitKey', 'window', 'used', 'limit', 'updatedAt'],
|
|
96
|
+
additionalProperties: false,
|
|
24
97
|
};
|
|
25
98
|
export const FingerprintSchema = {
|
|
26
99
|
type: 'object',
|
|
27
100
|
properties: {
|
|
28
|
-
id
|
|
29
|
-
|
|
101
|
+
id, sku: str, hash: str, productId: optStr, externalId: optStr,
|
|
102
|
+
prices: {
|
|
103
|
+
type: 'array',
|
|
104
|
+
nullable: true,
|
|
105
|
+
items: {
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {
|
|
108
|
+
planSku: str, priceId: str, lookupKey: str, currency: str, unitAmount: num,
|
|
109
|
+
// An array, never a currency-keyed map: the resource coerces a map's values to strings.
|
|
110
|
+
options: {
|
|
111
|
+
type: 'array',
|
|
112
|
+
items: {
|
|
113
|
+
type: 'object', properties: { currency: str, unitAmount: num },
|
|
114
|
+
required: ['currency', 'unitAmount'], additionalProperties: false,
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
taxBehavior: optStr, interval: optStr, sourceUnitAmount: num, sourceCurrency: str, syncedAt: date,
|
|
118
|
+
},
|
|
119
|
+
required: [
|
|
120
|
+
'planSku', 'priceId', 'lookupKey', 'currency', 'unitAmount', 'options', 'sourceUnitAmount',
|
|
121
|
+
'sourceCurrency', 'syncedAt',
|
|
122
|
+
],
|
|
123
|
+
additionalProperties: false,
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
updatedAt: date,
|
|
127
|
+
},
|
|
128
|
+
required: ['sku', 'hash', 'updatedAt'],
|
|
129
|
+
additionalProperties: false,
|
|
130
|
+
};
|
|
131
|
+
/** An optional enum: `null` must be listed for a validator to accept it. */
|
|
132
|
+
const nullableEnum = (values) => ({ type: 'string', enum: [...values, null], nullable: true });
|
|
133
|
+
/** The request evidence every consumer act carries (`RequestOrigin`). */
|
|
134
|
+
const origin = {
|
|
135
|
+
ip: optStr, forwardedFor: optStr, userAgent: optStr, ipCountry: optStr, acceptLanguage: optStr, via: optStr,
|
|
136
|
+
};
|
|
137
|
+
const links = {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
billingTerms: str, withdrawalInformation: optStr, withdrawalForm: optStr, withdrawalFunction: optStr,
|
|
141
|
+
cancellation: optStr,
|
|
142
|
+
},
|
|
143
|
+
required: ['billingTerms'],
|
|
144
|
+
additionalProperties: false,
|
|
145
|
+
};
|
|
146
|
+
export const BillingProfileSchema = {
|
|
147
|
+
type: 'object',
|
|
148
|
+
properties: {
|
|
149
|
+
id, entityId: str, country: str, region: ConsumerRegionSchema, currency: str, language: str,
|
|
150
|
+
source: { type: 'string', enum: ['checkout', 'customer', 'manual'] }, paygate: str, customerId: optStr,
|
|
151
|
+
sessionId: optStr, ipCountry: optStr, email: optStr, name: optStr, business: optBool, lockedAt: date,
|
|
152
|
+
createdAt: date, updatedAt: optDate,
|
|
153
|
+
},
|
|
154
|
+
required: ['entityId', 'country', 'region', 'currency', 'language', 'source', 'paygate', 'lockedAt', 'createdAt'],
|
|
155
|
+
additionalProperties: false,
|
|
156
|
+
};
|
|
157
|
+
export const PurchaseSchema = {
|
|
158
|
+
type: 'object',
|
|
159
|
+
properties: {
|
|
160
|
+
id, purchaseId: str, contractRef: str, entityId: str, kind: PurchaseKindSchema, paygate: str,
|
|
161
|
+
sessionId: optStr, subscriptionId: optStr, paymentIntentId: optStr, invoiceId: optStr, invoiceNumber: optStr,
|
|
162
|
+
invoiceLineId: optStr, productSku: str, planSku: optStr, profileId: optStr, country: optStr,
|
|
163
|
+
region: nullableEnum(ConsumerRegionSchema.enum), ipCountry: optStr, inScope: { type: 'boolean' },
|
|
164
|
+
language: str, email: optStr, name: optStr, business: optBool, currency: str, amountSubtotalMinor: num,
|
|
165
|
+
amountTaxMinor: num, amountTotalMinor: num, presentmentCurrency: optStr, presentmentAmountMinor: optNum,
|
|
166
|
+
netAmountMinor: optNum, amountCurrency: optStr, units: optNum, taxBehavior: optStr, termsAccepted: optBool,
|
|
167
|
+
textVersion: optStr, copyVersion: optStr, startRequestId: optStr, servicesStartedAt: optDate,
|
|
168
|
+
confirmationMailAt: optDate, purchasedAt: date, deadline: optDate, consentId: optStr, consentedAt: optDate,
|
|
169
|
+
withdrawalId: optStr, withdrawnAt: optDate, refundedMinor: optNum, refundedAt: optDate, cancellationId: optStr,
|
|
170
|
+
cancelEffectiveAt: optDate, createdAt: date, updatedAt: optDate,
|
|
171
|
+
},
|
|
172
|
+
required: [
|
|
173
|
+
'purchaseId', 'contractRef', 'entityId', 'kind', 'paygate', 'productSku', 'inScope', 'language', 'currency',
|
|
174
|
+
'amountSubtotalMinor', 'amountTaxMinor', 'amountTotalMinor', 'purchasedAt', 'createdAt',
|
|
175
|
+
],
|
|
176
|
+
additionalProperties: false,
|
|
177
|
+
};
|
|
178
|
+
export const ConsumerConsentSchema = {
|
|
179
|
+
type: 'object',
|
|
180
|
+
properties: {
|
|
181
|
+
id, kind: ConsentKindSchema, entityId: str, profileId: optStr, name: optStr, email: optStr,
|
|
182
|
+
purchaseIds: { type: 'array', items: str },
|
|
183
|
+
planSku: optStr, planName: optStr, textVersion: str, copyVersion: str, language: str, uiLanguage: optStr, trader: str,
|
|
184
|
+
text: {
|
|
185
|
+
type: 'object',
|
|
186
|
+
properties: { request: str, acknowledgement: str, checkbox: str },
|
|
187
|
+
required: ['request', 'acknowledgement', 'checkbox'],
|
|
188
|
+
additionalProperties: false,
|
|
189
|
+
},
|
|
190
|
+
links, deadline: optDate, decidedAt: date, expiresAt: optDate, ...origin,
|
|
191
|
+
},
|
|
192
|
+
required: [
|
|
193
|
+
'kind', 'entityId', 'purchaseIds', 'textVersion', 'copyVersion', 'language', 'trader', 'text', 'links',
|
|
194
|
+
'decidedAt',
|
|
195
|
+
],
|
|
196
|
+
additionalProperties: false,
|
|
197
|
+
};
|
|
198
|
+
export const ConsumerDeclarationSchema = {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
id, kind: DeclarationKindSchema, channel: DeclarationChannelSchema, entityId: optStr, purchaseId: optStr,
|
|
202
|
+
subscriptionId: optStr, contractRef: optStr, name: str, email: str,
|
|
203
|
+
cancellationKind: nullableEnum(CancellationKindSchema.enum), reason: optStr,
|
|
204
|
+
effective: nullableEnum(['earliest', 'date']), requestedDate: optStr,
|
|
205
|
+
language: str, textVersion: optStr, copyVersion: str, receivedAt: date, matched: { type: 'boolean' },
|
|
206
|
+
profileId: optStr, duplicateOf: optStr, status: str, refundMinor: optNum, currency: optStr,
|
|
207
|
+
effectiveAt: optDate, ...origin,
|
|
208
|
+
},
|
|
209
|
+
required: ['kind', 'channel', 'name', 'email', 'language', 'copyVersion', 'receivedAt', 'matched', 'status'],
|
|
210
|
+
additionalProperties: false,
|
|
211
|
+
};
|
|
212
|
+
export const ConsumerEventSchema = {
|
|
213
|
+
type: 'object',
|
|
214
|
+
properties: {
|
|
215
|
+
id, recordId: str,
|
|
216
|
+
recordKind: { type: 'string', enum: ['purchase', 'consent', 'declaration', 'profile', 'checkout'] },
|
|
217
|
+
entityId: optStr,
|
|
218
|
+
action: {
|
|
219
|
+
type: 'string',
|
|
220
|
+
enum: [
|
|
221
|
+
'mail', 'computed', 'meter', 'refund', 'credit-note', 'subscription-cancel', 'cancel-scheduled', 'observers',
|
|
222
|
+
'lock', 'lock-mismatch', 'relock', 'unlock', 'duplicate', 'checkout-terms-fallback',
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
step: optStr, ok: { type: 'boolean' }, skipped: optBool, externalId: optStr, amountMinor: optNum,
|
|
226
|
+
currency: optStr, detail: optStr, error: optStr, at: date,
|
|
30
227
|
},
|
|
31
|
-
required: ['
|
|
228
|
+
required: ['recordId', 'recordKind', 'action', 'ok', 'at'],
|
|
229
|
+
additionalProperties: false,
|
|
32
230
|
};
|
|
33
231
|
//# sourceMappingURL=model.js.map
|
package/build/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAGrD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACnG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3F,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC1C;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,oBAAoB,EAAE,IAAI;CACZ,CAAA;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/F,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtF,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpF,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,iBAA0B,EAAE,QAAQ,EAAE,EAAE,EAAE;KAC3G;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC;IACjG,oBAAoB,EAAE,IAAI;CAC6B,CAAA;AAEzD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;KAC9C;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,oBAAoB,EAAE,IAAI;CACN,CAAA"}
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
|
package/build/observer.d.ts
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import type { CompletionObserver, Config, Context } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The application's side of payment completion. Callbacks run sequentially and are awaited; a
|
|
4
|
+
* throw escapes to the webhook so the paygate delivers the event again — every callback must be
|
|
5
|
+
* idempotent by the `eventKey` (`externalId` for a top-up) it is handed.
|
|
6
|
+
*
|
|
7
|
+
* The consumer-rights callbacks (`onConsent`, `onWithdrawal`, `onCancellation`) run after the
|
|
8
|
+
* records and the paygate steps of their act; a throw is recorded as an `observers` event and
|
|
9
|
+
* retried by the consumer-rights `reconcile()` — they, too, are idempotent by `eventKey`.
|
|
10
|
+
*/
|
|
2
11
|
export declare const makeCompletionObserverService: (alias?: string) => CompletionObserver;
|
|
3
12
|
export declare const appendCompletionObserver: <C extends Config, T extends Context<C>>(ctx: T, alias?: string) => T;
|
|
4
13
|
//# sourceMappingURL=observer.d.ts.map
|
package/build/observer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACY,kBAAkB,EAAE,MAAM,EAAmB,OAAO,EAE3E,MAAM,YAAY,CAAA;AAEnB;;;;;;;;GAQG;AACH,eAAO,MAAM,6BAA6B,WACjC,MAAM,KACZ,kBAkCF,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,OACxE,CAAC,UAAS,MAAM,KACpB,CAGF,CAAA"}
|