@cheqd/studio 3.1.0-develop.1 → 3.1.0-develop.3
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/api/account.d.ts +1 -1
- package/dist/controllers/api/account.d.ts.map +1 -1
- package/dist/controllers/api/account.js +120 -92
- package/dist/controllers/api/account.js.map +1 -1
- package/dist/middleware/auth/logto-helper.d.ts +3 -5
- package/dist/middleware/auth/logto-helper.d.ts.map +1 -1
- package/dist/middleware/auth/logto-helper.js +69 -57
- package/dist/middleware/auth/logto-helper.js.map +1 -1
- package/dist/middleware/auth/routes/admin/admin-auth.js +1 -1
- package/dist/middleware/auth/routes/admin/admin-auth.js.map +1 -1
- package/dist/services/api/role.d.ts.map +1 -1
- package/dist/services/api/role.js +2 -1
- package/dist/services/api/role.js.map +1 -1
- package/dist/services/api/user.js +1 -1
- package/dist/services/api/user.js.map +1 -1
- package/dist/services/track/admin/subscription-submitter.d.ts +4 -0
- package/dist/services/track/admin/subscription-submitter.d.ts.map +1 -1
- package/dist/services/track/admin/subscription-submitter.js +85 -2
- package/dist/services/track/admin/subscription-submitter.js.map +1 -1
- package/dist/services/track/helpers.d.ts +2 -0
- package/dist/services/track/helpers.d.ts.map +1 -1
- package/dist/services/track/helpers.js +3 -0
- package/dist/services/track/helpers.js.map +1 -1
- package/dist/services/track/submitter.d.ts +2 -0
- package/dist/services/track/submitter.d.ts.map +1 -1
- package/dist/types/admin.d.ts +4 -0
- package/dist/types/admin.d.ts.map +1 -1
- package/dist/types/admin.js +5 -1
- package/dist/types/admin.js.map +1 -1
- package/dist/types/common.d.ts +12 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/constants.js +1 -0
- package/dist/types/constants.js.map +1 -1
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/example.env +3 -1
- package/package.json +1 -1
|
@@ -23,7 +23,7 @@ export declare class AccountController {
|
|
|
23
23
|
* 500:
|
|
24
24
|
* $ref: '#/components/schemas/InternalError'
|
|
25
25
|
*/
|
|
26
|
-
get(
|
|
26
|
+
get(_request: Request, response: Response): Promise<Response<any, Record<string, any>>>;
|
|
27
27
|
/**
|
|
28
28
|
* @openapi
|
|
29
29
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/controllers/api/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/controllers/api/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmCjD,qBAAa,iBAAiB;IAC7B,OAAc,eAAe,gDAM3B;IACF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACU,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IA4BtD;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACU,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IAiC/C,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;IA0O3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IAEU,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;CAwFxD"}
|
|
@@ -12,7 +12,6 @@ import { FaucetHelper } from '../../helpers/faucet.js';
|
|
|
12
12
|
import { StatusCodes } from 'http-status-codes';
|
|
13
13
|
import { LogToWebHook } from '../../middleware/hook.js';
|
|
14
14
|
import { UserService } from '../../services/api/user.js';
|
|
15
|
-
import { RoleService } from '../../services/api/role.js';
|
|
16
15
|
import { PaymentAccountService } from '../../services/api/payment-account.js';
|
|
17
16
|
import { IdentityServiceStrategySetup } from '../../services/identity/index.js';
|
|
18
17
|
import { check } from 'express-validator';
|
|
@@ -20,6 +19,9 @@ import { EventTracker, eventTracker } from '../../services/track/tracker.js';
|
|
|
20
19
|
import * as dotenv from 'dotenv';
|
|
21
20
|
import { validate } from '../validator/decorator.js';
|
|
22
21
|
import { SupportedKeyTypes } from '@veramo/utils';
|
|
22
|
+
import { SubscriptionService } from '../../services/admin/subscription.js';
|
|
23
|
+
import { RoleService } from '../../services/api/role.js';
|
|
24
|
+
import { getStripeObjectKey } from '../../utils/index.js';
|
|
23
25
|
dotenv.config();
|
|
24
26
|
export class AccountController {
|
|
25
27
|
static createValidator = [
|
|
@@ -51,7 +53,7 @@ export class AccountController {
|
|
|
51
53
|
* 500:
|
|
52
54
|
* $ref: '#/components/schemas/InternalError'
|
|
53
55
|
*/
|
|
54
|
-
async get(
|
|
56
|
+
async get(_request, response) {
|
|
55
57
|
try {
|
|
56
58
|
if (!response.locals.customer) {
|
|
57
59
|
// It's not ok, seems like there no any customer assigned to the user yet
|
|
@@ -133,20 +135,20 @@ export class AccountController {
|
|
|
133
135
|
// For now we keep temporary 1-1 relation between user and customer
|
|
134
136
|
// So the flow is:
|
|
135
137
|
// 1. Get LogTo user id from request body
|
|
136
|
-
// 2. Check if
|
|
137
|
-
// 2.1
|
|
138
|
-
// 3.
|
|
139
|
-
// 3.1
|
|
140
|
-
// 3.
|
|
141
|
-
//
|
|
142
|
-
// 4.
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
//
|
|
149
|
-
//
|
|
138
|
+
// 2. Check if there is customer associated with such user
|
|
139
|
+
// 2.1 If not, create a new customer entity
|
|
140
|
+
// 3. Assign role to user
|
|
141
|
+
// 3.1 If user already has a subscription, assign role based on subscription
|
|
142
|
+
// 3.2 Else assign the default "Portal" role
|
|
143
|
+
// 4. If no customer is associated with the user (from point 2), create customer
|
|
144
|
+
// 4.1 Assign customer to the user
|
|
145
|
+
// 5. Create User
|
|
146
|
+
// 6. Check is paymentAccount exists for the customer
|
|
147
|
+
// 6.1. If no - create it
|
|
148
|
+
// 7. Create custom_data and update the userInfo (send it to the LogTo)
|
|
149
|
+
// 8. If custom_data is empty - create it
|
|
150
|
+
// 9. Check the token balance for Testnet account
|
|
151
|
+
// 10. Add the Stripe account to the Customer
|
|
150
152
|
let paymentAccount;
|
|
151
153
|
// 1. Get logTo UserId from request body
|
|
152
154
|
if (!request.body.user || !request.body.user.id || !request.body.user.primaryEmail) {
|
|
@@ -158,19 +160,22 @@ export class AccountController {
|
|
|
158
160
|
const logToUserEmail = request.body.user.primaryEmail;
|
|
159
161
|
// use email as name, because "name" is unique in the current db setup.
|
|
160
162
|
const logToName = request.body.user.name || logToUserEmail;
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
164
|
-
error: 'Default role is not set on Credential Service side',
|
|
165
|
-
});
|
|
166
|
-
}
|
|
163
|
+
const stripe = response.locals.stripe;
|
|
164
|
+
const logToHelper = new LogToHelper();
|
|
167
165
|
// 2. Check if such row exists in the DB
|
|
168
|
-
|
|
166
|
+
// eslint-disable-next-line prefer-const
|
|
167
|
+
let [userEntity, [customerEntity], logtoHelperSetup] = await Promise.all([
|
|
169
168
|
UserService.instance.get(logToUserId),
|
|
170
169
|
CustomerService.instance.find({ email: logToUserEmail }),
|
|
170
|
+
logToHelper.setup(),
|
|
171
171
|
]);
|
|
172
|
-
if (
|
|
173
|
-
|
|
172
|
+
if (logtoHelperSetup.status !== StatusCodes.OK) {
|
|
173
|
+
return response.status(StatusCodes.SERVICE_UNAVAILABLE).json({
|
|
174
|
+
error: logtoHelperSetup.error,
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (!userEntity) {
|
|
178
|
+
// 2. If no - create customer first
|
|
174
179
|
// Cause for now we assume only 1-1 connection between user and customer
|
|
175
180
|
// We think here that if no user row - no customer also, cause customer should be created before user
|
|
176
181
|
// Even if customer was created before for such user but the process was interruted somehow - we need to create it again
|
|
@@ -178,9 +183,9 @@ export class AccountController {
|
|
|
178
183
|
// 2.1.1. Create customer
|
|
179
184
|
// I’m setting the "name" field to an empty string on the current CustomerEntity because it is non-nullable.
|
|
180
185
|
// we will populate the customer's "name" field using the response from the Stripe account creation in account-submitter.ts.
|
|
181
|
-
if (!
|
|
182
|
-
|
|
183
|
-
if (!
|
|
186
|
+
if (!customerEntity) {
|
|
187
|
+
customerEntity = (await CustomerService.instance.create(logToName, logToUserEmail));
|
|
188
|
+
if (!customerEntity) {
|
|
184
189
|
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
185
190
|
error: 'User is not found in database: Customer was not created',
|
|
186
191
|
});
|
|
@@ -188,67 +193,79 @@ export class AccountController {
|
|
|
188
193
|
// Notify
|
|
189
194
|
await eventTracker.notify({
|
|
190
195
|
message: EventTracker.compileBasicNotification('User was not found in database: Customer with customerId: ' +
|
|
191
|
-
|
|
196
|
+
customerEntity.customerId +
|
|
192
197
|
' was created'),
|
|
193
198
|
severity: 'info',
|
|
194
199
|
});
|
|
195
200
|
}
|
|
196
|
-
//
|
|
197
|
-
|
|
198
|
-
|
|
201
|
+
// 3 Assign role to user
|
|
202
|
+
let role = null;
|
|
203
|
+
const logtoRoleSync = await syncLogtoUserRoles(logToHelper, stripe, request, logToUserId, customerEntity);
|
|
204
|
+
if (!logtoRoleSync.success) {
|
|
205
|
+
role = await RoleService.instance.getDefaultRole();
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
role = await RoleService.instance.findOne({ name: logtoRoleSync.data });
|
|
209
|
+
}
|
|
210
|
+
if (!role) {
|
|
211
|
+
return response.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
|
|
212
|
+
error: `Internal error: No logto role found`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// 2.3. Create user
|
|
216
|
+
userEntity = await UserService.instance.create(logToUserId, customerEntity, role);
|
|
217
|
+
if (!userEntity) {
|
|
199
218
|
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
200
219
|
error: 'User is not found in database: User was not created',
|
|
201
220
|
});
|
|
202
221
|
}
|
|
203
222
|
// Notify
|
|
204
223
|
await eventTracker.notify({
|
|
205
|
-
message: EventTracker.compileBasicNotification('User was not found in database: User with userId: ' +
|
|
224
|
+
message: EventTracker.compileBasicNotification('User was not found in database: User with userId: ' + userEntity.logToId + ' was created'),
|
|
206
225
|
severity: 'info',
|
|
207
226
|
});
|
|
208
227
|
}
|
|
209
|
-
//
|
|
210
|
-
if (!
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
customer = (await CustomerService.instance.create(logToUserEmail));
|
|
214
|
-
if (!customer) {
|
|
228
|
+
//4. Check if there is customer associated with such user
|
|
229
|
+
if (!userEntity.customer) {
|
|
230
|
+
customerEntity = (await CustomerService.instance.create(logToUserEmail));
|
|
231
|
+
if (!customerEntity) {
|
|
215
232
|
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
216
233
|
error: 'User exists in database: Customer was not created',
|
|
217
234
|
});
|
|
218
235
|
}
|
|
219
236
|
// Notify
|
|
220
237
|
await eventTracker.notify({
|
|
221
|
-
message: EventTracker.compileBasicNotification('User exists in database: Customer with customerId: ' +
|
|
238
|
+
message: EventTracker.compileBasicNotification('User exists in database: Customer with customerId: ' + customerEntity.customerId + ' was created'),
|
|
222
239
|
severity: 'info',
|
|
223
240
|
});
|
|
224
|
-
//
|
|
225
|
-
|
|
226
|
-
await UserService.instance.update(
|
|
241
|
+
//4.1. Assign customer to the user
|
|
242
|
+
userEntity.customer = customerEntity;
|
|
243
|
+
await UserService.instance.update(userEntity.logToId, customerEntity);
|
|
227
244
|
}
|
|
228
245
|
else {
|
|
229
|
-
|
|
246
|
+
customerEntity = userEntity.customer;
|
|
230
247
|
// this time user exists, so notify stripe account should be created.
|
|
231
|
-
if (process.env.STRIPE_ENABLED === 'true' && !
|
|
248
|
+
if (process.env.STRIPE_ENABLED === 'true' && !customerEntity.paymentProviderId) {
|
|
232
249
|
eventTracker.submit({
|
|
233
250
|
operation: OperationNameEnum.STRIPE_ACCOUNT_CREATE,
|
|
234
251
|
data: {
|
|
235
|
-
name:
|
|
236
|
-
email:
|
|
237
|
-
customerId:
|
|
252
|
+
name: customerEntity.name,
|
|
253
|
+
email: customerEntity.email,
|
|
254
|
+
customerId: customerEntity.customerId,
|
|
238
255
|
},
|
|
239
256
|
});
|
|
240
257
|
}
|
|
241
258
|
}
|
|
242
|
-
//
|
|
243
|
-
const accounts = await PaymentAccountService.instance.find({ customer });
|
|
259
|
+
// 6. Check is paymentAccount exists for the customer
|
|
260
|
+
const accounts = await PaymentAccountService.instance.find({ customer: customerEntity });
|
|
244
261
|
if (accounts.length === 0) {
|
|
245
|
-
const key = await new IdentityServiceStrategySetup(
|
|
262
|
+
const key = await new IdentityServiceStrategySetup(customerEntity.customerId).agent.createKey(SupportedKeyTypes.Secp256k1, customerEntity);
|
|
246
263
|
if (!key) {
|
|
247
264
|
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
248
265
|
error: 'PaymentAccount is not found in database: Key was not created',
|
|
249
266
|
});
|
|
250
267
|
}
|
|
251
|
-
paymentAccount = (await PaymentAccountService.instance.create(CheqdNetwork.Testnet, true,
|
|
268
|
+
paymentAccount = (await PaymentAccountService.instance.create(CheqdNetwork.Testnet, true, customerEntity, key));
|
|
252
269
|
if (!paymentAccount) {
|
|
253
270
|
return response.status(StatusCodes.BAD_REQUEST).json({
|
|
254
271
|
error: 'PaymentAccount is not found in database: Payment account was not created',
|
|
@@ -265,55 +282,27 @@ export class AccountController {
|
|
|
265
282
|
else {
|
|
266
283
|
paymentAccount = accounts[0];
|
|
267
284
|
}
|
|
268
|
-
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
return response.status(StatusCodes.BAD_GATEWAY).json({
|
|
272
|
-
error: _r.error,
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
// 5. Assign default role on LogTo
|
|
276
|
-
// 5.1 Get user's roles
|
|
277
|
-
const roles = await logToHelper.getRolesForUser(logToUserId);
|
|
278
|
-
if (roles.status !== StatusCodes.OK) {
|
|
279
|
-
return response.status(StatusCodes.BAD_GATEWAY).json({
|
|
280
|
-
error: roles.error,
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
// 5.2 If list of roles is empty and the user is not suspended - assign default role
|
|
284
|
-
if (roles.data.length === 0 && !LogToWebHook.isUserSuspended(request)) {
|
|
285
|
-
const _r = await logToHelper.setDefaultRoleForUser(user.logToId);
|
|
286
|
-
if (_r.status !== StatusCodes.OK) {
|
|
287
|
-
return response.status(StatusCodes.BAD_GATEWAY).json({
|
|
288
|
-
error: _r.error,
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
// Notify
|
|
292
|
-
await eventTracker.notify({
|
|
293
|
-
message: EventTracker.compileBasicNotification(`Default role with id: ${process.env.LOGTO_DEFAULT_ROLE_ID} was assigned to user with id: ${user.logToId}`),
|
|
294
|
-
severity: 'info',
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
const customDataFromLogTo = await logToHelper.getCustomData(user.logToId);
|
|
298
|
-
// 6. Create custom_data and update the userInfo (send it to the LogTo)
|
|
285
|
+
// 7. Assign default role on LogTo
|
|
286
|
+
const customDataFromLogTo = await logToHelper.getCustomData(userEntity.logToId);
|
|
287
|
+
// 8. Create custom_data and update the userInfo (send it to the LogTo)
|
|
299
288
|
if (Object.keys(customDataFromLogTo.data).length === 0 && paymentAccount.address) {
|
|
300
289
|
const customData = {
|
|
301
290
|
customer: {
|
|
302
|
-
id:
|
|
303
|
-
name:
|
|
291
|
+
id: customerEntity.customerId,
|
|
292
|
+
name: customerEntity.name,
|
|
304
293
|
},
|
|
305
294
|
paymentAccount: {
|
|
306
295
|
address: paymentAccount.address,
|
|
307
296
|
},
|
|
308
297
|
};
|
|
309
|
-
const _r = await logToHelper.updateCustomData(
|
|
298
|
+
const _r = await logToHelper.updateCustomData(userEntity.logToId, customData);
|
|
310
299
|
if (_r.status !== 200) {
|
|
311
300
|
return response.status(_r.status).json({
|
|
312
301
|
error: _r.error,
|
|
313
302
|
});
|
|
314
303
|
}
|
|
315
304
|
}
|
|
316
|
-
//
|
|
305
|
+
// 9. Check the token balance for Testnet account
|
|
317
306
|
if (paymentAccount.address && process.env.ENABLE_ACCOUNT_TOPUP === 'true') {
|
|
318
307
|
const balances = await checkBalance(paymentAccount.address, process.env.TESTNET_RPC_URL);
|
|
319
308
|
const balance = balances[0];
|
|
@@ -332,14 +321,14 @@ export class AccountController {
|
|
|
332
321
|
});
|
|
333
322
|
}
|
|
334
323
|
}
|
|
335
|
-
//
|
|
336
|
-
if (process.env.STRIPE_ENABLED === 'true' && !
|
|
324
|
+
// 10. Add the Stripe account to the Customer
|
|
325
|
+
if (process.env.STRIPE_ENABLED === 'true' && !customerEntity.paymentProviderId) {
|
|
337
326
|
eventTracker.submit({
|
|
338
327
|
operation: OperationNameEnum.STRIPE_ACCOUNT_CREATE,
|
|
339
328
|
data: {
|
|
340
|
-
name:
|
|
341
|
-
email:
|
|
342
|
-
customerId:
|
|
329
|
+
name: customerEntity.name,
|
|
330
|
+
email: customerEntity.email,
|
|
331
|
+
customerId: customerEntity.customerId,
|
|
343
332
|
},
|
|
344
333
|
});
|
|
345
334
|
}
|
|
@@ -456,4 +445,43 @@ export class AccountController {
|
|
|
456
445
|
__decorate([
|
|
457
446
|
validate
|
|
458
447
|
], AccountController.prototype, "create", null);
|
|
448
|
+
async function syncLogtoUserRoles(logToHelper, stripe, request, logToUserId, customer) {
|
|
449
|
+
// 3.1 If user already has a subscription, assign role based on subscription
|
|
450
|
+
// 3.2 Else assign the default "Portal" role
|
|
451
|
+
if (!LogToWebHook.isUserSuspended(request)) {
|
|
452
|
+
const subscription = await SubscriptionService.instance.findCurrent(customer);
|
|
453
|
+
if (!subscription) {
|
|
454
|
+
return {
|
|
455
|
+
success: false,
|
|
456
|
+
error: `Logto role assigned failed: No active subscription found for customer with id: ${customer.customerId}`,
|
|
457
|
+
status: 400,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
const stripeSubscription = await stripe.subscriptions.retrieve(subscription.subscriptionId);
|
|
461
|
+
const stripeProduct = await stripe.products.retrieve(getStripeObjectKey(stripeSubscription.items.data[0].plan.product));
|
|
462
|
+
const logtoRoleName = stripeProduct.name.toLowerCase();
|
|
463
|
+
const roleResponse = await logToHelper.assignCustomerPlanRoles(logToUserId, logtoRoleName);
|
|
464
|
+
if (roleResponse.status !== StatusCodes.OK) {
|
|
465
|
+
return {
|
|
466
|
+
success: false,
|
|
467
|
+
status: roleResponse.status,
|
|
468
|
+
error: roleResponse.error,
|
|
469
|
+
};
|
|
470
|
+
}
|
|
471
|
+
await eventTracker.notify({
|
|
472
|
+
message: EventTracker.compileBasicNotification(`${stripeProduct.name} role was assigned to user with id: ${logToUserId}`),
|
|
473
|
+
severity: 'info',
|
|
474
|
+
});
|
|
475
|
+
return {
|
|
476
|
+
success: true,
|
|
477
|
+
status: 200,
|
|
478
|
+
data: logtoRoleName,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
return {
|
|
482
|
+
success: false,
|
|
483
|
+
error: `Logto role not assigned: User with id ${logToUserId} is suspended`,
|
|
484
|
+
status: 409,
|
|
485
|
+
};
|
|
486
|
+
}
|
|
459
487
|
//# sourceMappingURL=account.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/controllers/api/account.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/controllers/api/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ICommonErrorResponse } from '../../types/authentication.js';
|
|
2
2
|
import type { IOAuthProvider } from './oauth/abstract.js';
|
|
3
3
|
import { OAuthProvider } from './oauth/abstract.js';
|
|
4
|
+
import { SupportedPlanTypes } from '../../types/admin.js';
|
|
4
5
|
export declare class LogToHelper extends OAuthProvider implements IOAuthProvider {
|
|
5
6
|
private m2mToken;
|
|
6
7
|
private allScopes;
|
|
@@ -14,8 +15,6 @@ export declare class LogToHelper extends OAuthProvider implements IOAuthProvider
|
|
|
14
15
|
getAllScopes(): string[];
|
|
15
16
|
getDefaultScopes(): string[];
|
|
16
17
|
getAllResourcesWithNames(): string[];
|
|
17
|
-
setDefaultRoleForUser(userId: string): Promise<ICommonErrorResponse>;
|
|
18
|
-
setDefaultRoleForApp(appId: string): Promise<ICommonErrorResponse>;
|
|
19
18
|
private returnOk;
|
|
20
19
|
private returnError;
|
|
21
20
|
getUserScopes(userId: string): Promise<ICommonErrorResponse>;
|
|
@@ -27,9 +26,8 @@ export declare class LogToHelper extends OAuthProvider implements IOAuthProvider
|
|
|
27
26
|
getScopesForRolesList(roles: string[]): Promise<ICommonErrorResponse>;
|
|
28
27
|
getRolesForUser(userId: string): Promise<ICommonErrorResponse>;
|
|
29
28
|
getRolesForApp(appId: string): Promise<ICommonErrorResponse>;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
private assignDefaultRoleForApp;
|
|
29
|
+
assignCustomerPlanRoles(userId: string, planType: SupportedPlanTypes): Promise<ICommonErrorResponse>;
|
|
30
|
+
removeLogtoRoleFromUser(userId: string, roleId: string): Promise<ICommonErrorResponse>;
|
|
33
31
|
private getRoleIdByName;
|
|
34
32
|
updateCustomData(userId: string, customData: any): Promise<ICommonErrorResponse>;
|
|
35
33
|
private getUserInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logto-helper.d.ts","sourceRoot":"","sources":["../../../src/middleware/auth/logto-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"logto-helper.d.ts","sourceRoot":"","sources":["../../../src/middleware/auth/logto-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,qBAAa,WAAY,SAAQ,aAAc,YAAW,cAAc;IACvE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,oBAAoB,CAAW;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,CAAC,mBAAmB,CAAK;;IAUnB,KAAK,IAAI,OAAO,CAAC,oBAAoB,CAAC;YAqBrC,WAAW;IAoBzB,OAAO,CAAC,cAAc;IAMf,YAAY,IAAI,MAAM,EAAE;IAIxB,gBAAgB,IAAI,MAAM,EAAE;IAI5B,wBAAwB,IAAI,MAAM,EAAE;IAI3C,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IASN,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgB5D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAgBzD,gBAAgB;YAyBhB,YAAY;YAoBZ,gBAAgB;YAqBhB,oBAAoB;IAqBrB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAiBrE,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAW9D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAWnE,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA6EpG,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;YAqB9C,eAAe;IAsBhB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAY/E,WAAW;IASZ,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAU3D,wBAAwB;IAczB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC;YAW/C,YAAY;YAgBZ,WAAW;YAgBX,UAAU;YAgBV,WAAW;CAgCzB"}
|
|
@@ -3,6 +3,8 @@ import jwt from 'jsonwebtoken';
|
|
|
3
3
|
import * as dotenv from 'dotenv';
|
|
4
4
|
import { OAuthProvider } from './oauth/abstract.js';
|
|
5
5
|
import { EventTracker, eventTracker } from '../../services/track/tracker.js';
|
|
6
|
+
import { env } from 'node:process';
|
|
7
|
+
import { SupportedPlanTypes } from '../../types/admin.js';
|
|
6
8
|
dotenv.config();
|
|
7
9
|
export class LogToHelper extends OAuthProvider {
|
|
8
10
|
m2mToken;
|
|
@@ -66,34 +68,6 @@ export class LogToHelper extends OAuthProvider {
|
|
|
66
68
|
getAllResourcesWithNames() {
|
|
67
69
|
return this.allResourceWithNames;
|
|
68
70
|
}
|
|
69
|
-
async setDefaultRoleForUser(userId) {
|
|
70
|
-
const roles = await this.getRolesForUser(userId);
|
|
71
|
-
if (roles.status !== StatusCodes.OK) {
|
|
72
|
-
return this.returnError(StatusCodes.BAD_GATEWAY, roles.error);
|
|
73
|
-
}
|
|
74
|
-
// Check that default role is set
|
|
75
|
-
for (const role of roles.data) {
|
|
76
|
-
if (role.id === process.env.LOGTO_DEFAULT_ROLE_ID) {
|
|
77
|
-
return this.returnOk(roles.data);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Assign a default role to a user
|
|
81
|
-
return await this.assignDefaultRoleForUser(userId, process.env.LOGTO_DEFAULT_ROLE_ID);
|
|
82
|
-
}
|
|
83
|
-
async setDefaultRoleForApp(appId) {
|
|
84
|
-
const roles = await this.getRolesForUser(appId);
|
|
85
|
-
if (roles.status !== StatusCodes.OK) {
|
|
86
|
-
return this.returnError(StatusCodes.BAD_GATEWAY, roles.error);
|
|
87
|
-
}
|
|
88
|
-
// Check that default role is set
|
|
89
|
-
for (const role of roles.data) {
|
|
90
|
-
if (role.id === process.env.LOGTO_DEFAULT_ROLE_ID) {
|
|
91
|
-
return this.returnOk(roles.data);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
// Assign a default role to a user
|
|
95
|
-
return await this.assignDefaultRoleForApp(appId, process.env.LOGTO_DEFAULT_ROLE_ID);
|
|
96
|
-
}
|
|
97
71
|
returnOk(data) {
|
|
98
72
|
return {
|
|
99
73
|
status: StatusCodes.OK,
|
|
@@ -246,34 +220,66 @@ export class LogToHelper extends OAuthProvider {
|
|
|
246
220
|
return this.returnError(StatusCodes.BAD_GATEWAY, `getRolesForUser ${err}`);
|
|
247
221
|
}
|
|
248
222
|
}
|
|
249
|
-
async
|
|
250
|
-
const
|
|
251
|
-
try {
|
|
252
|
-
return await this.getToLogto(uri, 'GET');
|
|
253
|
-
}
|
|
254
|
-
catch (err) {
|
|
255
|
-
return this.returnError(StatusCodes.BAD_GATEWAY, `getRoleInfo ${err}`);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
async assignDefaultRoleForUser(userId, roleId) {
|
|
259
|
-
const userInfo = await this.getUserInfo(userId);
|
|
260
|
-
const uri = new URL(`/api/users/${userId}/roles`, process.env.LOGTO_ENDPOINT);
|
|
223
|
+
async assignCustomerPlanRoles(userId, planType) {
|
|
224
|
+
const [userInfo, userRoles] = await Promise.all([this.getUserInfo(userId), this.getRolesForUser(userId)]);
|
|
261
225
|
if (userInfo.status !== StatusCodes.OK) {
|
|
262
|
-
return this.returnError(
|
|
226
|
+
return this.returnError(userInfo.status, 'Could not fetch the info about the user');
|
|
263
227
|
}
|
|
264
228
|
// Means that user exists
|
|
265
|
-
if (userInfo.data.isSuspended
|
|
229
|
+
if (userInfo.data.isSuspended) {
|
|
266
230
|
return this.returnError(StatusCodes.FORBIDDEN, 'User is suspended');
|
|
267
231
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
232
|
+
if (userRoles.status !== StatusCodes.OK) {
|
|
233
|
+
return this.returnError(userRoles.status, 'Could not fetch the info about user roles');
|
|
234
|
+
}
|
|
235
|
+
const assignedRoleIds = userRoles.data.map((role) => role.id);
|
|
236
|
+
// INFO: Context
|
|
237
|
+
// We currently have two plans, Build and Test.
|
|
238
|
+
// All of our users get a "Portal" role which let's them work with our Studio Portal (UI)
|
|
239
|
+
// Test plan lets you operate with our Testnet so we assign the "Testnet" role
|
|
240
|
+
// Build plan lets you work with our Testnet and Mainnet, so we assign "Testnet" and "Mainnet" roles
|
|
241
|
+
// "build" is the superset of all the roles (testnet + mainnet)
|
|
242
|
+
const buildPlanRoleIds = [env.LOGTO_MAINNET_ROLE_ID.trim(), env.LOGTO_TESTNET_ROLE_ID.trim()];
|
|
243
|
+
const testPlanRoleId = env.LOGTO_TESTNET_ROLE_ID.trim();
|
|
244
|
+
const hasDefaultPortalRole = assignedRoleIds.findIndex((roleId) => roleId === env.LOGTO_DEFAULT_ROLE_ID) != -1;
|
|
245
|
+
const planRoleIds = hasDefaultPortalRole ? [] : [env.LOGTO_DEFAULT_ROLE_ID.trim()];
|
|
246
|
+
if (planType === SupportedPlanTypes.Build) {
|
|
247
|
+
const buildRoleIsAssigned = buildPlanRoleIds.every((roleId) => assignedRoleIds.includes(roleId));
|
|
248
|
+
if (buildRoleIsAssigned) {
|
|
249
|
+
return {
|
|
250
|
+
status: 201,
|
|
251
|
+
error: '',
|
|
252
|
+
data: {
|
|
253
|
+
message: `${planType} plan role was successfully assigned to the user`,
|
|
254
|
+
},
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
const billingPlanRoleIds = buildPlanRoleIds.filter((id) => !assignedRoleIds.includes(id));
|
|
258
|
+
planRoleIds.push(...billingPlanRoleIds);
|
|
259
|
+
}
|
|
260
|
+
else if (planType === SupportedPlanTypes.Test) {
|
|
261
|
+
// "build" plan is a superset of "test" plan
|
|
262
|
+
// check the user has mainnet role, remove it
|
|
263
|
+
const mainnetRoleId = assignedRoleIds.find((roleId) => roleId === buildPlanRoleIds[0]);
|
|
264
|
+
if (mainnetRoleId) {
|
|
265
|
+
await this.removeLogtoRoleFromUser(userId, mainnetRoleId);
|
|
266
|
+
}
|
|
267
|
+
const testnetRoleId = assignedRoleIds.find((roleId) => roleId === testPlanRoleId);
|
|
268
|
+
if (testnetRoleId) {
|
|
269
|
+
return {
|
|
270
|
+
status: 201,
|
|
271
|
+
error: '',
|
|
272
|
+
data: {
|
|
273
|
+
message: `${planType} plan role was successfully assigned to the user`,
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
planRoleIds.push(testPlanRoleId);
|
|
272
278
|
}
|
|
273
|
-
// Such role exists
|
|
274
279
|
try {
|
|
280
|
+
const uri = new URL(`/api/users/${userId}/roles`, process.env.LOGTO_ENDPOINT);
|
|
275
281
|
const body = {
|
|
276
|
-
roleIds:
|
|
282
|
+
roleIds: planRoleIds,
|
|
277
283
|
};
|
|
278
284
|
return await this.postToLogto(uri, body, { 'Content-Type': 'application/json' });
|
|
279
285
|
}
|
|
@@ -281,17 +287,23 @@ export class LogToHelper extends OAuthProvider {
|
|
|
281
287
|
return this.returnError(StatusCodes.BAD_GATEWAY, `getRolesForUser ${err}`);
|
|
282
288
|
}
|
|
283
289
|
}
|
|
284
|
-
async
|
|
285
|
-
const uri = new URL(`/api/
|
|
286
|
-
// Such role exists
|
|
290
|
+
async removeLogtoRoleFromUser(userId, roleId) {
|
|
291
|
+
const uri = new URL(`/api/users/${userId}/roles/${roleId}`, process.env.LOGTO_ENDPOINT);
|
|
287
292
|
try {
|
|
288
|
-
const
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
293
|
+
const response = await fetch(uri, {
|
|
294
|
+
method: 'DELETE',
|
|
295
|
+
headers: {
|
|
296
|
+
Authorization: 'Bearer ' + (await this.getM2MToken()),
|
|
297
|
+
},
|
|
298
|
+
});
|
|
299
|
+
if (response.status === StatusCodes.NO_CONTENT) {
|
|
300
|
+
return this.returnOk({});
|
|
301
|
+
}
|
|
302
|
+
const err = await response.text();
|
|
303
|
+
return this.returnError(response.status, err);
|
|
292
304
|
}
|
|
293
305
|
catch (err) {
|
|
294
|
-
return this.returnError(StatusCodes.
|
|
306
|
+
return this.returnError(StatusCodes.INTERNAL_SERVER_ERROR, `removeUserRole: ${err}`);
|
|
295
307
|
}
|
|
296
308
|
}
|
|
297
309
|
async getRoleIdByName(roleName) {
|
|
@@ -331,7 +343,7 @@ export class LogToHelper extends OAuthProvider {
|
|
|
331
343
|
return await this.getToLogto(uri, 'GET');
|
|
332
344
|
}
|
|
333
345
|
catch (err) {
|
|
334
|
-
return this.returnError(StatusCodes.
|
|
346
|
+
return this.returnError(StatusCodes.SERVICE_UNAVAILABLE, `getUserInfo ${err}`);
|
|
335
347
|
}
|
|
336
348
|
}
|
|
337
349
|
async getCustomData(userId) {
|