@cheqd/studio 3.3.0-develop.3 → 3.3.0-develop.5
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/controllers/admin/webhook.d.ts +9 -0
- package/dist/controllers/admin/webhook.d.ts.map +1 -1
- package/dist/controllers/admin/webhook.js +223 -46
- package/dist/controllers/admin/webhook.js.map +1 -1
- package/dist/controllers/api/account.d.ts +2 -2
- package/dist/controllers/api/account.d.ts.map +1 -1
- package/dist/controllers/api/account.js +10 -7
- package/dist/controllers/api/account.js.map +1 -1
- package/dist/controllers/validator/jsonld-proof.js +2 -2
- package/dist/controllers/validator/jsonld-proof.js.map +1 -1
- package/dist/database/entities/customer.entity.d.ts +2 -2
- package/dist/database/entities/customer.entity.d.ts.map +1 -1
- package/dist/database/entities/customer.entity.js +3 -2
- package/dist/database/entities/customer.entity.js.map +1 -1
- package/dist/database/migrations/AlterCustomerTableUniqueEmail.d.ts +6 -0
- package/dist/database/migrations/AlterCustomerTableUniqueEmail.d.ts.map +1 -0
- package/dist/database/migrations/AlterCustomerTableUniqueEmail.js +29 -0
- package/dist/database/migrations/AlterCustomerTableUniqueEmail.js.map +1 -0
- package/dist/database/migrations/MigrateData.js +1 -1
- package/dist/database/migrations/MigrateData.js.map +1 -1
- package/dist/database/types/types.d.ts.map +1 -1
- package/dist/database/types/types.js +3 -0
- package/dist/database/types/types.js.map +1 -1
- package/dist/services/admin/stripe.d.ts +1 -2
- package/dist/services/admin/stripe.d.ts.map +1 -1
- package/dist/services/admin/stripe.js +10 -15
- package/dist/services/admin/stripe.js.map +1 -1
- package/dist/services/api/customer.d.ts +1 -4
- package/dist/services/api/customer.d.ts.map +1 -1
- package/dist/services/api/customer.js +2 -5
- package/dist/services/api/customer.js.map +1 -1
- package/dist/services/identity/agent.d.ts.map +1 -1
- package/dist/services/identity/agent.js +6 -2
- package/dist/services/identity/agent.js.map +1 -1
- package/dist/services/track/helpers.d.ts +11 -0
- package/dist/services/track/helpers.d.ts.map +1 -1
- package/dist/services/track/helpers.js +14 -11
- package/dist/services/track/helpers.js.map +1 -1
- package/dist/services/track/tracker.d.ts.map +1 -1
- package/dist/services/track/tracker.js +0 -2
- package/dist/services/track/tracker.js.map +1 -1
- package/dist/static/swagger-api.json +6 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/constants.js +1 -1
- package/dist/types/constants.js.map +1 -1
- package/dist/types/swagger-api-types.d.ts +4 -0
- package/dist/types/swagger-api-types.d.ts.map +1 -1
- package/dist/types/swagger-api-types.js +4 -0
- package/dist/types/swagger-api-types.js.map +1 -1
- package/dist/types/validation.d.ts +2 -1
- package/dist/types/validation.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/services/track/admin/subscription-submitter.d.ts +0 -17
- package/dist/services/track/admin/subscription-submitter.d.ts.map +0 -1
- package/dist/services/track/admin/subscription-submitter.js +0 -208
- package/dist/services/track/admin/subscription-submitter.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger-api-types.d.ts","sourceRoot":"","sources":["../../src/types/swagger-api-types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"swagger-api-types.d.ts","sourceRoot":"","sources":["../../src/types/swagger-api-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAw1CG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swagger-api-types.js","sourceRoot":"","sources":["../../src/types/swagger-api-types.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"swagger-api-types.js","sourceRoot":"","sources":["../../src/types/swagger-api-types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAw1CG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/types/validation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACxB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cheqd/studio",
|
|
3
|
-
"version": "3.3.0-develop.
|
|
3
|
+
"version": "3.3.0-develop.5",
|
|
4
4
|
"description": "cheqd Studio Backend",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"@cheqd/ts-proto": "^3.4.4",
|
|
59
59
|
"@cosmjs/amino": "^0.32.4",
|
|
60
60
|
"@cosmjs/encoding": "^0.32.4",
|
|
61
|
-
"@logto/express": "^2.3.
|
|
61
|
+
"@logto/express": "^2.3.15",
|
|
62
62
|
"@stablelib/ed25519": "^1.0.3",
|
|
63
63
|
"@veramo/core": "^6.0.0",
|
|
64
64
|
"@veramo/credential-ld": "^6.0.0",
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
"@semantic-release/changelog": "^6.0.3",
|
|
112
112
|
"@semantic-release/commit-analyzer": "^13.0.0",
|
|
113
113
|
"@semantic-release/git": "^10.0.1",
|
|
114
|
-
"@semantic-release/github": "^10.1.
|
|
114
|
+
"@semantic-release/github": "^10.1.7",
|
|
115
115
|
"@semantic-release/npm": "^12.0.1",
|
|
116
116
|
"@semantic-release/release-notes-generator": "^14.0.1",
|
|
117
117
|
"@types/bcrypt": "^5.0.2",
|
|
@@ -124,12 +124,12 @@
|
|
|
124
124
|
"@types/helmet": "^4.0.0",
|
|
125
125
|
"@types/json-stringify-safe": "^5.0.3",
|
|
126
126
|
"@types/jsonwebtoken": "^9.0.6",
|
|
127
|
-
"@types/node": "^20.16.
|
|
127
|
+
"@types/node": "^20.16.3",
|
|
128
128
|
"@types/secp256k1": "^4.0.6",
|
|
129
129
|
"@types/swagger-jsdoc": "^6.0.4",
|
|
130
130
|
"@types/swagger-ui-express": "^4.1.6",
|
|
131
131
|
"@types/uuid": "^9.0.8",
|
|
132
|
-
"@types/validator": "^13.12.
|
|
132
|
+
"@types/validator": "^13.12.1",
|
|
133
133
|
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
134
134
|
"@typescript-eslint/parser": "^5.62.0",
|
|
135
135
|
"buffer": "6.0.3",
|
|
@@ -141,10 +141,10 @@
|
|
|
141
141
|
"prettier": "^3.3.3",
|
|
142
142
|
"semantic-release": "^24.1.0",
|
|
143
143
|
"swagger-jsdoc": "^6.2.8",
|
|
144
|
-
"ts-jest": "^29.2.
|
|
144
|
+
"ts-jest": "^29.2.5",
|
|
145
145
|
"ts-loader": "^9.5.1",
|
|
146
146
|
"ts-node": "^10.9.2",
|
|
147
|
-
"tsx": "^4.
|
|
147
|
+
"tsx": "^4.19.0",
|
|
148
148
|
"typescript": "^5.5.4",
|
|
149
149
|
"uint8arrays": "^5.1.0"
|
|
150
150
|
},
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { INotifyMessage } from '../../../types/track.js';
|
|
2
|
-
import type { ISubmitOperation } from '../submitter.js';
|
|
3
|
-
import type { IObserver } from '../types.js';
|
|
4
|
-
export declare class SubscriptionSubmitter implements IObserver {
|
|
5
|
-
private emitter;
|
|
6
|
-
private readonly stripe;
|
|
7
|
-
constructor(emitter: EventEmitter);
|
|
8
|
-
notify(notifyMessage: INotifyMessage): void;
|
|
9
|
-
update(operation: ISubmitOperation): Promise<void>;
|
|
10
|
-
private handleCustomerRoleAssignment;
|
|
11
|
-
private handleCustomerRoleRemoval;
|
|
12
|
-
private syncLogtoRoles;
|
|
13
|
-
submitSubscriptionCreate(operation: ISubmitOperation): Promise<void>;
|
|
14
|
-
submitSubscriptionUpdate(operation: ISubmitOperation): Promise<void>;
|
|
15
|
-
submitSubscriptionCancel(operation: ISubmitOperation): Promise<void>;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=subscription-submitter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-submitter.d.ts","sourceRoot":"","sources":["../../../../src/services/track/admin/subscription-submitter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAA2B,MAAM,iBAAiB,CAAC;AAEjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAO7C,qBAAa,qBAAsB,YAAW,SAAS;IACtD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,OAAO,EAAE,YAAY;IAKjC,MAAM,CAAC,aAAa,EAAE,cAAc,GAAG,IAAI;IAIrC,MAAM,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAgB1C,4BAA4B;YA8B5B,yBAAyB;YAgCzB,cAAc;IAsCtB,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2FpE,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDpE,wBAAwB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqC1E"}
|
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
import Stripe from 'stripe';
|
|
2
|
-
import { OperationNameEnum } from '../../../types/constants.js';
|
|
3
|
-
import { SubscriptionService } from '../../admin/subscription.js';
|
|
4
|
-
import { CustomerService } from '../../api/customer.js';
|
|
5
|
-
import { EventTracker } from '../tracker.js';
|
|
6
|
-
import { LogToHelper } from '../../../middleware/auth/logto-helper.js';
|
|
7
|
-
import { StatusCodes } from 'http-status-codes';
|
|
8
|
-
import { UserService } from '../../api/user.js';
|
|
9
|
-
export class SubscriptionSubmitter {
|
|
10
|
-
emitter;
|
|
11
|
-
stripe;
|
|
12
|
-
constructor(emitter) {
|
|
13
|
-
this.emitter = emitter;
|
|
14
|
-
this.stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
|
|
15
|
-
}
|
|
16
|
-
notify(notifyMessage) {
|
|
17
|
-
this.emitter.emit('notify', notifyMessage);
|
|
18
|
-
}
|
|
19
|
-
async update(operation) {
|
|
20
|
-
switch (operation.operation) {
|
|
21
|
-
case OperationNameEnum.SUBSCRIPTION_CREATE:
|
|
22
|
-
await this.submitSubscriptionCreate(operation);
|
|
23
|
-
break;
|
|
24
|
-
case OperationNameEnum.SUBSCRIPTION_UPDATE:
|
|
25
|
-
await this.submitSubscriptionUpdate(operation);
|
|
26
|
-
break;
|
|
27
|
-
case OperationNameEnum.SUBSCRIPTION_CANCEL:
|
|
28
|
-
await this.submitSubscriptionCancel(operation);
|
|
29
|
-
break;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
async handleCustomerRoleAssignment(operation, logToHelper, userLogtoId, productName) {
|
|
33
|
-
const roleAssignmentResponse = await logToHelper.assignCustomerPlanRoles(userLogtoId, productName.toLowerCase());
|
|
34
|
-
if (roleAssignmentResponse.status !== 201) {
|
|
35
|
-
this.notify({
|
|
36
|
-
message: EventTracker.compileBasicNotification(`Failed to assign roles to user for planType ${productName}: ${roleAssignmentResponse.error}`, operation.operation),
|
|
37
|
-
severity: 'error',
|
|
38
|
-
});
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
this.notify({
|
|
42
|
-
message: EventTracker.compileBasicNotification(`${productName} plan assigned to user with logtoId ${userLogtoId}`, operation.operation),
|
|
43
|
-
severity: 'info',
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
async handleCustomerRoleRemoval(operation, logto, userLogtoId) {
|
|
47
|
-
const responses = await Promise.allSettled([
|
|
48
|
-
logto.removeLogtoRoleFromUser(userLogtoId, process.env.LOGTO_TESTNET_ROLE_ID.trim()),
|
|
49
|
-
logto.removeLogtoRoleFromUser(userLogtoId, process.env.LOGTO_MAINNET_ROLE_ID.trim()),
|
|
50
|
-
]);
|
|
51
|
-
const allRolesRemoved = responses.every((r) => r.status === 'fulfilled' && r.value.status === StatusCodes.OK);
|
|
52
|
-
if (allRolesRemoved) {
|
|
53
|
-
this.notify({
|
|
54
|
-
message: EventTracker.compileBasicNotification(`Roles have been removed successfully for user with id: ${userLogtoId}`, operation.operation),
|
|
55
|
-
severity: 'info',
|
|
56
|
-
});
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
for (const resp of responses) {
|
|
60
|
-
if (resp.status === 'rejected' || resp.value.status !== StatusCodes.OK) {
|
|
61
|
-
const errMsg = resp.status === 'rejected' ? resp.reason.message : resp.value.error;
|
|
62
|
-
this.notify({
|
|
63
|
-
message: EventTracker.compileBasicNotification(`Role removal error: ${errMsg}`, operation.operation),
|
|
64
|
-
severity: 'error',
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
async syncLogtoRoles(operation, customerId, productName) {
|
|
70
|
-
const logToHelper = new LogToHelper();
|
|
71
|
-
const setupResp = await logToHelper.setup();
|
|
72
|
-
if (setupResp.status !== StatusCodes.OK) {
|
|
73
|
-
this.notify({
|
|
74
|
-
message: EventTracker.compileBasicNotification(`Logto client initialisation failed: ${setupResp.error}`, operation.operation),
|
|
75
|
-
severity: 'error',
|
|
76
|
-
});
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const user = await UserService.instance.userRepository.findOne({ where: { customer: { customerId } } });
|
|
80
|
-
if (user) {
|
|
81
|
-
switch (operation.operation) {
|
|
82
|
-
case OperationNameEnum.SUBSCRIPTION_CREATE:
|
|
83
|
-
case OperationNameEnum.SUBSCRIPTION_UPDATE:
|
|
84
|
-
this.handleCustomerRoleAssignment(operation, logToHelper, user.logToId, productName);
|
|
85
|
-
return;
|
|
86
|
-
case OperationNameEnum.SUBSCRIPTION_CANCEL:
|
|
87
|
-
this.handleCustomerRoleRemoval(operation, logToHelper, user.logToId);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
this.notify({
|
|
92
|
-
message: EventTracker.compileBasicNotification(`Role assignment failed: No user found with customerId: ${customerId}`, operation.operation),
|
|
93
|
-
severity: 'error',
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
async submitSubscriptionCreate(operation) {
|
|
97
|
-
const data = operation.data;
|
|
98
|
-
let customer = operation.options?.customer;
|
|
99
|
-
try {
|
|
100
|
-
const [product, stripeCustomer] = await Promise.all([
|
|
101
|
-
this.stripe.products.retrieve(data.productId),
|
|
102
|
-
this.stripe.customers.retrieve(data.paymentProviderId),
|
|
103
|
-
]);
|
|
104
|
-
if (!customer) {
|
|
105
|
-
const whereClause = [{ paymentProviderId: data.paymentProviderId }];
|
|
106
|
-
// we add an additional "OR" check in case that a customer was created locally with email and no paymentProviderId
|
|
107
|
-
if (!stripeCustomer.deleted && stripeCustomer.email) {
|
|
108
|
-
whereClause.push({ email: stripeCustomer.email });
|
|
109
|
-
}
|
|
110
|
-
const customers = await CustomerService.instance.customerRepository.find({
|
|
111
|
-
where: whereClause,
|
|
112
|
-
});
|
|
113
|
-
if (customers.length === 0) {
|
|
114
|
-
this.notify({
|
|
115
|
-
message: EventTracker.compileBasicNotification(`Customer not found for Cheqd Studio, creating new customer record with paymentProviderId: ${data.paymentProviderId}`, operation.operation),
|
|
116
|
-
severity: 'info',
|
|
117
|
-
});
|
|
118
|
-
if (!stripeCustomer.deleted && stripeCustomer.email) {
|
|
119
|
-
const customerName = stripeCustomer.name ?? stripeCustomer.email;
|
|
120
|
-
const customer = await CustomerService.instance.create(customerName, stripeCustomer.email, undefined, data.paymentProviderId);
|
|
121
|
-
customers.push(customer);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
if (customers.length !== 1) {
|
|
125
|
-
this.notify({
|
|
126
|
-
message: EventTracker.compileBasicNotification(`Only one Stripe account should be associated with CaaS customer. Stripe accountId: ${data.paymentProviderId}.`, operation.operation),
|
|
127
|
-
severity: 'error',
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
customer = customers[0];
|
|
131
|
-
}
|
|
132
|
-
const subscription = await SubscriptionService.instance.create(data.subscriptionId, customer, data.status, data.currentPeriodStart, data.currentPeriodEnd, data.trialStart, data.trialEnd);
|
|
133
|
-
if (!subscription) {
|
|
134
|
-
this.notify({
|
|
135
|
-
message: EventTracker.compileBasicNotification(`Failed to create a new subscription with id: ${data.subscriptionId}.`, operation.operation),
|
|
136
|
-
severity: 'error',
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
await this.syncLogtoRoles(operation, customer.customerId, product.name);
|
|
140
|
-
this.notify({
|
|
141
|
-
message: EventTracker.compileBasicNotification(`Subscription created with id: ${data.subscriptionId}.`, operation.operation),
|
|
142
|
-
severity: 'info',
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
this.notify({
|
|
147
|
-
message: EventTracker.compileBasicNotification(`Failed to create a new subscription with id: ${data.subscriptionId} because of error: ${error?.message || error}`, operation.operation),
|
|
148
|
-
severity: 'error',
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async submitSubscriptionUpdate(operation) {
|
|
153
|
-
const data = operation.data;
|
|
154
|
-
try {
|
|
155
|
-
const subscription = await SubscriptionService.instance.update(data.subscriptionId, data.status, data.currentPeriodStart, data.currentPeriodEnd, data.trialStart, data.trialEnd);
|
|
156
|
-
if (!subscription) {
|
|
157
|
-
this.notify({
|
|
158
|
-
message: EventTracker.compileBasicNotification(`Failed to update subscription with id: ${data.subscriptionId}.`, operation.operation),
|
|
159
|
-
severity: 'error',
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
const [customer, product] = await Promise.all([
|
|
163
|
-
CustomerService.instance.findbyPaymentProviderId(data.paymentProviderId),
|
|
164
|
-
this.stripe.products.retrieve(data.productId),
|
|
165
|
-
]);
|
|
166
|
-
if (customer) {
|
|
167
|
-
await this.syncLogtoRoles(operation, customer.customerId, product.name);
|
|
168
|
-
}
|
|
169
|
-
this.notify({
|
|
170
|
-
message: EventTracker.compileBasicNotification(`Subscription updated with id: ${data.subscriptionId}.`, operation.operation),
|
|
171
|
-
severity: 'info',
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
this.notify({
|
|
176
|
-
message: EventTracker.compileBasicNotification(`Failed to update subscription with id: ${data.subscriptionId} because of error: ${error?.message || error}`, operation.operation),
|
|
177
|
-
severity: 'error',
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
async submitSubscriptionCancel(operation) {
|
|
182
|
-
const data = operation.data;
|
|
183
|
-
try {
|
|
184
|
-
const subscription = await SubscriptionService.instance.update(data.subscriptionId, data.status);
|
|
185
|
-
if (!subscription) {
|
|
186
|
-
this.notify({
|
|
187
|
-
message: EventTracker.compileBasicNotification(`Failed to cancel subscription with id: ${data.subscriptionId}.`, operation.operation),
|
|
188
|
-
severity: 'error',
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
const customer = await CustomerService.instance.findbyPaymentProviderId(data.paymentProviderId);
|
|
192
|
-
if (customer) {
|
|
193
|
-
this.syncLogtoRoles(operation, customer.customerId, '');
|
|
194
|
-
}
|
|
195
|
-
this.notify({
|
|
196
|
-
message: EventTracker.compileBasicNotification(`Subscription canceled with id: ${data.subscriptionId}.`, operation.operation),
|
|
197
|
-
severity: 'info',
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
this.notify({
|
|
202
|
-
message: EventTracker.compileBasicNotification(`Failed to cancel subscription with id: ${data.subscriptionId} because of error: ${error?.message || error}`, operation.operation),
|
|
203
|
-
severity: 'error',
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
//# sourceMappingURL=subscription-submitter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscription-submitter.js","sourceRoot":"","sources":["../../../../src/services/track/admin/subscription-submitter.ts"],"names":[],"mappings":"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"}
|