@solidxai/core 0.1.11 → 0.1.12-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/constants/error-messages.d.ts +1 -0
  2. package/dist/constants/error-messages.d.ts.map +1 -1
  3. package/dist/constants/error-messages.js +1 -0
  4. package/dist/constants/error-messages.js.map +1 -1
  5. package/dist/controllers/authentication.controller.d.ts +1 -1
  6. package/dist/controllers/chatter-message.controller.d.ts +0 -2
  7. package/dist/controllers/chatter-message.controller.d.ts.map +1 -1
  8. package/dist/controllers/chatter-message.controller.js +0 -16
  9. package/dist/controllers/chatter-message.controller.js.map +1 -1
  10. package/dist/guards/access-token.guard.d.ts +5 -1
  11. package/dist/guards/access-token.guard.d.ts.map +1 -1
  12. package/dist/guards/access-token.guard.js +31 -3
  13. package/dist/guards/access-token.guard.js.map +1 -1
  14. package/dist/guards/authentication.guard.d.ts +1 -0
  15. package/dist/guards/authentication.guard.d.ts.map +1 -1
  16. package/dist/guards/authentication.guard.js +16 -1
  17. package/dist/guards/authentication.guard.js.map +1 -1
  18. package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
  19. package/dist/helpers/bootstrap.helper.js +3 -1
  20. package/dist/helpers/bootstrap.helper.js.map +1 -1
  21. package/dist/helpers/solid-core-error-codes-provider.service.d.ts.map +1 -1
  22. package/dist/helpers/solid-core-error-codes-provider.service.js +28 -0
  23. package/dist/helpers/solid-core-error-codes-provider.service.js.map +1 -1
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +1 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/interfaces/active-user-data.interface.d.ts +1 -0
  29. package/dist/interfaces/active-user-data.interface.d.ts.map +1 -1
  30. package/dist/interfaces/active-user-data.interface.js.map +1 -1
  31. package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
  32. package/dist/seeders/module-metadata-seeder.service.js +18 -1
  33. package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
  34. package/dist/seeders/seed-data/solid-core-metadata.json +0 -1
  35. package/dist/services/active-session-storage.service.d.ts +10 -0
  36. package/dist/services/active-session-storage.service.d.ts.map +1 -0
  37. package/dist/services/active-session-storage.service.js +41 -0
  38. package/dist/services/active-session-storage.service.js.map +1 -0
  39. package/dist/services/authentication.service.d.ts +6 -3
  40. package/dist/services/authentication.service.d.ts.map +1 -1
  41. package/dist/services/authentication.service.js +29 -5
  42. package/dist/services/authentication.service.js.map +1 -1
  43. package/dist/services/chatter-message.service.d.ts +2 -0
  44. package/dist/services/chatter-message.service.d.ts.map +1 -1
  45. package/dist/services/chatter-message.service.js +25 -2
  46. package/dist/services/chatter-message.service.js.map +1 -1
  47. package/dist/services/crud.service.d.ts.map +1 -1
  48. package/dist/services/crud.service.js +1 -0
  49. package/dist/services/crud.service.js.map +1 -1
  50. package/dist/services/refresh-token-ids-storage.service.d.ts +6 -1
  51. package/dist/services/refresh-token-ids-storage.service.d.ts.map +1 -1
  52. package/dist/services/refresh-token-ids-storage.service.js +0 -2
  53. package/dist/services/refresh-token-ids-storage.service.js.map +1 -1
  54. package/dist/services/settings/default-settings-provider.service.d.ts +18 -0
  55. package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
  56. package/dist/services/settings/default-settings-provider.service.js +10 -0
  57. package/dist/services/settings/default-settings-provider.service.js.map +1 -1
  58. package/dist/solid-core.module.d.ts.map +1 -1
  59. package/dist/solid-core.module.js +2 -0
  60. package/dist/solid-core.module.js.map +1 -1
  61. package/package.json +1 -1
  62. package/src/constants/error-messages.ts +1 -0
  63. package/src/controllers/chatter-message.controller.ts +7 -7
  64. package/src/guards/access-token.guard.ts +43 -3
  65. package/src/guards/authentication.guard.ts +22 -1
  66. package/src/helpers/bootstrap.helper.ts +9 -3
  67. package/src/helpers/solid-core-error-codes-provider.service.ts +29 -1
  68. package/src/index.ts +1 -0
  69. package/src/interfaces/active-user-data.interface.ts +6 -0
  70. package/src/seeders/module-metadata-seeder.service.ts +23 -2
  71. package/src/seeders/seed-data/solid-core-metadata.json +0 -1
  72. package/src/services/active-session-storage.service.ts +24 -0
  73. package/src/services/authentication.service.ts +30 -3
  74. package/src/services/chatter-message.service.ts +32 -2
  75. package/src/services/crud.service.ts +1 -0
  76. package/src/services/refresh-token-ids-storage.service.ts +9 -8
  77. package/src/services/settings/default-settings-provider.service.ts +10 -1
  78. package/src/solid-core.module.ts +2 -0
@@ -5304,7 +5304,6 @@
5304
5304
  "SavedFiltersController.update",
5305
5305
  "SavedFiltersController.insertMany",
5306
5306
  "SavedFiltersController.create",
5307
- "ChatterMessageController.create",
5308
5307
  "ChatterMessageController.getChatterMessages",
5309
5308
  "ChatterMessageController.postMessage",
5310
5309
  "ChatterMessageController.findMany",
@@ -0,0 +1,10 @@
1
+ import { Cache } from "cache-manager";
2
+ export declare class ActiveSessionStorageService {
3
+ private readonly cacheManager;
4
+ constructor(cacheManager: Cache);
5
+ setActiveSession(userId: number, sessionId: string): Promise<void>;
6
+ getActiveSession(userId: number): Promise<string | undefined>;
7
+ clearActiveSession(userId: number): Promise<void>;
8
+ private getKey;
9
+ }
10
+ //# sourceMappingURL=active-session-storage.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-session-storage.service.d.ts","sourceRoot":"","sources":["../../src/services/active-session-storage.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,qBACa,2BAA2B;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,KAAK;IAEjE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7D,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,OAAO,CAAC,MAAM;CAGf"}
@@ -0,0 +1,41 @@
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.ActiveSessionStorageService = void 0;
16
+ const cache_manager_1 = require("@nestjs/cache-manager");
17
+ const common_1 = require("@nestjs/common");
18
+ let ActiveSessionStorageService = class ActiveSessionStorageService {
19
+ constructor(cacheManager) {
20
+ this.cacheManager = cacheManager;
21
+ }
22
+ async setActiveSession(userId, sessionId) {
23
+ await this.cacheManager.set(this.getKey(userId), sessionId);
24
+ }
25
+ async getActiveSession(userId) {
26
+ return this.cacheManager.get(this.getKey(userId));
27
+ }
28
+ async clearActiveSession(userId) {
29
+ await this.cacheManager.del(this.getKey(userId));
30
+ }
31
+ getKey(userId) {
32
+ return `active-session-${userId}`;
33
+ }
34
+ };
35
+ exports.ActiveSessionStorageService = ActiveSessionStorageService;
36
+ exports.ActiveSessionStorageService = ActiveSessionStorageService = __decorate([
37
+ (0, common_1.Injectable)(),
38
+ __param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
39
+ __metadata("design:paramtypes", [Object])
40
+ ], ActiveSessionStorageService);
41
+ //# sourceMappingURL=active-session-storage.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-session-storage.service.js","sourceRoot":"","sources":["../../src/services/active-session-storage.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yDAAsD;AACtD,2CAAoD;AAI7C,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACtC,YAAoD,YAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;IAAG,CAAC;IAE3E,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,SAAiB;QACtD,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAAc;QACrC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,MAAM,CAAC,MAAc;QAC3B,OAAO,kBAAkB,MAAM,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAlBY,kEAA2B;sCAA3B,2BAA2B;IADvC,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;;GADvB,2BAA2B,CAkBvC","sourcesContent":["import { CACHE_MANAGER } from \"@nestjs/cache-manager\";\nimport { Inject, Injectable } from \"@nestjs/common\";\nimport { Cache } from \"cache-manager\";\n\n@Injectable()\nexport class ActiveSessionStorageService {\n constructor(@Inject(CACHE_MANAGER) private readonly cacheManager: Cache) {}\n\n async setActiveSession(userId: number, sessionId: string): Promise<void> {\n await this.cacheManager.set(this.getKey(userId), sessionId);\n }\n\n async getActiveSession(userId: number): Promise<string | undefined> {\n return this.cacheManager.get(this.getKey(userId));\n }\n\n async clearActiveSession(userId: number): Promise<void> {\n await this.cacheManager.del(this.getKey(userId));\n }\n\n private getKey(userId: number): string {\n return `active-session-${userId}`;\n }\n}\n"]}
@@ -15,6 +15,7 @@ import { SignInDto } from "../dtos/sign-in.dto";
15
15
  import { SignUpDto } from "../dtos/sign-up.dto";
16
16
  import { User } from "../entities/user.entity";
17
17
  import { ActiveUserData } from "../interfaces/active-user-data.interface";
18
+ import { ActiveSessionStorageService } from "./active-session-storage.service";
18
19
  import { HashingService } from "./hashing.service";
19
20
  import { RefreshTokenIdsStorageService } from "./refresh-token-ids-storage.service";
20
21
  import { SsoCodeStorageService } from "./sso-code-storage.service";
@@ -30,6 +31,7 @@ export declare class AuthenticationService {
30
31
  private readonly userRepository;
31
32
  private readonly hashingService;
32
33
  private readonly jwtService;
34
+ private readonly activeSessionStorage;
33
35
  private readonly refreshTokenIdsStorage;
34
36
  private readonly httpService;
35
37
  private readonly mailServiceFactory;
@@ -43,7 +45,7 @@ export declare class AuthenticationService {
43
45
  private readonly dataSource;
44
46
  private readonly solidRegistry;
45
47
  private readonly logger;
46
- constructor(userService: UserService, userRepository: UserRepository, hashingService: HashingService, jwtService: JwtService, refreshTokenIdsStorage: RefreshTokenIdsStorageService, httpService: HttpService, mailServiceFactory: MailFactory, smsFactory: SmsFactory, whatsAppFactory: WhatsAppFactory, eventEmitter: EventEmitter2, settingService: SettingService, roleMetadataService: RoleMetadataService, userActivityHistoryService: UserActivityHistoryService, ssoCodeStorage: SsoCodeStorageService, dataSource: DataSource, solidRegistry: SolidRegistry);
48
+ constructor(userService: UserService, userRepository: UserRepository, hashingService: HashingService, jwtService: JwtService, activeSessionStorage: ActiveSessionStorageService, refreshTokenIdsStorage: RefreshTokenIdsStorageService, httpService: HttpService, mailServiceFactory: MailFactory, smsFactory: SmsFactory, whatsAppFactory: WhatsAppFactory, eventEmitter: EventEmitter2, settingService: SettingService, roleMetadataService: RoleMetadataService, userActivityHistoryService: UserActivityHistoryService, ssoCodeStorage: SsoCodeStorageService, dataSource: DataSource, solidRegistry: SolidRegistry);
47
49
  private getCompanyLogo;
48
50
  resolveUser(username: string, email: string): Promise<User>;
49
51
  updatePasswordDetails(user: User, newPassword: string): Promise<User>;
@@ -159,7 +161,7 @@ export declare class AuthenticationService {
159
161
  accessToken: string;
160
162
  refreshToken: string;
161
163
  }>;
162
- generateAccessToken(user: User): Promise<string>;
164
+ generateAccessToken(user: User, sessionId?: string): Promise<string>;
163
165
  generateRefreshToken(user: User, previousRefreshToken?: string): Promise<string>;
164
166
  refreshTokens(refreshTokenDto: RefreshTokenDto): Promise<{
165
167
  accessToken: string;
@@ -226,6 +228,7 @@ export declare class AuthenticationService {
226
228
  };
227
229
  }>;
228
230
  private isPasswordlessRegistrationEnabled;
231
+ private shouldPreventConcurrentLogins;
229
232
  private checkAccountBlocked;
230
233
  private incrementFailedAttempts;
231
234
  private resetFailedAttempts;
@@ -241,7 +244,7 @@ export declare class AuthenticationService {
241
244
  id: number;
242
245
  roles: string[];
243
246
  };
244
- refreshToken: any;
247
+ refreshToken: string;
245
248
  }>;
246
249
  generateSsoCode(activeUser: ActiveUserData, rawAccessToken: string): Promise<{
247
250
  ssoCode: string;
@@ -1 +1 @@
1
- {"version":3,"file":"authentication.service.d.ts","sourceRoot":"","sources":["../../src/services/authentication.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authentication.service.d.ts","sourceRoot":"","sources":["../../src/services/authentication.service.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,7 @@ const uuid_1 = require("uuid");
30
30
  const constants_1 = require("../constants");
31
31
  const user_entity_1 = require("../entities/user.entity");
32
32
  const interfaces_1 = require("../interfaces");
33
+ const active_session_storage_service_1 = require("./active-session-storage.service");
33
34
  const hashing_service_1 = require("./hashing.service");
34
35
  const refresh_token_ids_storage_service_1 = require("./refresh-token-ids-storage.service");
35
36
  const sso_code_storage_service_1 = require("./sso-code-storage.service");
@@ -47,11 +48,12 @@ var LoginProvider;
47
48
  LoginProvider["OTP"] = "otp";
48
49
  })(LoginProvider || (LoginProvider = {}));
49
50
  let AuthenticationService = AuthenticationService_1 = class AuthenticationService {
50
- constructor(userService, userRepository, hashingService, jwtService, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, whatsAppFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource, solidRegistry) {
51
+ constructor(userService, userRepository, hashingService, jwtService, activeSessionStorage, refreshTokenIdsStorage, httpService, mailServiceFactory, smsFactory, whatsAppFactory, eventEmitter, settingService, roleMetadataService, userActivityHistoryService, ssoCodeStorage, dataSource, solidRegistry) {
51
52
  this.userService = userService;
52
53
  this.userRepository = userRepository;
53
54
  this.hashingService = hashingService;
54
55
  this.jwtService = jwtService;
56
+ this.activeSessionStorage = activeSessionStorage;
55
57
  this.refreshTokenIdsStorage = refreshTokenIdsStorage;
56
58
  this.httpService = httpService;
57
59
  this.mailServiceFactory = mailServiceFactory;
@@ -1045,8 +1047,17 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
1045
1047
  }
1046
1048
  }
1047
1049
  async generateTokens(user) {
1050
+ const sessionId = this.shouldPreventConcurrentLogins()
1051
+ ? (0, crypto_1.randomUUID)()
1052
+ : undefined;
1053
+ if (sessionId) {
1054
+ await this.activeSessionStorage.setActiveSession(user.id, sessionId);
1055
+ }
1056
+ else {
1057
+ await this.activeSessionStorage.clearActiveSession(user.id);
1058
+ }
1048
1059
  const [accessToken, refreshToken] = await Promise.all([
1049
- await this.generateAccessToken(user),
1060
+ await this.generateAccessToken(user, sessionId),
1050
1061
  await this.generateRefreshToken(user),
1051
1062
  ]);
1052
1063
  return {
@@ -1054,10 +1065,18 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
1054
1065
  refreshToken,
1055
1066
  };
1056
1067
  }
1057
- async generateAccessToken(user) {
1068
+ async generateAccessToken(user, sessionId) {
1058
1069
  const userRoleNames = user.roles.map((role) => role.name);
1070
+ const resolvedSessionId = this.shouldPreventConcurrentLogins()
1071
+ ? sessionId ?? (await this.activeSessionStorage.getActiveSession(user.id))
1072
+ : undefined;
1059
1073
  const accessTokenTtl = this.settingService.getConfigValue("accessTokenTtl");
1060
- const accessToken = await this.signToken(user.id, accessTokenTtl, { username: user.username, email: user.email, roles: userRoleNames });
1074
+ const accessToken = await this.signToken(user.id, accessTokenTtl, {
1075
+ username: user.username,
1076
+ email: user.email,
1077
+ roles: userRoleNames,
1078
+ ...(resolvedSessionId ? { sessionId: resolvedSessionId } : {}),
1079
+ });
1061
1080
  return accessToken;
1062
1081
  }
1063
1082
  async generateRefreshToken(user, previousRefreshToken) {
@@ -1374,6 +1393,9 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
1374
1393
  async isPasswordlessRegistrationEnabled() {
1375
1394
  return this.settingService.getConfigValue("passwordLessAuth");
1376
1395
  }
1396
+ shouldPreventConcurrentLogins() {
1397
+ return (this.settingService.getConfigValue("preventConcurrentLogins") === true);
1398
+ }
1377
1399
  checkAccountBlocked(user) {
1378
1400
  const maxFailedAttempts = this.settingService.getConfigValue("maxFailedLoginAttempts");
1379
1401
  if (maxFailedAttempts > 0 &&
@@ -1402,6 +1424,7 @@ let AuthenticationService = AuthenticationService_1 = class AuthenticationServic
1402
1424
  }
1403
1425
  const userId = payload.sub;
1404
1426
  await this.refreshTokenIdsStorage.invalidate(userId);
1427
+ await this.activeSessionStorage.clearActiveSession(userId);
1405
1428
  const user = await this.userRepository.findOne({
1406
1429
  where: {
1407
1430
  id: userId,
@@ -1481,11 +1504,12 @@ AuthenticationService.SIGNUP_DTO_KEYS = new Set([
1481
1504
  ]);
1482
1505
  exports.AuthenticationService = AuthenticationService = AuthenticationService_1 = __decorate([
1483
1506
  (0, common_1.Injectable)(),
1484
- __param(14, (0, typeorm_1.InjectDataSource)()),
1507
+ __param(15, (0, typeorm_1.InjectDataSource)()),
1485
1508
  __metadata("design:paramtypes", [user_service_1.UserService,
1486
1509
  user_repository_1.UserRepository,
1487
1510
  hashing_service_1.HashingService,
1488
1511
  jwt_1.JwtService,
1512
+ active_session_storage_service_1.ActiveSessionStorageService,
1489
1513
  refresh_token_ids_storage_service_1.RefreshTokenIdsStorageService,
1490
1514
  axios_1.HttpService,
1491
1515
  mail_factory_1.MailFactory,