@carlonicora/nestjs-neo4jsonapi 8.10.2 → 8.11.1
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/agents/community.detector/services/community.detector.service.d.ts +33 -1
- package/dist/agents/community.detector/services/community.detector.service.d.ts.map +1 -1
- package/dist/agents/community.detector/services/community.detector.service.js +126 -36
- package/dist/agents/community.detector/services/community.detector.service.js.map +1 -1
- package/dist/agents/community.summariser/cron/community.summariser.cron.d.ts +20 -3
- package/dist/agents/community.summariser/cron/community.summariser.cron.d.ts.map +1 -1
- package/dist/agents/community.summariser/cron/community.summariser.cron.js +35 -4
- package/dist/agents/community.summariser/cron/community.summariser.cron.js.map +1 -1
- package/dist/agents/community.summariser/helpers/community-scope-filter.d.ts +19 -0
- package/dist/agents/community.summariser/helpers/community-scope-filter.d.ts.map +1 -0
- package/dist/agents/community.summariser/helpers/community-scope-filter.js +27 -0
- package/dist/agents/community.summariser/helpers/community-scope-filter.js.map +1 -0
- package/dist/agents/community.summariser/processors/community.summariser.processor.d.ts +11 -2
- package/dist/agents/community.summariser/processors/community.summariser.processor.d.ts.map +1 -1
- package/dist/agents/community.summariser/processors/community.summariser.processor.js +24 -2
- package/dist/agents/community.summariser/processors/community.summariser.processor.js.map +1 -1
- package/dist/common/enums/ai.status.d.ts +7 -1
- package/dist/common/enums/ai.status.d.ts.map +1 -1
- package/dist/common/enums/ai.status.js +6 -0
- package/dist/common/enums/ai.status.js.map +1 -1
- package/dist/common/tokens.d.ts +12 -0
- package/dist/common/tokens.d.ts.map +1 -1
- package/dist/common/tokens.js +3 -1
- package/dist/common/tokens.js.map +1 -1
- package/dist/foundations/assistant/index.d.ts +1 -0
- package/dist/foundations/assistant/index.d.ts.map +1 -1
- package/dist/foundations/assistant/index.js +3 -1
- package/dist/foundations/assistant/index.js.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.d.ts +13 -0
- package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.js +12 -0
- package/dist/foundations/assistant/services/assistant.service.js.map +1 -1
- package/dist/foundations/chunk/chunk.module.d.ts.map +1 -1
- package/dist/foundations/chunk/chunk.module.js +3 -1
- package/dist/foundations/chunk/chunk.module.js.map +1 -1
- package/dist/foundations/chunk/index.d.ts +1 -0
- package/dist/foundations/chunk/index.d.ts.map +1 -1
- package/dist/foundations/chunk/index.js +3 -1
- package/dist/foundations/chunk/index.js.map +1 -1
- package/dist/foundations/chunk/processors/chunk.processor.d.ts.map +1 -1
- package/dist/foundations/chunk/processors/chunk.processor.js +1 -0
- package/dist/foundations/chunk/processors/chunk.processor.js.map +1 -1
- package/dist/foundations/chunk/repositories/chunk-status.repository.d.ts +44 -0
- package/dist/foundations/chunk/repositories/chunk-status.repository.d.ts.map +1 -0
- package/dist/foundations/chunk/repositories/chunk-status.repository.js +76 -0
- package/dist/foundations/chunk/repositories/chunk-status.repository.js.map +1 -0
- package/dist/foundations/chunk/services/chunk.service.d.ts +32 -0
- package/dist/foundations/chunk/services/chunk.service.d.ts.map +1 -1
- package/dist/foundations/chunk/services/chunk.service.js +40 -2
- package/dist/foundations/chunk/services/chunk.service.js.map +1 -1
- package/dist/foundations/community/repositories/community.repository.d.ts +21 -0
- package/dist/foundations/community/repositories/community.repository.d.ts.map +1 -1
- package/dist/foundations/community/repositories/community.repository.js +51 -0
- package/dist/foundations/community/repositories/community.repository.js.map +1 -1
- package/dist/foundations/stripe-invoice/repositories/stripe-invoice.repository.d.ts +8 -3
- package/dist/foundations/stripe-invoice/repositories/stripe-invoice.repository.d.ts.map +1 -1
- package/dist/foundations/stripe-invoice/repositories/stripe-invoice.repository.js +35 -29
- package/dist/foundations/stripe-invoice/repositories/stripe-invoice.repository.js.map +1 -1
- package/dist/foundations/stripe-price/entities/stripe-price.map.d.ts.map +1 -1
- package/dist/foundations/stripe-price/entities/stripe-price.map.js +2 -1
- package/dist/foundations/stripe-price/entities/stripe-price.map.js.map +1 -1
- package/dist/foundations/stripe-product/repositories/stripe-product.repository.d.ts +2 -1
- package/dist/foundations/stripe-product/repositories/stripe-product.repository.d.ts.map +1 -1
- package/dist/foundations/stripe-product/repositories/stripe-product.repository.js +4 -1
- package/dist/foundations/stripe-product/repositories/stripe-product.repository.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/feature-sync.service.d.ts +17 -0
- package/dist/foundations/stripe-subscription/services/feature-sync.service.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/services/feature-sync.service.js +95 -17
- package/dist/foundations/stripe-subscription/services/feature-sync.service.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +3 -18
- 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 +20 -5
- 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 +6 -1
- 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 +10 -3
- 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 +1 -1
- package/dist/foundations/stripe-subscription/services/subscription-payment-confirmation.js +1 -1
- package/dist/foundations/stripe-webhook/controllers/stripe-webhook.controller.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/controllers/stripe-webhook.controller.js +2 -0
- package/dist/foundations/stripe-webhook/controllers/stripe-webhook.controller.js.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts +1 -0
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +31 -9
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
- package/package.json +1 -1
|
@@ -141,10 +141,15 @@ let StripeInvoiceRepository = class StripeInvoiceRepository {
|
|
|
141
141
|
return this.neo4j.readOne(query);
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
|
-
* Create a new invoice
|
|
144
|
+
* Create a new invoice, or update it when it already exists
|
|
145
145
|
*
|
|
146
|
-
*
|
|
147
|
-
* and optional FOR_SUBSCRIPTION relationship to Subscription.
|
|
146
|
+
* MERGEs the Invoice node on stripeInvoiceId with BELONGS_TO relationship to
|
|
147
|
+
* BillingCustomer and optional FOR_SUBSCRIPTION relationship to Subscription.
|
|
148
|
+
* Stripe sends invoice.created, invoice.finalized and invoice.paid for one
|
|
149
|
+
* invoice within milliseconds and the worker processes them in parallel: a
|
|
150
|
+
* find-then-CREATE lets two of them both create it, and the uniqueness
|
|
151
|
+
* constraint fails the second. On a match the changing fields are updated, as
|
|
152
|
+
* updateByStripeInvoiceId does.
|
|
148
153
|
*
|
|
149
154
|
* @param params - Creation parameters
|
|
150
155
|
* @param params.stripeCustomerId - Stripe customer ID to link to
|
|
@@ -199,37 +204,38 @@ let StripeInvoiceRepository = class StripeInvoiceRepository {
|
|
|
199
204
|
? `MATCH (${stripe_subscription_meta_1.stripeSubscriptionMeta.nodeName}:${stripe_subscription_meta_1.stripeSubscriptionMeta.labelName} {id: $subscriptionId})`
|
|
200
205
|
: "";
|
|
201
206
|
const subscriptionRelation = params.subscriptionId
|
|
202
|
-
? `
|
|
207
|
+
? `MERGE (${stripe_invoice_meta_1.stripeInvoiceMeta.nodeName})-[:FOR_SUBSCRIPTION]->(${stripe_subscription_meta_1.stripeSubscriptionMeta.nodeName})`
|
|
203
208
|
: "";
|
|
209
|
+
const invoice = stripe_invoice_meta_1.stripeInvoiceMeta.nodeName;
|
|
204
210
|
query.query = `
|
|
205
211
|
MATCH (${stripe_customer_meta_1.stripeCustomerMeta.nodeName}:${stripe_customer_meta_1.stripeCustomerMeta.labelName} {id: $stripeCustomerId})
|
|
206
212
|
${subscriptionMatch}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
213
|
+
MERGE (${invoice}:${stripe_invoice_meta_1.stripeInvoiceMeta.labelName} {stripeInvoiceId: $stripeInvoiceId})
|
|
214
|
+
ON CREATE SET
|
|
215
|
+
${invoice}.id = $id,
|
|
216
|
+
${invoice}.currency = $currency,
|
|
217
|
+
${invoice}.subtotal = $subtotal,
|
|
218
|
+
${invoice}.total = $total,
|
|
219
|
+
${invoice}.tax = $tax,
|
|
220
|
+
${invoice}.periodStart = datetime($periodStart),
|
|
221
|
+
${invoice}.periodEnd = datetime($periodEnd),
|
|
222
|
+
${invoice}.dueDate = CASE WHEN $dueDate IS NOT NULL THEN datetime($dueDate) ELSE null END,
|
|
223
|
+
${invoice}.createdAt = datetime()
|
|
224
|
+
SET
|
|
225
|
+
${invoice}.stripeInvoiceNumber = $stripeInvoiceNumber,
|
|
226
|
+
${invoice}.stripeHostedInvoiceUrl = $stripeHostedInvoiceUrl,
|
|
227
|
+
${invoice}.stripePdfUrl = $stripePdfUrl,
|
|
228
|
+
${invoice}.status = $status,
|
|
229
|
+
${invoice}.amountDue = $amountDue,
|
|
230
|
+
${invoice}.amountPaid = $amountPaid,
|
|
231
|
+
${invoice}.amountRemaining = $amountRemaining,
|
|
232
|
+
${invoice}.paidAt = CASE WHEN $paidAt IS NOT NULL THEN datetime($paidAt) ELSE null END,
|
|
233
|
+
${invoice}.attemptCount = $attemptCount,
|
|
234
|
+
${invoice}.attempted = $attempted,
|
|
235
|
+
${invoice}.updatedAt = datetime()
|
|
236
|
+
MERGE (${invoice})-[:BELONGS_TO]->(${stripe_customer_meta_1.stripeCustomerMeta.nodeName})
|
|
231
237
|
${subscriptionRelation}
|
|
232
|
-
RETURN ${
|
|
238
|
+
RETURN ${invoice}
|
|
233
239
|
`;
|
|
234
240
|
return this.neo4j.writeOne(query);
|
|
235
241
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-invoice.repository.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-invoice/repositories/stripe-invoice.repository.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stripe-invoice.repository.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-invoice/repositories/stripe-invoice.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-price.map.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-price/entities/stripe-price.map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,eAAO,MAAM,cAAc,GAAI,QAAQ;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,KAAG,
|
|
1
|
+
{"version":3,"file":"stripe-price.map.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-price/entities/stripe-price.map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,eAAO,MAAM,cAAc,GAAI,QAAQ;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,KAAG,WAsBjG,CAAC"}
|
|
@@ -18,7 +18,8 @@ const mapStripePrice = (params) => {
|
|
|
18
18
|
metadata: params.data.metadata,
|
|
19
19
|
description: params.data.description,
|
|
20
20
|
features: params.data.features,
|
|
21
|
-
|
|
21
|
+
// 0 is a real allowance (a plan without AI credits), not "not configured"
|
|
22
|
+
token: params.data.token !== undefined && params.data.token !== null ? Number(params.data.token) : undefined,
|
|
22
23
|
isTrial: params.data.isTrial === true,
|
|
23
24
|
stripeProduct: undefined,
|
|
24
25
|
feature: [], // Initialize relationship array (naming follows Company pattern)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-price.map.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-price/entities/stripe-price.map.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAItD,MAAM,cAAc,GAAG,CAAC,MAAgE,EAAe,EAAE;IAC9G,OAAO;QACL,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa;QACxC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;QACnC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/E,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB;QAChD,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,SAAS;QACnH,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB;QAClD,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;QACpC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"stripe-price.map.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-price/entities/stripe-price.map.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAItD,MAAM,cAAc,GAAG,CAAC,MAAgE,EAAe,EAAE;IAC9G,OAAO;QACL,GAAG,IAAA,kBAAS,EAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QACrC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa;QACxC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI;QACnC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/E,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB;QAChD,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,SAAS;QACnH,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB;QAClD,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;QAChC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;QACpC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;QAC9B,0EAA0E;QAC1E,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5G,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI;QACrC,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,EAAE,EAAE,iEAAiE;KAC/E,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,cAAc,kBAsBzB"}
|
|
@@ -39,7 +39,8 @@ export declare class StripeProductRepository implements OnModuleInit {
|
|
|
39
39
|
* Find all products
|
|
40
40
|
*
|
|
41
41
|
* @param params - Optional query parameters
|
|
42
|
-
* @param params.active - Optional filter by active status
|
|
42
|
+
* @param params.active - Optional filter by active status. `true` also keeps only
|
|
43
|
+
* the active prices of each product: an archived price is not on sale.
|
|
43
44
|
* @returns Array of products ordered by name
|
|
44
45
|
*/
|
|
45
46
|
findAll(params?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-product.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-product/repositories/stripe-product.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIlE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBACa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAEhD;;;;OAIG;IACG,YAAY;IAUlB
|
|
1
|
+
{"version":3,"file":"stripe-product.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-product/repositories/stripe-product.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAIlE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBACa,uBAAwB,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAEhD;;;;OAIG;IACG,YAAY;IAUlB;;;;;;;OAOG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAyBtE;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBrE;;;;;;OAMG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgB/F;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,aAAa,CAAC;IA+B1B;;;;;;;;;;OAUG;IACG,MAAM,CAAC,MAAM,EAAE;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,aAAa,CAAC;IAoC1B;;;;;;;;;;;;OAYG;IACG,uBAAuB,CAAC,MAAM,EAAE;QACpC,eAAe,EAAE,MAAM,CAAC;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,aAAa,CAAC;IAoC1B;;;;;;;;OAQG;IACG,MAAM,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAcpD"}
|
|
@@ -62,7 +62,8 @@ let StripeProductRepository = class StripeProductRepository {
|
|
|
62
62
|
* Find all products
|
|
63
63
|
*
|
|
64
64
|
* @param params - Optional query parameters
|
|
65
|
-
* @param params.active - Optional filter by active status
|
|
65
|
+
* @param params.active - Optional filter by active status. `true` also keeps only
|
|
66
|
+
* the active prices of each product: an archived price is not on sale.
|
|
66
67
|
* @returns Array of products ordered by name
|
|
67
68
|
*/
|
|
68
69
|
async findAll(params) {
|
|
@@ -73,10 +74,12 @@ let StripeProductRepository = class StripeProductRepository {
|
|
|
73
74
|
whereParams.push(`${stripe_product_meta_1.stripeProductMeta.nodeName}.active = $active`);
|
|
74
75
|
}
|
|
75
76
|
const where = whereParams.length > 0 ? `WHERE ${whereParams.join(" AND ")}` : "";
|
|
77
|
+
const priceWhere = params?.active === true ? `WHERE ${stripe_product_meta_1.stripeProductMeta.nodeName}_${stripe_price_meta_1.stripePriceMeta.nodeName}.active = true` : "";
|
|
76
78
|
query.query = `
|
|
77
79
|
MATCH (${stripe_product_meta_1.stripeProductMeta.nodeName}:${stripe_product_meta_1.stripeProductMeta.labelName})
|
|
78
80
|
${where}
|
|
79
81
|
OPTIONAL MATCH (${stripe_product_meta_1.stripeProductMeta.nodeName})<-[:BELONGS_TO]-(${stripe_product_meta_1.stripeProductMeta.nodeName}_${stripe_price_meta_1.stripePriceMeta.nodeName}:${stripe_price_meta_1.stripePriceMeta.labelName})
|
|
82
|
+
${priceWhere}
|
|
80
83
|
RETURN ${stripe_product_meta_1.stripeProductMeta.nodeName}, ${stripe_product_meta_1.stripeProductMeta.nodeName}_${stripe_price_meta_1.stripePriceMeta.nodeName}
|
|
81
84
|
ORDER BY ${stripe_product_meta_1.stripeProductMeta.nodeName}.name
|
|
82
85
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-product.repository.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-product/repositories/stripe-product.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,mCAAoC;AACpC,+CAAmD;AACnD,qFAAgF;AAEhF,yEAAoE;AACpE,2EAAsE;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YAA6B,KAAmB;QAAnB,UAAK,GAAL,KAAK,CAAc;IAAG,CAAC;IAEpD;;;;OAIG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE,qBAAqB,uCAAiB,CAAC,QAAQ,0BAA0B,uCAAiB,CAAC,QAAQ,IAAI,uCAAiB,CAAC,SAAS,aAAa,uCAAiB,CAAC,QAAQ,eAAe;SAChM,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;YACxB,KAAK,EAAE,qBAAqB,uCAAiB,CAAC,QAAQ,uCAAuC,uCAAiB,CAAC,QAAQ,IAAI,uCAAiB,CAAC,SAAS,aAAa,uCAAiB,CAAC,QAAQ,4BAA4B;SAC1N,CAAC,CAAC;IACL,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"stripe-product.repository.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-product/repositories/stripe-product.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,5 +29,22 @@ export declare class FeatureSyncService {
|
|
|
29
29
|
removeFeaturesOnSubscriptionEnd(params: {
|
|
30
30
|
stripeSubscriptionId: string;
|
|
31
31
|
}): Promise<FeatureSyncResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Replace price features on company when a subscription changes price (upgrade or downgrade)
|
|
34
|
+
* Adds the new price's features, then removes the previous price's features the new price
|
|
35
|
+
* lacks. SMART REMOVAL: a feature still granted by another active subscription is kept.
|
|
36
|
+
*
|
|
37
|
+
* @param params.stripeSubscriptionId - Stripe subscription ID, already synced to the new price
|
|
38
|
+
* @param params.previousStripePriceId - Stripe price ID the subscription had before the change
|
|
39
|
+
*/
|
|
40
|
+
replaceFeaturesOnPlanChange(params: {
|
|
41
|
+
stripeSubscriptionId: string;
|
|
42
|
+
previousStripePriceId: string;
|
|
43
|
+
}): Promise<FeatureSyncResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Collect the feature IDs granted by a customer's active recurring subscriptions,
|
|
46
|
+
* excluding one subscription (the one being ended or changed)
|
|
47
|
+
*/
|
|
48
|
+
private findFeatureIdsOfOtherActiveSubscriptions;
|
|
32
49
|
}
|
|
33
50
|
//# sourceMappingURL=feature-sync.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-sync.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/feature-sync.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAE9F,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,sBAAsB,EAAE,4BAA4B,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,MAAM,EAAE,iBAAiB;IAG5C;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyDjG;;;OAGG;IACG,+BAA+B,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-sync.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/feature-sync.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAE9F,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,sBAAsB,EAAE,4BAA4B,EACpD,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,qBAAqB,EAC5C,MAAM,EAAE,iBAAiB;IAG5C;;;OAGG;IACG,qBAAqB,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyDjG;;;OAGG;IACG,+BAA+B,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0E3G;;;;;;;OAOG;IACG,2BAA2B,CAAC,MAAM,EAAE;QACxC,oBAAoB,EAAE,MAAM,CAAC;QAC7B,qBAAqB,EAAE,MAAM,CAAC;KAC/B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4E9B;;;OAGG;YACW,wCAAwC;CAwBvD"}
|
|
@@ -106,25 +106,12 @@ let FeatureSyncService = class FeatureSyncService {
|
|
|
106
106
|
return { success: false, reason: "Company not found" };
|
|
107
107
|
}
|
|
108
108
|
// 5. SMART REMOVAL LOGIC:
|
|
109
|
-
// a.
|
|
110
|
-
const otherActiveFeatureIds =
|
|
111
|
-
const allSubscriptions = await this.subscriptionRepository.findActiveByStripeCustomerId({
|
|
109
|
+
// a. Collect features granted by all OTHER active subscriptions of this customer
|
|
110
|
+
const otherActiveFeatureIds = await this.findFeatureIdsOfOtherActiveSubscriptions({
|
|
112
111
|
stripeCustomerId: subscription.stripeCustomer?.stripeCustomerId ?? "",
|
|
112
|
+
excludeStripeSubscriptionId: params.stripeSubscriptionId,
|
|
113
113
|
});
|
|
114
|
-
// b.
|
|
115
|
-
for (const otherSub of allSubscriptions) {
|
|
116
|
-
// Exclude the subscription being cancelled
|
|
117
|
-
if (otherSub.stripeSubscriptionId === params.stripeSubscriptionId)
|
|
118
|
-
continue;
|
|
119
|
-
// Skip non-recurring
|
|
120
|
-
if (otherSub.stripePrice?.priceType !== "recurring")
|
|
121
|
-
continue;
|
|
122
|
-
const otherPrice = await this.stripePriceRepository.findById({
|
|
123
|
-
id: otherSub.stripePrice.id,
|
|
124
|
-
});
|
|
125
|
-
otherPrice?.feature?.forEach((f) => otherActiveFeatureIds.add(f.id));
|
|
126
|
-
}
|
|
127
|
-
// c. Only remove features NOT in that set
|
|
114
|
+
// b. Only remove features NOT in that set
|
|
128
115
|
const featuresToRemove = priceFeatureIds.filter((id) => !otherActiveFeatureIds.has(id));
|
|
129
116
|
if (featuresToRemove.length === 0) {
|
|
130
117
|
this.logger.debug(`All features for price ${subscription.stripePrice.id} are covered by other active subscriptions - skipping removal`);
|
|
@@ -143,6 +130,97 @@ let FeatureSyncService = class FeatureSyncService {
|
|
|
143
130
|
featuresRemoved: removedFeatureIds,
|
|
144
131
|
};
|
|
145
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Replace price features on company when a subscription changes price (upgrade or downgrade)
|
|
135
|
+
* Adds the new price's features, then removes the previous price's features the new price
|
|
136
|
+
* lacks. SMART REMOVAL: a feature still granted by another active subscription is kept.
|
|
137
|
+
*
|
|
138
|
+
* @param params.stripeSubscriptionId - Stripe subscription ID, already synced to the new price
|
|
139
|
+
* @param params.previousStripePriceId - Stripe price ID the subscription had before the change
|
|
140
|
+
*/
|
|
141
|
+
async replaceFeaturesOnPlanChange(params) {
|
|
142
|
+
// 1. Find subscription with its (new) price
|
|
143
|
+
const subscription = await this.subscriptionRepository.findByStripeSubscriptionId({
|
|
144
|
+
stripeSubscriptionId: params.stripeSubscriptionId,
|
|
145
|
+
});
|
|
146
|
+
if (!subscription) {
|
|
147
|
+
this.logger.warn(`Subscription ${params.stripeSubscriptionId} not found for plan change feature sync`);
|
|
148
|
+
return { success: false, reason: "Subscription not found" };
|
|
149
|
+
}
|
|
150
|
+
// 2. Skip if not recurring (priceType !== "recurring")
|
|
151
|
+
if (subscription.stripePrice?.priceType !== "recurring") {
|
|
152
|
+
this.logger.debug(`Skipping plan change feature sync for non-recurring price ${subscription.stripePrice?.id}`);
|
|
153
|
+
return { success: true, reason: "Not a recurring subscription" };
|
|
154
|
+
}
|
|
155
|
+
// 3. Get the new and the previous price's features
|
|
156
|
+
const newPrice = await this.stripePriceRepository.findById({
|
|
157
|
+
id: subscription.stripePrice.id,
|
|
158
|
+
});
|
|
159
|
+
const newFeatureIds = newPrice?.feature?.map((f) => f.id) ?? [];
|
|
160
|
+
const previousPrice = await this.stripePriceRepository.findByStripePriceId({
|
|
161
|
+
stripePriceId: params.previousStripePriceId,
|
|
162
|
+
});
|
|
163
|
+
const previousFeatureIds = previousPrice?.feature?.map((f) => f.id) ?? [];
|
|
164
|
+
// 4. Find company
|
|
165
|
+
const company = await this.companyRepository.findByStripeCustomerId({
|
|
166
|
+
stripeCustomerId: subscription.stripeCustomer?.id ?? "",
|
|
167
|
+
});
|
|
168
|
+
if (!company) {
|
|
169
|
+
this.logger.error(`Company not found for subscription ${params.stripeSubscriptionId}`);
|
|
170
|
+
return { success: false, reason: "Company not found" };
|
|
171
|
+
}
|
|
172
|
+
// 5. Add the new price's features - additive
|
|
173
|
+
const addedFeatureIds = newFeatureIds.length > 0
|
|
174
|
+
? await this.companyRepository.addFeatures({ companyId: company.id, featureIds: newFeatureIds })
|
|
175
|
+
: [];
|
|
176
|
+
// 6. Remove the previous price's features the new price lacks, unless another active subscription grants them
|
|
177
|
+
const candidateFeatureIds = previousFeatureIds.filter((id) => !newFeatureIds.includes(id));
|
|
178
|
+
let removedFeatureIds = [];
|
|
179
|
+
if (candidateFeatureIds.length > 0) {
|
|
180
|
+
const otherActiveFeatureIds = await this.findFeatureIdsOfOtherActiveSubscriptions({
|
|
181
|
+
stripeCustomerId: subscription.stripeCustomer?.stripeCustomerId ?? "",
|
|
182
|
+
excludeStripeSubscriptionId: params.stripeSubscriptionId,
|
|
183
|
+
});
|
|
184
|
+
const featuresToRemove = candidateFeatureIds.filter((id) => !otherActiveFeatureIds.has(id));
|
|
185
|
+
if (featuresToRemove.length > 0) {
|
|
186
|
+
removedFeatureIds = await this.companyRepository.removeFeatures({
|
|
187
|
+
companyId: company.id,
|
|
188
|
+
featureIds: featuresToRemove,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
// 7. Log and return result
|
|
193
|
+
this.logger.log(`Feature sync on plan change: Company ${company.id} - added ${addedFeatureIds.length}, removed ${removedFeatureIds.length} features (${params.previousStripePriceId} -> price ${subscription.stripePrice.id})`);
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
companyId: company.id,
|
|
197
|
+
featuresAdded: addedFeatureIds,
|
|
198
|
+
featuresRemoved: removedFeatureIds,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Collect the feature IDs granted by a customer's active recurring subscriptions,
|
|
203
|
+
* excluding one subscription (the one being ended or changed)
|
|
204
|
+
*/
|
|
205
|
+
async findFeatureIdsOfOtherActiveSubscriptions(params) {
|
|
206
|
+
const featureIds = new Set();
|
|
207
|
+
const allSubscriptions = await this.subscriptionRepository.findActiveByStripeCustomerId({
|
|
208
|
+
stripeCustomerId: params.stripeCustomerId,
|
|
209
|
+
});
|
|
210
|
+
for (const otherSub of allSubscriptions) {
|
|
211
|
+
// Exclude the subscription being ended or changed
|
|
212
|
+
if (otherSub.stripeSubscriptionId === params.excludeStripeSubscriptionId)
|
|
213
|
+
continue;
|
|
214
|
+
// Skip non-recurring
|
|
215
|
+
if (otherSub.stripePrice?.priceType !== "recurring")
|
|
216
|
+
continue;
|
|
217
|
+
const otherPrice = await this.stripePriceRepository.findById({
|
|
218
|
+
id: otherSub.stripePrice.id,
|
|
219
|
+
});
|
|
220
|
+
otherPrice?.feature?.forEach((f) => featureIds.add(f.id));
|
|
221
|
+
}
|
|
222
|
+
return featureIds;
|
|
223
|
+
}
|
|
146
224
|
};
|
|
147
225
|
exports.FeatureSyncService = FeatureSyncService;
|
|
148
226
|
exports.FeatureSyncService = FeatureSyncService = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-sync.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/feature-sync.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feature-sync.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/feature-sync.service.ts"],"names":[],"mappings":"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"}
|
package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts
CHANGED
|
@@ -15,23 +15,6 @@ export interface CreateSubscriptionResult {
|
|
|
15
15
|
paymentIntentId: string | null;
|
|
16
16
|
requiresAction: boolean;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
19
|
-
* StripeSubscriptionAdminService
|
|
20
|
-
*
|
|
21
|
-
* Manages subscription lifecycle for billing customers, coordinating between Stripe and the local database.
|
|
22
|
-
* Provides comprehensive subscription management including creation, cancellation,
|
|
23
|
-
* plan changes, and proration previews.
|
|
24
|
-
*
|
|
25
|
-
* Key Features:
|
|
26
|
-
* - Create subscriptions with optional trials and custom quantities
|
|
27
|
-
* - Cancel subscriptions (immediately or at period end)
|
|
28
|
-
* - Change subscription plans with automatic proration
|
|
29
|
-
* - Preview proration amounts before plan changes
|
|
30
|
-
* - Sync subscription data from Stripe webhooks
|
|
31
|
-
* - Filter subscriptions by status (active, canceled, past_due, etc.)
|
|
32
|
-
*
|
|
33
|
-
* All operations update both Stripe and the local Neo4j database to maintain consistency.
|
|
34
|
-
*/
|
|
35
18
|
export declare class StripeSubscriptionAdminService extends AbstractService<StripeSubscription, typeof StripeSubscriptionDescriptor.relationships> {
|
|
36
19
|
private readonly subscriptionRepository;
|
|
37
20
|
private readonly stripeCustomerRepository;
|
|
@@ -184,7 +167,9 @@ export declare class StripeSubscriptionAdminService extends AbstractService<Stri
|
|
|
184
167
|
/**
|
|
185
168
|
* Change subscription plan
|
|
186
169
|
*
|
|
187
|
-
* Updates the subscription to a new price
|
|
170
|
+
* Updates the subscription to a new price. A paid change invoices and charges the
|
|
171
|
+
* prorated difference at once; a trial upgrade ends the trial and charges the full price.
|
|
172
|
+
* A pending cancellation at period end is cleared.
|
|
188
173
|
*
|
|
189
174
|
* @param params - Parameters
|
|
190
175
|
* @param params.id - Subscription ID
|
package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-subscription-admin.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/stripe-subscription-admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAoB,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAEtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAEnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAGjF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"stripe-subscription-admin.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-subscription/services/stripe-subscription-admin.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAoB,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAEjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,wBAAwB,EAAE,MAAM,4DAA4D,CAAC;AAEtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAChG,OAAO,EAAE,+BAA+B,EAAE,MAAM,kEAAkE,CAAC;AAEnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAC;AAC9F,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAGjF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,cAAc,EAAE,OAAO,CAAC;CACzB;AA+BD,qBACa,8BAA+B,SAAQ,eAAe,CACjE,kBAAkB,EAClB,OAAO,4BAA4B,CAAC,aAAa,CAClD;IAMG,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAEvC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAErC,OAAO,CAAC,QAAQ,CAAC,+BAA+B;IAblD,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAgC;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;gBAGxE,cAAc,EAAE,cAAc,EACb,sBAAsB,EAAE,4BAA4B,EACrE,UAAU,EAAE,UAAU,EACL,wBAAwB,EAAE,wBAAwB,EAClD,qBAAqB,EAAE,qBAAqB,EAC5C,4BAA4B,EAAE,4BAA4B,EAC1D,wBAAwB,EAAE,wBAAwB,EAClD,oBAAoB,EAAE,oBAAoB,EAE1C,+BAA+B,EAAE,+BAA+B;IAKnF;;;;;;;;;;;;;;;;;;OAkBG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,wBAAwB,CAAC;KACnC,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBhC;;;;;;;;;OASG;IACG,eAAe,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAehG;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAyHrC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,kBAAkB,CAAC,MAAM,EAAE;QAC/B,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAsBlC;;OAEG;YACW,iBAAiB;IAS/B;;;;;;;;OAQG;YACW,kCAAkC;IA0BhD;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,UAAU,CAAC,MAAM,EAAE;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwFlC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,gBAAgB,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAoFnG;;;;;;;;;;;;;;;;;OAiBG;IACG,0BAA0B,CAAC,MAAM,EAAE;QAAE,oBAAoB,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzF;;;;;;;;;;OAUG;YACW,qBAAqB;IAiEnC;;;;;;;OAOG;YACW,oBAAoB;IAwClC;;;;;OAKG;YACW,0BAA0B;CA0BzC"}
|
|
@@ -46,6 +46,15 @@ const subscription_payment_confirmation_1 = require("./subscription-payment-conf
|
|
|
46
46
|
*
|
|
47
47
|
* All operations update both Stripe and the local Neo4j database to maintain consistency.
|
|
48
48
|
*/
|
|
49
|
+
/**
|
|
50
|
+
* Whether an invoice line is a proration. Current Stripe API versions carry the flag
|
|
51
|
+
* under `parent.*_item_details`; older ones put it on the line itself.
|
|
52
|
+
*/
|
|
53
|
+
function isProrationLine(line) {
|
|
54
|
+
return (line.parent?.subscription_item_details?.proration ??
|
|
55
|
+
line.parent?.invoice_item_details?.proration ??
|
|
56
|
+
line.proration === true);
|
|
57
|
+
}
|
|
49
58
|
let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class StripeSubscriptionAdminService extends abstract_service_1.AbstractService {
|
|
50
59
|
constructor(jsonApiService, subscriptionRepository, clsService, stripeCustomerRepository, stripePriceRepository, stripeSubscriptionApiService, stripeCustomerApiService, stripePaymentService, stripeCouponCodeCheckoutService) {
|
|
51
60
|
super(jsonApiService, subscriptionRepository, clsService, stripe_subscription_1.StripeSubscriptionDescriptor.model);
|
|
@@ -304,7 +313,9 @@ let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class St
|
|
|
304
313
|
/**
|
|
305
314
|
* Change subscription plan
|
|
306
315
|
*
|
|
307
|
-
* Updates the subscription to a new price
|
|
316
|
+
* Updates the subscription to a new price. A paid change invoices and charges the
|
|
317
|
+
* prorated difference at once; a trial upgrade ends the trial and charges the full price.
|
|
318
|
+
* A pending cancellation at period end is cleared.
|
|
308
319
|
*
|
|
309
320
|
* @param params - Parameters
|
|
310
321
|
* @param params.id - Subscription ID
|
|
@@ -363,7 +374,10 @@ let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class St
|
|
|
363
374
|
const stripeSubscription = await this.withDiscountSoldOutMapping(automatic, promotionCode, () => this.stripeSubscriptionApiService.updateSubscription({
|
|
364
375
|
subscriptionId: subscription.stripeSubscriptionId,
|
|
365
376
|
priceId: newPrice.stripePriceId,
|
|
366
|
-
|
|
377
|
+
// always_invoice charges the difference now; create_prorations would leave it pending until renewal
|
|
378
|
+
prorationBehavior: isTrialUpgrade ? "none" : "always_invoice",
|
|
379
|
+
// Changing plan means staying: a pending cancellation would otherwise end the new plan at period end
|
|
380
|
+
cancelAtPeriodEnd: false,
|
|
367
381
|
promotionCode,
|
|
368
382
|
trialEnd: isTrialUpgrade ? "now" : undefined,
|
|
369
383
|
defaultPaymentMethodId,
|
|
@@ -380,10 +394,11 @@ let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class St
|
|
|
380
394
|
status: stripeSubscription.status,
|
|
381
395
|
currentPeriodStart: new Date(subscriptionItem.current_period_start * 1000),
|
|
382
396
|
currentPeriodEnd: new Date(subscriptionItem.current_period_end * 1000),
|
|
397
|
+
cancelAtPeriodEnd: stripeSubscription.cancel_at_period_end,
|
|
383
398
|
discount: (0, stripe_subscription_discount_1.discountFromStripeSubscription)(stripeSubscription),
|
|
384
399
|
});
|
|
385
400
|
const document = await this.jsonApiService.buildSingle(stripe_subscription_1.StripeSubscriptionDescriptor.model, updatedSubscription);
|
|
386
|
-
// A trial upgrade
|
|
401
|
+
// A trial upgrade and a paid change charge at once; a card that asks for 3D Secure leaves the
|
|
387
402
|
// invoice open. The browser confirms it with the client secret in meta.
|
|
388
403
|
const confirmation = (0, subscription_payment_confirmation_1.subscriptionPaymentConfirmation)(stripeSubscription);
|
|
389
404
|
if (!confirmation.requiresAction)
|
|
@@ -463,7 +478,7 @@ let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class St
|
|
|
463
478
|
// Calculate immediate charge from proration line items only
|
|
464
479
|
// This represents the net amount charged NOW for the plan change
|
|
465
480
|
const immediateCharge = prorationPreview.lines.data
|
|
466
|
-
.filter((line) => line
|
|
481
|
+
.filter((line) => isProrationLine(line))
|
|
467
482
|
.reduce((sum, line) => sum + line.amount, 0);
|
|
468
483
|
return {
|
|
469
484
|
subtotal: prorationPreview.subtotal,
|
|
@@ -476,7 +491,7 @@ let StripeSubscriptionAdminService = StripeSubscriptionAdminService_1 = class St
|
|
|
476
491
|
lines: prorationPreview.lines.data.map((line) => ({
|
|
477
492
|
description: line.description,
|
|
478
493
|
amount: line.amount,
|
|
479
|
-
proration: line
|
|
494
|
+
proration: isProrationLine(line),
|
|
480
495
|
period: {
|
|
481
496
|
start: line.period?.start ? new Date(line.period.start * 1000) : new Date(),
|
|
482
497
|
end: line.period?.end ? new Date(line.period.end * 1000) : new Date(),
|