@carlonicora/nestjs-neo4jsonapi 1.32.1 → 1.33.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/config/base.config.d.ts.map +1 -1
- package/dist/config/base.config.js +13 -0
- package/dist/config/base.config.js.map +1 -1
- package/dist/config/enums/job.name.d.ts.map +1 -1
- package/dist/config/enums/job.name.js +3 -1
- package/dist/config/enums/job.name.js.map +1 -1
- package/dist/config/enums/queue.id.d.ts +2 -1
- package/dist/config/enums/queue.id.d.ts.map +1 -1
- package/dist/config/enums/queue.id.js +1 -0
- package/dist/config/enums/queue.id.js.map +1 -1
- package/dist/config/interfaces/config.ai.interface.d.ts +14 -0
- package/dist/config/interfaces/config.ai.interface.d.ts.map +1 -1
- package/dist/core/email/templates/en/trialEndedWithoutPayment.hbs +53 -0
- package/dist/core/email/templates/en/trialEndingReminder.hbs +48 -0
- package/dist/core/llm/services/model.service.d.ts +30 -0
- package/dist/core/llm/services/model.service.d.ts.map +1 -1
- package/dist/core/llm/services/model.service.js +95 -0
- package/dist/core/llm/services/model.service.js.map +1 -1
- package/dist/core/llm/services/vision.llm.service.js +1 -1
- package/dist/core/llm/services/vision.llm.service.js.map +1 -1
- package/dist/core/queue/queue.module.d.ts.map +1 -1
- package/dist/core/queue/queue.module.js +3 -2
- package/dist/core/queue/queue.module.js.map +1 -1
- package/dist/foundations/auth/auth.module.d.ts.map +1 -1
- package/dist/foundations/auth/auth.module.js +13 -2
- package/dist/foundations/auth/auth.module.js.map +1 -1
- package/dist/foundations/auth/index.d.ts +1 -0
- package/dist/foundations/auth/index.d.ts.map +1 -1
- package/dist/foundations/auth/index.js +3 -1
- package/dist/foundations/auth/index.js.map +1 -1
- package/dist/foundations/auth/repositories/auth.repository.d.ts.map +1 -1
- package/dist/foundations/auth/repositories/auth.repository.js +8 -15
- package/dist/foundations/auth/repositories/auth.repository.js.map +1 -1
- package/dist/foundations/auth/services/auth.service.d.ts +5 -3
- package/dist/foundations/auth/services/auth.service.d.ts.map +1 -1
- package/dist/foundations/auth/services/auth.service.js +17 -4
- package/dist/foundations/auth/services/auth.service.js.map +1 -1
- package/dist/foundations/auth/services/trial-queue.service.d.ts +12 -0
- package/dist/foundations/auth/services/trial-queue.service.d.ts.map +1 -0
- package/dist/foundations/auth/services/trial-queue.service.js +55 -0
- package/dist/foundations/auth/services/trial-queue.service.js.map +1 -0
- 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/stripe/stripe.module.d.ts +0 -1
- package/dist/foundations/stripe/stripe.module.d.ts.map +1 -1
- package/dist/foundations/stripe/stripe.module.js +0 -3
- package/dist/foundations/stripe/stripe.module.js.map +1 -1
- package/dist/foundations/stripe-price/dtos/stripe-price.dto.d.ts +2 -0
- package/dist/foundations/stripe-price/dtos/stripe-price.dto.d.ts.map +1 -1
- package/dist/foundations/stripe-price/dtos/stripe-price.dto.js +10 -0
- package/dist/foundations/stripe-price/dtos/stripe-price.dto.js.map +1 -1
- package/dist/foundations/stripe-price/entities/stripe-price.entity.d.ts +1 -0
- package/dist/foundations/stripe-price/entities/stripe-price.entity.d.ts.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 +1 -0
- package/dist/foundations/stripe-price/entities/stripe-price.map.js.map +1 -1
- package/dist/foundations/stripe-price/repositories/stripe-price.repository.d.ts +11 -0
- package/dist/foundations/stripe-price/repositories/stripe-price.repository.d.ts.map +1 -1
- package/dist/foundations/stripe-price/repositories/stripe-price.repository.js +25 -0
- package/dist/foundations/stripe-price/repositories/stripe-price.repository.js.map +1 -1
- package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.d.ts.map +1 -1
- package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.js +1 -0
- package/dist/foundations/stripe-price/serialisers/stripe-price.serialiser.js.map +1 -1
- package/dist/foundations/stripe-price/services/stripe-price-admin.service.d.ts.map +1 -1
- package/dist/foundations/stripe-price/services/stripe-price-admin.service.js +2 -0
- package/dist/foundations/stripe-price/services/stripe-price-admin.service.js.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts +3 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.d.ts.map +1 -1
- package/dist/foundations/stripe-subscription/services/stripe-subscription-admin.service.js +6 -2
- 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 +3 -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 +7 -2
- package/dist/foundations/stripe-subscription/services/stripe-subscription-api.service.js.map +1 -1
- package/dist/foundations/stripe-trial/index.d.ts +3 -0
- package/dist/foundations/stripe-trial/index.d.ts.map +1 -0
- package/dist/foundations/stripe-trial/index.js +19 -0
- package/dist/foundations/stripe-trial/index.js.map +1 -0
- package/dist/foundations/stripe-trial/interfaces/trial-job.interface.d.ts +5 -0
- package/dist/foundations/stripe-trial/interfaces/trial-job.interface.d.ts.map +1 -0
- package/dist/foundations/stripe-trial/interfaces/trial-job.interface.js +3 -0
- package/dist/foundations/stripe-trial/interfaces/trial-job.interface.js.map +1 -0
- package/dist/foundations/stripe-trial/processors/trial.processor.d.ts +17 -0
- package/dist/foundations/stripe-trial/processors/trial.processor.d.ts.map +1 -0
- package/dist/foundations/stripe-trial/processors/trial.processor.js +69 -0
- package/dist/foundations/stripe-trial/processors/trial.processor.js.map +1 -0
- package/dist/foundations/stripe-trial/services/trial.service.d.ts +61 -0
- package/dist/foundations/stripe-trial/services/trial.service.d.ts.map +1 -0
- package/dist/foundations/stripe-trial/services/trial.service.js +137 -0
- package/dist/foundations/stripe-trial/services/trial.service.js.map +1 -0
- package/dist/foundations/stripe-trial/stripe-trial.module.d.ts +22 -0
- package/dist/foundations/stripe-trial/stripe-trial.module.d.ts.map +1 -0
- package/dist/foundations/stripe-trial/stripe-trial.module.js +45 -0
- package/dist/foundations/stripe-trial/stripe-trial.module.js.map +1 -0
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts +8 -3
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js +150 -51
- package/dist/foundations/stripe-webhook/processors/stripe-webhook.processor.js.map +1 -1
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts +21 -0
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js +87 -0
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js.map +1 -1
- package/dist/foundations/stripe-webhook/stripe-webhook.module.d.ts.map +1 -1
- package/dist/foundations/stripe-webhook/stripe-webhook.module.js +2 -0
- package/dist/foundations/stripe-webhook/stripe-webhook.module.js.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.service.d.ts +1 -0
- package/dist/foundations/tokenusage/services/tokenusage.service.d.ts.map +1 -1
- package/dist/foundations/tokenusage/services/tokenusage.service.js +4 -3
- package/dist/foundations/tokenusage/services/tokenusage.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ModuleRef } from "@nestjs/core";
|
|
2
|
+
import { AppLoggingService } from "../../../core/logging/services/logging.service";
|
|
3
|
+
import { CompanyRepository } from "../../company/repositories/company.repository";
|
|
4
|
+
/**
|
|
5
|
+
* TrialService
|
|
6
|
+
*
|
|
7
|
+
* Orchestrates 14-day trial subscription creation for new user signups.
|
|
8
|
+
* Creates Stripe customer, subscription with trial period, and allocates tokens.
|
|
9
|
+
*
|
|
10
|
+
* Key Features:
|
|
11
|
+
* - Database-driven trial price selection (isTrial: true)
|
|
12
|
+
* - Creates Stripe customer and subscription
|
|
13
|
+
* - Allocates tokens from trial price configuration
|
|
14
|
+
* - Graceful error handling (doesn't block registration)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* await trialService.startTrial({
|
|
19
|
+
* companyId: 'company_123',
|
|
20
|
+
* userId: 'user_456',
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class TrialService {
|
|
25
|
+
private readonly moduleRef;
|
|
26
|
+
private readonly companyRepository;
|
|
27
|
+
private readonly logger;
|
|
28
|
+
constructor(moduleRef: ModuleRef, companyRepository: CompanyRepository, logger: AppLoggingService);
|
|
29
|
+
/**
|
|
30
|
+
* Lazily get Stripe services via ModuleRef to avoid circular dependencies.
|
|
31
|
+
* Stripe modules form a complex circular chain that can't be resolved with forwardRef alone.
|
|
32
|
+
*/
|
|
33
|
+
private get stripeCustomerAdminService();
|
|
34
|
+
private get stripeSubscriptionAdminService();
|
|
35
|
+
private get stripePriceRepository();
|
|
36
|
+
private get stripeCustomerRepository();
|
|
37
|
+
/**
|
|
38
|
+
* Start a 14-day trial for a new company
|
|
39
|
+
*
|
|
40
|
+
* Creates Stripe customer and subscription with trial period.
|
|
41
|
+
* Allocates tokens from the trial price configuration.
|
|
42
|
+
*
|
|
43
|
+
* @param params - Trial parameters
|
|
44
|
+
* @param params.companyId - Company identifier
|
|
45
|
+
* @param params.userId - User identifier (for customer creation)
|
|
46
|
+
* @returns Promise that resolves when trial is started
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* await trialService.startTrial({
|
|
51
|
+
* companyId: 'company_123',
|
|
52
|
+
* userId: 'user_456',
|
|
53
|
+
* });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
startTrial(params: {
|
|
57
|
+
companyId: string;
|
|
58
|
+
userId: string;
|
|
59
|
+
}): Promise<void>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=trial.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-trial/services/trial.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAMlF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBACa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,EAAE,iBAAiB;IAG5C;;;OAGG;IACH,OAAO,KAAK,0BAA0B,GAErC;IAED,OAAO,KAAK,8BAA8B,GAEzC;IAED,OAAO,KAAK,qBAAqB,GAEhC;IAED,OAAO,KAAK,wBAAwB,GAEnC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACG,UAAU,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAsD/E"}
|
|
@@ -0,0 +1,137 @@
|
|
|
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.TrialService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const logging_service_1 = require("../../../core/logging/services/logging.service");
|
|
16
|
+
const company_repository_1 = require("../../company/repositories/company.repository");
|
|
17
|
+
const stripe_customer_repository_1 = require("../../stripe-customer/repositories/stripe-customer.repository");
|
|
18
|
+
const stripe_customer_admin_service_1 = require("../../stripe-customer/services/stripe-customer-admin.service");
|
|
19
|
+
const stripe_price_repository_1 = require("../../stripe-price/repositories/stripe-price.repository");
|
|
20
|
+
const stripe_subscription_admin_service_1 = require("../../stripe-subscription/services/stripe-subscription-admin.service");
|
|
21
|
+
/**
|
|
22
|
+
* TrialService
|
|
23
|
+
*
|
|
24
|
+
* Orchestrates 14-day trial subscription creation for new user signups.
|
|
25
|
+
* Creates Stripe customer, subscription with trial period, and allocates tokens.
|
|
26
|
+
*
|
|
27
|
+
* Key Features:
|
|
28
|
+
* - Database-driven trial price selection (isTrial: true)
|
|
29
|
+
* - Creates Stripe customer and subscription
|
|
30
|
+
* - Allocates tokens from trial price configuration
|
|
31
|
+
* - Graceful error handling (doesn't block registration)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* await trialService.startTrial({
|
|
36
|
+
* companyId: 'company_123',
|
|
37
|
+
* userId: 'user_456',
|
|
38
|
+
* });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
let TrialService = class TrialService {
|
|
42
|
+
constructor(moduleRef, companyRepository, logger) {
|
|
43
|
+
this.moduleRef = moduleRef;
|
|
44
|
+
this.companyRepository = companyRepository;
|
|
45
|
+
this.logger = logger;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Lazily get Stripe services via ModuleRef to avoid circular dependencies.
|
|
49
|
+
* Stripe modules form a complex circular chain that can't be resolved with forwardRef alone.
|
|
50
|
+
*/
|
|
51
|
+
get stripeCustomerAdminService() {
|
|
52
|
+
return this.moduleRef.get(stripe_customer_admin_service_1.StripeCustomerAdminService, { strict: false });
|
|
53
|
+
}
|
|
54
|
+
get stripeSubscriptionAdminService() {
|
|
55
|
+
return this.moduleRef.get(stripe_subscription_admin_service_1.StripeSubscriptionAdminService, { strict: false });
|
|
56
|
+
}
|
|
57
|
+
get stripePriceRepository() {
|
|
58
|
+
return this.moduleRef.get(stripe_price_repository_1.StripePriceRepository, { strict: false });
|
|
59
|
+
}
|
|
60
|
+
get stripeCustomerRepository() {
|
|
61
|
+
return this.moduleRef.get(stripe_customer_repository_1.StripeCustomerRepository, { strict: false });
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start a 14-day trial for a new company
|
|
65
|
+
*
|
|
66
|
+
* Creates Stripe customer and subscription with trial period.
|
|
67
|
+
* Allocates tokens from the trial price configuration.
|
|
68
|
+
*
|
|
69
|
+
* @param params - Trial parameters
|
|
70
|
+
* @param params.companyId - Company identifier
|
|
71
|
+
* @param params.userId - User identifier (for customer creation)
|
|
72
|
+
* @returns Promise that resolves when trial is started
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* await trialService.startTrial({
|
|
77
|
+
* companyId: 'company_123',
|
|
78
|
+
* userId: 'user_456',
|
|
79
|
+
* });
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
async startTrial(params) {
|
|
83
|
+
// IDEMPOTENCY CHECK: Skip if company already has a subscription
|
|
84
|
+
const company = await this.companyRepository.findByCompanyId({ companyId: params.companyId });
|
|
85
|
+
if (company?.isActiveSubscription) {
|
|
86
|
+
this.logger.log(`Company ${params.companyId} already has active subscription - skipping trial creation`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Also check if Stripe customer already exists for this company
|
|
90
|
+
const existingCustomer = await this.stripeCustomerRepository.findByCompanyId({ companyId: params.companyId });
|
|
91
|
+
if (existingCustomer) {
|
|
92
|
+
this.logger.log(`Company ${params.companyId} already has Stripe customer - skipping trial creation`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// 1. Find the trial price from database
|
|
96
|
+
const trialPrice = await this.stripePriceRepository.findTrialPrice();
|
|
97
|
+
if (!trialPrice) {
|
|
98
|
+
this.logger.warn("No trial price configured - skipping trial creation");
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// 2. Create Stripe customer for the company
|
|
102
|
+
// This uses the company name and owner email automatically
|
|
103
|
+
await this.stripeCustomerAdminService.createCustomer(params.companyId, params.userId);
|
|
104
|
+
// 3. Create subscription with 14-day trial
|
|
105
|
+
// Note: This will fail if no payment method, but trial subscriptions don't require payment upfront
|
|
106
|
+
// The createSubscription method handles trial creation with trialPeriodDays parameter
|
|
107
|
+
await this.stripeSubscriptionAdminService.createSubscription({
|
|
108
|
+
companyId: params.companyId,
|
|
109
|
+
priceId: trialPrice.id,
|
|
110
|
+
trialPeriodDays: 14,
|
|
111
|
+
// trialEnd: Math.floor(Date.now() / 1000) + 3 * 60,
|
|
112
|
+
});
|
|
113
|
+
// 4. Allocate trial tokens from price configuration
|
|
114
|
+
const trialTokens = trialPrice.token ?? 0;
|
|
115
|
+
if (trialTokens > 0) {
|
|
116
|
+
await this.companyRepository.updateTokens({
|
|
117
|
+
companyId: params.companyId,
|
|
118
|
+
monthlyTokens: trialTokens,
|
|
119
|
+
availableMonthlyTokens: trialTokens,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// 5. Mark subscription as active (during trial)
|
|
123
|
+
await this.companyRepository.markSubscriptionStatus({
|
|
124
|
+
companyId: params.companyId,
|
|
125
|
+
isActiveSubscription: true,
|
|
126
|
+
});
|
|
127
|
+
this.logger.log(`Trial started for company ${params.companyId} with ${trialTokens} tokens`);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
exports.TrialService = TrialService;
|
|
131
|
+
exports.TrialService = TrialService = __decorate([
|
|
132
|
+
(0, common_1.Injectable)(),
|
|
133
|
+
__metadata("design:paramtypes", [core_1.ModuleRef,
|
|
134
|
+
company_repository_1.CompanyRepository,
|
|
135
|
+
logging_service_1.AppLoggingService])
|
|
136
|
+
], TrialService);
|
|
137
|
+
//# sourceMappingURL=trial.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trial.service.js","sourceRoot":"","sources":["../../../../src/foundations/stripe-trial/services/trial.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stripe Trial Module
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates 14-day trial subscription creation for new user signups.
|
|
5
|
+
* Uses BullMQ queue for async processing and ModuleRef for Stripe service dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Queue-based architecture:
|
|
8
|
+
* - AuthModule queues trial creation jobs (no direct dependency)
|
|
9
|
+
* - TrialProcessor handles jobs asynchronously
|
|
10
|
+
* - WebSocket notification sent from Stripe webhook after feature sync
|
|
11
|
+
*
|
|
12
|
+
* Dependencies (via ModuleRef):
|
|
13
|
+
* - StripeCustomerAdminService: Create Stripe customer
|
|
14
|
+
* - StripeSubscriptionAdminService: Create subscription with trial period
|
|
15
|
+
* - StripePriceRepository: Find trial price configuration
|
|
16
|
+
*
|
|
17
|
+
* Direct dependencies:
|
|
18
|
+
* - CompanyModule: Update company tokens and subscription status
|
|
19
|
+
*/
|
|
20
|
+
export declare class StripeTrialModule {
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=stripe-trial.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-trial.module.d.ts","sourceRoot":"","sources":["../../../src/foundations/stripe-trial/stripe-trial.module.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAKa,iBAAiB;CAAG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.StripeTrialModule = void 0;
|
|
10
|
+
const bullmq_1 = require("@nestjs/bullmq");
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const queue_id_1 = require("../../config/enums/queue.id");
|
|
13
|
+
const company_module_1 = require("../company/company.module");
|
|
14
|
+
const trial_processor_1 = require("./processors/trial.processor");
|
|
15
|
+
const trial_service_1 = require("./services/trial.service");
|
|
16
|
+
/**
|
|
17
|
+
* Stripe Trial Module
|
|
18
|
+
*
|
|
19
|
+
* Orchestrates 14-day trial subscription creation for new user signups.
|
|
20
|
+
* Uses BullMQ queue for async processing and ModuleRef for Stripe service dependencies.
|
|
21
|
+
*
|
|
22
|
+
* Queue-based architecture:
|
|
23
|
+
* - AuthModule queues trial creation jobs (no direct dependency)
|
|
24
|
+
* - TrialProcessor handles jobs asynchronously
|
|
25
|
+
* - WebSocket notification sent from Stripe webhook after feature sync
|
|
26
|
+
*
|
|
27
|
+
* Dependencies (via ModuleRef):
|
|
28
|
+
* - StripeCustomerAdminService: Create Stripe customer
|
|
29
|
+
* - StripeSubscriptionAdminService: Create subscription with trial period
|
|
30
|
+
* - StripePriceRepository: Find trial price configuration
|
|
31
|
+
*
|
|
32
|
+
* Direct dependencies:
|
|
33
|
+
* - CompanyModule: Update company tokens and subscription status
|
|
34
|
+
*/
|
|
35
|
+
let StripeTrialModule = class StripeTrialModule {
|
|
36
|
+
};
|
|
37
|
+
exports.StripeTrialModule = StripeTrialModule;
|
|
38
|
+
exports.StripeTrialModule = StripeTrialModule = __decorate([
|
|
39
|
+
(0, common_1.Module)({
|
|
40
|
+
imports: [(0, common_1.forwardRef)(() => company_module_1.CompanyModule), bullmq_1.BullModule.registerQueue({ name: queue_id_1.QueueId.TRIAL })],
|
|
41
|
+
providers: [trial_service_1.TrialService, trial_processor_1.TrialProcessor],
|
|
42
|
+
exports: [trial_service_1.TrialService],
|
|
43
|
+
})
|
|
44
|
+
], StripeTrialModule);
|
|
45
|
+
//# sourceMappingURL=stripe-trial.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe-trial.module.js","sourceRoot":"","sources":["../../../src/foundations/stripe-trial/stripe-trial.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,2CAAoD;AACpD,0DAAsD;AACtD,8DAA0D;AAC1D,kEAA8D;AAC9D,4DAAwD;AAExD;;;;;;;;;;;;;;;;;;GAkBG;AAMI,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;CAAG,CAAA;AAApB,8CAAiB;4BAAjB,iBAAiB;IAL7B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC,EAAE,mBAAU,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,kBAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7F,SAAS,EAAE,CAAC,4BAAY,EAAE,gCAAc,CAAC;QACzC,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,iBAAiB,CAAG"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { WorkerHost } from "@nestjs/bullmq";
|
|
2
2
|
import { Job } from "bullmq";
|
|
3
|
+
import { ClsService } from "nestjs-cls";
|
|
3
4
|
import { AppLoggingService } from "../../../core/logging";
|
|
5
|
+
import { WebSocketService } from "../../../core/websocket/services/websocket.service";
|
|
4
6
|
import { CompanyRepository } from "../../company/repositories/company.repository";
|
|
5
7
|
import { StripeCustomerRepository } from "../../stripe-customer/repositories/stripe-customer.repository";
|
|
6
8
|
import { StripeInvoiceRepository } from "../../stripe-invoice/repositories/stripe-invoice.repository";
|
|
9
|
+
import { StripeInvoiceAdminService } from "../../stripe-invoice/services/stripe-invoice-admin.service";
|
|
7
10
|
import { StripePriceRepository } from "../../stripe-price/repositories/stripe-price.repository";
|
|
8
11
|
import { StripeSubscriptionRepository } from "../../stripe-subscription/repositories/stripe-subscription.repository";
|
|
9
|
-
import { StripeSubscriptionAdminService } from "../../stripe-subscription/services/stripe-subscription-admin.service";
|
|
10
12
|
import { FeatureSyncService } from "../../stripe-subscription/services/feature-sync.service";
|
|
13
|
+
import { StripeSubscriptionAdminService } from "../../stripe-subscription/services/stripe-subscription-admin.service";
|
|
11
14
|
import { TokenAllocationService } from "../../stripe-subscription/services/token-allocation.service";
|
|
12
15
|
import { StripeService } from "../../stripe/services/stripe.service";
|
|
13
|
-
import { StripeInvoiceAdminService } from "../../stripe-invoice/services/stripe-invoice-admin.service";
|
|
14
16
|
import { StripeWebhookEventRepository } from "../repositories/stripe-webhook-event.repository";
|
|
15
17
|
import { StripeWebhookNotificationService } from "../services/stripe-webhook-notification.service";
|
|
16
18
|
export interface StripeWebhookJobData {
|
|
@@ -33,13 +35,16 @@ export declare class StripeWebhookProcessor extends WorkerHost {
|
|
|
33
35
|
private readonly companyRepository;
|
|
34
36
|
private readonly stripeInvoiceAdminService;
|
|
35
37
|
private readonly logger;
|
|
36
|
-
|
|
38
|
+
private readonly cls;
|
|
39
|
+
private readonly webSocketService;
|
|
40
|
+
constructor(stripeWebhookEventRepository: StripeWebhookEventRepository, subscriptionService: StripeSubscriptionAdminService, stripeCustomerRepository: StripeCustomerRepository, subscriptionRepository: StripeSubscriptionRepository, stripeInvoiceRepository: StripeInvoiceRepository, stripePriceRepository: StripePriceRepository, notificationService: StripeWebhookNotificationService, tokenAllocationService: TokenAllocationService, featureSyncService: FeatureSyncService, stripeService: StripeService, companyRepository: CompanyRepository, stripeInvoiceAdminService: StripeInvoiceAdminService, logger: AppLoggingService, cls: ClsService, webSocketService: WebSocketService);
|
|
37
41
|
onActive(job: Job<StripeWebhookJobData>): void;
|
|
38
42
|
onError(job: Job<StripeWebhookJobData>): void;
|
|
39
43
|
onCompleted(job: Job<StripeWebhookJobData>): void;
|
|
40
44
|
process(job: Job<StripeWebhookJobData>): Promise<void>;
|
|
41
45
|
private handleEvent;
|
|
42
46
|
private handleSubscriptionEvent;
|
|
47
|
+
private handleTrialWillEndEvent;
|
|
43
48
|
private handleInvoiceEvent;
|
|
44
49
|
private handleCustomerEvent;
|
|
45
50
|
private handlePaymentIntentEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe-webhook.processor.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-webhook/processors/stripe-webhook.processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"stripe-webhook.processor.d.ts","sourceRoot":"","sources":["../../../../src/foundations/stripe-webhook/processors/stripe-webhook.processor.ts"],"names":[],"mappings":"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"}
|