@owlmeans/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 +18 -26
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/payment/SKILL.md +137 -26
- package/build/advertise.d.ts +2 -0
- package/build/advertise.d.ts.map +1 -0
- package/build/advertise.js +11 -0
- package/build/advertise.js.map +1 -0
- package/build/consts.d.ts +5 -23
- package/build/consts.d.ts.map +1 -1
- package/build/consts.js +9 -23
- package/build/consts.js.map +1 -1
- package/build/entitlement.d.ts +61 -0
- package/build/entitlement.d.ts.map +1 -0
- package/build/entitlement.js +98 -0
- package/build/entitlement.js.map +1 -0
- package/build/entrypoints.d.ts +25 -0
- package/build/entrypoints.d.ts.map +1 -0
- package/build/entrypoints.js +43 -0
- package/build/entrypoints.js.map +1 -0
- package/build/index.d.ts +4 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +4 -1
- package/build/index.js.map +1 -1
- package/build/model/checkout.d.ts +2 -3
- package/build/model/checkout.d.ts.map +1 -1
- package/build/model/checkout.js +8 -6
- package/build/model/checkout.js.map +1 -1
- package/build/model/index.d.ts +1 -0
- package/build/model/index.d.ts.map +1 -1
- package/build/model/index.js +1 -0
- package/build/model/index.js.map +1 -1
- package/build/model/plan.d.ts.map +1 -1
- package/build/model/plan.js +5 -1
- package/build/model/plan.js.map +1 -1
- 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/subscription.d.ts +2 -2
- package/build/model/subscription.d.ts.map +1 -1
- package/build/model/subscription.js +9 -14
- package/build/model/subscription.js.map +1 -1
- package/build/pricing.d.ts +7 -0
- package/build/pricing.d.ts.map +1 -0
- package/build/pricing.js +63 -0
- package/build/pricing.js.map +1 -0
- package/build/types.d.ts +25 -3
- package/build/types.d.ts.map +1 -1
- package/package.json +13 -11
- package/src/advertise.ts +15 -0
- package/src/consts.ts +10 -24
- package/src/entitlement.ts +125 -0
- package/src/entrypoints.ts +57 -0
- package/src/index.ts +4 -1
- package/src/model/checkout.ts +8 -6
- package/src/model/index.ts +1 -0
- package/src/model/plan.ts +5 -1
- package/src/model/pricing.ts +34 -0
- package/src/model/subscription.ts +11 -14
- package/src/pricing.ts +87 -0
- package/src/types.ts +29 -3
- package/tests/entitlement.spec.ts +90 -0
- package/tests/pricing.spec.ts +33 -0
- package/tests/protocol.spec.ts +51 -0
- package/tests/tsconfig.json +11 -0
- package/tsconfig.json +6 -1
- package/build/.gitkeep +0 -0
- package/build/modules.d.ts +0 -3
- package/build/modules.d.ts.map +0 -1
- package/build/modules.js +0 -18
- package/build/modules.js.map +0 -1
- package/src/modules.ts +0 -43
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { contract, protocol, typed } from '@owlmeans/entrypoint';
|
|
2
|
+
import { route, backend, RouteMethod } from '@owlmeans/route';
|
|
3
|
+
import { SubscriptionPropagateBodySchema } from './model/subscription.js';
|
|
4
|
+
import { CreateCheckoutBodySchema, CreateCheckoutResponseSchema } from './model/checkout.js';
|
|
5
|
+
const aliases = {
|
|
6
|
+
subscription: {
|
|
7
|
+
base: 'payment-api:subscription',
|
|
8
|
+
propagate: 'payment-api:subscription:propagate',
|
|
9
|
+
},
|
|
10
|
+
service: {
|
|
11
|
+
base: 'payment-service:base',
|
|
12
|
+
checkout: 'payment-service:checkout',
|
|
13
|
+
session: 'payment-service:checkout:session',
|
|
14
|
+
external: 'payment-service:checkout:session:external',
|
|
15
|
+
create: 'payment-service:checkout:session:external:create',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const subscriptionBase = protocol(route(aliases.subscription.base, '/subscription', backend()), contract());
|
|
19
|
+
const serviceBase = protocol(route(aliases.service.base, '/payment-service', backend()), contract());
|
|
20
|
+
const checkoutBase = protocol(route(aliases.service.checkout, '/checkout', backend({ parent: serviceBase })), contract());
|
|
21
|
+
const sessionBase = protocol(route(aliases.service.session, '/session', backend({ parent: checkoutBase })), contract());
|
|
22
|
+
const externalBase = protocol(route(aliases.service.external, '/external', backend({ parent: sessionBase })), contract());
|
|
23
|
+
/** Public payment protocols. Alias strings stay private to this declaration module. */
|
|
24
|
+
export const paymentApi = {
|
|
25
|
+
subscription: {
|
|
26
|
+
base: subscriptionBase,
|
|
27
|
+
propagate: protocol(route(aliases.subscription.propagate, '/propagate', backend({ parent: subscriptionBase, method: RouteMethod.POST })), contract.request({ body: SubscriptionPropagateBodySchema }, typed())),
|
|
28
|
+
},
|
|
29
|
+
service: {
|
|
30
|
+
base: serviceBase,
|
|
31
|
+
checkout: {
|
|
32
|
+
base: checkoutBase,
|
|
33
|
+
session: {
|
|
34
|
+
base: sessionBase,
|
|
35
|
+
external: {
|
|
36
|
+
base: externalBase,
|
|
37
|
+
create: protocol(route(aliases.service.create, '/create', backend({ parent: externalBase, method: RouteMethod.POST })), contract.request({ body: CreateCheckoutBodySchema }, CreateCheckoutResponseSchema)),
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=entrypoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoints.js","sourceRoot":"","sources":["../src/entrypoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAE5F,MAAM,OAAO,GAAG;IACd,YAAY,EAAE;QACZ,IAAI,EAAE,0BAA0B;QAChC,SAAS,EAAE,oCAAoC;KAChD;IACD,OAAO,EAAE;QACP,IAAI,EAAE,sBAAsB;QAC5B,QAAQ,EAAE,0BAA0B;QACpC,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EAAE,2CAA2C;QACrD,MAAM,EAAE,kDAAkD;KAC3D;CACO,CAAA;AAEV,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC3G,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAA;AACpG,MAAM,YAAY,GAAG,QAAQ,CAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAC3F,CAAA;AACD,MAAM,WAAW,GAAG,QAAQ,CAC1B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAC1F,CAAA;AACD,MAAM,YAAY,GAAG,QAAQ,CAC3B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAC3F,CAAA;AAED,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE;QACZ,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,QAAQ,CACjB,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EACpH,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,+BAA+B,EAAE,EAAE,KAAK,EAAa,CAAC,CAChF;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,QAAQ,CACd,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EACrG,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,4BAA4B,CAAC,CACnF;iBACF;aACF;SACF;KACF;CACO,CAAA"}
|
package/build/index.d.ts
CHANGED
|
@@ -2,8 +2,11 @@ export type * from './types.js';
|
|
|
2
2
|
export * from './model/index.js';
|
|
3
3
|
export * from './errors.js';
|
|
4
4
|
export * from './consts.js';
|
|
5
|
+
export * from './entitlement.js';
|
|
5
6
|
export * from './service.js';
|
|
6
7
|
export * from './i18n.js';
|
|
7
8
|
export * from './helper.js';
|
|
8
|
-
export * from './
|
|
9
|
+
export * from './entrypoints.js';
|
|
10
|
+
export * from './advertise.js';
|
|
11
|
+
export * from './pricing.js';
|
|
9
12
|
//# 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":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,mBAAmB,YAAY,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
package/build/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export * from './model/index.js';
|
|
2
2
|
export * from './errors.js';
|
|
3
3
|
export * from './consts.js';
|
|
4
|
+
export * from './entitlement.js';
|
|
4
5
|
export * from './service.js';
|
|
5
6
|
export * from './i18n.js';
|
|
6
7
|
export * from './helper.js';
|
|
7
|
-
export * from './
|
|
8
|
+
export * from './entrypoints.js';
|
|
9
|
+
export * from './advertise.js';
|
|
10
|
+
export * from './pricing.js';
|
|
8
11
|
//# 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":"AAEA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { JSONSchemaType } from 'ajv';
|
|
2
1
|
import type { CreateCheckoutBody, CreateCheckoutResponse } from '../types.js';
|
|
3
|
-
export declare const CreateCheckoutBodySchema:
|
|
4
|
-
export declare const CreateCheckoutResponseSchema:
|
|
2
|
+
export declare const CreateCheckoutBodySchema: import("@owlmeans/entrypoint").EntrypointSchema<CreateCheckoutBody>;
|
|
3
|
+
export declare const CreateCheckoutResponseSchema: import("@owlmeans/entrypoint").EntrypointSchema<CreateCheckoutResponse>;
|
|
5
4
|
//# sourceMappingURL=checkout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/model/checkout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/model/checkout.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAI7E,eAAO,MAAM,wBAAwB,qEAcG,CAAA;AAExC,eAAO,MAAM,4BAA4B,yEAOG,CAAA"}
|
package/build/model/checkout.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { ResourceValueSchema, EntityValueSchema, IdValueSchema } from '@owlmeans/auth';
|
|
2
|
-
|
|
2
|
+
import { schema } from '@owlmeans/entrypoint';
|
|
3
|
+
export const CreateCheckoutBodySchema = schema({
|
|
3
4
|
type: 'object',
|
|
4
5
|
properties: {
|
|
5
6
|
productSku: ResourceValueSchema,
|
|
6
7
|
sku: { ...ResourceValueSchema, nullable: true },
|
|
7
|
-
|
|
8
|
+
entitySlug: EntityValueSchema,
|
|
8
9
|
service: { ...ResourceValueSchema, minLength: 2 },
|
|
10
|
+
amountMinor: { type: 'number', minimum: 0, multipleOf: 1, nullable: true },
|
|
9
11
|
subscriptionId: { ...IdValueSchema, nullable: true },
|
|
10
12
|
successUrl: { ...ResourceValueSchema, minLength: 1, nullable: true },
|
|
11
13
|
cancelUrl: { ...ResourceValueSchema, minLength: 1, nullable: true },
|
|
12
14
|
},
|
|
13
|
-
required: ['productSku', '
|
|
15
|
+
required: ['productSku', 'entitySlug', 'service'],
|
|
14
16
|
additionalProperties: false,
|
|
15
|
-
};
|
|
16
|
-
export const CreateCheckoutResponseSchema = {
|
|
17
|
+
});
|
|
18
|
+
export const CreateCheckoutResponseSchema = schema({
|
|
17
19
|
type: 'object',
|
|
18
20
|
properties: {
|
|
19
21
|
url: { type: 'string', minLength: 1 },
|
|
20
22
|
},
|
|
21
23
|
required: ['url'],
|
|
22
24
|
additionalProperties: false,
|
|
23
|
-
};
|
|
25
|
+
});
|
|
24
26
|
//# sourceMappingURL=checkout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/model/checkout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../src/model/checkout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAqB;IACjE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,UAAU,EAAE,mBAAmB;QAC/B,GAAG,EAAE,EAAE,GAAG,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/C,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,EAAE,GAAG,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE;QACjD,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC1E,cAAc,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpD,UAAU,EAAE,EAAE,GAAG,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;QACpE,SAAS,EAAE,EAAE,GAAG,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;KACpE;IACD,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC;IACjD,oBAAoB,EAAE,KAAK;CACU,CAAC,CAAA;AAExC,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAyB;IACzE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;KACtC;IACD,QAAQ,EAAE,CAAC,KAAK,CAAC;IACjB,oBAAoB,EAAE,KAAK;CACc,CAAC,CAAA"}
|
package/build/model/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA"}
|
package/build/model/index.js
CHANGED
package/build/model/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/model/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/model/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAS9C,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,WAAW,CA4CzD,CAAA"}
|
package/build/model/plan.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ResourceValueSchema, PermissionSetSchema, DateSchema } from '@owlmeans/auth';
|
|
2
|
-
import { PlanDurationSchema, ProductDescriptionSchema, ProductTitleSchema, SubscriptionStatusSchema } from '../consts.js';
|
|
2
|
+
import { CheckoutPricingModeSchema, PlanDurationSchema, ProductDescriptionSchema, ProductTitleSchema, SubscriptionStatusSchema } from '../consts.js';
|
|
3
3
|
import { LimitConfigSchema } from './utils.js';
|
|
4
|
+
import { AmountCheckoutPolicySchema, QuantityCheckoutPolicySchema } from './pricing.js';
|
|
4
5
|
export const ProductPlanSchema = {
|
|
5
6
|
type: 'object',
|
|
6
7
|
properties: {
|
|
@@ -33,6 +34,9 @@ export const ProductPlanSchema = {
|
|
|
33
34
|
type: 'object', required: [], nullable: true,
|
|
34
35
|
additionalProperties: LimitConfigSchema
|
|
35
36
|
},
|
|
37
|
+
pricingMode: { ...CheckoutPricingModeSchema, nullable: true },
|
|
38
|
+
amountPolicy: { ...AmountCheckoutPolicySchema, nullable: true },
|
|
39
|
+
quantityPolicy: { ...QuantityCheckoutPolicySchema, nullable: true },
|
|
36
40
|
},
|
|
37
41
|
required: [
|
|
38
42
|
'productSku', 'sku', 'status', 'duration',
|
package/build/model/plan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/model/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACrF,OAAO,EACL,kBAAkB,EAAE,wBAAwB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/model/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from '../types.js';
|
|
2
|
+
export declare const AmountCheckoutPolicySchema: import("@owlmeans/entrypoint").EntrypointSchema<AmountCheckoutPolicy>;
|
|
3
|
+
export declare const QuantityCheckoutPolicySchema: import("@owlmeans/entrypoint").EntrypointSchema<QuantityCheckoutPolicy>;
|
|
4
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/model/pricing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAE/E,eAAO,MAAM,0BAA0B,uEAkBG,CAAA;AAE1C,eAAO,MAAM,4BAA4B,yEASG,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { schema } from '@owlmeans/entrypoint';
|
|
2
|
+
export const AmountCheckoutPolicySchema = schema({
|
|
3
|
+
type: 'object',
|
|
4
|
+
properties: {
|
|
5
|
+
currency: { type: 'string', minLength: 3, maxLength: 3 },
|
|
6
|
+
minimumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
7
|
+
maximumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
8
|
+
defaultMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
9
|
+
presetsMinor: {
|
|
10
|
+
type: 'array', items: { type: 'number', minimum: 0, multipleOf: 1 }, uniqueItems: true,
|
|
11
|
+
},
|
|
12
|
+
fixedMinor: { type: 'number', minimum: 0, multipleOf: 1 },
|
|
13
|
+
rateBps: { type: 'number', minimum: 0, maximum: 9999, multipleOf: 1 },
|
|
14
|
+
},
|
|
15
|
+
required: [
|
|
16
|
+
'currency', 'minimumMinor', 'maximumMinor', 'defaultMinor', 'presetsMinor',
|
|
17
|
+
'fixedMinor', 'rateBps',
|
|
18
|
+
],
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
});
|
|
21
|
+
export const QuantityCheckoutPolicySchema = schema({
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
minimum: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
25
|
+
maximum: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
26
|
+
default: { type: 'number', minimum: 1, multipleOf: 1 },
|
|
27
|
+
},
|
|
28
|
+
required: ['minimum', 'maximum', 'default'],
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/model/pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAuB;IACrE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QACxD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI;SACvF;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;KACtE;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;QAC1E,YAAY,EAAE,SAAS;KACxB;IACD,oBAAoB,EAAE,KAAK;CACY,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAyB;IACzE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;KACvD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC3C,oBAAoB,EAAE,KAAK;CACc,CAAC,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { JSONSchemaType } from 'ajv';
|
|
2
2
|
import type { PlanSubscription, SubscriptionPropagateBody } from '../types.js';
|
|
3
3
|
export declare const PlanSubscriptionSchema: JSONSchemaType<PlanSubscription>;
|
|
4
|
-
export declare const SubscriptionPropagateBodySchema:
|
|
4
|
+
export declare const SubscriptionPropagateBodySchema: import("@owlmeans/entrypoint").EntrypointSchema<SubscriptionPropagateBody>;
|
|
5
5
|
/**
|
|
6
6
|
* @deprecated Use SubscriptionPropogateBodySchema instead
|
|
7
7
|
*/
|
|
8
|
-
export declare const SubscriptionPropogateBodySchema:
|
|
8
|
+
export declare const SubscriptionPropogateBodySchema: import("@owlmeans/entrypoint").EntrypointSchema<SubscriptionPropagateBody>;
|
|
9
9
|
//# sourceMappingURL=subscription.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/model/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/model/subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAM9E,eAAO,MAAM,sBAAsB,EAAE,cAAc,CAAC,gBAAgB,CA+BnE,CAAA;AAMD,eAAO,MAAM,+BAA+B,4EAUG,CAAA;AAE/C;;GAEG;AACH,eAAO,MAAM,+BAA+B,4EAAkC,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ResourceValueSchema, PermissionSetSchema, DateSchema, EntityValueSchema, IdValueSchema } from '@owlmeans/auth';
|
|
2
|
+
import { schema } from '@owlmeans/entrypoint';
|
|
2
3
|
import { SubscriptionStatusSchema } from '../consts.js';
|
|
3
4
|
import { CapabilityUsageSchema, LimitConfigSchema } from './utils.js';
|
|
4
5
|
export const PlanSubscriptionSchema = {
|
|
@@ -33,27 +34,21 @@ export const PlanSubscriptionSchema = {
|
|
|
33
34
|
required: ['sku', 'entityId', 'createdAt', 'startsdAt', 'status'],
|
|
34
35
|
additionalProperties: false,
|
|
35
36
|
};
|
|
36
|
-
|
|
37
|
+
const { entityId: _entityId, ...SubscriptionWireProperties } = PlanSubscriptionSchema.properties;
|
|
38
|
+
const SubscriptionWireRequired = PlanSubscriptionSchema.required.filter(field => field !== 'entityId');
|
|
39
|
+
export const SubscriptionPropagateBodySchema = schema({
|
|
37
40
|
type: 'object',
|
|
38
41
|
properties: {
|
|
39
|
-
...
|
|
42
|
+
...SubscriptionWireProperties,
|
|
43
|
+
entitySlug: EntityValueSchema,
|
|
40
44
|
service: { ...ResourceValueSchema, minLength: 2 },
|
|
41
45
|
externalId: IdValueSchema,
|
|
42
46
|
}, // @TODO Figure out why it doesn't work (probably different version of ajv)
|
|
43
|
-
required: ['externalId', 'service', ...
|
|
47
|
+
required: ['externalId', 'entitySlug', 'service', ...SubscriptionWireRequired],
|
|
44
48
|
additionalProperties: false,
|
|
45
|
-
};
|
|
49
|
+
});
|
|
46
50
|
/**
|
|
47
51
|
* @deprecated Use SubscriptionPropogateBodySchema instead
|
|
48
52
|
*/
|
|
49
|
-
export const SubscriptionPropogateBodySchema =
|
|
50
|
-
type: 'object',
|
|
51
|
-
properties: {
|
|
52
|
-
...PlanSubscriptionSchema.properties,
|
|
53
|
-
service: { ...ResourceValueSchema, minLength: 2 },
|
|
54
|
-
externalId: IdValueSchema,
|
|
55
|
-
}, // @TODO Figure out why it doesn't work (probably different version of ajv)
|
|
56
|
-
required: ['externalId', 'service', ...PlanSubscriptionSchema.required],
|
|
57
|
-
additionalProperties: false,
|
|
58
|
-
};
|
|
53
|
+
export const SubscriptionPropogateBodySchema = SubscriptionPropagateBodySchema;
|
|
59
54
|
//# sourceMappingURL=subscription.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/model/subscription.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACvH,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAErE,MAAM,CAAC,MAAM,sBAAsB,GAAqC;IACtE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,iBAAiB;QAC3B,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnD,UAAU,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,SAAS,EAAE,UAAU;QACrB,aAAa,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7C,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/C,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5C,WAAW,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC9C,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7C,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5C,cAAc,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,MAAM,EAAE,wBAAwB;QAChC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3E,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI;YAC5C,oBAAoB,EAAE,iBAAiB;SACxC;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI;YAC5C,oBAAoB,EAAE,qBAAqB;SAC5C;KACF;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;IACjE,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/model/subscription.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACvH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAErE,MAAM,CAAC,MAAM,sBAAsB,GAAqC;IACtE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,GAAG,EAAE,mBAAmB;QACxB,QAAQ,EAAE,iBAAiB;QAC3B,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QACnD,UAAU,EAAE,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,SAAS,EAAE,UAAU;QACrB,aAAa,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChD,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7C,SAAS,EAAE,UAAU;QACrB,YAAY,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC/C,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QACzC,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5C,WAAW,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC9C,UAAU,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC7C,SAAS,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC5C,cAAc,EAAE,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,MAAM,EAAE,wBAAwB;QAChC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3E,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI;YAC5C,oBAAoB,EAAE,iBAAiB;SACxC;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI;YAC5C,oBAAoB,EAAE,qBAAqB;SAC5C;KACF;IACD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC;IACjE,oBAAoB,EAAE,KAAK;CAC5B,CAAA;AAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,0BAA0B,EAAE,GAC1D,sBAAsB,CAAC,UAAqC,CAAA;AAC9D,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC,CAAA;AAEtG,MAAM,CAAC,MAAM,+BAA+B,GAAG,MAAM,CAA4B;IAC/E,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,GAAG,0BAA0B;QAC7B,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,EAAE,GAAG,mBAAmB,EAAE,SAAS,EAAE,CAAC,EAAE;QACjD,UAAU,EAAE,aAAa;KACnB,EAAE,2EAA2E;IACrF,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,wBAAwB,CAAC;IAC9E,oBAAoB,EAAE,KAAK;CACiB,CAAC,CAAA;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from './types.js';
|
|
2
|
+
export declare const assertAmountCheckoutPolicy: (policy: AmountCheckoutPolicy) => AmountCheckoutPolicy;
|
|
3
|
+
export declare const assertQuantityCheckoutPolicy: (policy: QuantityCheckoutPolicy) => QuantityCheckoutPolicy;
|
|
4
|
+
export declare const assertCheckoutAmount: (policy: AmountCheckoutPolicy, amountMinor: number) => number;
|
|
5
|
+
/** Gross up a net credit value so the configured adjustment remains outside the credit grant. */
|
|
6
|
+
export declare const chargeAmountMinor: (amountMinor: number, policy: Pick<AmountCheckoutPolicy, 'fixedMinor' | 'rateBps'>) => number;
|
|
7
|
+
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAI9E,eAAO,MAAM,0BAA0B,WAC7B,oBAAoB,KAC3B,oBA6BF,CAAA;AAED,eAAO,MAAM,4BAA4B,WAC/B,sBAAsB,KAC7B,sBAYF,CAAA;AAED,eAAO,MAAM,oBAAoB,WACvB,oBAAoB,eAAe,MAAM,KAChD,MAYF,CAAA;AAED,iGAAiG;AACjG,eAAO,MAAM,iBAAiB,gBACf,MAAM,UAAU,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,SAAS,CAAC,KAChF,MAaF,CAAA"}
|
package/build/pricing.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { PaymentError } from './errors.js';
|
|
2
|
+
const integer = (value) => Number.isSafeInteger(value);
|
|
3
|
+
export const assertAmountCheckoutPolicy = (policy) => {
|
|
4
|
+
if (!integer(policy.minimumMinor)
|
|
5
|
+
|| !integer(policy.maximumMinor)
|
|
6
|
+
|| !integer(policy.defaultMinor)
|
|
7
|
+
|| !integer(policy.fixedMinor)
|
|
8
|
+
|| !integer(policy.rateBps)
|
|
9
|
+
|| policy.minimumMinor < 0
|
|
10
|
+
|| policy.minimumMinor > policy.defaultMinor
|
|
11
|
+
|| policy.defaultMinor > policy.maximumMinor
|
|
12
|
+
|| policy.fixedMinor < 0
|
|
13
|
+
|| policy.rateBps < 0
|
|
14
|
+
|| policy.rateBps >= 10_000
|
|
15
|
+
|| policy.currency.trim().length !== 3) {
|
|
16
|
+
throw new PaymentError('checkout-policy:amount');
|
|
17
|
+
}
|
|
18
|
+
const presets = new Set(policy.presetsMinor);
|
|
19
|
+
if (presets.size !== policy.presetsMinor.length
|
|
20
|
+
|| policy.presetsMinor.some(value => !integer(value) || value < policy.minimumMinor || value > policy.maximumMinor)) {
|
|
21
|
+
throw new PaymentError('checkout-policy:presets');
|
|
22
|
+
}
|
|
23
|
+
return policy;
|
|
24
|
+
};
|
|
25
|
+
export const assertQuantityCheckoutPolicy = (policy) => {
|
|
26
|
+
if (!integer(policy.minimum)
|
|
27
|
+
|| !integer(policy.maximum)
|
|
28
|
+
|| !integer(policy.default)
|
|
29
|
+
|| policy.minimum < 1
|
|
30
|
+
|| policy.minimum > policy.default
|
|
31
|
+
|| policy.default > policy.maximum) {
|
|
32
|
+
throw new PaymentError('checkout-policy:quantity');
|
|
33
|
+
}
|
|
34
|
+
return policy;
|
|
35
|
+
};
|
|
36
|
+
export const assertCheckoutAmount = (policy, amountMinor) => {
|
|
37
|
+
assertAmountCheckoutPolicy(policy);
|
|
38
|
+
if (!integer(amountMinor)) {
|
|
39
|
+
throw new PaymentError('checkout-amount:integer');
|
|
40
|
+
}
|
|
41
|
+
if (amountMinor < policy.minimumMinor) {
|
|
42
|
+
throw new PaymentError('checkout-amount:minimum');
|
|
43
|
+
}
|
|
44
|
+
if (amountMinor > policy.maximumMinor) {
|
|
45
|
+
throw new PaymentError('checkout-amount:maximum');
|
|
46
|
+
}
|
|
47
|
+
return amountMinor;
|
|
48
|
+
};
|
|
49
|
+
/** Gross up a net credit value so the configured adjustment remains outside the credit grant. */
|
|
50
|
+
export const chargeAmountMinor = (amountMinor, policy) => {
|
|
51
|
+
const adjusted = amountMinor + policy.fixedMinor;
|
|
52
|
+
const numerator = adjusted * 10_000;
|
|
53
|
+
if (!integer(amountMinor) || !integer(policy.fixedMinor) || !integer(policy.rateBps)
|
|
54
|
+
|| amountMinor < 0 || policy.fixedMinor < 0 || policy.rateBps < 0 || policy.rateBps >= 10_000
|
|
55
|
+
|| !integer(adjusted) || !integer(numerator)) {
|
|
56
|
+
throw new PaymentError('checkout-charge');
|
|
57
|
+
}
|
|
58
|
+
const charge = Math.ceil(numerator / (10_000 - policy.rateBps));
|
|
59
|
+
if (!integer(charge))
|
|
60
|
+
throw new PaymentError('checkout-charge');
|
|
61
|
+
return charge;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=pricing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InitializedService } from '@owlmeans/context';
|
|
2
|
-
import type { PaymentEntityType, PlanDuration, PlanStatus, ProductType, SubscriptionStatus } from './consts.js';
|
|
2
|
+
import type { CheckoutPricingMode, PaymentEntityType, PlanDuration, PlanStatus, ProductType, SubscriptionStatus } from './consts.js';
|
|
3
3
|
import type { PermissionSet } from '@owlmeans/auth';
|
|
4
4
|
export interface Product {
|
|
5
5
|
type: ProductType;
|
|
@@ -58,6 +58,23 @@ export interface ProductPlan {
|
|
|
58
58
|
limits?: {
|
|
59
59
|
[key: string]: LimitConfig;
|
|
60
60
|
};
|
|
61
|
+
pricingMode?: CheckoutPricingMode;
|
|
62
|
+
amountPolicy?: AmountCheckoutPolicy;
|
|
63
|
+
quantityPolicy?: QuantityCheckoutPolicy;
|
|
64
|
+
}
|
|
65
|
+
export interface AmountCheckoutPolicy {
|
|
66
|
+
currency: string;
|
|
67
|
+
minimumMinor: number;
|
|
68
|
+
maximumMinor: number;
|
|
69
|
+
defaultMinor: number;
|
|
70
|
+
presetsMinor: number[];
|
|
71
|
+
fixedMinor: number;
|
|
72
|
+
rateBps: number;
|
|
73
|
+
}
|
|
74
|
+
export interface QuantityCheckoutPolicy {
|
|
75
|
+
minimum: number;
|
|
76
|
+
maximum: number;
|
|
77
|
+
default: number;
|
|
61
78
|
}
|
|
62
79
|
export interface PlanSubscription {
|
|
63
80
|
sku: string;
|
|
@@ -93,8 +110,11 @@ export interface PlanSubscription {
|
|
|
93
110
|
export interface CreateCheckoutBody {
|
|
94
111
|
productSku: string;
|
|
95
112
|
sku?: string;
|
|
96
|
-
|
|
113
|
+
/** Renameable organization value carried across a protocol boundary. */
|
|
114
|
+
entitySlug: string;
|
|
97
115
|
service: string;
|
|
116
|
+
/** Net credit value for amount-priced checkouts, in integer currency minor units. */
|
|
117
|
+
amountMinor?: number;
|
|
98
118
|
subscriptionId?: string;
|
|
99
119
|
successUrl?: string;
|
|
100
120
|
cancelUrl?: string;
|
|
@@ -102,7 +122,9 @@ export interface CreateCheckoutBody {
|
|
|
102
122
|
export interface CreateCheckoutResponse {
|
|
103
123
|
url: string;
|
|
104
124
|
}
|
|
105
|
-
export interface SubscriptionPropagateBody extends PlanSubscription {
|
|
125
|
+
export interface SubscriptionPropagateBody extends Omit<PlanSubscription, 'entityId' | 'externalId'> {
|
|
126
|
+
/** Renameable organization value carried across the propagation protocol. */
|
|
127
|
+
entitySlug: string;
|
|
106
128
|
service: string;
|
|
107
129
|
externalId: string;
|
|
108
130
|
}
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/payment",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.21",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "tsc -b",
|
|
8
8
|
"dev": "sleep 228 && nodemon -e ts,tsx,json --watch src --exec \"tsc -p ./tsconfig.json\"",
|
|
9
|
-
"watch": "tsc -b -w --preserveWatchOutput --pretty"
|
|
9
|
+
"watch": "tsc -b -w --preserveWatchOutput --pretty",
|
|
10
|
+
"test": "bun test ./tests"
|
|
10
11
|
},
|
|
11
12
|
"main": "build/index.js",
|
|
12
13
|
"module": "build/index.js",
|
|
@@ -31,15 +32,16 @@
|
|
|
31
32
|
"ajv": "*"
|
|
32
33
|
},
|
|
33
34
|
"dependencies": {
|
|
34
|
-
"@owlmeans/
|
|
35
|
-
"@owlmeans/
|
|
36
|
-
"@owlmeans/
|
|
37
|
-
"@owlmeans/
|
|
38
|
-
"@owlmeans/
|
|
39
|
-
"@owlmeans/
|
|
40
|
-
"@owlmeans/
|
|
41
|
-
"@owlmeans/
|
|
42
|
-
"@owlmeans/
|
|
35
|
+
"@owlmeans/api-config": "^0.1.18-rc.20",
|
|
36
|
+
"@owlmeans/auth": "^0.1.18-rc.17",
|
|
37
|
+
"@owlmeans/basic-envelope": "^0.1.18-rc.20",
|
|
38
|
+
"@owlmeans/config": "^0.1.18-rc.20",
|
|
39
|
+
"@owlmeans/context": "^0.1.18-rc.16",
|
|
40
|
+
"@owlmeans/error": "^0.1.18-rc.16",
|
|
41
|
+
"@owlmeans/i18n": "^0.1.18-rc.16",
|
|
42
|
+
"@owlmeans/entrypoint": "^0.1.18-rc.19",
|
|
43
|
+
"@owlmeans/resource": "^0.1.18-rc.17",
|
|
44
|
+
"@owlmeans/route": "^0.1.18-rc.17"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
47
|
"@owlmeans/dep-config": "workspace:*",
|
package/src/advertise.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { CONFIG_RECORD } from '@owlmeans/context'
|
|
2
|
+
import { apiConfigPlugin, every } from '@owlmeans/api-config'
|
|
3
|
+
import { L10N_RECORD_TYPE, PLAN_RECORD_TYPE, PRODUCT_RECORD_TYPE } from './consts.js'
|
|
4
|
+
|
|
5
|
+
const advertisedRecordTypes = new Set([L10N_RECORD_TYPE, PLAN_RECORD_TYPE, PRODUCT_RECORD_TYPE])
|
|
6
|
+
|
|
7
|
+
apiConfigPlugin({
|
|
8
|
+
allow: {
|
|
9
|
+
[CONFIG_RECORD]: every(
|
|
10
|
+
true,
|
|
11
|
+
value => value != null && typeof value === 'object'
|
|
12
|
+
&& advertisedRecordTypes.has((value as { recordType?: string }).recordType ?? '')
|
|
13
|
+
),
|
|
14
|
+
},
|
|
15
|
+
})
|
package/src/consts.ts
CHANGED
|
@@ -6,6 +6,11 @@ export enum ProductType {
|
|
|
6
6
|
Consumable = 'consumable'
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
+
export enum CheckoutPricingMode {
|
|
10
|
+
Quantity = 'quantity',
|
|
11
|
+
Amount = 'amount',
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
export enum PaymentEntityType {
|
|
10
15
|
Product = 'product',
|
|
11
16
|
Plan = 'plan',
|
|
@@ -51,6 +56,11 @@ export const ProductTypeSchema: JSONSchemaType<ProductType> = {
|
|
|
51
56
|
enum: Object.values(ProductType)
|
|
52
57
|
}
|
|
53
58
|
|
|
59
|
+
export const CheckoutPricingModeSchema: JSONSchemaType<CheckoutPricingMode> = {
|
|
60
|
+
type: 'string',
|
|
61
|
+
enum: Object.values(CheckoutPricingMode),
|
|
62
|
+
}
|
|
63
|
+
|
|
54
64
|
export const PaymentEntityTypeSchema: JSONSchemaType<PaymentEntityType> = {
|
|
55
65
|
type: 'string',
|
|
56
66
|
enum: Object.values(PaymentEntityType)
|
|
@@ -95,27 +105,3 @@ export const L10N_RECORD_PREFIX = L10N_RECORD_TYPE
|
|
|
95
105
|
export const DEFAULT_ALIAS = 'payment'
|
|
96
106
|
|
|
97
107
|
export const PAYMENT_SERVICE = DEFAULT_ALIAS
|
|
98
|
-
|
|
99
|
-
export const paymentApi = {
|
|
100
|
-
subscription: {
|
|
101
|
-
base: 'payment-api:subscription',
|
|
102
|
-
/**
|
|
103
|
-
* @deprecated Use propagate instead
|
|
104
|
-
*/
|
|
105
|
-
propogate: 'payment-api:subscription:propogate',
|
|
106
|
-
propagate: 'payment-api:subscription:propagate',
|
|
107
|
-
},
|
|
108
|
-
service: {
|
|
109
|
-
base: 'payment-service:base',
|
|
110
|
-
checkout: {
|
|
111
|
-
base: 'payment-service:checkout',
|
|
112
|
-
session: {
|
|
113
|
-
base: 'payment-service:checkout:session',
|
|
114
|
-
external: {
|
|
115
|
-
base: 'payment-service:checkout:session:external',
|
|
116
|
-
create: 'payment-service:checkout:session:external:create',
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|