@carlonicora/nestjs-neo4jsonapi 6.9.0 → 7.1.0
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/dist/common/decorators/audit.decorator.d.ts +3 -0
- package/dist/common/decorators/audit.decorator.d.ts.map +1 -1
- package/dist/common/decorators/audit.decorator.js +15 -2
- package/dist/common/decorators/audit.decorator.js.map +1 -1
- package/dist/common/decorators/cache-invalidate.decorator.d.ts +2 -1
- package/dist/common/decorators/cache-invalidate.decorator.d.ts.map +1 -1
- package/dist/common/decorators/cache-invalidate.decorator.js +15 -3
- package/dist/common/decorators/cache-invalidate.decorator.js.map +1 -1
- package/dist/common/decorators/handler-wrapper.d.ts +13 -0
- package/dist/common/decorators/handler-wrapper.d.ts.map +1 -0
- package/dist/common/decorators/handler-wrapper.js +25 -0
- package/dist/common/decorators/handler-wrapper.js.map +1 -0
- package/dist/common/decorators/validate-id.decorator.d.ts +4 -1
- package/dist/common/decorators/validate-id.decorator.d.ts.map +1 -1
- package/dist/common/decorators/validate-id.decorator.js +14 -2
- package/dist/common/decorators/validate-id.decorator.js.map +1 -1
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.d.ts +2 -1
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.d.ts.map +1 -1
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.js +5 -4
- package/dist/foundations/ai-connection/controllers/ai-connection.controller.js.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.admin.controller.d.ts +2 -1
- package/dist/foundations/analytics/controllers/analytics.admin.controller.d.ts.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.admin.controller.js +5 -4
- package/dist/foundations/analytics/controllers/analytics.admin.controller.js.map +1 -1
- package/dist/foundations/foundations.modules.d.ts.map +1 -1
- package/dist/foundations/foundations.modules.js +2 -0
- package/dist/foundations/foundations.modules.js.map +1 -1
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts +3 -2
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts.map +1 -1
- package/dist/foundations/handbook/controllers/handbook.controller.js +10 -8
- package/dist/foundations/handbook/controllers/handbook.controller.js.map +1 -1
- package/dist/foundations/notification/controllers/notification.controller.d.ts.map +1 -1
- package/dist/foundations/notification/controllers/notification.controller.js +0 -1
- package/dist/foundations/notification/controllers/notification.controller.js.map +1 -1
- package/dist/foundations/role/controllers/role.controller.d.ts +4 -3
- package/dist/foundations/role/controllers/role.controller.d.ts.map +1 -1
- package/dist/foundations/role/controllers/role.controller.js +13 -10
- package/dist/foundations/role/controllers/role.controller.js.map +1 -1
- package/dist/foundations/stripe/index.d.ts +1 -0
- package/dist/foundations/stripe/index.d.ts.map +1 -1
- package/dist/foundations/stripe/index.js +2 -0
- package/dist/foundations/stripe/index.js.map +1 -1
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.d.ts +15 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.js +61 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.js.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.d.ts +28 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.js +137 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code.controller.js.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.d.ts +26 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.js +132 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.controller.js.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.d.ts +12 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.js +49 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.automatic.query.dto.d.ts +8 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.automatic.query.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.automatic.query.dto.js +25 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.automatic.query.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.d.ts +13 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.js +55 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.patch.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.d.ts +24 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.js +105 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon-code.post.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.d.ts +8 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.js +36 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.d.ts +12 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.js +51 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.patch.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.d.ts +31 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.js +120 -0
- package/dist/foundations/stripe-coupon/dtos/stripe-coupon.post.dto.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.d.ts +28 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.js +35 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.d.ts +5 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.js +12 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-code.meta.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.d.ts +23 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.js +21 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.d.ts +6 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.js +13 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon-offer.meta.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.d.ts +55 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.js +37 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.js.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.d.ts +5 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.js +12 -0
- package/dist/foundations/stripe-coupon/entities/stripe-coupon.meta.js.map +1 -0
- package/dist/foundations/stripe-coupon/index.d.ts +22 -0
- package/dist/foundations/stripe-coupon/index.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/index.js +44 -0
- package/dist/foundations/stripe-coupon/index.js.map +1 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.d.ts +41 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.js +97 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon-code.repository.js.map +1 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.d.ts +29 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.js +55 -0
- package/dist/foundations/stripe-coupon/repositories/stripe-coupon.repository.js.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.d.ts +67 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.js +172 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-api.service.js.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.d.ts +81 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.js +206 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code-checkout.service.js.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.d.ts +92 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.js +134 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-code.service.js.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.d.ts +29 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.js +73 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon-offer.service.js.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon.service.d.ts +98 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon.service.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon.service.js +236 -0
- package/dist/foundations/stripe-coupon/services/stripe-coupon.service.js.map +1 -0
- package/dist/foundations/stripe-coupon/stripe-coupon.module.d.ts +14 -0
- package/dist/foundations/stripe-coupon/stripe-coupon.module.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/stripe-coupon.module.js +91 -0
- package/dist/foundations/stripe-coupon/stripe-coupon.module.js.map +1 -0
- package/dist/foundations/stripe-coupon/utils/places-left.d.ts +19 -0
- package/dist/foundations/stripe-coupon/utils/places-left.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/utils/places-left.js +33 -0
- package/dist/foundations/stripe-coupon/utils/places-left.js.map +1 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.d.ts +22 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.d.ts.map +1 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.js +48 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.js.map +1 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.d.ts +51 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.d.ts.map +1 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.js +129 -0
- package/dist/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.js.map +1 -0
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts +7 -1
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js +18 -5
- package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map +1 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts +30 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.d.ts.map +1 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.js +57 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.discount.js.map +1 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts +7 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.entity.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js +6 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.map.js.map +1 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.d.ts +8 -0
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.js +9 -1
- package/dist/foundations/stripe-subscription/entities/stripe-subscription.meta.js.map +1 -1
- package/dist/foundations/stripe-subscription/index.d.ts +3 -2
- package/dist/foundations/stripe-subscription/index.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/index.js +5 -1
- package/dist/foundations/stripe-subscription/index.js.map +1 -1
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts +14 -0
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js +32 -0
- package/dist/foundations/stripe-subscription/repositories/stripe-subscription.repository.js.map +1 -1
- package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js +6 -0
- package/dist/foundations/stripe-subscription/serialisers/stripe-subscription.serialiser.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +34 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +165 -29
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts +7 -0
- package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js +29 -2
- package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.d.ts +27 -0
- package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.d.ts.map +1 -0
- package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.js +62 -0
- package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.js.map +1 -0
- package/dist/foundations/stripe-subscription/stripe-subscription.module.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/stripe-subscription.module.js +10 -0
- package/dist/foundations/stripe-subscription/stripe-subscription.module.js.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +16 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
- package/dist/foundations/two-factor/controllers/passkey.controller.d.ts +1 -1
- package/dist/foundations/two-factor/controllers/passkey.controller.d.ts.map +1 -1
- package/dist/foundations/two-factor/controllers/passkey.controller.js +6 -5
- package/dist/foundations/two-factor/controllers/passkey.controller.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.StripeCouponModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const registry_1 = require("../../common/registries/registry");
|
|
12
|
+
const cache_module_1 = require("../../core/cache/cache.module");
|
|
13
|
+
const jsonapi_module_1 = require("../../core/jsonapi/jsonapi.module");
|
|
14
|
+
const neo4j_module_1 = require("../../core/neo4j/neo4j.module");
|
|
15
|
+
const security_module_1 = require("../../core/security/security.module");
|
|
16
|
+
const audit_module_1 = require("../audit/audit.module");
|
|
17
|
+
const stripe_customer_module_1 = require("../stripe-customer/stripe-customer.module");
|
|
18
|
+
const stripe_price_module_1 = require("../stripe-price/stripe-price.module");
|
|
19
|
+
const stripe_product_module_1 = require("../stripe-product/stripe-product.module");
|
|
20
|
+
const stripe_subscription_module_1 = require("../stripe-subscription/stripe-subscription.module");
|
|
21
|
+
const stripe_module_1 = require("../stripe/stripe.module");
|
|
22
|
+
const stripe_coupon_code_checkout_controller_1 = require("./controllers/stripe-coupon-code-checkout.controller");
|
|
23
|
+
const stripe_coupon_code_controller_1 = require("./controllers/stripe-coupon-code.controller");
|
|
24
|
+
const stripe_coupon_controller_1 = require("./controllers/stripe-coupon.controller");
|
|
25
|
+
const stripe_coupon_public_controller_1 = require("./controllers/stripe-coupon.public.controller");
|
|
26
|
+
const stripe_coupon_1 = require("./entities/stripe-coupon");
|
|
27
|
+
const stripe_coupon_code_1 = require("./entities/stripe-coupon-code");
|
|
28
|
+
const stripe_coupon_offer_1 = require("./entities/stripe-coupon-offer");
|
|
29
|
+
const stripe_coupon_code_repository_1 = require("./repositories/stripe-coupon-code.repository");
|
|
30
|
+
const stripe_coupon_repository_1 = require("./repositories/stripe-coupon.repository");
|
|
31
|
+
const stripe_coupon_api_service_1 = require("./services/stripe-coupon-api.service");
|
|
32
|
+
const stripe_coupon_code_checkout_service_1 = require("./services/stripe-coupon-code-checkout.service");
|
|
33
|
+
const stripe_coupon_code_service_1 = require("./services/stripe-coupon-code.service");
|
|
34
|
+
const stripe_coupon_offer_service_1 = require("./services/stripe-coupon-offer.service");
|
|
35
|
+
const stripe_coupon_service_1 = require("./services/stripe-coupon.service");
|
|
36
|
+
/**
|
|
37
|
+
* StripeCouponModule — admin-managed Stripe coupons and their customer-facing codes.
|
|
38
|
+
*
|
|
39
|
+
* - Coupons and codes are created in Stripe first and mirrored as nodes
|
|
40
|
+
* (`StripeCoupon` -[:HAS_CODE]-> `StripeCouponCode`), like products
|
|
41
|
+
* - One code at a time can be "Apply automatically"; the subscription service
|
|
42
|
+
* attaches it at a GM's first payment (`StripeCouponCodeCheckoutService`)
|
|
43
|
+
* - A public read of the automatic code's places left (`StripeCouponPublicController`)
|
|
44
|
+
*/
|
|
45
|
+
let StripeCouponModule = class StripeCouponModule {
|
|
46
|
+
onModuleInit() {
|
|
47
|
+
registry_1.modelRegistry.register(stripe_coupon_1.StripeCouponDescriptor.model);
|
|
48
|
+
registry_1.modelRegistry.register(stripe_coupon_code_1.StripeCouponCodeDescriptor.model);
|
|
49
|
+
// Synthetic resource (never a node): buildList needs it in the registry
|
|
50
|
+
registry_1.modelRegistry.register(stripe_coupon_offer_1.StripeCouponOfferDescriptor.model);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
exports.StripeCouponModule = StripeCouponModule;
|
|
54
|
+
exports.StripeCouponModule = StripeCouponModule = __decorate([
|
|
55
|
+
(0, common_1.Module)({
|
|
56
|
+
imports: [
|
|
57
|
+
neo4j_module_1.Neo4JModule,
|
|
58
|
+
jsonapi_module_1.JsonApiModule,
|
|
59
|
+
security_module_1.SecurityModule,
|
|
60
|
+
cache_module_1.CacheModule,
|
|
61
|
+
audit_module_1.AuditModule,
|
|
62
|
+
(0, common_1.forwardRef)(() => stripe_module_1.StripeModule),
|
|
63
|
+
(0, common_1.forwardRef)(() => stripe_product_module_1.StripeProductModule),
|
|
64
|
+
(0, common_1.forwardRef)(() => stripe_price_module_1.StripePriceModule),
|
|
65
|
+
(0, common_1.forwardRef)(() => stripe_customer_module_1.StripeCustomerModule),
|
|
66
|
+
(0, common_1.forwardRef)(() => stripe_subscription_module_1.StripeSubscriptionModule),
|
|
67
|
+
],
|
|
68
|
+
// The checkout controller comes first: its literal `stripe-coupon-codes/automatic`
|
|
69
|
+
// route must register before `stripe-coupon-codes/:codeId`.
|
|
70
|
+
controllers: [
|
|
71
|
+
stripe_coupon_code_checkout_controller_1.StripeCouponCodeCheckoutController,
|
|
72
|
+
stripe_coupon_controller_1.StripeCouponController,
|
|
73
|
+
stripe_coupon_code_controller_1.StripeCouponCodeController,
|
|
74
|
+
stripe_coupon_public_controller_1.StripeCouponPublicController,
|
|
75
|
+
],
|
|
76
|
+
providers: [
|
|
77
|
+
stripe_coupon_1.StripeCouponDescriptor.model.serialiser,
|
|
78
|
+
stripe_coupon_code_1.StripeCouponCodeDescriptor.model.serialiser,
|
|
79
|
+
stripe_coupon_offer_1.StripeCouponOfferDescriptor.model.serialiser,
|
|
80
|
+
stripe_coupon_api_service_1.StripeCouponApiService,
|
|
81
|
+
stripe_coupon_repository_1.StripeCouponRepository,
|
|
82
|
+
stripe_coupon_code_repository_1.StripeCouponCodeRepository,
|
|
83
|
+
stripe_coupon_service_1.StripeCouponService,
|
|
84
|
+
stripe_coupon_code_service_1.StripeCouponCodeService,
|
|
85
|
+
stripe_coupon_code_checkout_service_1.StripeCouponCodeCheckoutService,
|
|
86
|
+
stripe_coupon_offer_service_1.StripeCouponOfferService,
|
|
87
|
+
],
|
|
88
|
+
exports: [stripe_coupon_code_checkout_service_1.StripeCouponCodeCheckoutService, stripe_coupon_code_repository_1.StripeCouponCodeRepository, stripe_coupon_api_service_1.StripeCouponApiService],
|
|
89
|
+
})
|
|
90
|
+
], StripeCouponModule);
|
|
91
|
+
//# sourceMappingURL=stripe-coupon.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-coupon.module.js","sourceRoot":"","sources":["../../../src/foundations/stripe-coupon/stripe-coupon.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAkE;AAClE,+DAAiE;AACjE,gEAA4D;AAC5D,sEAAkE;AAClE,gEAA4D;AAC5D,yEAAqE;AACrE,wDAAoD;AACpD,sFAAiF;AACjF,6EAAwE;AACxE,mFAA8E;AAC9E,kGAA6F;AAC7F,2DAAuD;AACvD,iHAA0G;AAC1G,+FAAyF;AACzF,qFAAgF;AAChF,mGAA6F;AAC7F,4DAAkE;AAClE,sEAA2E;AAC3E,wEAA6E;AAC7E,gGAA0F;AAC1F,sFAAiF;AACjF,oFAA8E;AAC9E,wGAAiG;AACjG,sFAAgF;AAChF,wFAAkF;AAClF,4EAAuE;AAEvE;;;;;;;;GAQG;AAoCI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAAY;QACV,wBAAa,CAAC,QAAQ,CAAC,sCAAsB,CAAC,KAAK,CAAC,CAAC;QACrD,wBAAa,CAAC,QAAQ,CAAC,+CAA0B,CAAC,KAAK,CAAC,CAAC;QACzD,wEAAwE;QACxE,wBAAa,CAAC,QAAQ,CAAC,iDAA2B,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;CACF,CAAA;AAPY,gDAAkB;6BAAlB,kBAAkB;IAnC9B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,0BAAW;YACX,8BAAa;YACb,gCAAc;YACd,0BAAW;YACX,0BAAW;YACX,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC;YAC9B,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,2CAAmB,CAAC;YACrC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,uCAAiB,CAAC;YACnC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,6CAAoB,CAAC;YACtC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,qDAAwB,CAAC;SAC3C;QACD,mFAAmF;QACnF,4DAA4D;QAC5D,WAAW,EAAE;YACX,2EAAkC;YAClC,iDAAsB;YACtB,0DAA0B;YAC1B,8DAA4B;SAC7B;QACD,SAAS,EAAE;YACT,sCAAsB,CAAC,KAAK,CAAC,UAAU;YACvC,+CAA0B,CAAC,KAAK,CAAC,UAAU;YAC3C,iDAA2B,CAAC,KAAK,CAAC,UAAU;YAC5C,kDAAsB;YACtB,iDAAsB;YACtB,0DAA0B;YAC1B,2CAAmB;YACnB,oDAAuB;YACvB,qEAA+B;YAC/B,sDAAwB;SACzB;QACD,OAAO,EAAE,CAAC,qEAA+B,EAAE,0DAA0B,EAAE,kDAAsB,CAAC;KAC/F,CAAC;GACW,kBAAkB,CAO9B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StripeCoupon } from "../entities/stripe-coupon";
|
|
2
|
+
import type { StripeCouponCode } from "../entities/stripe-coupon-code";
|
|
3
|
+
type CodeLimits = Pick<StripeCouponCode, "maxRedemptions" | "timesRedeemed">;
|
|
4
|
+
type CouponLimits = Pick<StripeCoupon, "maxRedemptions" | "timesRedeemed">;
|
|
5
|
+
/**
|
|
6
|
+
* Places left for a code: the smaller of (coupon limit - coupon redeemed) and
|
|
7
|
+
* (code limit - code redeemed), counting only the limits that are set. Never below zero.
|
|
8
|
+
*
|
|
9
|
+
* @returns null when neither limit is set (unlimited)
|
|
10
|
+
*/
|
|
11
|
+
export declare function placesLeft(code: CodeLimits, coupon: CouponLimits): number | null;
|
|
12
|
+
/**
|
|
13
|
+
* Total places for a code: the smaller of the set limits (coupon and code).
|
|
14
|
+
*
|
|
15
|
+
* @returns null when neither limit is set (unlimited)
|
|
16
|
+
*/
|
|
17
|
+
export declare function placesTotal(code: CodeLimits, coupon: CouponLimits): number | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=places-left.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"places-left.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/utils/places-left.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,KAAK,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAC7E,KAAK,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAI3E;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAMhF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAIjF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.placesLeft = placesLeft;
|
|
4
|
+
exports.placesTotal = placesTotal;
|
|
5
|
+
const isSet = (value) => value !== undefined && value !== null;
|
|
6
|
+
/**
|
|
7
|
+
* Places left for a code: the smaller of (coupon limit - coupon redeemed) and
|
|
8
|
+
* (code limit - code redeemed), counting only the limits that are set. Never below zero.
|
|
9
|
+
*
|
|
10
|
+
* @returns null when neither limit is set (unlimited)
|
|
11
|
+
*/
|
|
12
|
+
function placesLeft(code, coupon) {
|
|
13
|
+
const remaining = [];
|
|
14
|
+
if (isSet(coupon.maxRedemptions))
|
|
15
|
+
remaining.push(coupon.maxRedemptions - (coupon.timesRedeemed ?? 0));
|
|
16
|
+
if (isSet(code.maxRedemptions))
|
|
17
|
+
remaining.push(code.maxRedemptions - (code.timesRedeemed ?? 0));
|
|
18
|
+
if (remaining.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
return Math.max(0, Math.min(...remaining));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Total places for a code: the smaller of the set limits (coupon and code).
|
|
24
|
+
*
|
|
25
|
+
* @returns null when neither limit is set (unlimited)
|
|
26
|
+
*/
|
|
27
|
+
function placesTotal(code, coupon) {
|
|
28
|
+
const limits = [coupon.maxRedemptions, code.maxRedemptions].filter(isSet);
|
|
29
|
+
if (limits.length === 0)
|
|
30
|
+
return null;
|
|
31
|
+
return Math.min(...limits);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=places-left.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"places-left.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-coupon/utils/places-left.ts"],"names":[],"mappings":";;AAcA,gCAMC;AAOD,kCAIC;AAzBD,MAAM,KAAK,GAAG,CAAC,KAAgC,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAE3G;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,IAAgB,EAAE,MAAoB;IAC/D,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;IAChG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,SAAgB,WAAW,CAAC,IAAgB,EAAE,MAAoB;IAChE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AAC7B,CAAC"}
|
package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Neo4jService } from "../../../core/neo4j";
|
|
2
|
+
/**
|
|
3
|
+
* Records which one-off StripeSubscription backfills have finished, so a worker
|
|
4
|
+
* boot runs each of them once per database.
|
|
5
|
+
*
|
|
6
|
+
* The marker is a `(:StripeSubscriptionBackfill {id})` node. It is not a
|
|
7
|
+
* `(:Migration)` node on purpose: the migrator orders Migration nodes by their
|
|
8
|
+
* date/increment version and reads the newest as "last applied", so a library
|
|
9
|
+
* marker there would make it skip the app's own migrations.
|
|
10
|
+
*/
|
|
11
|
+
export declare class StripeSubscriptionBackfillRepository {
|
|
12
|
+
private readonly neo4j;
|
|
13
|
+
constructor(neo4j: Neo4jService);
|
|
14
|
+
isCompleted(params: {
|
|
15
|
+
id: string;
|
|
16
|
+
}): Promise<boolean>;
|
|
17
|
+
markCompleted(params: {
|
|
18
|
+
id: string;
|
|
19
|
+
summary: string;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=stripe-subscription-backfill.repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription-backfill.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;;;;GAQG;AACH,qBACa,oCAAoC;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAE1C,WAAW,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrD,aAAa,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAU5E"}
|
package/dist/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.StripeSubscriptionBackfillRepository = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const neo4j_1 = require("../../../core/neo4j");
|
|
15
|
+
/**
|
|
16
|
+
* Records which one-off StripeSubscription backfills have finished, so a worker
|
|
17
|
+
* boot runs each of them once per database.
|
|
18
|
+
*
|
|
19
|
+
* The marker is a `(:StripeSubscriptionBackfill {id})` node. It is not a
|
|
20
|
+
* `(:Migration)` node on purpose: the migrator orders Migration nodes by their
|
|
21
|
+
* date/increment version and reads the newest as "last applied", so a library
|
|
22
|
+
* marker there would make it skip the app's own migrations.
|
|
23
|
+
*/
|
|
24
|
+
let StripeSubscriptionBackfillRepository = class StripeSubscriptionBackfillRepository {
|
|
25
|
+
constructor(neo4j) {
|
|
26
|
+
this.neo4j = neo4j;
|
|
27
|
+
}
|
|
28
|
+
async isCompleted(params) {
|
|
29
|
+
const total = await this.neo4j.readCount(`MATCH (backfill:StripeSubscriptionBackfill {id: $id}) RETURN count(backfill) AS total`, { id: params.id });
|
|
30
|
+
return total > 0;
|
|
31
|
+
}
|
|
32
|
+
async markCompleted(params) {
|
|
33
|
+
await this.neo4j.writeOne({
|
|
34
|
+
query: `
|
|
35
|
+
MERGE (backfill:StripeSubscriptionBackfill {id: $id})
|
|
36
|
+
ON CREATE SET backfill.createdAt = datetime()
|
|
37
|
+
SET backfill.completedAt = datetime(), backfill.summary = $summary
|
|
38
|
+
`,
|
|
39
|
+
queryParams: { id: params.id, summary: params.summary },
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.StripeSubscriptionBackfillRepository = StripeSubscriptionBackfillRepository;
|
|
44
|
+
exports.StripeSubscriptionBackfillRepository = StripeSubscriptionBackfillRepository = __decorate([
|
|
45
|
+
(0, common_1.Injectable)(),
|
|
46
|
+
__metadata("design:paramtypes", [neo4j_1.Neo4jService])
|
|
47
|
+
], StripeSubscriptionBackfillRepository);
|
|
48
|
+
//# sourceMappingURL=stripe-subscription-backfill.repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription-backfill.repository.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/backfills/stripe-subscription-backfill.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,+CAAmD;AAEnD;;;;;;;;GAQG;AAEI,IAAM,oCAAoC,GAA1C,MAAM,oCAAoC;IAC/C,YAA6B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAEpD,KAAK,CAAC,WAAW,CAAC,MAAsB;QACtC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CACtC,uFAAuF,EACvF,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAClB,CAAC;QACF,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAuC;QACzD,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE;;;;OAIN;YACD,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;SACxD,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AArBY,oFAAoC;+CAApC,oCAAoC;IADhD,IAAA,mBAAU,GAAE;qCAEyB,oBAAY;GADrC,oCAAoC,CAqBhD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { OnApplicationBootstrap } from "@nestjs/common";
|
|
2
|
+
import { ClsService } from "nestjs-cls";
|
|
3
|
+
import { AppLoggingService } from "../../../core/logging/services/logging.service";
|
|
4
|
+
import { StripeService } from "../../stripe/services/stripe.service";
|
|
5
|
+
import { StripeSubscriptionRepository } from "../repositories/stripe-subscription.repository";
|
|
6
|
+
import { StripeSubscriptionApiService } from "../services/stripe-subscription-api.service";
|
|
7
|
+
import { StripeSubscriptionBackfillRepository } from "./stripe-subscription-backfill.repository";
|
|
8
|
+
/** Marker id: changing it makes every deployed app run the backfill again. */
|
|
9
|
+
export declare const STRIPE_SUBSCRIPTION_DISCOUNT_BACKFILL_ID = "stripe-subscription-discount-20261024";
|
|
10
|
+
export type StripeSubscriptionDiscountBackfillResult = {
|
|
11
|
+
/** Skipped without touching anything: Stripe off, or the marker already exists. */
|
|
12
|
+
skipped: "stripe-not-configured" | "already-completed" | null;
|
|
13
|
+
total: number;
|
|
14
|
+
/** Discount fields written (a discount, or null when Stripe says there is none). */
|
|
15
|
+
updated: number;
|
|
16
|
+
/** Stripe no longer has the subscription; node left as it is. */
|
|
17
|
+
missing: number;
|
|
18
|
+
/** Stripe answered but the discount could not be read; node left as it is. */
|
|
19
|
+
unreadable: number;
|
|
20
|
+
/** Any other error (network, rate limit, Neo4j); node left as it is, run retried on next boot. */
|
|
21
|
+
failed: number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* One-off backfill of the discount fields on every StripeSubscription node.
|
|
25
|
+
*
|
|
26
|
+
* The discount fields are written on create, plan change and Stripe sync only, so a
|
|
27
|
+
* subscription stored before they existed shows no discount until its next change.
|
|
28
|
+
* This reads each subscription from Stripe (with the discount expanded) and writes
|
|
29
|
+
* only the discount fields through {@link StripeSubscriptionRepository.update}.
|
|
30
|
+
*
|
|
31
|
+
* Runs in worker mode at application bootstrap, after the migrator (module init),
|
|
32
|
+
* in the background so a long list never delays the worker. A
|
|
33
|
+
* `(:StripeSubscriptionBackfill)` marker stops later boots from running it again; the
|
|
34
|
+
* marker is written only when no subscription failed for a transient reason, so an
|
|
35
|
+
* outage during the deploy is retried on the next boot. Re-running is harmless: each
|
|
36
|
+
* write is the value Stripe holds now.
|
|
37
|
+
*/
|
|
38
|
+
export declare class StripeSubscriptionDiscountBackfillService implements OnApplicationBootstrap {
|
|
39
|
+
private readonly stripeService;
|
|
40
|
+
private readonly stripeSubscriptionApiService;
|
|
41
|
+
private readonly subscriptionRepository;
|
|
42
|
+
private readonly backfillRepository;
|
|
43
|
+
private readonly cls;
|
|
44
|
+
private readonly logger;
|
|
45
|
+
constructor(stripeService: StripeService, stripeSubscriptionApiService: StripeSubscriptionApiService, subscriptionRepository: StripeSubscriptionRepository, backfillRepository: StripeSubscriptionBackfillRepository, cls: ClsService, logger: AppLoggingService);
|
|
46
|
+
onApplicationBootstrap(): void;
|
|
47
|
+
/** Repository queries read the request context, so the run gets an empty one. */
|
|
48
|
+
run(): Promise<StripeSubscriptionDiscountBackfillResult>;
|
|
49
|
+
private backfill;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=stripe-subscription-discount-backfill.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription-discount-backfill.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAC3F,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AAEjG,8EAA8E;AAC9E,eAAO,MAAM,wCAAwC,0CAA0C,CAAC;AAEhG,MAAM,MAAM,wCAAwC,GAAG;IACrD,mFAAmF;IACnF,OAAO,EAAE,uBAAuB,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAC;IACnB,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,qBACa,yCAA0C,YAAW,sBAAsB;IAEpF,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBALN,aAAa,EAAE,aAAa,EAC5B,4BAA4B,EAAE,4BAA4B,EAC1D,sBAAsB,EAAE,4BAA4B,EACpD,kBAAkB,EAAE,oCAAoC,EACxD,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,iBAAiB;IAG5C,sBAAsB,IAAI,IAAI;IAM9B,iFAAiF;IAC3E,GAAG,IAAI,OAAO,CAAC,wCAAwC,CAAC;YAIhD,QAAQ;CAmEvB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.StripeSubscriptionDiscountBackfillService = exports.STRIPE_SUBSCRIPTION_DISCOUNT_BACKFILL_ID = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_cls_1 = require("nestjs-cls");
|
|
15
|
+
const logging_service_1 = require("../../../core/logging/services/logging.service");
|
|
16
|
+
const stripe_errors_1 = require("../../stripe/errors/stripe.errors");
|
|
17
|
+
const stripe_service_1 = require("../../stripe/services/stripe.service");
|
|
18
|
+
const stripe_subscription_discount_1 = require("../entities/stripe-subscription.discount");
|
|
19
|
+
const stripe_subscription_repository_1 = require("../repositories/stripe-subscription.repository");
|
|
20
|
+
const stripe_subscription_api_service_1 = require("../services/stripe-subscription-api.service");
|
|
21
|
+
const stripe_subscription_backfill_repository_1 = require("./stripe-subscription-backfill.repository");
|
|
22
|
+
/** Marker id: changing it makes every deployed app run the backfill again. */
|
|
23
|
+
exports.STRIPE_SUBSCRIPTION_DISCOUNT_BACKFILL_ID = "stripe-subscription-discount-20261024";
|
|
24
|
+
/**
|
|
25
|
+
* One-off backfill of the discount fields on every StripeSubscription node.
|
|
26
|
+
*
|
|
27
|
+
* The discount fields are written on create, plan change and Stripe sync only, so a
|
|
28
|
+
* subscription stored before they existed shows no discount until its next change.
|
|
29
|
+
* This reads each subscription from Stripe (with the discount expanded) and writes
|
|
30
|
+
* only the discount fields through {@link StripeSubscriptionRepository.update}.
|
|
31
|
+
*
|
|
32
|
+
* Runs in worker mode at application bootstrap, after the migrator (module init),
|
|
33
|
+
* in the background so a long list never delays the worker. A
|
|
34
|
+
* `(:StripeSubscriptionBackfill)` marker stops later boots from running it again; the
|
|
35
|
+
* marker is written only when no subscription failed for a transient reason, so an
|
|
36
|
+
* outage during the deploy is retried on the next boot. Re-running is harmless: each
|
|
37
|
+
* write is the value Stripe holds now.
|
|
38
|
+
*/
|
|
39
|
+
let StripeSubscriptionDiscountBackfillService = class StripeSubscriptionDiscountBackfillService {
|
|
40
|
+
constructor(stripeService, stripeSubscriptionApiService, subscriptionRepository, backfillRepository, cls, logger) {
|
|
41
|
+
this.stripeService = stripeService;
|
|
42
|
+
this.stripeSubscriptionApiService = stripeSubscriptionApiService;
|
|
43
|
+
this.subscriptionRepository = subscriptionRepository;
|
|
44
|
+
this.backfillRepository = backfillRepository;
|
|
45
|
+
this.cls = cls;
|
|
46
|
+
this.logger = logger;
|
|
47
|
+
}
|
|
48
|
+
onApplicationBootstrap() {
|
|
49
|
+
void this.run().catch((error) => {
|
|
50
|
+
this.logger.error("Stripe subscription discount backfill aborted", error);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/** Repository queries read the request context, so the run gets an empty one. */
|
|
54
|
+
async run() {
|
|
55
|
+
return this.cls.run(() => this.backfill());
|
|
56
|
+
}
|
|
57
|
+
async backfill() {
|
|
58
|
+
const result = {
|
|
59
|
+
skipped: null,
|
|
60
|
+
total: 0,
|
|
61
|
+
updated: 0,
|
|
62
|
+
missing: 0,
|
|
63
|
+
unreadable: 0,
|
|
64
|
+
failed: 0,
|
|
65
|
+
};
|
|
66
|
+
if (!this.stripeService.isConfigured()) {
|
|
67
|
+
return { ...result, skipped: "stripe-not-configured" };
|
|
68
|
+
}
|
|
69
|
+
if (await this.backfillRepository.isCompleted({ id: exports.STRIPE_SUBSCRIPTION_DISCOUNT_BACKFILL_ID })) {
|
|
70
|
+
return { ...result, skipped: "already-completed" };
|
|
71
|
+
}
|
|
72
|
+
const subscriptions = await this.subscriptionRepository.findAll();
|
|
73
|
+
result.total = subscriptions.length;
|
|
74
|
+
this.logger.log(`Stripe subscription discount backfill: ${subscriptions.length} subscriptions`);
|
|
75
|
+
// Sequential on purpose: one Stripe read at a time.
|
|
76
|
+
for (const subscription of subscriptions) {
|
|
77
|
+
try {
|
|
78
|
+
const stripeSubscription = await this.stripeSubscriptionApiService.retrieveSubscription(subscription.stripeSubscriptionId);
|
|
79
|
+
const discount = (0, stripe_subscription_discount_1.discountFromStripeSubscription)(stripeSubscription);
|
|
80
|
+
if (discount === undefined) {
|
|
81
|
+
result.unreadable++;
|
|
82
|
+
this.logger.warn(`Stripe subscription discount backfill: discount of ${subscription.stripeSubscriptionId} is unreadable, left as it is`);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
await this.subscriptionRepository.update({ id: subscription.id, discount });
|
|
86
|
+
result.updated++;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (isMissingInStripe(error)) {
|
|
90
|
+
result.missing++;
|
|
91
|
+
this.logger.warn(`Stripe subscription discount backfill: ${subscription.stripeSubscriptionId} not found in Stripe, left as it is`);
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
result.failed++;
|
|
95
|
+
this.logger.error(`Stripe subscription discount backfill: ${subscription.stripeSubscriptionId} failed, left as it is`, error);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const summary = `total=${result.total} updated=${result.updated} missing=${result.missing} unreadable=${result.unreadable} failed=${result.failed}`;
|
|
99
|
+
if (result.failed === 0) {
|
|
100
|
+
await this.backfillRepository.markCompleted({ id: exports.STRIPE_SUBSCRIPTION_DISCOUNT_BACKFILL_ID, summary });
|
|
101
|
+
this.logger.log(`Stripe subscription discount backfill completed: ${summary}`);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.logger.warn(`Stripe subscription discount backfill incomplete, retried on next boot: ${summary}`);
|
|
105
|
+
}
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
exports.StripeSubscriptionDiscountBackfillService = StripeSubscriptionDiscountBackfillService;
|
|
110
|
+
exports.StripeSubscriptionDiscountBackfillService = StripeSubscriptionDiscountBackfillService = __decorate([
|
|
111
|
+
(0, common_1.Injectable)(),
|
|
112
|
+
__metadata("design:paramtypes", [stripe_service_1.StripeService,
|
|
113
|
+
stripe_subscription_api_service_1.StripeSubscriptionApiService,
|
|
114
|
+
stripe_subscription_repository_1.StripeSubscriptionRepository,
|
|
115
|
+
stripe_subscription_backfill_repository_1.StripeSubscriptionBackfillRepository,
|
|
116
|
+
nestjs_cls_1.ClsService,
|
|
117
|
+
logging_service_1.AppLoggingService])
|
|
118
|
+
], StripeSubscriptionDiscountBackfillService);
|
|
119
|
+
/**
|
|
120
|
+
* A deleted or unknown subscription: Stripe answers 404 `resource_missing`, which
|
|
121
|
+
* {@link StripeSubscriptionApiService.retrieveSubscription} rethrows as a 400 StripeError.
|
|
122
|
+
*/
|
|
123
|
+
function isMissingInStripe(error) {
|
|
124
|
+
if (error instanceof stripe_errors_1.StripeError)
|
|
125
|
+
return error.stripeCode === "resource_missing";
|
|
126
|
+
const raw = error;
|
|
127
|
+
return raw?.code === "resource_missing" || raw?.statusCode === common_1.HttpStatus.NOT_FOUND;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=stripe-subscription-discount-backfill.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription-discount-backfill.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/backfills/stripe-subscription-discount-backfill.service.ts"],"names":[],"mappings":"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"}
|
package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ import { AuthenticatedRequest } from "../../../common/interfaces/authenticated.r
|
|
|
3
3
|
import { StripeSubscriptionCancelDTO, StripeSubscriptionChangePlanDTO, StripeSubscriptionPostDTO } from "../dtos/stripe-subscription.dto";
|
|
4
4
|
import { StripeSubscriptionStatus } from "../entities/stripe-subscription.entity";
|
|
5
5
|
import { StripeSubscriptionAdminService } from "../services/stripe-subscription-admin.service";
|
|
6
|
+
import { CacheService } from "../../../core/cache/services/cache.service";
|
|
6
7
|
export declare class StripeSubscriptionController {
|
|
7
8
|
private readonly subscriptionService;
|
|
8
|
-
|
|
9
|
+
private readonly cacheService;
|
|
10
|
+
constructor(subscriptionService: StripeSubscriptionAdminService, cacheService: CacheService);
|
|
9
11
|
listSubscriptions(req: AuthenticatedRequest, reply: FastifyReply, query: any, status?: StripeSubscriptionStatus): Promise<void>;
|
|
10
12
|
getSubscription(req: AuthenticatedRequest, reply: FastifyReply, subscriptionId: string): Promise<void>;
|
|
11
13
|
createSubscription(req: AuthenticatedRequest, reply: FastifyReply, body: StripeSubscriptionPostDTO): Promise<void>;
|
|
@@ -14,6 +16,10 @@ export declare class StripeSubscriptionController {
|
|
|
14
16
|
resumeSubscription(req: AuthenticatedRequest, reply: FastifyReply, subscriptionId: string): Promise<void>;
|
|
15
17
|
changePlan(req: AuthenticatedRequest, reply: FastifyReply, subscriptionId: string, body: StripeSubscriptionChangePlanDTO): Promise<void>;
|
|
16
18
|
previewProration(req: AuthenticatedRequest, reply: FastifyReply, subscriptionId: string, priceId: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Re-reads the subscription from Stripe and stores it. The wizard calls it right after the
|
|
21
|
+
* browser confirmed the first payment, before the webhooks arrive.
|
|
22
|
+
*/
|
|
17
23
|
syncSubscription(req: AuthenticatedRequest, reply: FastifyReply, subscriptionId: string): Promise<void>;
|
|
18
24
|
}
|
|
19
25
|
//# sourceMappingURL=stripe-subscription.controller.d.ts.map
|
package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/controllers/stripe-subscription.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAI/F,qBAEa,4BAA4B;
|
|
1
|
+
{"version":3,"file":"stripe-subscription.controller.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/controllers/stripe-subscription.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC;AAElF,OAAO,EAAE,8BAA8B,EAAE,MAAM,+CAA+C,CAAC;AAI/F,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAE1E,qBAEa,4BAA4B;IAErC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAFZ,mBAAmB,EAAE,8BAA8B,EAEnD,YAAY,EAAE,YAAY;IAMvC,iBAAiB,CACd,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACjB,KAAK,EAAE,GAAG,EACF,MAAM,CAAC,EAAE,wBAAwB;IAc9C,eAAe,CACZ,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM;IAa3C,kBAAkB,CACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EAClB,IAAI,EAAE,yBAAyB;IA0BnC,kBAAkB,CACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM,EACvC,IAAI,EAAE,2BAA2B;IAcrC,iBAAiB,CACd,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM;IAa3C,kBAAkB,CACf,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM;IAa3C,UAAU,CACP,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM,EACvC,IAAI,EAAE,+BAA+B;IAoBzC,gBAAgB,CACb,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM,EAC7B,OAAO,EAAE,MAAM;IAgBnC;;;OAGG;IAOG,gBAAgB,CACb,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY,EACD,cAAc,EAAE,MAAM;CA0BlD"}
|
|
@@ -20,9 +20,14 @@ const stripe_subscription_meta_1 = require("../entities/stripe-subscription.meta
|
|
|
20
20
|
const stripe_subscription_admin_service_1 = require("../services/stripe-subscription-admin.service");
|
|
21
21
|
const module_decorator_1 = require("../../../common/decorators/module.decorator");
|
|
22
22
|
const core_module_ids_1 = require("../../../common/constants/core-module.ids");
|
|
23
|
+
const cache_invalidate_decorator_1 = require("../../../common/decorators/cache-invalidate.decorator");
|
|
24
|
+
const cache_service_1 = require("../../../core/cache/services/cache.service");
|
|
23
25
|
let StripeSubscriptionController = class StripeSubscriptionController {
|
|
24
|
-
constructor(subscriptionService
|
|
26
|
+
constructor(subscriptionService,
|
|
27
|
+
// Read by @CacheInvalidate
|
|
28
|
+
cacheService) {
|
|
25
29
|
this.subscriptionService = subscriptionService;
|
|
30
|
+
this.cacheService = cacheService;
|
|
26
31
|
}
|
|
27
32
|
async listSubscriptions(req, reply, query, status) {
|
|
28
33
|
const response = await this.subscriptionService.listSubscriptions({
|
|
@@ -105,13 +110,18 @@ let StripeSubscriptionController = class StripeSubscriptionController {
|
|
|
105
110
|
});
|
|
106
111
|
reply.send(response);
|
|
107
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Re-reads the subscription from Stripe and stores it. The wizard calls it right after the
|
|
115
|
+
* browser confirmed the first payment, before the webhooks arrive.
|
|
116
|
+
*/
|
|
117
|
+
// @Roles sits above @CacheInvalidate, which replaces the method: metadata set
|
|
118
|
+
// below it would land on the discarded original and never be enforced.
|
|
108
119
|
async syncSubscription(req, reply, subscriptionId) {
|
|
109
|
-
//
|
|
120
|
+
// Ownership: getSubscription answers 404 / 403 for a subscription of another company
|
|
110
121
|
const subscription = await this.subscriptionService.getSubscription({
|
|
111
122
|
id: subscriptionId,
|
|
112
123
|
companyId: req.user.companyId,
|
|
113
124
|
});
|
|
114
|
-
// Extract stripeSubscriptionId from the response
|
|
115
125
|
const stripeSubscriptionId = subscription.data?.attributes?.stripeSubscriptionId;
|
|
116
126
|
if (!stripeSubscriptionId) {
|
|
117
127
|
reply.status(common_1.HttpStatus.BAD_REQUEST).send({ error: "Subscription has no Stripe ID" });
|
|
@@ -222,8 +232,10 @@ __decorate([
|
|
|
222
232
|
__metadata("design:returntype", Promise)
|
|
223
233
|
], StripeSubscriptionController.prototype, "previewProration", null);
|
|
224
234
|
__decorate([
|
|
225
|
-
(0, common_1.Post)(`${stripe_subscription_meta_1.stripeSubscriptionMeta.endpoint}/:subscriptionId
|
|
235
|
+
(0, common_1.Post)(`${stripe_subscription_meta_1.stripeSubscriptionMeta.endpoint}/:subscriptionId/${stripe_subscription_meta_1.STRIPE_SUBSCRIPTION_SYNC_SEGMENT}`),
|
|
226
236
|
(0, common_1.UseGuards)(common_2.JwtAuthGuard),
|
|
237
|
+
(0, common_2.Roles)(common_2.RoleId.CompanyAdministrator),
|
|
238
|
+
(0, cache_invalidate_decorator_1.CacheInvalidate)(stripe_subscription_meta_1.stripeSubscriptionMeta, "subscriptionId"),
|
|
227
239
|
__param(0, (0, common_1.Req)()),
|
|
228
240
|
__param(1, (0, common_1.Res)()),
|
|
229
241
|
__param(2, (0, common_1.Param)("subscriptionId")),
|
|
@@ -234,6 +246,7 @@ __decorate([
|
|
|
234
246
|
exports.StripeSubscriptionController = StripeSubscriptionController = __decorate([
|
|
235
247
|
(0, module_decorator_1.ModuleACL)({ module: core_module_ids_1.CoreModuleId.Billing }),
|
|
236
248
|
(0, common_1.Controller)(),
|
|
237
|
-
__metadata("design:paramtypes", [stripe_subscription_admin_service_1.StripeSubscriptionAdminService
|
|
249
|
+
__metadata("design:paramtypes", [stripe_subscription_admin_service_1.StripeSubscriptionAdminService,
|
|
250
|
+
cache_service_1.CacheService])
|
|
238
251
|
], StripeSubscriptionController);
|
|
239
252
|
//# sourceMappingURL=stripe-subscription.controller.js.map
|
package/dist/foundations/stripe-subscription/controllers/stripe-subscription.controller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.controller.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/controllers/stripe-subscription.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4G;AAE5G,4CAA8D;AAE9D,6EAIyC;AAEzC,
|
|
1
|
+
{"version":3,"file":"stripe-subscription.controller.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/controllers/stripe-subscription.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4G;AAE5G,4CAA8D;AAE9D,6EAIyC;AAEzC,mFAAgH;AAChH,qGAA+F;AAC/F,kFAAwE;AACxE,+EAAyE;AACzE,sGAAwF;AACxF,8EAA0E;AAInE,IAAM,4BAA4B,GAAlC,MAAM,4BAA4B;IACvC,YACmB,mBAAmD;IACpE,2BAA2B;IACV,YAA0B;QAF1B,wBAAmB,GAAnB,mBAAmB,CAAgC;QAEnD,iBAAY,GAAZ,YAAY,CAAc;IAC1C,CAAC;IAKE,AAAN,KAAK,CAAC,iBAAiB,CACd,GAAyB,EACzB,KAAmB,EACjB,KAAU,EACF,MAAiC;QAElD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;YAChE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,eAAe,CACZ,GAAyB,EACzB,KAAmB,EACD,cAAsB;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;YAC9D,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,kBAAkB,CACf,GAAyB,EACzB,KAAmB,EAClB,IAA+B;QAEvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;YAC/D,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YACpD,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe;YACtD,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe;YACtD,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ;YACxC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa;SACnD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG;YACf,GAAG,MAAM,CAAC,IAAI;YACd,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,cAAc,EAAE,MAAM,CAAC,cAAc;aACtC;SACF,CAAC;QAEF,KAAK,CAAC,MAAM,CAAC,mBAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAKK,AAAN,KAAK,CAAC,kBAAkB,CACf,GAAyB,EACzB,KAAmB,EACD,cAAsB,EACvC,IAAiC;QAEzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;YACjE,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB;SAC3D,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,iBAAiB,CACd,GAAyB,EACzB,KAAmB,EACD,cAAsB;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;YAChE,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,kBAAkB,CACf,GAAyB,EACzB,KAAmB,EACD,cAAsB;QAE/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;YACjE,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,UAAU,CACP,GAAyB,EACzB,KAAmB,EACD,cAAsB,EACvC,IAAqC;QAE7C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,CAAC,mBAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;YAC5E,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;YACzD,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO;YACxC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa;SAClD,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAKK,AAAN,KAAK,CAAC,gBAAgB,CACb,GAAyB,EACzB,KAAmB,EACD,cAAsB,EAC7B,OAAe;QAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,mBAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;YAC/D,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,8EAA8E;IAC9E,uEAAuE;IAKjE,AAAN,KAAK,CAAC,gBAAgB,CACb,GAAyB,EACzB,KAAmB,EACD,cAAsB;QAE/C,qFAAqF;QACrF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;YAClE,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,oBAAoB,CAAC;QACjF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,mBAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACtF,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;YACxD,oBAAoB;SACrB,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;YACzE,EAAE,EAAE,cAAc;YAClB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;SAC9B,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClC,CAAC;CACF,CAAA;AA9MY,oEAA4B;AAUjC;IAHL,IAAA,YAAG,EAAC,iDAAsB,CAAC,QAAQ,CAAC;IACpC,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,aAAa,EAAE,eAAM,CAAC,oBAAoB,CAAC;IAEtD,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,GAAE,CAAA;IACP,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;qEASjB;AAKK;IAHL,IAAA,YAAG,EAAC,GAAG,iDAAsB,CAAC,QAAQ,kBAAkB,CAAC;IACzD,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,aAAa,EAAE,eAAM,CAAC,oBAAoB,CAAC;IAEtD,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;;;;mEAQzB;AAKK;IAHL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,EAAE,CAAC;IAC1C,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;qDAAO,mDAAyB;;sEAqBxC;AAKK;IAHL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,yBAAyB,CAAC;IACjE,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;IACvB,WAAA,IAAA,aAAI,GAAE,CAAA;;6DAAO,qDAA2B;;sEAS1C;AAKK;IAHL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,wBAAwB,CAAC;IAChE,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;;;;qEAQzB;AAKK;IAHL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,yBAAyB,CAAC;IACjE,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;;;;sEAQzB;AAKK;IAHL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,8BAA8B,CAAC;IACtE,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;IACvB,WAAA,IAAA,aAAI,GAAE,CAAA;;6DAAO,yDAA+B;;8DAe9C;AAKK;IAHL,IAAA,YAAG,EAAC,GAAG,iDAAsB,CAAC,QAAQ,oCAAoC,CAAC;IAC3E,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAEhC,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;IACvB,WAAA,IAAA,cAAK,EAAC,SAAS,CAAC,CAAA;;;;oEAclB;AAYK;IAJL,IAAA,aAAI,EAAC,GAAG,iDAAsB,CAAC,QAAQ,oBAAoB,2DAAgC,EAAE,CAAC;IAC9F,IAAA,kBAAS,EAAC,qBAAY,CAAC;IACvB,IAAA,cAAK,EAAC,eAAM,CAAC,oBAAoB,CAAC;IAClC,IAAA,4CAAe,EAAC,iDAAsB,EAAE,gBAAgB,CAAC;IAEvD,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,gBAAgB,CAAC,CAAA;;;;oEAyBzB;uCA7MU,4BAA4B;IAFxC,IAAA,4BAAS,EAAC,EAAE,MAAM,EAAE,8BAAY,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAA,mBAAU,GAAE;qCAG6B,kEAA8B;QAErC,4BAAY;GAJlC,4BAA4B,CA8MxC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import Stripe from "stripe";
|
|
2
|
+
import { StripeSubscriptionDiscountDuration } from "./stripe-subscription.entity";
|
|
3
|
+
/**
|
|
4
|
+
* The discount a subscription carries, as written to the StripeSubscription node.
|
|
5
|
+
* Every field is null when the coupon does not set it, so a write clears what an
|
|
6
|
+
* earlier discount left behind.
|
|
7
|
+
*/
|
|
8
|
+
export type StripeSubscriptionDiscount = {
|
|
9
|
+
percentOff: number | null;
|
|
10
|
+
amountOff: number | null;
|
|
11
|
+
currency: string | null;
|
|
12
|
+
duration: StripeSubscriptionDiscountDuration;
|
|
13
|
+
durationInMonths: number | null;
|
|
14
|
+
end: Date | null;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The Stripe `expand` path that makes `subscription.discounts` readable by
|
|
18
|
+
* {@link discountFromStripeSubscription}. Without it Stripe returns discount ids only.
|
|
19
|
+
*/
|
|
20
|
+
export declare const STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND = "discounts.source.coupon";
|
|
21
|
+
/**
|
|
22
|
+
* Reads the discount of a Stripe subscription (its first subscription-level discount).
|
|
23
|
+
*
|
|
24
|
+
* - `null`: Stripe says the subscription has no discount; the stored one must be cleared.
|
|
25
|
+
* - `undefined`: the discount cannot be read (ids not expanded); leave the stored one as it is.
|
|
26
|
+
*/
|
|
27
|
+
export declare function discountFromStripeSubscription(subscription: Pick<Stripe.Subscription, "discounts">): StripeSubscriptionDiscount | null | undefined;
|
|
28
|
+
/** Query parameters for the discount fields; all null when there is no discount. */
|
|
29
|
+
export declare function discountQueryParams(discount: StripeSubscriptionDiscount | null): Record<string, unknown>;
|
|
30
|
+
//# sourceMappingURL=stripe-subscription.discount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription.discount.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.discount.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,kCAAkC,EAAE,MAAM,8BAA8B,CAAC;AAElF;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,kCAAkC,CAAC;IAC7C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,4BAA4B,CAAC;AAE7E;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GACnD,0BAA0B,GAAG,IAAI,GAAG,SAAS,CAsB/C;AAQD,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASxG"}
|