@carlonicora/nestjs-neo4jsonapi 8.1.0 → 8.3.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/foundations/analytics/controllers/analytics.controller.d.ts.map +1 -1
- package/dist/foundations/analytics/controllers/analytics.controller.js +1 -0
- package/dist/foundations/analytics/controllers/analytics.controller.js.map +1 -1
- package/dist/foundations/analytics/dtos/analytics-event.post.dto.d.ts +1 -0
- package/dist/foundations/analytics/dtos/analytics-event.post.dto.d.ts.map +1 -1
- package/dist/foundations/analytics/dtos/analytics-event.post.dto.js +5 -0
- package/dist/foundations/analytics/dtos/analytics-event.post.dto.js.map +1 -1
- package/dist/foundations/analytics/interfaces/analytics.config.interface.d.ts +4 -2
- package/dist/foundations/analytics/interfaces/analytics.config.interface.d.ts.map +1 -1
- package/dist/foundations/analytics/interfaces/analytics.config.interface.js.map +1 -1
- package/dist/foundations/analytics/interfaces/analytics.page-view.input.d.ts +2 -0
- package/dist/foundations/analytics/interfaces/analytics.page-view.input.d.ts.map +1 -1
- package/dist/foundations/analytics/interfaces/analytics.resolved-page-view.d.ts +6 -0
- package/dist/foundations/analytics/interfaces/analytics.resolved-page-view.d.ts.map +1 -1
- package/dist/foundations/analytics/processors/analytics.processor.d.ts.map +1 -1
- package/dist/foundations/analytics/processors/analytics.processor.js +10 -0
- package/dist/foundations/analytics/processors/analytics.processor.js.map +1 -1
- package/dist/foundations/analytics/repositories/analytics-session.repository.d.ts +6 -0
- package/dist/foundations/analytics/repositories/analytics-session.repository.d.ts.map +1 -1
- package/dist/foundations/analytics/repositories/analytics-session.repository.js +35 -10
- package/dist/foundations/analytics/repositories/analytics-session.repository.js.map +1 -1
- package/dist/foundations/analytics/services/analytics.service.d.ts +5 -4
- package/dist/foundations/analytics/services/analytics.service.d.ts.map +1 -1
- package/dist/foundations/analytics/services/analytics.service.js +14 -10
- package/dist/foundations/analytics/services/analytics.service.js.map +1 -1
- package/dist/foundations/analytics/services/analytics.visitor-id.service.d.ts +10 -0
- package/dist/foundations/analytics/services/analytics.visitor-id.service.d.ts.map +1 -1
- package/dist/foundations/analytics/services/analytics.visitor-id.service.js +9 -1
- package/dist/foundations/analytics/services/analytics.visitor-id.service.js.map +1 -1
- package/dist/foundations/billing/billing.module.d.ts +2 -0
- package/dist/foundations/billing/billing.module.d.ts.map +1 -1
- package/dist/foundations/billing/billing.module.js +10 -0
- package/dist/foundations/billing/billing.module.js.map +1 -1
- package/dist/foundations/billing/controllers/credit-warning.controller.d.ts +16 -0
- package/dist/foundations/billing/controllers/credit-warning.controller.d.ts.map +1 -0
- package/dist/foundations/billing/controllers/credit-warning.controller.js +63 -0
- package/dist/foundations/billing/controllers/credit-warning.controller.js.map +1 -0
- package/dist/foundations/billing/index.d.ts +3 -0
- package/dist/foundations/billing/index.d.ts.map +1 -1
- package/dist/foundations/billing/index.js +4 -0
- package/dist/foundations/billing/index.js.map +1 -1
- package/dist/foundations/billing/interfaces/billing.config.interface.d.ts +18 -0
- package/dist/foundations/billing/interfaces/billing.config.interface.d.ts.map +1 -1
- package/dist/foundations/billing/interfaces/billing.config.interface.js +7 -0
- package/dist/foundations/billing/interfaces/billing.config.interface.js.map +1 -1
- package/dist/foundations/billing/interfaces/credit-warning.interface.d.ts +15 -0
- package/dist/foundations/billing/interfaces/credit-warning.interface.d.ts.map +1 -0
- package/dist/foundations/billing/interfaces/credit-warning.interface.js +9 -0
- package/dist/foundations/billing/interfaces/credit-warning.interface.js.map +1 -0
- package/dist/foundations/billing/processors/billing-email.jobs.d.ts +9 -1
- package/dist/foundations/billing/processors/billing-email.jobs.d.ts.map +1 -1
- package/dist/foundations/billing/processors/billing-email.jobs.js +17 -0
- package/dist/foundations/billing/processors/billing-email.jobs.js.map +1 -1
- package/dist/foundations/billing/services/credit-warning.service.d.ts +84 -0
- package/dist/foundations/billing/services/credit-warning.service.d.ts.map +1 -0
- package/dist/foundations/billing/services/credit-warning.service.js +218 -0
- package/dist/foundations/billing/services/credit-warning.service.js.map +1 -0
- package/dist/foundations/company/entities/company.d.ts +5 -0
- package/dist/foundations/company/entities/company.d.ts.map +1 -1
- package/dist/foundations/company/entities/company.js +4 -0
- package/dist/foundations/company/entities/company.js.map +1 -1
- package/dist/foundations/company/events/company.events.d.ts +22 -0
- package/dist/foundations/company/events/company.events.d.ts.map +1 -1
- package/dist/foundations/company/events/company.events.js +14 -1
- package/dist/foundations/company/events/company.events.js.map +1 -1
- package/dist/foundations/company/repositories/company.repository.d.ts +44 -0
- package/dist/foundations/company/repositories/company.repository.d.ts.map +1 -1
- package/dist/foundations/company/repositories/company.repository.js +97 -0
- package/dist/foundations/company/repositories/company.repository.js.map +1 -1
- package/dist/foundations/company/services/company.service.d.ts.map +1 -1
- package/dist/foundations/company/services/company.service.js +13 -0
- package/dist/foundations/company/services/company.service.js.map +1 -1
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.d.ts +14 -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 +43 -0
- package/dist/foundations/stripe-webhook/services/stripe-webhook-notification.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CreditWarningController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const core_module_ids_1 = require("../../../common/constants/core-module.ids");
|
|
18
|
+
const system_roles_1 = require("../../../common/constants/system.roles");
|
|
19
|
+
const cache_invalidate_decorator_1 = require("../../../common/decorators/cache-invalidate.decorator");
|
|
20
|
+
const module_decorator_1 = require("../../../common/decorators/module.decorator");
|
|
21
|
+
const roles_decorator_1 = require("../../../common/decorators/roles.decorator");
|
|
22
|
+
const jwt_auth_guard_1 = require("../../../common/guards/jwt.auth.guard");
|
|
23
|
+
const cache_service_1 = require("../../../core/cache/services/cache.service");
|
|
24
|
+
const company_meta_1 = require("../../company/entities/company.meta");
|
|
25
|
+
const credit_warning_interface_1 = require("../interfaces/credit-warning.interface");
|
|
26
|
+
const credit_warning_service_1 = require("../services/credit-warning.service");
|
|
27
|
+
/**
|
|
28
|
+
* Credit warning routes. Company administrators only.
|
|
29
|
+
*
|
|
30
|
+
* With `billing.creditWarning` off the dismiss route still answers 204 and writes nothing.
|
|
31
|
+
*/
|
|
32
|
+
let CreditWarningController = class CreditWarningController {
|
|
33
|
+
constructor(creditWarningService, cacheService) {
|
|
34
|
+
this.creditWarningService = creditWarningService;
|
|
35
|
+
this.cacheService = cacheService;
|
|
36
|
+
}
|
|
37
|
+
// POST /companies/:companyId/credit-warning/dismiss
|
|
38
|
+
async dismiss(req, reply, companyId) {
|
|
39
|
+
await this.creditWarningService.dismiss({ companyId });
|
|
40
|
+
reply.send();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
exports.CreditWarningController = CreditWarningController;
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
|
|
46
|
+
(0, roles_decorator_1.Roles)(system_roles_1.RoleId.CompanyAdministrator),
|
|
47
|
+
(0, common_1.Post)(`${company_meta_1.companyMeta.endpoint}/:companyId/${credit_warning_interface_1.CREDIT_WARNING_DISMISS_SEGMENT}`),
|
|
48
|
+
(0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT),
|
|
49
|
+
(0, cache_invalidate_decorator_1.CacheInvalidate)(company_meta_1.companyMeta, "companyId"),
|
|
50
|
+
__param(0, (0, common_1.Req)()),
|
|
51
|
+
__param(1, (0, common_1.Res)()),
|
|
52
|
+
__param(2, (0, common_1.Param)("companyId")),
|
|
53
|
+
__metadata("design:type", Function),
|
|
54
|
+
__metadata("design:paramtypes", [Object, Object, String]),
|
|
55
|
+
__metadata("design:returntype", Promise)
|
|
56
|
+
], CreditWarningController.prototype, "dismiss", null);
|
|
57
|
+
exports.CreditWarningController = CreditWarningController = __decorate([
|
|
58
|
+
(0, module_decorator_1.ModuleACL)({ module: core_module_ids_1.CoreModuleId.Billing }),
|
|
59
|
+
(0, common_1.Controller)(),
|
|
60
|
+
__metadata("design:paramtypes", [credit_warning_service_1.CreditWarningService,
|
|
61
|
+
cache_service_1.CacheService])
|
|
62
|
+
], CreditWarningController);
|
|
63
|
+
//# sourceMappingURL=credit-warning.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-warning.controller.js","sourceRoot":"","sources":["../../../../src/foundations/billing/controllers/credit-warning.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoG;AAEpG,+EAAyE;AACzE,yEAAgE;AAChE,sGAAwF;AACxF,kFAAwE;AACxE,gFAAmE;AACnE,0EAAqE;AAErE,8EAA0E;AAC1E,sEAAkE;AAClE,qFAAwF;AACxF,+EAA0E;AAE1E;;;;GAIG;AAGI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,oBAA0C,EAC1C,YAA0B;QAD1B,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,iBAAY,GAAZ,YAAY,CAAc;IAC1C,CAAC;IAEJ,oDAAoD;IAM9C,AAAN,KAAK,CAAC,OAAO,CAAQ,GAAyB,EAAS,KAAmB,EAAsB,SAAiB;QAC/G,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;CACF,CAAA;AAhBY,0DAAuB;AAY5B;IALL,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,uBAAK,EAAC,qBAAM,CAAC,oBAAoB,CAAC;IAClC,IAAA,aAAI,EAAC,GAAG,0BAAW,CAAC,QAAQ,eAAe,yDAA8B,EAAE,CAAC;IAC5E,IAAA,iBAAQ,EAAC,mBAAU,CAAC,UAAU,CAAC;IAC/B,IAAA,4CAAe,EAAC,0BAAW,EAAE,WAAW,CAAC;IAC3B,WAAA,IAAA,YAAG,GAAE,CAAA;IAA6B,WAAA,IAAA,YAAG,GAAE,CAAA;IAAuB,WAAA,IAAA,cAAK,EAAC,WAAW,CAAC,CAAA;;;;sDAG9F;kCAfU,uBAAuB;IAFnC,IAAA,4BAAS,EAAC,EAAE,MAAM,EAAE,8BAAY,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAA,mBAAU,GAAE;qCAG8B,6CAAoB;QAC5B,4BAAY;GAHlC,uBAAuB,CAgBnC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export * from "./billing.module";
|
|
2
2
|
export * from "./interfaces/billing.config.interface";
|
|
3
|
+
export * from "./interfaces/credit-warning.interface";
|
|
3
4
|
export * from "./processors/billing-email.jobs";
|
|
4
5
|
export * from "./processors/billing-email.processor";
|
|
5
6
|
export * from "./cron/billing-lifecycle.cron";
|
|
6
7
|
export * from "./services/card-expiry-warning.service";
|
|
8
|
+
export * from "./services/credit-warning.service";
|
|
9
|
+
export * from "./controllers/credit-warning.controller";
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uCAAuC,CAAC;AAGtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,wCAAwC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,uCAAuC,CAAC;AACtD,cAAc,uCAAuC,CAAC;AAGtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,sCAAsC,CAAC;AAGrD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,yCAAyC,CAAC"}
|
|
@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
18
18
|
__exportStar(require("./billing.module"), exports);
|
|
19
19
|
// Config
|
|
20
20
|
__exportStar(require("./interfaces/billing.config.interface"), exports);
|
|
21
|
+
__exportStar(require("./interfaces/credit-warning.interface"), exports);
|
|
21
22
|
// Sender
|
|
22
23
|
__exportStar(require("./processors/billing-email.jobs"), exports);
|
|
23
24
|
__exportStar(require("./processors/billing-email.processor"), exports);
|
|
@@ -25,4 +26,7 @@ __exportStar(require("./processors/billing-email.processor"), exports);
|
|
|
25
26
|
__exportStar(require("./cron/billing-lifecycle.cron"), exports);
|
|
26
27
|
// Services
|
|
27
28
|
__exportStar(require("./services/card-expiry-warning.service"), exports);
|
|
29
|
+
__exportStar(require("./services/credit-warning.service"), exports);
|
|
30
|
+
// Controllers
|
|
31
|
+
__exportStar(require("./controllers/credit-warning.controller"), exports);
|
|
28
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS;AACT,mDAAiC;AAEjC,SAAS;AACT,wEAAsD;AAEtD,SAAS;AACT,kEAAgD;AAChD,uEAAqD;AAErD,OAAO;AACP,gEAA8C;AAE9C,WAAW;AACX,yEAAuD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundations/billing/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS;AACT,mDAAiC;AAEjC,SAAS;AACT,wEAAsD;AACtD,wEAAsD;AAEtD,SAAS;AACT,kEAAgD;AAChD,uEAAqD;AAErD,OAAO;AACP,gEAA8C;AAE9C,WAAW;AACX,yEAAuD;AACvD,oEAAkD;AAElD,cAAc;AACd,0EAAwD"}
|
|
@@ -11,6 +11,10 @@ export type BillingLinks = {
|
|
|
11
11
|
paymentMethod: string;
|
|
12
12
|
subscribe: string;
|
|
13
13
|
resubscribe: string;
|
|
14
|
+
/** Opens plan change on the current subscription (credit warning: subscribe / move up a plan). */
|
|
15
|
+
changePlan: string;
|
|
16
|
+
/** Opens credit pack purchase (credit warning: add a credit pack). */
|
|
17
|
+
buyCredits: string;
|
|
14
18
|
};
|
|
15
19
|
/**
|
|
16
20
|
* One email job the library sender handles: the template id and the mapping from
|
|
@@ -48,6 +52,16 @@ export interface BillingModuleConfig {
|
|
|
48
52
|
};
|
|
49
53
|
/** App-relative paths used in billing emails. */
|
|
50
54
|
links?: Partial<BillingLinks>;
|
|
55
|
+
/**
|
|
56
|
+
* Warn a company once per credit period, in the app and by email, when its
|
|
57
|
+
* credits left fall to `100 - thresholdPercent`% of what it was granted.
|
|
58
|
+
* OFF by default: with it off nothing runs and no Company field is written.
|
|
59
|
+
* `thresholdPercent` defaults to 80.
|
|
60
|
+
*/
|
|
61
|
+
creditWarning?: {
|
|
62
|
+
enabled?: boolean;
|
|
63
|
+
thresholdPercent?: number;
|
|
64
|
+
};
|
|
51
65
|
}
|
|
52
66
|
export type ResolvedBillingConfig = {
|
|
53
67
|
emailSender: {
|
|
@@ -60,6 +74,10 @@ export type ResolvedBillingConfig = {
|
|
|
60
74
|
afterSubscriptionEndedDays: number;
|
|
61
75
|
};
|
|
62
76
|
links: BillingLinks;
|
|
77
|
+
creditWarning: {
|
|
78
|
+
enabled: boolean;
|
|
79
|
+
thresholdPercent: number;
|
|
80
|
+
};
|
|
63
81
|
};
|
|
64
82
|
export declare const DEFAULT_BILLING_CONFIG: ResolvedBillingConfig;
|
|
65
83
|
export declare const BILLING_CONFIG: unique symbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.config.interface.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;
|
|
1
|
+
{"version":3,"file":"billing.config.interface.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,KACzD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAAE,CAAC;IAC3F,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,wGAAwG;IACxG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,EAAE;QAAE,0BAA0B,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,iDAAiD;IACjD,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAA;KAAE,CAAC;IACxF,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACzC,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE;QAAE,0BAA0B,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,qBAcpC,CAAC;AAEF,eAAO,MAAM,cAAc,eAA2B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAmBxF"}
|
|
@@ -12,7 +12,10 @@ exports.DEFAULT_BILLING_CONFIG = {
|
|
|
12
12
|
paymentMethod: "/settings/billing",
|
|
13
13
|
subscribe: "/settings/billing?action=subscribe",
|
|
14
14
|
resubscribe: "/settings/billing",
|
|
15
|
+
changePlan: "/settings/billing?action=change-plan",
|
|
16
|
+
buyCredits: "/settings/billing?action=subscribe",
|
|
15
17
|
},
|
|
18
|
+
creditWarning: { enabled: false, thresholdPercent: 80 },
|
|
16
19
|
};
|
|
17
20
|
exports.BILLING_CONFIG = Symbol("BILLING_CONFIG");
|
|
18
21
|
/**
|
|
@@ -31,6 +34,10 @@ function resolveBillingConfig(config) {
|
|
|
31
34
|
afterSubscriptionEndedDays: config?.deletion?.afterSubscriptionEndedDays ?? exports.DEFAULT_BILLING_CONFIG.deletion.afterSubscriptionEndedDays,
|
|
32
35
|
},
|
|
33
36
|
links: { ...exports.DEFAULT_BILLING_CONFIG.links, ...stripUndefined(config?.links) },
|
|
37
|
+
creditWarning: {
|
|
38
|
+
enabled: config?.creditWarning?.enabled ?? exports.DEFAULT_BILLING_CONFIG.creditWarning.enabled,
|
|
39
|
+
thresholdPercent: config?.creditWarning?.thresholdPercent ?? exports.DEFAULT_BILLING_CONFIG.creditWarning.thresholdPercent,
|
|
40
|
+
},
|
|
34
41
|
};
|
|
35
42
|
}
|
|
36
43
|
function stripUndefined(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing.config.interface.js","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"billing.config.interface.js","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/billing.config.interface.ts"],"names":[],"mappings":";;;AA2FA,oDAmBC;AAzCY,QAAA,sBAAsB,GAA0B;IAC3D,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9C,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;IAC5E,eAAe,EAAE,IAAI;IACrB,QAAQ,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE;IAC5C,KAAK,EAAE;QACL,OAAO,EAAE,mBAAmB;QAC5B,aAAa,EAAE,mBAAmB;QAClC,SAAS,EAAE,oCAAoC;QAC/C,WAAW,EAAE,mBAAmB;QAChC,UAAU,EAAE,sCAAsC;QAClD,UAAU,EAAE,oCAAoC;KACjD;IACD,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE;CACxD,CAAC;AAEW,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAEvD;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,MAA4B;IAC/D,OAAO;QACL,WAAW,EAAE;YACX,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,IAAI,8BAAsB,CAAC,WAAW,CAAC,OAAO;YACnF,SAAS,EAAE,EAAE,GAAG,8BAAsB,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE;SAC1G;QACD,MAAM,EAAE,EAAE,GAAG,8BAAsB,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QAC/E,eAAe,EAAE,MAAM,EAAE,eAAe,IAAI,8BAAsB,CAAC,eAAe;QAClF,QAAQ,EAAE;YACR,0BAA0B,EACxB,MAAM,EAAE,QAAQ,EAAE,0BAA0B,IAAI,8BAAsB,CAAC,QAAQ,CAAC,0BAA0B;SAC7G;QACD,KAAK,EAAE,EAAE,GAAG,8BAAsB,CAAC,KAAK,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;QAC5E,aAAa,EAAE;YACb,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,IAAI,8BAAsB,CAAC,aAAa,CAAC,OAAO;YACvF,gBAAgB,EACd,MAAM,EAAE,aAAa,EAAE,gBAAgB,IAAI,8BAAsB,CAAC,aAAa,CAAC,gBAAgB;SACnG;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAmB,KAAS;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAe,CAAC;AACpG,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The offer the credit warning makes, chosen once when the warning fires so the
|
|
3
|
+
* banner and the email always agree.
|
|
4
|
+
*
|
|
5
|
+
* - `subscribe`: the company is on a trial
|
|
6
|
+
* - `upgrade-or-pack`: an active recurring plan with more credits exists in the same interval
|
|
7
|
+
* - `pack`: no bigger plan exists, so only a credit pack is offered
|
|
8
|
+
*/
|
|
9
|
+
export type CreditWarningOffer = "subscribe" | "upgrade-or-pack" | "pack";
|
|
10
|
+
/**
|
|
11
|
+
* Route segment of the dismiss endpoint, appended to `${companyMeta.endpoint}/:companyId/`.
|
|
12
|
+
* The frontend library declares the same value; a spec in each package asserts it.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CREDIT_WARNING_DISMISS_SEGMENT = "credit-warning/dismiss";
|
|
15
|
+
//# sourceMappingURL=credit-warning.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-warning.interface.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/credit-warning.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,8BAA8B,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CREDIT_WARNING_DISMISS_SEGMENT = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Route segment of the dismiss endpoint, appended to `${companyMeta.endpoint}/:companyId/`.
|
|
6
|
+
* The frontend library declares the same value; a spec in each package asserts it.
|
|
7
|
+
*/
|
|
8
|
+
exports.CREDIT_WARNING_DISMISS_SEGMENT = "credit-warning/dismiss";
|
|
9
|
+
//# sourceMappingURL=credit-warning.interface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-warning.interface.js","sourceRoot":"","sources":["../../../../src/foundations/billing/interfaces/credit-warning.interface.ts"],"names":[],"mappings":";;;AAUA;;;GAGG;AACU,QAAA,8BAA8B,GAAG,wBAAwB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BillingEmailJobDefinition } from "../interfaces/billing.config.interface";
|
|
2
|
+
import type { CreditWarningOffer } from "../interfaces/credit-warning.interface";
|
|
2
3
|
/**
|
|
3
4
|
* Job types the library billing email sender handles out of the box.
|
|
4
5
|
*
|
|
@@ -6,7 +7,7 @@ import { BillingEmailJobDefinition } from "../interfaces/billing.config.interfac
|
|
|
6
7
|
* (every job type except the app-specific `cull-completed`), with the hard-coded
|
|
7
8
|
* paths turned into the configurable `links`. `card-expiring` is new.
|
|
8
9
|
*/
|
|
9
|
-
export type LibraryBillingJobType = "payment-failure" | "subscription-status-change" | "payment-success-customer" | "payment-success-admin" | "trial-ending-reminder" | "trial-ended" | "deletion-warning" | "subscription-cancelled" | "company-deleted" | "referral-invite" | "referral-reward" | "card-expiring";
|
|
10
|
+
export type LibraryBillingJobType = "payment-failure" | "subscription-status-change" | "payment-success-customer" | "payment-success-admin" | "trial-ending-reminder" | "trial-ended" | "deletion-warning" | "subscription-cancelled" | "company-deleted" | "referral-invite" | "referral-reward" | "card-expiring" | "credit-warning";
|
|
10
11
|
export interface BillingEmailJobData {
|
|
11
12
|
jobType: string;
|
|
12
13
|
payload: Record<string, unknown> & {
|
|
@@ -123,5 +124,12 @@ export interface CardExpiringEmailParams {
|
|
|
123
124
|
cardLast4: string;
|
|
124
125
|
locale?: string;
|
|
125
126
|
}
|
|
127
|
+
export interface CreditWarningEmailParams {
|
|
128
|
+
to: string;
|
|
129
|
+
customerName: string;
|
|
130
|
+
offer: CreditWarningOffer;
|
|
131
|
+
interval: "month" | "year";
|
|
132
|
+
locale: string;
|
|
133
|
+
}
|
|
126
134
|
export declare const LIBRARY_BILLING_EMAIL_JOBS: Record<LibraryBillingJobType, BillingEmailJobDefinition>;
|
|
127
135
|
//# sourceMappingURL=billing-email.jobs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-email.jobs.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/processors/billing-email.jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"billing-email.jobs.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/processors/billing-email.jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -192,5 +192,22 @@ exports.LIBRARY_BILLING_EMAIL_JOBS = {
|
|
|
192
192
|
};
|
|
193
193
|
},
|
|
194
194
|
},
|
|
195
|
+
"credit-warning": {
|
|
196
|
+
template: "creditWarning",
|
|
197
|
+
toTemplateData: (payload, { appUrl, locale, links }) => {
|
|
198
|
+
const params = asParams(payload);
|
|
199
|
+
return {
|
|
200
|
+
to: params.to,
|
|
201
|
+
customerName: params.customerName,
|
|
202
|
+
offerSubscribe: params.offer === "subscribe",
|
|
203
|
+
offerUpgrade: params.offer === "upgrade-or-pack",
|
|
204
|
+
offerPack: params.offer === "pack",
|
|
205
|
+
isYearly: params.interval === "year",
|
|
206
|
+
changePlanUrl: `${appUrl}${links.changePlan}`,
|
|
207
|
+
buyCreditsUrl: `${appUrl}${links.buyCredits}`,
|
|
208
|
+
locale,
|
|
209
|
+
};
|
|
210
|
+
},
|
|
211
|
+
},
|
|
195
212
|
};
|
|
196
213
|
//# sourceMappingURL=billing-email.jobs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"billing-email.jobs.js","sourceRoot":"","sources":["../../../../src/foundations/billing/processors/billing-email.jobs.ts"],"names":[],"mappings":";;;AAAA,qEAAoE;
|
|
1
|
+
{"version":3,"file":"billing-email.jobs.js","sourceRoot":"","sources":["../../../../src/foundations/billing/processors/billing-email.jobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ClsService } from "nestjs-cls";
|
|
2
|
+
import { JsonApiService } from "../../../core/jsonapi/services/jsonapi.service";
|
|
3
|
+
import { AppLoggingService } from "../../../core/logging/services/logging.service";
|
|
4
|
+
import { AbstractService } from "../../../core/neo4j/abstracts/abstract.service";
|
|
5
|
+
import { WebSocketService } from "../../../core/websocket/services/websocket.service";
|
|
6
|
+
import { Company, CompanyDescriptor } from "../../company/entities/company";
|
|
7
|
+
import { CompanyCreditsGrantedPayload, CompanyCreditsUsedPayload } from "../../company/events/company.events";
|
|
8
|
+
import { CompanyRepository } from "../../company/repositories/company.repository";
|
|
9
|
+
import { StripeCustomerRepository } from "../../stripe-customer/repositories/stripe-customer.repository";
|
|
10
|
+
import { StripePriceRepository } from "../../stripe-price/repositories/stripe-price.repository";
|
|
11
|
+
import { StripeSubscriptionRepository } from "../../stripe-subscription/repositories/stripe-subscription.repository";
|
|
12
|
+
import { StripeWebhookNotificationService } from "../../stripe-webhook/services/stripe-webhook-notification.service";
|
|
13
|
+
import { ResolvedBillingConfig } from "../interfaces/billing.config.interface";
|
|
14
|
+
import type { CreditWarningOffer } from "../interfaces/credit-warning.interface";
|
|
15
|
+
/**
|
|
16
|
+
* Warns a company once per credit period when its credits left fall to
|
|
17
|
+
* `100 - thresholdPercent`% of what it was granted, in the app and by email.
|
|
18
|
+
*
|
|
19
|
+
* Opt-in through `billing.creditWarning.enabled`. With it off every method
|
|
20
|
+
* returns at once: no Cypher, no Company field written, no email, no websocket
|
|
21
|
+
* message.
|
|
22
|
+
*
|
|
23
|
+
* - Credits used: a cheap pre-check on the company, then the offer lookup, then
|
|
24
|
+
* the atomic `markCreditWarningSent`. Only the spend that gets the company back
|
|
25
|
+
* sends the email and broadcasts `company:subscription_updated`.
|
|
26
|
+
* - Credits granted: starts a new period (clears every marker).
|
|
27
|
+
* - Dismiss: records the dismissal for the caller's own company.
|
|
28
|
+
*
|
|
29
|
+
* The event handlers never throw: the credits-used emitter is the credit spend of
|
|
30
|
+
* a live LLM call. They run in a CLS context pinned to the payload's company,
|
|
31
|
+
* because the granted event fires from the webhook worker with no company in CLS.
|
|
32
|
+
*/
|
|
33
|
+
export declare class CreditWarningService extends AbstractService<Company, typeof CompanyDescriptor.relationships> {
|
|
34
|
+
private readonly companyRepository;
|
|
35
|
+
private readonly config;
|
|
36
|
+
private readonly stripeCustomerRepository;
|
|
37
|
+
private readonly stripeSubscriptionRepository;
|
|
38
|
+
private readonly stripePriceRepository;
|
|
39
|
+
private readonly notificationService;
|
|
40
|
+
private readonly webSocketService;
|
|
41
|
+
private readonly logger;
|
|
42
|
+
protected readonly descriptor: import("../../..").EntityDescriptor<Company, {
|
|
43
|
+
feature: {
|
|
44
|
+
model: import("../../..").DataMeta;
|
|
45
|
+
direction: "out";
|
|
46
|
+
relationship: string;
|
|
47
|
+
cardinality: "many";
|
|
48
|
+
dtoKey: string;
|
|
49
|
+
};
|
|
50
|
+
module: {
|
|
51
|
+
model: import("../../..").DataMeta;
|
|
52
|
+
direction: "out";
|
|
53
|
+
relationship: string;
|
|
54
|
+
cardinality: "many";
|
|
55
|
+
dtoKey: string;
|
|
56
|
+
};
|
|
57
|
+
}>;
|
|
58
|
+
constructor(jsonApiService: JsonApiService, companyRepository: CompanyRepository, clsService: ClsService, config: ResolvedBillingConfig, stripeCustomerRepository: StripeCustomerRepository, stripeSubscriptionRepository: StripeSubscriptionRepository, stripePriceRepository: StripePriceRepository, notificationService: StripeWebhookNotificationService, webSocketService: WebSocketService, logger: AppLoggingService);
|
|
59
|
+
private get enabled();
|
|
60
|
+
handleCreditsUsed(payload: CompanyCreditsUsedPayload): Promise<void>;
|
|
61
|
+
handleCreditsGranted(payload: CompanyCreditsGrantedPayload): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Records that the caller's company dismissed the credit warning.
|
|
64
|
+
*
|
|
65
|
+
* Does nothing when the feature is off.
|
|
66
|
+
*
|
|
67
|
+
* @throws ForbiddenException when `companyId` is not the caller's company
|
|
68
|
+
*/
|
|
69
|
+
dismiss(params: {
|
|
70
|
+
companyId: string;
|
|
71
|
+
}): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* The offer the warning would make to the CLS company, or null when it has no
|
|
74
|
+
* active or trialing recurring subscription (no warning then).
|
|
75
|
+
*/
|
|
76
|
+
resolveOffer(): Promise<CreditWarningOffer | null>;
|
|
77
|
+
private resolveContext;
|
|
78
|
+
/** The cheap checks run before any Stripe lookup or write. */
|
|
79
|
+
private canWarn;
|
|
80
|
+
private runForCompany;
|
|
81
|
+
/** Makes every open page of the company refetch the user. Never throws. */
|
|
82
|
+
private broadcast;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=credit-warning.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credit-warning.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/billing/services/credit-warning.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,EAGL,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+DAA+D,CAAC;AACzG,OAAO,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAC;AAEhG,OAAO,EAAE,4BAA4B,EAAE,MAAM,uEAAuE,CAAC;AACrH,OAAO,EAAE,gCAAgC,EAAE,MAAM,mEAAmE,CAAC;AACrH,OAAO,EAAkB,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AAQjF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBACa,oBAAqB,SAAQ,eAAe,CAAC,OAAO,EAAE,OAAO,iBAAiB,CAAC,aAAa,CAAC;IAKtG,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAEV,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC/C,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,4BAA4B;IAC7C,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,SAAS,CAAC,QAAQ,CAAC,UAAU;;;;;;;;;;;;;;;OAAqB;gBAGhD,cAAc,EAAE,cAAc,EACb,iBAAiB,EAAE,iBAAiB,EACrD,UAAU,EAAE,UAAU,EACmB,MAAM,EAAE,qBAAqB,EACrD,wBAAwB,EAAE,wBAAwB,EAClD,4BAA4B,EAAE,4BAA4B,EAC1D,qBAAqB,EAAE,qBAAqB,EAC5C,mBAAmB,EAAE,gCAAgC,EACrD,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,iBAAiB;IAK5C,OAAO,KAAK,OAAO,GAElB;IAGK,iBAAiB,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCpE,oBAAoB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBhF;;;;;;OAMG;IACG,OAAO,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAI1C,cAAc;IAmC5B,8DAA8D;IAC9D,OAAO,CAAC,OAAO;YAgBD,aAAa;IAO3B,2EAA2E;YAC7D,SAAS;CAcxB"}
|