@tomei/sso 0.61.0 → 0.61.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 (134) hide show
  1. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +1 -0
  2. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +71 -0
  3. package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +1 -0
  4. package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
  5. package/dist/__tests__/unit/components/login-user/login-user.spec.js +6 -0
  6. package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +1 -0
  7. package/dist/src/components/login-history/login-history.d.ts +23 -0
  8. package/dist/src/components/login-history/login-history.js +88 -0
  9. package/dist/src/components/login-history/login-history.js.map +1 -0
  10. package/dist/src/components/login-user/user.js +3 -2
  11. package/dist/src/components/login-user/user.js.map +1 -1
  12. package/dist/src/interfaces/login-history-search-attr.interface.d.ts +8 -0
  13. package/dist/src/interfaces/login-history-search-attr.interface.js +3 -0
  14. package/dist/src/interfaces/login-history-search-attr.interface.js.map +1 -0
  15. package/dist/src/interfaces/login-history.interface.d.ts +11 -0
  16. package/dist/src/interfaces/login-history.interface.js +3 -0
  17. package/dist/src/interfaces/login-history.interface.js.map +1 -0
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +1 -1
  20. package/src/components/api-key/api-key.repository.ts +15 -15
  21. package/src/components/api-key/api-key.ts +448 -448
  22. package/src/components/api-key/index.ts +4 -4
  23. package/src/components/building/building.repository.ts +27 -27
  24. package/src/components/building/index.ts +2 -2
  25. package/src/components/group/group.repository.ts +26 -26
  26. package/src/components/group/group.ts +2284 -2284
  27. package/src/components/group/index.ts +3 -3
  28. package/src/components/group-object-privilege/group-object-privilege.repository.ts +25 -25
  29. package/src/components/group-object-privilege/group-object-privilege.ts +278 -278
  30. package/src/components/group-object-privilege/index.ts +2 -2
  31. package/src/components/group-privilege/group-privilege.repository.ts +29 -29
  32. package/src/components/group-privilege/group-privilege.ts +84 -84
  33. package/src/components/group-privilege/index.ts +2 -2
  34. package/src/components/group-reporting-user/group-reporting-user.repository.ts +23 -23
  35. package/src/components/group-reporting-user/group-reporting-user.ts +506 -506
  36. package/src/components/group-reporting-user/index.ts +3 -3
  37. package/src/components/group-system-access/group-system-access.repository.ts +43 -43
  38. package/src/components/group-system-access/group-system-access.ts +90 -90
  39. package/src/components/group-system-access/index.ts +2 -2
  40. package/src/components/index.ts +20 -20
  41. package/src/components/login-user/index.ts +5 -5
  42. package/src/components/login-user/interfaces/check-user-info-duplicated.interface.ts +7 -7
  43. package/src/components/login-user/interfaces/index.ts +1 -1
  44. package/src/components/login-user/interfaces/system-access.interface.ts +13 -13
  45. package/src/components/login-user/interfaces/user-info.interface.ts +34 -34
  46. package/src/components/login-user/login-user.ts +362 -362
  47. package/src/components/login-user/user.repository.ts +11 -11
  48. package/src/components/login-user/user.ts +3 -2
  49. package/src/components/password-hash/index.ts +2 -2
  50. package/src/components/password-hash/interfaces/index.ts +1 -1
  51. package/src/components/password-hash/interfaces/password-hash-service.interface.ts +4 -4
  52. package/src/components/password-hash/password-hash.service.ts +14 -14
  53. package/src/components/staff/index.ts +2 -2
  54. package/src/components/staff/staff.repository.ts +27 -27
  55. package/src/components/system/index.ts +3 -3
  56. package/src/components/system/system.repository.ts +11 -11
  57. package/src/components/system/system.ts +456 -456
  58. package/src/components/system-privilege/index.ts +4 -4
  59. package/src/components/system-privilege/system-privilege.repository.ts +18 -18
  60. package/src/components/system-privilege/system-privilege.ts +541 -541
  61. package/src/components/user-group/index.ts +2 -2
  62. package/src/components/user-group/user-group.repository.ts +19 -19
  63. package/src/components/user-group/user-group.ts +764 -764
  64. package/src/components/user-object-privilege/index.ts +2 -2
  65. package/src/components/user-object-privilege/user-object-privilege.repository.ts +11 -11
  66. package/src/components/user-object-privilege/user-object-privilege.ts +79 -79
  67. package/src/components/user-password-history/index.ts +2 -2
  68. package/src/components/user-password-history/user-password-history.repository.ts +39 -39
  69. package/src/components/user-password-history/user-password-history.ts +187 -187
  70. package/src/components/user-privilege/index.ts +2 -2
  71. package/src/components/user-privilege/user-privilege.repository.ts +25 -25
  72. package/src/components/user-privilege/user-privilege.ts +662 -662
  73. package/src/components/user-reporting-hierarchy/index.ts +2 -2
  74. package/src/components/user-reporting-hierarchy/user-reporting-hierarchy.repository.ts +30 -30
  75. package/src/components/user-reporting-hierarchy/user-reporting-hierarchy.ts +505 -505
  76. package/src/components/user-system-access/index.ts +2 -2
  77. package/src/components/user-system-access/user-system-access.repository.ts +41 -41
  78. package/src/database.ts +15 -15
  79. package/src/enum/api-key.enum.ts +5 -5
  80. package/src/enum/building-type.enum.ts +6 -6
  81. package/src/enum/group-type.enum.ts +8 -8
  82. package/src/enum/index.ts +6 -6
  83. package/src/enum/login-status.enum.ts +4 -4
  84. package/src/enum/object-status.enum.ts +4 -4
  85. package/src/enum/user-status.enum.ts +7 -7
  86. package/src/enum/yn.enum.ts +4 -4
  87. package/src/index.ts +8 -8
  88. package/src/interfaces/api-key-attr.interface.ts +16 -16
  89. package/src/interfaces/group-object-privilege.interface.ts +14 -14
  90. package/src/interfaces/group-privilege.interface.ts +10 -10
  91. package/src/interfaces/group-reporting-user.interface.ts +11 -11
  92. package/src/interfaces/group-search-attr.interface.ts +9 -9
  93. package/src/interfaces/group-system-access.interface.ts +10 -10
  94. package/src/interfaces/group.interface.ts +17 -17
  95. package/src/interfaces/index.ts +13 -13
  96. package/src/interfaces/system-login.interface.ts +6 -6
  97. package/src/interfaces/system-privilege-search.interface.ts +5 -5
  98. package/src/interfaces/system-privilege.interface.ts +11 -11
  99. package/src/interfaces/system-search-attr.interface.ts +5 -5
  100. package/src/interfaces/system.interface.ts +15 -15
  101. package/src/interfaces/user-group.interface.ts +12 -12
  102. package/src/interfaces/user-object-privilege.interface.ts +14 -14
  103. package/src/interfaces/user-password-history.interface.ts +6 -6
  104. package/src/interfaces/user-privilege.interface.ts +10 -10
  105. package/src/interfaces/user-reporting-hierarchy.interface.ts +11 -11
  106. package/src/interfaces/user-session.interface.ts +5 -5
  107. package/src/interfaces/user-system-access.interface.ts +10 -10
  108. package/src/models/api-key-entity.ts +101 -101
  109. package/src/models/building.entity.ts +103 -103
  110. package/src/models/group-object-privilege.entity.ts +91 -91
  111. package/src/models/group-privilege.entity.ts +78 -78
  112. package/src/models/group-reporting-user.entity.ts +95 -95
  113. package/src/models/group-system-access.entity.ts +81 -81
  114. package/src/models/group.entity.ts +127 -127
  115. package/src/models/staff.entity.ts +91 -91
  116. package/src/models/system-privilege.entity.ts +90 -90
  117. package/src/models/system.entity.ts +113 -113
  118. package/src/models/user-group.entity.ts +91 -91
  119. package/src/models/user-object-privilege.entity.ts +90 -90
  120. package/src/models/user-password-history.ts +51 -51
  121. package/src/models/user-privilege.entity.ts +78 -78
  122. package/src/models/user-reporting-hierarchy.entity.ts +102 -102
  123. package/src/models/user-system-access.entity.ts +87 -87
  124. package/src/models/user.entity.ts +193 -193
  125. package/src/redis-client/__mocks__/jest-initial-setup.ts +2 -2
  126. package/src/redis-client/__mocks__/redis-mock.ts +28 -28
  127. package/src/redis-client/index.ts +1 -1
  128. package/src/redis-client/redis.service.ts +75 -75
  129. package/src/session/index.ts +2 -2
  130. package/src/session/interfaces/index.ts +1 -1
  131. package/src/session/interfaces/session-service.interface.ts +26 -26
  132. package/src/session/session.service.ts +96 -96
  133. package/src/types/auth-context.ts +10 -10
  134. package/src/types/index.ts +1 -1
@@ -1,193 +1,193 @@
1
- import {
2
- BelongsTo,
3
- BelongsToMany,
4
- Column,
5
- CreatedAt,
6
- DataType,
7
- ForeignKey,
8
- HasMany,
9
- HasOne,
10
- Model,
11
- Table,
12
- UpdatedAt,
13
- } from 'sequelize-typescript';
14
- import Staff from './staff.entity';
15
- import { YN } from '../enum/yn.enum';
16
- import { UserStatus } from '../enum/user-status.enum';
17
- import UserSystemAccessModel from './user-system-access.entity';
18
- import UserPrivilegeModel from './user-privilege.entity';
19
- import UserGroupModel from './user-group.entity';
20
- import UserObjectPrivilegeModel from './user-object-privilege.entity';
21
-
22
- @Table({
23
- tableName: 'sso_User',
24
- timestamps: true,
25
- createdAt: 'CreatedAt',
26
- updatedAt: 'UpdatedAt',
27
- })
28
- export default class User extends Model {
29
- @Column({
30
- primaryKey: true,
31
- allowNull: false,
32
- autoIncrement: true,
33
- type: DataType.INTEGER,
34
- })
35
- UserId: number;
36
-
37
- @Column({
38
- allowNull: true,
39
- type: DataType.STRING,
40
- })
41
- UserName: string;
42
-
43
- @Column({
44
- allowNull: false,
45
- type: DataType.STRING,
46
- })
47
- Email: string;
48
-
49
- @Column({
50
- allowNull: false,
51
- type: DataType.STRING,
52
- })
53
- Password: string;
54
-
55
- @Column({
56
- allowNull: true,
57
- type: DataType.STRING,
58
- })
59
- FullName: string;
60
-
61
- @Column({
62
- allowNull: true,
63
- type: DataType.STRING,
64
- })
65
- IdNo: string;
66
-
67
- @Column({
68
- allowNull: true,
69
- type: DataType.STRING,
70
- })
71
- IdType: string;
72
-
73
- @Column({
74
- allowNull: true,
75
- type: DataType.STRING,
76
- })
77
- ContactNo: string;
78
-
79
- @Column({
80
- allowNull: false,
81
- type: DataType.STRING,
82
- })
83
- Status: UserStatus;
84
-
85
- @Column({
86
- allowNull: false,
87
- type: DataType.CHAR(1),
88
- })
89
- DefaultPasswordChangedYN: YN;
90
-
91
- @Column({
92
- type: DataType.DATE,
93
- })
94
- FirstLoginAt: Date;
95
-
96
- @Column({
97
- type: DataType.DATE,
98
- })
99
- LastLoginAt: Date;
100
-
101
- @Column({
102
- type: DataType.TINYINT,
103
- })
104
- MFAEnabled: number;
105
-
106
- @Column({
107
- type: DataType.TEXT,
108
- })
109
- MFAConfig: string;
110
-
111
- @Column({
112
- type: DataType.STRING,
113
- })
114
- RecoveryEmail: string;
115
-
116
- @Column({
117
- allowNull: false,
118
- type: DataType.INTEGER,
119
- })
120
- FailedLoginAttemptCount: number;
121
-
122
- @Column({
123
- type: DataType.DATE,
124
- })
125
- LastFailedLoginAt: Date;
126
-
127
- @Column({
128
- type: DataType.DATE,
129
- })
130
- LastPasswordChangedAt: Date;
131
-
132
- @Column({
133
- allowNull: false,
134
- type: DataType.CHAR(1),
135
- })
136
- NeedToChangePasswordYN: YN;
137
-
138
- @Column({
139
- allowNull: true,
140
- type: DataType.STRING,
141
- })
142
- PasscodeHash: string;
143
-
144
- @Column({
145
- type: DataType.DATE,
146
- })
147
- PasscodeUpdatedAt: Date;
148
-
149
- @ForeignKey(() => User)
150
- @Column({
151
- type: DataType.INTEGER,
152
- })
153
- CreatedById: number;
154
-
155
- @CreatedAt
156
- CreatedAt: Date;
157
-
158
- @ForeignKey(() => User)
159
- @Column({
160
- type: DataType.INTEGER,
161
- })
162
- UpdatedById: number;
163
-
164
- @UpdatedAt
165
- UpdatedAt: Date;
166
-
167
- @HasOne(() => Staff, 'UserId')
168
- Staff: Staff;
169
-
170
- @HasMany(() => UserGroupModel, 'UserId')
171
- UserGroups: UserGroupModel[];
172
-
173
- @HasMany(() => UserSystemAccessModel)
174
- UserSystemAccesses: UserSystemAccessModel[];
175
-
176
- @HasMany(() => UserPrivilegeModel)
177
- UserPrivileges: UserPrivilegeModel[];
178
-
179
- @HasMany(() => UserObjectPrivilegeModel)
180
- UserObjectPrivileges: UserObjectPrivilegeModel[];
181
-
182
- @BelongsTo(() => User, {
183
- as: 'CreatedBy',
184
- foreignKey: 'CreatedById',
185
- })
186
- CreatedBy: User;
187
-
188
- @BelongsTo(() => User, {
189
- as: 'UpdatedBy',
190
- foreignKey: 'UpdatedById',
191
- })
192
- UpdatedBy: User;
193
- }
1
+ import {
2
+ BelongsTo,
3
+ BelongsToMany,
4
+ Column,
5
+ CreatedAt,
6
+ DataType,
7
+ ForeignKey,
8
+ HasMany,
9
+ HasOne,
10
+ Model,
11
+ Table,
12
+ UpdatedAt,
13
+ } from 'sequelize-typescript';
14
+ import Staff from './staff.entity';
15
+ import { YN } from '../enum/yn.enum';
16
+ import { UserStatus } from '../enum/user-status.enum';
17
+ import UserSystemAccessModel from './user-system-access.entity';
18
+ import UserPrivilegeModel from './user-privilege.entity';
19
+ import UserGroupModel from './user-group.entity';
20
+ import UserObjectPrivilegeModel from './user-object-privilege.entity';
21
+
22
+ @Table({
23
+ tableName: 'sso_User',
24
+ timestamps: true,
25
+ createdAt: 'CreatedAt',
26
+ updatedAt: 'UpdatedAt',
27
+ })
28
+ export default class User extends Model {
29
+ @Column({
30
+ primaryKey: true,
31
+ allowNull: false,
32
+ autoIncrement: true,
33
+ type: DataType.INTEGER,
34
+ })
35
+ UserId: number;
36
+
37
+ @Column({
38
+ allowNull: true,
39
+ type: DataType.STRING,
40
+ })
41
+ UserName: string;
42
+
43
+ @Column({
44
+ allowNull: false,
45
+ type: DataType.STRING,
46
+ })
47
+ Email: string;
48
+
49
+ @Column({
50
+ allowNull: false,
51
+ type: DataType.STRING,
52
+ })
53
+ Password: string;
54
+
55
+ @Column({
56
+ allowNull: true,
57
+ type: DataType.STRING,
58
+ })
59
+ FullName: string;
60
+
61
+ @Column({
62
+ allowNull: true,
63
+ type: DataType.STRING,
64
+ })
65
+ IdNo: string;
66
+
67
+ @Column({
68
+ allowNull: true,
69
+ type: DataType.STRING,
70
+ })
71
+ IdType: string;
72
+
73
+ @Column({
74
+ allowNull: true,
75
+ type: DataType.STRING,
76
+ })
77
+ ContactNo: string;
78
+
79
+ @Column({
80
+ allowNull: false,
81
+ type: DataType.STRING,
82
+ })
83
+ Status: UserStatus;
84
+
85
+ @Column({
86
+ allowNull: false,
87
+ type: DataType.CHAR(1),
88
+ })
89
+ DefaultPasswordChangedYN: YN;
90
+
91
+ @Column({
92
+ type: DataType.DATE,
93
+ })
94
+ FirstLoginAt: Date;
95
+
96
+ @Column({
97
+ type: DataType.DATE,
98
+ })
99
+ LastLoginAt: Date;
100
+
101
+ @Column({
102
+ type: DataType.TINYINT,
103
+ })
104
+ MFAEnabled: number;
105
+
106
+ @Column({
107
+ type: DataType.TEXT,
108
+ })
109
+ MFAConfig: string;
110
+
111
+ @Column({
112
+ type: DataType.STRING,
113
+ })
114
+ RecoveryEmail: string;
115
+
116
+ @Column({
117
+ allowNull: false,
118
+ type: DataType.INTEGER,
119
+ })
120
+ FailedLoginAttemptCount: number;
121
+
122
+ @Column({
123
+ type: DataType.DATE,
124
+ })
125
+ LastFailedLoginAt: Date;
126
+
127
+ @Column({
128
+ type: DataType.DATE,
129
+ })
130
+ LastPasswordChangedAt: Date;
131
+
132
+ @Column({
133
+ allowNull: false,
134
+ type: DataType.CHAR(1),
135
+ })
136
+ NeedToChangePasswordYN: YN;
137
+
138
+ @Column({
139
+ allowNull: true,
140
+ type: DataType.STRING,
141
+ })
142
+ PasscodeHash: string;
143
+
144
+ @Column({
145
+ type: DataType.DATE,
146
+ })
147
+ PasscodeUpdatedAt: Date;
148
+
149
+ @ForeignKey(() => User)
150
+ @Column({
151
+ type: DataType.INTEGER,
152
+ })
153
+ CreatedById: number;
154
+
155
+ @CreatedAt
156
+ CreatedAt: Date;
157
+
158
+ @ForeignKey(() => User)
159
+ @Column({
160
+ type: DataType.INTEGER,
161
+ })
162
+ UpdatedById: number;
163
+
164
+ @UpdatedAt
165
+ UpdatedAt: Date;
166
+
167
+ @HasOne(() => Staff, 'UserId')
168
+ Staff: Staff;
169
+
170
+ @HasMany(() => UserGroupModel, 'UserId')
171
+ UserGroups: UserGroupModel[];
172
+
173
+ @HasMany(() => UserSystemAccessModel)
174
+ UserSystemAccesses: UserSystemAccessModel[];
175
+
176
+ @HasMany(() => UserPrivilegeModel)
177
+ UserPrivileges: UserPrivilegeModel[];
178
+
179
+ @HasMany(() => UserObjectPrivilegeModel)
180
+ UserObjectPrivileges: UserObjectPrivilegeModel[];
181
+
182
+ @BelongsTo(() => User, {
183
+ as: 'CreatedBy',
184
+ foreignKey: 'CreatedById',
185
+ })
186
+ CreatedBy: User;
187
+
188
+ @BelongsTo(() => User, {
189
+ as: 'UpdatedBy',
190
+ foreignKey: 'UpdatedById',
191
+ })
192
+ UpdatedBy: User;
193
+ }
@@ -1,2 +1,2 @@
1
- import redis from './redis-mock';
2
- jest.mock('redis', () => redis);
1
+ import redis from './redis-mock';
2
+ jest.mock('redis', () => redis);
@@ -1,28 +1,28 @@
1
- /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
- // redis-mock has not been updated for node-redis v4 yet, but the main changes
3
- // in the API are camelCase names and promises instead of callback, so we can work around it.
4
- // https://github.com/yeahoffline/redis-mock/issues/195
5
- import redis, { createClient } from 'redis-mock';
6
- // @ts-expect-error Work-around redis-mock types reporting incorrectly as v4 redis.
7
- import { RedisClient } from '@types/redis';
8
- import { promisify } from 'util';
9
- const client = createClient() as unknown as RedisClient;
10
- const setEx = promisify(client.setex).bind(client);
11
- const v4Client = {
12
- connect: () => undefined,
13
- get: promisify(client.get).bind(client),
14
- set: promisify(client.set).bind(client),
15
- del: promisify(client.del).bind(client),
16
- hSet: promisify(client.hset).bind(client),
17
- hGet: promisify(client.hget).bind(client),
18
- hDel: promisify(client.hdel).bind(client),
19
- flushAll: promisify(client.flushall).bind(client),
20
- setEx: promisify(client.setex).bind(client),
21
- expire: promisify(client.expire).bind(client),
22
- mGet: promisify(client.mget).bind(client),
23
- pSetEx: (key: string, ms: number, value: string) =>
24
- setEx(key, ms / 1000, value),
25
- on: () => undefined,
26
- // Add additional functions as needed...
27
- };
28
- export default { ...redis, createClient: () => v4Client };
1
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
+ // redis-mock has not been updated for node-redis v4 yet, but the main changes
3
+ // in the API are camelCase names and promises instead of callback, so we can work around it.
4
+ // https://github.com/yeahoffline/redis-mock/issues/195
5
+ import redis, { createClient } from 'redis-mock';
6
+ // @ts-expect-error Work-around redis-mock types reporting incorrectly as v4 redis.
7
+ import { RedisClient } from '@types/redis';
8
+ import { promisify } from 'util';
9
+ const client = createClient() as unknown as RedisClient;
10
+ const setEx = promisify(client.setex).bind(client);
11
+ const v4Client = {
12
+ connect: () => undefined,
13
+ get: promisify(client.get).bind(client),
14
+ set: promisify(client.set).bind(client),
15
+ del: promisify(client.del).bind(client),
16
+ hSet: promisify(client.hset).bind(client),
17
+ hGet: promisify(client.hget).bind(client),
18
+ hDel: promisify(client.hdel).bind(client),
19
+ flushAll: promisify(client.flushall).bind(client),
20
+ setEx: promisify(client.setex).bind(client),
21
+ expire: promisify(client.expire).bind(client),
22
+ mGet: promisify(client.mget).bind(client),
23
+ pSetEx: (key: string, ms: number, value: string) =>
24
+ setEx(key, ms / 1000, value),
25
+ on: () => undefined,
26
+ // Add additional functions as needed...
27
+ };
28
+ export default { ...redis, createClient: () => v4Client };
@@ -1 +1 @@
1
- export * from './redis.service';
1
+ export * from './redis.service';
@@ -1,75 +1,75 @@
1
- import { createClient } from 'redis';
2
- export class RedisService {
3
- private static client;
4
-
5
- private constructor() {}
6
-
7
- static async init(client?: any): Promise<RedisService> {
8
- if (!client) {
9
- if (!RedisService.client) {
10
- // Create a new Redis client
11
- const host = process.env.REDIS_HOST;
12
- const password = process.env.REDIS_PASS;
13
- const port = process.env.REDIS_PORT;
14
- const isProduction = process.env.REDIS_HOST.includes('windows.net');
15
- const redis = isProduction ? 'rediss' : 'redis';
16
- const pass = password ? `:${password}@` : '';
17
- console.log(`${redis}://${pass}${host}:${port}`);
18
- RedisService.client = client = createClient({
19
- url: `${redis}://${pass}${host}:${port}`,
20
- password: password,
21
- });
22
-
23
- RedisService.client.on('error', (error) => {
24
- console.error('Redis error:', error);
25
- });
26
- RedisService.client.on('connect', () => console.log('Redis connected'));
27
- RedisService.client.on('reconnecting', () =>
28
- console.log('Redis reconnecting'),
29
- );
30
-
31
- await RedisService.client.connect();
32
- }
33
- } else {
34
- RedisService.client = client;
35
- }
36
- return new RedisService();
37
- }
38
-
39
- public async set(
40
- key: string,
41
- value: any,
42
- expire: number = 3600 * 24 * 1,
43
- ): Promise<void> {
44
- try {
45
- const newList = typeof value === 'string' ? value : JSON.stringify(value);
46
- await RedisService.client.setEx(key, expire, newList);
47
- } catch (error) {
48
- console.log(error);
49
- }
50
- }
51
-
52
- public async get(key: string): Promise<null> {
53
- try {
54
- return await RedisService.client.get(key);
55
- } catch (error) {
56
- throw error;
57
- }
58
- }
59
-
60
- public async del(key: string): Promise<void> {
61
- try {
62
- await RedisService.client.del(key);
63
- } catch (error) {
64
- throw error;
65
- }
66
- }
67
-
68
- public static async close(): Promise<void> {
69
- try {
70
- await RedisService.client.disconnect();
71
- } catch (error) {
72
- throw error;
73
- }
74
- }
75
- }
1
+ import { createClient } from 'redis';
2
+ export class RedisService {
3
+ private static client;
4
+
5
+ private constructor() {}
6
+
7
+ static async init(client?: any): Promise<RedisService> {
8
+ if (!client) {
9
+ if (!RedisService.client) {
10
+ // Create a new Redis client
11
+ const host = process.env.REDIS_HOST;
12
+ const password = process.env.REDIS_PASS;
13
+ const port = process.env.REDIS_PORT;
14
+ const isProduction = process.env.REDIS_HOST.includes('windows.net');
15
+ const redis = isProduction ? 'rediss' : 'redis';
16
+ const pass = password ? `:${password}@` : '';
17
+ console.log(`${redis}://${pass}${host}:${port}`);
18
+ RedisService.client = client = createClient({
19
+ url: `${redis}://${pass}${host}:${port}`,
20
+ password: password,
21
+ });
22
+
23
+ RedisService.client.on('error', (error) => {
24
+ console.error('Redis error:', error);
25
+ });
26
+ RedisService.client.on('connect', () => console.log('Redis connected'));
27
+ RedisService.client.on('reconnecting', () =>
28
+ console.log('Redis reconnecting'),
29
+ );
30
+
31
+ await RedisService.client.connect();
32
+ }
33
+ } else {
34
+ RedisService.client = client;
35
+ }
36
+ return new RedisService();
37
+ }
38
+
39
+ public async set(
40
+ key: string,
41
+ value: any,
42
+ expire: number = 3600 * 24 * 1,
43
+ ): Promise<void> {
44
+ try {
45
+ const newList = typeof value === 'string' ? value : JSON.stringify(value);
46
+ await RedisService.client.setEx(key, expire, newList);
47
+ } catch (error) {
48
+ console.log(error);
49
+ }
50
+ }
51
+
52
+ public async get(key: string): Promise<null> {
53
+ try {
54
+ return await RedisService.client.get(key);
55
+ } catch (error) {
56
+ throw error;
57
+ }
58
+ }
59
+
60
+ public async del(key: string): Promise<void> {
61
+ try {
62
+ await RedisService.client.del(key);
63
+ } catch (error) {
64
+ throw error;
65
+ }
66
+ }
67
+
68
+ public static async close(): Promise<void> {
69
+ try {
70
+ await RedisService.client.disconnect();
71
+ } catch (error) {
72
+ throw error;
73
+ }
74
+ }
75
+ }
@@ -1,2 +1,2 @@
1
- export * from './interfaces';
2
- export * from './session.service';
1
+ export * from './interfaces';
2
+ export * from './session.service';
@@ -1 +1 @@
1
- export * from './session-service.interface';
1
+ export * from './session-service.interface';
@@ -1,26 +1,26 @@
1
- import { IUserSession } from '../../interfaces/user-session.interface';
2
-
3
- export interface ISessionService {
4
- retrieveUserSession(
5
- userId: string,
6
- sessionName: string,
7
- ): Promise<IUserSession>;
8
- setUserSession(
9
- userId: string,
10
- sessionData: IUserSession,
11
- sessionName: string,
12
- duration?: number,
13
- ): Promise<void>;
14
- refreshDuration(
15
- userId: string,
16
- sessionName: string,
17
- duration?: number,
18
- ): Promise<void>;
19
- setAuthorizationCode(
20
- token: string,
21
- value: string,
22
- expire: number,
23
- ): Promise<void>;
24
- retrieveAuthorizationCode(token: string): Promise<string>;
25
- deleteAuthorizationCode(token: string): Promise<void>;
26
- }
1
+ import { IUserSession } from '../../interfaces/user-session.interface';
2
+
3
+ export interface ISessionService {
4
+ retrieveUserSession(
5
+ userId: string,
6
+ sessionName: string,
7
+ ): Promise<IUserSession>;
8
+ setUserSession(
9
+ userId: string,
10
+ sessionData: IUserSession,
11
+ sessionName: string,
12
+ duration?: number,
13
+ ): Promise<void>;
14
+ refreshDuration(
15
+ userId: string,
16
+ sessionName: string,
17
+ duration?: number,
18
+ ): Promise<void>;
19
+ setAuthorizationCode(
20
+ token: string,
21
+ value: string,
22
+ expire: number,
23
+ ): Promise<void>;
24
+ retrieveAuthorizationCode(token: string): Promise<string>;
25
+ deleteAuthorizationCode(token: string): Promise<void>;
26
+ }