@carlonicora/nestjs-neo4jsonapi 6.8.0 → 7.0.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/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 +23 -3
- package/dist/common/decorators/cache-invalidate.decorator.js.map +1 -1
- 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 +22 -2
- package/dist/common/decorators/validate-id.decorator.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 +2 -1
- package/dist/foundations/handbook/controllers/handbook.controller.d.ts.map +1 -1
- package/dist/foundations/handbook/controllers/handbook.controller.js +5 -4
- package/dist/foundations/handbook/controllers/handbook.controller.js.map +1 -1
- package/dist/foundations/role/controllers/role.controller.d.ts +3 -2
- package/dist/foundations/role/controllers/role.controller.d.ts.map +1 -1
- package/dist/foundations/role/controllers/role.controller.js +9 -7
- 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/services/stripe.payment.service.d.ts +33 -0
- package/dist/foundations/stripe/services/stripe.payment.service.d.ts.map +1 -1
- package/dist/foundations/stripe/services/stripe.payment.service.js +68 -0
- package/dist/foundations/stripe/services/stripe.payment.service.js.map +1 -1
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon-code-checkout.controller.d.ts +14 -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 +62 -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 +136 -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 +131 -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 +11 -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 +45 -0
- package/dist/foundations/stripe-coupon/controllers/stripe-coupon.public.controller.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 +18 -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 +32 -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 +21 -0
- package/dist/foundations/stripe-coupon/index.d.ts.map +1 -0
- package/dist/foundations/stripe-coupon/index.js +43 -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 +70 -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 +65 -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 +200 -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 +36 -3
- 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 +174 -38
- 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,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":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND = void 0;
|
|
4
|
+
exports.discountFromStripeSubscription = discountFromStripeSubscription;
|
|
5
|
+
exports.discountQueryParams = discountQueryParams;
|
|
6
|
+
/**
|
|
7
|
+
* The Stripe `expand` path that makes `subscription.discounts` readable by
|
|
8
|
+
* {@link discountFromStripeSubscription}. Without it Stripe returns discount ids only.
|
|
9
|
+
*/
|
|
10
|
+
exports.STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND = "discounts.source.coupon";
|
|
11
|
+
/**
|
|
12
|
+
* Reads the discount of a Stripe subscription (its first subscription-level discount).
|
|
13
|
+
*
|
|
14
|
+
* - `null`: Stripe says the subscription has no discount; the stored one must be cleared.
|
|
15
|
+
* - `undefined`: the discount cannot be read (ids not expanded); leave the stored one as it is.
|
|
16
|
+
*/
|
|
17
|
+
function discountFromStripeSubscription(subscription) {
|
|
18
|
+
const discounts = subscription.discounts;
|
|
19
|
+
if (!Array.isArray(discounts))
|
|
20
|
+
return undefined;
|
|
21
|
+
if (discounts.length === 0)
|
|
22
|
+
return null;
|
|
23
|
+
const discount = discounts[0];
|
|
24
|
+
if (typeof discount === "string")
|
|
25
|
+
return undefined;
|
|
26
|
+
// API versions before 2025-09-30 put the coupon on the discount itself.
|
|
27
|
+
const coupon = discount.source?.coupon ?? discount.coupon;
|
|
28
|
+
if (!coupon || typeof coupon === "string")
|
|
29
|
+
return undefined;
|
|
30
|
+
// Stripe's type leaves room for durations added later; one we do not know cannot be stored
|
|
31
|
+
if (!isKnownDuration(coupon.duration))
|
|
32
|
+
return undefined;
|
|
33
|
+
return {
|
|
34
|
+
percentOff: coupon.percent_off ?? null,
|
|
35
|
+
amountOff: coupon.amount_off ?? null,
|
|
36
|
+
currency: coupon.currency ?? null,
|
|
37
|
+
duration: coupon.duration,
|
|
38
|
+
durationInMonths: coupon.duration_in_months ?? null,
|
|
39
|
+
end: discount.end ? new Date(discount.end * 1000) : null,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const KNOWN_DURATIONS = ["forever", "once", "repeating"];
|
|
43
|
+
function isKnownDuration(duration) {
|
|
44
|
+
return KNOWN_DURATIONS.includes(duration);
|
|
45
|
+
}
|
|
46
|
+
/** Query parameters for the discount fields; all null when there is no discount. */
|
|
47
|
+
function discountQueryParams(discount) {
|
|
48
|
+
return {
|
|
49
|
+
discountPercentOff: discount?.percentOff ?? null,
|
|
50
|
+
discountAmountOff: discount?.amountOff ?? null,
|
|
51
|
+
discountCurrency: discount?.currency ?? null,
|
|
52
|
+
discountDuration: discount?.duration ?? null,
|
|
53
|
+
discountDurationInMonths: discount?.durationInMonths ?? null,
|
|
54
|
+
discountEnd: discount?.end?.toISOString() ?? null,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=stripe-subscription.discount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-subscription.discount.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.discount.ts"],"names":[],"mappings":";;;AA6BA,wEAwBC;AASD,kDASC;AAtDD;;;GAGG;AACU,QAAA,mCAAmC,GAAG,yBAAyB,CAAC;AAE7E;;;;;GAKG;AACH,SAAgB,8BAA8B,CAC5C,YAAoD;IAEpD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEnD,wEAAwE;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAK,QAA2D,CAAC,MAAM,CAAC;IAC9G,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5D,2FAA2F;IAC3F,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IAExD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;QACtC,SAAS,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;QACnD,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAkD,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAExG,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAQ,eAAqC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnE,CAAC;AAED,oFAAoF;AACpF,SAAgB,mBAAmB,CAAC,QAA2C;IAC7E,OAAO;QACL,kBAAkB,EAAE,QAAQ,EAAE,UAAU,IAAI,IAAI;QAChD,iBAAiB,EAAE,QAAQ,EAAE,SAAS,IAAI,IAAI;QAC9C,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC5C,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC5C,wBAAwB,EAAE,QAAQ,EAAE,gBAAgB,IAAI,IAAI;QAC5D,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,IAAI;KAClD,CAAC;AACJ,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { Entity } from "../../../common/abstracts/entity";
|
|
|
2
2
|
import { StripeCustomer } from "../../stripe-customer/entities/stripe-customer.entity";
|
|
3
3
|
import { StripePrice } from "../../stripe-price/entities/stripe-price.entity";
|
|
4
4
|
export type StripeSubscriptionStatus = "active" | "past_due" | "unpaid" | "canceled" | "incomplete" | "incomplete_expired" | "trialing" | "paused";
|
|
5
|
+
export type StripeSubscriptionDiscountDuration = "forever" | "once" | "repeating";
|
|
5
6
|
export type StripeSubscription = Entity & {
|
|
6
7
|
stripeSubscriptionId: string;
|
|
7
8
|
stripeSubscriptionItemId?: string;
|
|
@@ -14,6 +15,12 @@ export type StripeSubscription = Entity & {
|
|
|
14
15
|
trialEnd?: Date;
|
|
15
16
|
pausedAt?: Date;
|
|
16
17
|
quantity: number;
|
|
18
|
+
discountPercentOff?: number;
|
|
19
|
+
discountAmountOff?: number;
|
|
20
|
+
discountCurrency?: string;
|
|
21
|
+
discountDuration?: StripeSubscriptionDiscountDuration;
|
|
22
|
+
discountDurationInMonths?: number;
|
|
23
|
+
discountEnd?: Date;
|
|
17
24
|
stripeCustomer: StripeCustomer;
|
|
18
25
|
stripePrice: StripePrice;
|
|
19
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.entity.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAClC,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,oBAAoB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE9G,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,MAAM,EAAE,wBAAwB,CAAC;IACjC,kBAAkB,EAAE,IAAI,CAAC;IACzB,gBAAgB,EAAE,IAAI,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,IAAI,CAAC;IAElB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"stripe-subscription.entity.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAE9E,MAAM,MAAM,wBAAwB,GAClC,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,GAAG,oBAAoB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE9G,MAAM,MAAM,kCAAkC,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,MAAM,EAAE,wBAAwB,CAAC;IACjC,kBAAkB,EAAE,IAAI,CAAC;IACzB,gBAAgB,EAAE,IAAI,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,CAAC,EAAE,IAAI,CAAC;IAElB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB,QAAQ,EAAE,MAAM,CAAC;IAIjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;IACtD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,WAAW,CAAC,EAAE,IAAI,CAAC;IAEnB,cAAc,EAAE,cAAc,CAAC;IAC/B,WAAW,EAAE,WAAW,CAAC;CAC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.map.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,eAAO,MAAM,qBAAqB,GAAI,QAAQ;IAC5C,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,aAAa,CAAC;CAC9B,KAAG,
|
|
1
|
+
{"version":3,"file":"stripe-subscription.map.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,eAAO,MAAM,qBAAqB,GAAI,QAAQ;IAC5C,IAAI,EAAE,GAAG,CAAC;IACV,MAAM,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,aAAa,CAAC;CAC9B,KAAG,kBAwBH,CAAC"}
|
|
@@ -16,6 +16,12 @@ const mapStripeSubscription = (params) => {
|
|
|
16
16
|
trialEnd: params.data.trialEnd ? new Date(params.data.trialEnd) : undefined,
|
|
17
17
|
pausedAt: params.data.pausedAt ? new Date(params.data.pausedAt) : undefined,
|
|
18
18
|
quantity: Number(params.data.quantity ?? 1),
|
|
19
|
+
discountPercentOff: params.data.discountPercentOff != null ? Number(params.data.discountPercentOff) : undefined,
|
|
20
|
+
discountAmountOff: params.data.discountAmountOff != null ? Number(params.data.discountAmountOff) : undefined,
|
|
21
|
+
discountCurrency: params.data.discountCurrency ?? undefined,
|
|
22
|
+
discountDuration: params.data.discountDuration ?? undefined,
|
|
23
|
+
discountDurationInMonths: params.data.discountDurationInMonths != null ? Number(params.data.discountDurationInMonths) : undefined,
|
|
24
|
+
discountEnd: params.data.discountEnd ? new Date(params.data.discountEnd) : undefined,
|
|
19
25
|
stripeCustomer: undefined,
|
|
20
26
|
stripePrice: undefined,
|
|
21
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.map.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.map.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAItD,MAAM,qBAAqB,GAAG,CAAC,MAIrC,EAAsB,EAAE;IACvB,OAAO;QACL,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB;QACtD,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB;QAC9D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QAC1G,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QACpG,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI;QACzD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,SAAS;KACvB,CAAC;AACJ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"stripe-subscription.map.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.map.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAItD,MAAM,qBAAqB,GAAG,CAAC,MAIrC,EAAsB,EAAE;IACvB,OAAO;QACL,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,oBAAoB;QACtD,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB;QAC9D,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;QAC1B,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QAC1G,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;QACpG,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,IAAI;QACzD,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACjF,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3E,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3C,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/G,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5G,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,SAAS;QAC3D,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,SAAS;QAC3D,wBAAwB,EACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS;QACzG,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACpF,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,SAAS;KACvB,CAAC;AACJ,CAAC,CAAC;AA5BW,QAAA,qBAAqB,yBA4BhC"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import { DataMeta } from "../../../common/interfaces/datamodel.interface";
|
|
2
2
|
export declare const stripeSubscriptionMeta: DataMeta;
|
|
3
|
+
/** Route segment of POST stripe-subscriptions/:subscriptionId/sync */
|
|
4
|
+
export declare const STRIPE_SUBSCRIPTION_SYNC_SEGMENT = "sync";
|
|
5
|
+
/**
|
|
6
|
+
* Stripe `cancellation_details.comment` on an unpaid first-payment attempt cancelled
|
|
7
|
+
* because the GM retried. That subscription never granted anything, so its
|
|
8
|
+
* `customer.subscription.deleted` webhook must not take anything away.
|
|
9
|
+
*/
|
|
10
|
+
export declare const STRIPE_UNPAID_ATTEMPT_CANCELLATION_COMMENT = "unpaid attempt replaced by a new one";
|
|
3
11
|
//# sourceMappingURL=stripe-subscription.meta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.meta.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE1E,eAAO,MAAM,sBAAsB,EAAE,QAKpC,CAAC"}
|
|
1
|
+
{"version":3,"file":"stripe-subscription.meta.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE1E,eAAO,MAAM,sBAAsB,EAAE,QAKpC,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gCAAgC,SAAS,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,yCAAyC,CAAC"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.stripeSubscriptionMeta = void 0;
|
|
3
|
+
exports.STRIPE_UNPAID_ATTEMPT_CANCELLATION_COMMENT = exports.STRIPE_SUBSCRIPTION_SYNC_SEGMENT = exports.stripeSubscriptionMeta = void 0;
|
|
4
4
|
exports.stripeSubscriptionMeta = {
|
|
5
5
|
type: "stripe-subscriptions",
|
|
6
6
|
endpoint: "stripe-subscriptions",
|
|
7
7
|
nodeName: "stripeSubscription",
|
|
8
8
|
labelName: "StripeSubscription",
|
|
9
9
|
};
|
|
10
|
+
/** Route segment of POST stripe-subscriptions/:subscriptionId/sync */
|
|
11
|
+
exports.STRIPE_SUBSCRIPTION_SYNC_SEGMENT = "sync";
|
|
12
|
+
/**
|
|
13
|
+
* Stripe `cancellation_details.comment` on an unpaid first-payment attempt cancelled
|
|
14
|
+
* because the GM retried. That subscription never granted anything, so its
|
|
15
|
+
* `customer.subscription.deleted` webhook must not take anything away.
|
|
16
|
+
*/
|
|
17
|
+
exports.STRIPE_UNPAID_ATTEMPT_CANCELLATION_COMMENT = "unpaid attempt replaced by a new one";
|
|
10
18
|
//# sourceMappingURL=stripe-subscription.meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription.meta.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.meta.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAa;IAC9C,IAAI,EAAE,sBAAsB;IAC5B,QAAQ,EAAE,sBAAsB;IAChC,QAAQ,EAAE,oBAAoB;IAC9B,SAAS,EAAE,oBAAoB;CAChC,CAAC"}
|
|
1
|
+
{"version":3,"file":"stripe-subscription.meta.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/entities/stripe-subscription.meta.ts"],"names":[],"mappings":";;;AAEa,QAAA,sBAAsB,GAAa;IAC9C,IAAI,EAAE,sBAAsB;IAC5B,QAAQ,EAAE,sBAAsB;IAChC,QAAQ,EAAE,oBAAoB;IAC9B,SAAS,EAAE,oBAAoB;CAChC,CAAC;AAEF,sEAAsE;AACzD,QAAA,gCAAgC,GAAG,MAAM,CAAC;AAEvD;;;;GAIG;AACU,QAAA,0CAA0C,GAAG,sCAAsC,CAAC"}
|
|
@@ -9,9 +9,10 @@ export { StripeSubscriptionController } from "./controllers/stripe-subscription.
|
|
|
9
9
|
export { StripeSubscriptionApiService } from "./services/stripe-subscription-api.service";
|
|
10
10
|
export { StripeSubscriptionAdminService } from "./services/stripe-subscription-admin.service";
|
|
11
11
|
export { StripeSubscriptionRepository } from "./repositories/stripe-subscription.repository";
|
|
12
|
-
export { StripeSubscription, StripeSubscriptionStatus } from "./entities/stripe-subscription.entity";
|
|
12
|
+
export { StripeSubscription, StripeSubscriptionDiscountDuration, StripeSubscriptionStatus, } from "./entities/stripe-subscription.entity";
|
|
13
|
+
export { STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND, StripeSubscriptionDiscount, discountFromStripeSubscription, } from "./entities/stripe-subscription.discount";
|
|
13
14
|
export { StripeSubscriptionModel } from "./entities/stripe-subscription.model";
|
|
14
|
-
export { stripeSubscriptionMeta } from "./entities/stripe-subscription.meta";
|
|
15
|
+
export { STRIPE_SUBSCRIPTION_SYNC_SEGMENT, stripeSubscriptionMeta } from "./entities/stripe-subscription.meta";
|
|
15
16
|
export { mapStripeSubscription } from "./entities/stripe-subscription.map";
|
|
16
17
|
export { StripeSubscriptionDTO, StripeSubscriptionPostDTO, StripeSubscriptionPostDataDTO, StripeSubscriptionPostAttributesDTO, StripeSubscriptionCancelDTO, StripeSubscriptionCancelDataDTO, StripeSubscriptionCancelAttributesDTO, StripeSubscriptionChangePlanDTO, StripeSubscriptionChangePlanDataDTO, StripeSubscriptionChangePlanAttributesDTO, } from "./dtos/stripe-subscription.dto";
|
|
17
18
|
export { StripeSubscriptionSerialiser } from "./serialisers/stripe-subscription.serialiser";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/stripe-subscription/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAG5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAG9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAG7F,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/stripe-subscription/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAGxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAG5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAC1F,OAAO,EAAE,8BAA8B,EAAE,MAAM,8CAA8C,CAAC;AAG9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAG7F,OAAO,EACL,kBAAkB,EAClB,kCAAkC,EAClC,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,6BAA6B,EAC7B,mCAAmC,EACnC,2BAA2B,EAC3B,+BAA+B,EAC/B,qCAAqC,EACrC,+BAA+B,EAC/B,mCAAmC,EACnC,yCAAyC,GAC1C,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Use these exports when importing stripe-subscription functionality from other modules.
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.StripeSubscriptionSerialiser = exports.StripeSubscriptionChangePlanAttributesDTO = exports.StripeSubscriptionChangePlanDataDTO = exports.StripeSubscriptionChangePlanDTO = exports.StripeSubscriptionCancelAttributesDTO = exports.StripeSubscriptionCancelDataDTO = exports.StripeSubscriptionCancelDTO = exports.StripeSubscriptionPostAttributesDTO = exports.StripeSubscriptionPostDataDTO = exports.StripeSubscriptionPostDTO = exports.StripeSubscriptionDTO = exports.mapStripeSubscription = exports.stripeSubscriptionMeta = exports.StripeSubscriptionModel = exports.StripeSubscriptionRepository = exports.StripeSubscriptionAdminService = exports.StripeSubscriptionApiService = exports.StripeSubscriptionController = exports.StripeSubscriptionModule = void 0;
|
|
9
|
+
exports.StripeSubscriptionSerialiser = exports.StripeSubscriptionChangePlanAttributesDTO = exports.StripeSubscriptionChangePlanDataDTO = exports.StripeSubscriptionChangePlanDTO = exports.StripeSubscriptionCancelAttributesDTO = exports.StripeSubscriptionCancelDataDTO = exports.StripeSubscriptionCancelDTO = exports.StripeSubscriptionPostAttributesDTO = exports.StripeSubscriptionPostDataDTO = exports.StripeSubscriptionPostDTO = exports.StripeSubscriptionDTO = exports.mapStripeSubscription = exports.stripeSubscriptionMeta = exports.STRIPE_SUBSCRIPTION_SYNC_SEGMENT = exports.StripeSubscriptionModel = exports.discountFromStripeSubscription = exports.STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND = exports.StripeSubscriptionRepository = exports.StripeSubscriptionAdminService = exports.StripeSubscriptionApiService = exports.StripeSubscriptionController = exports.StripeSubscriptionModule = void 0;
|
|
10
10
|
// Module
|
|
11
11
|
var stripe_subscription_module_1 = require("./stripe-subscription.module");
|
|
12
12
|
Object.defineProperty(exports, "StripeSubscriptionModule", { enumerable: true, get: function () { return stripe_subscription_module_1.StripeSubscriptionModule; } });
|
|
@@ -21,9 +21,13 @@ Object.defineProperty(exports, "StripeSubscriptionAdminService", { enumerable: t
|
|
|
21
21
|
// Repositories
|
|
22
22
|
var stripe_subscription_repository_1 = require("./repositories/stripe-subscription.repository");
|
|
23
23
|
Object.defineProperty(exports, "StripeSubscriptionRepository", { enumerable: true, get: function () { return stripe_subscription_repository_1.StripeSubscriptionRepository; } });
|
|
24
|
+
var stripe_subscription_discount_1 = require("./entities/stripe-subscription.discount");
|
|
25
|
+
Object.defineProperty(exports, "STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND", { enumerable: true, get: function () { return stripe_subscription_discount_1.STRIPE_SUBSCRIPTION_DISCOUNT_EXPAND; } });
|
|
26
|
+
Object.defineProperty(exports, "discountFromStripeSubscription", { enumerable: true, get: function () { return stripe_subscription_discount_1.discountFromStripeSubscription; } });
|
|
24
27
|
var stripe_subscription_model_1 = require("./entities/stripe-subscription.model");
|
|
25
28
|
Object.defineProperty(exports, "StripeSubscriptionModel", { enumerable: true, get: function () { return stripe_subscription_model_1.StripeSubscriptionModel; } });
|
|
26
29
|
var stripe_subscription_meta_1 = require("./entities/stripe-subscription.meta");
|
|
30
|
+
Object.defineProperty(exports, "STRIPE_SUBSCRIPTION_SYNC_SEGMENT", { enumerable: true, get: function () { return stripe_subscription_meta_1.STRIPE_SUBSCRIPTION_SYNC_SEGMENT; } });
|
|
27
31
|
Object.defineProperty(exports, "stripeSubscriptionMeta", { enumerable: true, get: function () { return stripe_subscription_meta_1.stripeSubscriptionMeta; } });
|
|
28
32
|
var stripe_subscription_map_1 = require("./entities/stripe-subscription.map");
|
|
29
33
|
Object.defineProperty(exports, "mapStripeSubscription", { enumerable: true, get: function () { return stripe_subscription_map_1.mapStripeSubscription; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/stripe-subscription/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,SAAS;AACT,2EAAwE;AAA/D,sIAAA,wBAAwB,OAAA;AAEjC,cAAc;AACd,+FAA4F;AAAnF,8IAAA,4BAA4B,OAAA;AAErC,WAAW;AACX,8FAA0F;AAAjF,+IAAA,4BAA4B,OAAA;AACrC,kGAA8F;AAArF,mJAAA,8BAA8B,OAAA;AAEvC,eAAe;AACf,gGAA6F;AAApF,8IAAA,4BAA4B,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/stripe-subscription/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,SAAS;AACT,2EAAwE;AAA/D,sIAAA,wBAAwB,OAAA;AAEjC,cAAc;AACd,+FAA4F;AAAnF,8IAAA,4BAA4B,OAAA;AAErC,WAAW;AACX,8FAA0F;AAAjF,+IAAA,4BAA4B,OAAA;AACrC,kGAA8F;AAArF,mJAAA,8BAA8B,OAAA;AAEvC,eAAe;AACf,gGAA6F;AAApF,8IAAA,4BAA4B,OAAA;AAQrC,wFAIiD;AAH/C,mJAAA,mCAAmC,OAAA;AAEnC,8IAAA,8BAA8B,OAAA;AAEhC,kFAA+E;AAAtE,oIAAA,uBAAuB,OAAA;AAChC,gFAA+G;AAAtG,4IAAA,gCAAgC,OAAA;AAAE,kIAAA,sBAAsB,OAAA;AACjE,8EAA2E;AAAlE,gIAAA,qBAAqB,OAAA;AAE9B,OAAO;AACP,0EAWwC;AAVtC,gIAAA,qBAAqB,OAAA;AACrB,oIAAA,yBAAyB,OAAA;AACzB,wIAAA,6BAA6B,OAAA;AAC7B,8IAAA,mCAAmC,OAAA;AACnC,sIAAA,2BAA2B,OAAA;AAC3B,0IAAA,+BAA+B,OAAA;AAC/B,gJAAA,qCAAqC,OAAA;AACrC,0IAAA,+BAA+B,OAAA;AAC/B,8IAAA,mCAAmC,OAAA;AACnC,oJAAA,yCAAyC,OAAA;AAG3C,cAAc;AACd,+FAA4F;AAAnF,8IAAA,4BAA4B,OAAA"}
|