@ackplus/nest-auth 1.1.44 → 1.1.46
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/lib/admin-console/controllers/admin-users.controller.d.ts +1 -1
- package/dist/lib/admin-console/controllers/admin-users.controller.d.ts.map +1 -1
- package/dist/lib/admin-console/controllers/admin-users.controller.js +45 -13
- package/dist/lib/admin-console/controllers/admin-users.controller.js.map +1 -1
- package/dist/lib/admin-console/dto/admin-user.dto.d.ts +2 -0
- package/dist/lib/admin-console/dto/admin-user.dto.d.ts.map +1 -1
- package/dist/lib/admin-console/dto/admin-user.dto.js +12 -0
- package/dist/lib/admin-console/dto/admin-user.dto.js.map +1 -1
- package/dist/lib/admin-console/static/index.html +324 -329
- package/dist/lib/admin-console/static/nest-auth.json +1 -1
- package/dist/lib/auth/guards/auth.guard.d.ts +4 -1
- package/dist/lib/auth/guards/auth.guard.d.ts.map +1 -1
- package/dist/lib/auth/guards/auth.guard.js +32 -4
- package/dist/lib/auth/guards/auth.guard.js.map +1 -1
- package/dist/lib/auth/services/mfa.service.d.ts.map +1 -1
- package/dist/lib/auth/services/mfa.service.js +2 -1
- package/dist/lib/auth/services/mfa.service.js.map +1 -1
- package/dist/lib/core/interfaces/session-options.interface.d.ts +16 -1
- package/dist/lib/core/interfaces/session-options.interface.d.ts.map +1 -1
- package/dist/lib/core/providers/base-auth.provider.d.ts.map +1 -1
- package/dist/lib/core/providers/base-auth.provider.js +14 -0
- package/dist/lib/core/providers/base-auth.provider.js.map +1 -1
- package/dist/lib/core/services/auth-config.service.d.ts +1 -0
- package/dist/lib/core/services/auth-config.service.d.ts.map +1 -1
- package/dist/lib/core/services/auth-config.service.js +21 -0
- package/dist/lib/core/services/auth-config.service.js.map +1 -1
- package/dist/lib/session/index.d.ts +2 -1
- package/dist/lib/session/index.d.ts.map +1 -1
- package/dist/lib/session/index.js +2 -1
- package/dist/lib/session/index.js.map +1 -1
- package/dist/lib/session/interfaces/{session-repository.interface.d.ts → session-store.interface.d.ts} +2 -2
- package/dist/lib/session/interfaces/session-store.interface.d.ts.map +1 -0
- package/dist/lib/session/interfaces/{session-repository.interface.js → session-store.interface.js} +1 -1
- package/dist/lib/session/interfaces/session-store.interface.js.map +1 -0
- package/dist/lib/session/repositories/base-session.repository.d.ts +2 -2
- package/dist/lib/session/repositories/base-session.repository.d.ts.map +1 -1
- package/dist/lib/session/repositories/base-session.repository.js +4 -2
- package/dist/lib/session/repositories/base-session.repository.js.map +1 -1
- package/dist/lib/session/repositories/redis-session.repository.d.ts +14 -4
- package/dist/lib/session/repositories/redis-session.repository.d.ts.map +1 -1
- package/dist/lib/session/repositories/redis-session.repository.js +220 -65
- package/dist/lib/session/repositories/redis-session.repository.js.map +1 -1
- package/dist/lib/session/repositories/typeorm-session.repository.d.ts.map +1 -1
- package/dist/lib/session/repositories/typeorm-session.repository.js +29 -4
- package/dist/lib/session/repositories/typeorm-session.repository.js.map +1 -1
- package/dist/lib/session/services/session-manager.service.d.ts +8 -4
- package/dist/lib/session/services/session-manager.service.d.ts.map +1 -1
- package/dist/lib/session/services/session-manager.service.js +72 -23
- package/dist/lib/session/services/session-manager.service.js.map +1 -1
- package/dist/lib/session/session.module.d.ts +5 -1
- package/dist/lib/session/session.module.d.ts.map +1 -1
- package/dist/lib/session/session.module.js +93 -26
- package/dist/lib/session/session.module.js.map +1 -1
- package/dist/lib/session/stores/database-session.store.d.ts +19 -0
- package/dist/lib/session/stores/database-session.store.d.ts.map +1 -0
- package/dist/lib/session/stores/database-session.store.js +56 -0
- package/dist/lib/session/stores/database-session.store.js.map +1 -0
- package/dist/lib/user/entities/user.entity.d.ts +1 -1
- package/dist/lib/user/entities/user.entity.d.ts.map +1 -1
- package/dist/lib/user/entities/user.entity.js +10 -10
- package/dist/lib/user/entities/user.entity.js.map +1 -1
- package/package.json +2 -2
- package/dist/lib/session/interfaces/session-repository.interface.d.ts.map +0 -1
- package/dist/lib/session/interfaces/session-repository.interface.js.map +0 -1
|
@@ -15,17 +15,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
16
|
};
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.SessionManagerService = exports.SESSION_REPOSITORY = void 0;
|
|
18
|
+
exports.SessionManagerService = exports.SESSION_REPOSITORY = exports.SESSION_STORE = void 0;
|
|
19
19
|
const common_1 = require("@nestjs/common");
|
|
20
20
|
const auth_config_service_1 = require("../../core/services/auth-config.service");
|
|
21
21
|
const request_context_1 = require("../../request-context/request-context");
|
|
22
22
|
const uuid_1 = require("uuid");
|
|
23
23
|
const ms_1 = __importDefault(require("ms"));
|
|
24
|
+
exports.SESSION_STORE = 'SESSION_STORE';
|
|
24
25
|
exports.SESSION_REPOSITORY = 'SESSION_REPOSITORY';
|
|
25
26
|
let SessionManagerService = class SessionManagerService {
|
|
26
|
-
|
|
27
|
-
constructor(
|
|
28
|
-
this.
|
|
27
|
+
store;
|
|
28
|
+
constructor(store) {
|
|
29
|
+
this.store = store;
|
|
29
30
|
}
|
|
30
31
|
get options() {
|
|
31
32
|
return auth_config_service_1.AuthConfigService.getOptions();
|
|
@@ -50,7 +51,7 @@ let SessionManagerService = class SessionManagerService {
|
|
|
50
51
|
ipAddress: ipAddress || request_context_1.RequestContext.getDeviceInfo().ipAddress,
|
|
51
52
|
lastActive: new Date(),
|
|
52
53
|
};
|
|
53
|
-
const session = await this.
|
|
54
|
+
const session = await this.store.create(sessionPayload);
|
|
54
55
|
if (this.options.session?.onCreated) {
|
|
55
56
|
const user = data?.user;
|
|
56
57
|
await this.options.session.onCreated(session, user);
|
|
@@ -58,55 +59,88 @@ let SessionManagerService = class SessionManagerService {
|
|
|
58
59
|
return session;
|
|
59
60
|
}
|
|
60
61
|
async getSession(sessionId, refreshSession = true) {
|
|
61
|
-
const session = await this.
|
|
62
|
+
const session = await this.store.findById(sessionId);
|
|
62
63
|
if (!session) {
|
|
63
64
|
throw new common_1.UnauthorizedException('Session not found');
|
|
64
65
|
}
|
|
65
66
|
if (this.isExpired(session)) {
|
|
66
|
-
await this.
|
|
67
|
+
await this.store.delete(sessionId);
|
|
67
68
|
throw new common_1.UnauthorizedException('Session expired');
|
|
68
69
|
}
|
|
69
70
|
if (refreshSession && this.slidingExpiration) {
|
|
70
|
-
await this.
|
|
71
|
+
await this.touchSession(sessionId);
|
|
71
72
|
}
|
|
72
73
|
return session;
|
|
73
74
|
}
|
|
74
75
|
async getUserSessions(userId) {
|
|
75
|
-
return await this.
|
|
76
|
+
return await this.store.findByUserId(userId);
|
|
76
77
|
}
|
|
77
78
|
async getActiveSessions(userId) {
|
|
78
|
-
return await this.
|
|
79
|
+
return await this.store.findActiveByUserId(userId);
|
|
79
80
|
}
|
|
80
81
|
async updateSession(sessionId, updates) {
|
|
81
|
-
return await this.
|
|
82
|
+
return await this.store.update(sessionId, updates);
|
|
82
83
|
}
|
|
83
84
|
async revokeSession(sessionId) {
|
|
84
85
|
let session = null;
|
|
85
86
|
if (this.options.session?.onRevoked) {
|
|
86
|
-
session = await this.
|
|
87
|
+
session = await this.store.findById(sessionId);
|
|
87
88
|
}
|
|
88
|
-
await this.
|
|
89
|
+
await this.store.delete(sessionId);
|
|
89
90
|
if (this.options.session?.onRevoked && session) {
|
|
90
91
|
await this.options.session.onRevoked(session, 'admin');
|
|
91
92
|
}
|
|
92
93
|
}
|
|
94
|
+
async deleteSession(sessionId) {
|
|
95
|
+
await this.revokeSession(sessionId);
|
|
96
|
+
}
|
|
93
97
|
async revokeAllUserSessions(userId) {
|
|
94
|
-
await this.
|
|
98
|
+
await this.store.deleteByUserId(userId);
|
|
95
99
|
}
|
|
96
100
|
async revokeOtherSessions(userId, currentSessionId) {
|
|
97
|
-
const sessions = await this.
|
|
101
|
+
const sessions = await this.store.findByUserId(userId);
|
|
98
102
|
for (const session of sessions) {
|
|
99
103
|
if (session.id !== currentSessionId) {
|
|
100
|
-
await this.
|
|
104
|
+
await this.store.delete(session.id);
|
|
101
105
|
}
|
|
102
106
|
}
|
|
103
107
|
}
|
|
104
108
|
async cleanupExpiredSessions() {
|
|
105
|
-
return await this.
|
|
109
|
+
return await this.store.deleteExpired();
|
|
106
110
|
}
|
|
107
111
|
async extendSession(sessionId, duration) {
|
|
108
112
|
const expiresAt = this.calculateExpiration(duration);
|
|
109
|
-
return await this.
|
|
113
|
+
return await this.store.update(sessionId, { expiresAt });
|
|
114
|
+
}
|
|
115
|
+
async touchSession(sessionId, duration) {
|
|
116
|
+
const expiresAt = this.calculateExpiration(duration);
|
|
117
|
+
return await this.store.update(sessionId, {
|
|
118
|
+
lastActive: new Date(),
|
|
119
|
+
expiresAt,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async rotateSession(sessionId) {
|
|
123
|
+
const session = await this.store.findById(sessionId);
|
|
124
|
+
if (!session) {
|
|
125
|
+
throw new common_1.UnauthorizedException('Session not found');
|
|
126
|
+
}
|
|
127
|
+
const newSessionPayload = {
|
|
128
|
+
id: (0, uuid_1.v4)(),
|
|
129
|
+
userId: session.userId,
|
|
130
|
+
refreshToken: session.refreshToken,
|
|
131
|
+
data: session.data,
|
|
132
|
+
expiresAt: this.calculateExpiration(),
|
|
133
|
+
userAgent: session.userAgent,
|
|
134
|
+
deviceName: session.deviceName,
|
|
135
|
+
ipAddress: session.ipAddress,
|
|
136
|
+
lastActive: new Date(),
|
|
137
|
+
};
|
|
138
|
+
const newSession = await this.store.create(newSessionPayload);
|
|
139
|
+
await this.store.delete(sessionId);
|
|
140
|
+
if (this.options.session?.onRevoked) {
|
|
141
|
+
await this.options.session.onRevoked(session, 'security');
|
|
142
|
+
}
|
|
143
|
+
return newSession;
|
|
110
144
|
}
|
|
111
145
|
async validateSession(sessionId) {
|
|
112
146
|
try {
|
|
@@ -117,11 +151,11 @@ let SessionManagerService = class SessionManagerService {
|
|
|
117
151
|
}
|
|
118
152
|
}
|
|
119
153
|
async hasReachedMaxSessions(userId) {
|
|
120
|
-
const count = await this.
|
|
154
|
+
const count = await this.store.countActiveByUserId(userId);
|
|
121
155
|
return count >= this.maxSessionsPerUser;
|
|
122
156
|
}
|
|
123
157
|
async enforceMaxSessions(userId) {
|
|
124
|
-
const activeSessions = await this.
|
|
158
|
+
const activeSessions = await this.store.findActiveByUserId(userId);
|
|
125
159
|
if (activeSessions.length >= this.maxSessionsPerUser) {
|
|
126
160
|
const sorted = activeSessions.sort((a, b) => {
|
|
127
161
|
const aTime = a.lastActive?.getTime() || 0;
|
|
@@ -130,13 +164,28 @@ let SessionManagerService = class SessionManagerService {
|
|
|
130
164
|
});
|
|
131
165
|
const toRemove = sorted.slice(0, activeSessions.length - this.maxSessionsPerUser + 1);
|
|
132
166
|
for (const session of toRemove) {
|
|
133
|
-
await this.
|
|
167
|
+
await this.store.delete(session.id);
|
|
134
168
|
}
|
|
135
169
|
}
|
|
136
170
|
}
|
|
137
171
|
calculateExpiration(duration) {
|
|
138
172
|
const expiryDuration = duration || this.options.session?.sessionExpiry || '7d';
|
|
139
|
-
|
|
173
|
+
let milliseconds;
|
|
174
|
+
if (typeof expiryDuration === 'string') {
|
|
175
|
+
const parsed = (0, ms_1.default)(expiryDuration);
|
|
176
|
+
if (parsed === undefined || !Number.isFinite(parsed) || parsed <= 0) {
|
|
177
|
+
milliseconds = (0, ms_1.default)('7d') || 7 * 24 * 60 * 60 * 1000;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
milliseconds = parsed;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
milliseconds = expiryDuration * 1000;
|
|
185
|
+
if (!Number.isFinite(milliseconds) || milliseconds <= 0) {
|
|
186
|
+
throw new Error(`Invalid session expiry duration: ${expiryDuration} seconds`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
140
189
|
return new Date(Date.now() + milliseconds);
|
|
141
190
|
}
|
|
142
191
|
isExpired(session) {
|
|
@@ -187,7 +236,7 @@ let SessionManagerService = class SessionManagerService {
|
|
|
187
236
|
exports.SessionManagerService = SessionManagerService;
|
|
188
237
|
exports.SessionManagerService = SessionManagerService = __decorate([
|
|
189
238
|
(0, common_1.Injectable)(),
|
|
190
|
-
__param(0, (0, common_1.Inject)(exports.
|
|
239
|
+
__param(0, (0, common_1.Inject)(exports.SESSION_STORE)),
|
|
191
240
|
__metadata("design:paramtypes", [Object])
|
|
192
241
|
], SessionManagerService);
|
|
193
242
|
//# sourceMappingURL=session-manager.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../../src/lib/session/services/session-manager.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"session-manager.service.js","sourceRoot":"","sources":["../../../../src/lib/session/services/session-manager.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
export declare class SessionModule {
|
|
2
|
-
private static
|
|
2
|
+
private static createRedisStore;
|
|
3
|
+
private static resolveStorageType;
|
|
4
|
+
private static resolveRedisOptions;
|
|
5
|
+
private static resolveDefaultTtlSeconds;
|
|
6
|
+
private static buildRedisClientOptions;
|
|
3
7
|
}
|
|
4
8
|
//# sourceMappingURL=session.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.module.d.ts","sourceRoot":"","sources":["../../../src/lib/session/session.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.module.d.ts","sourceRoot":"","sources":["../../../src/lib/session/session.module.ts"],"names":[],"mappings":"AAmBA,qBAiDa,aAAa;IAKtB,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAsC/B,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAajC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAYlC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAgBvC,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAqBzC"}
|
|
@@ -5,6 +5,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
var SessionModule_1;
|
|
8
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
13
|
exports.SessionModule = void 0;
|
|
10
14
|
const common_1 = require("@nestjs/common");
|
|
@@ -13,40 +17,96 @@ const session_entity_1 = require("./entities/session.entity");
|
|
|
13
17
|
const session_manager_service_1 = require("./services/session-manager.service");
|
|
14
18
|
const typeorm_session_repository_1 = require("./repositories/typeorm-session.repository");
|
|
15
19
|
const memory_session_repository_1 = require("./repositories/memory-session.repository");
|
|
20
|
+
const database_session_store_1 = require("./stores/database-session.store");
|
|
21
|
+
const redis_session_repository_1 = require("./repositories/redis-session.repository");
|
|
16
22
|
const core_module_1 = require("../core/core.module");
|
|
17
23
|
const session_options_interface_1 = require("../core/interfaces/session-options.interface");
|
|
18
24
|
const auth_config_service_1 = require("../core/services/auth-config.service");
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
let
|
|
25
|
+
const ms_1 = __importDefault(require("ms"));
|
|
26
|
+
let SessionModule = SessionModule_1 = class SessionModule {
|
|
27
|
+
static createRedisStore(session) {
|
|
28
|
+
let RedisClient;
|
|
23
29
|
let redisClient;
|
|
24
30
|
try {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
RedisClient = require('ioredis').default || require('ioredis');
|
|
32
|
+
const redisOptions = SessionModule_1.resolveRedisOptions(session);
|
|
33
|
+
const clientOptions = SessionModule_1.buildRedisClientOptions(redisOptions);
|
|
34
|
+
redisClient = redisOptions.url
|
|
35
|
+
? new RedisClient(redisOptions.url, clientOptions)
|
|
36
|
+
: new RedisClient(clientOptions);
|
|
37
|
+
const storeOptions = {
|
|
38
|
+
keyPrefix: redisOptions.keyPrefix,
|
|
39
|
+
ttlSeconds: redisOptions.ttlSeconds ?? SessionModule_1.resolveDefaultTtlSeconds(session),
|
|
40
|
+
};
|
|
41
|
+
return new redis_session_repository_1.RedisSessionStore(redisClient, storeOptions);
|
|
35
42
|
}
|
|
36
43
|
catch (error) {
|
|
37
44
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
38
45
|
if (errorMessage.includes('Cannot find module')) {
|
|
39
|
-
throw new Error('
|
|
40
|
-
'
|
|
41
|
-
' Or change session.storageType to SessionStorageType.DATABASE');
|
|
46
|
+
throw new Error('Redis session store selected but redis client dependency not installed. ' +
|
|
47
|
+
'Install: npm install ioredis');
|
|
42
48
|
}
|
|
43
|
-
throw new Error(
|
|
49
|
+
throw new Error(`Failed to initialize Redis session storage: ${errorMessage}\n` +
|
|
44
50
|
' Make sure Redis server is running and accessible.');
|
|
45
51
|
}
|
|
46
52
|
}
|
|
53
|
+
static resolveStorageType(session) {
|
|
54
|
+
const store = session?.storageType ?? session_options_interface_1.SessionStorageType.DATABASE;
|
|
55
|
+
const normalized = String(store).toLowerCase();
|
|
56
|
+
if (normalized === session_options_interface_1.SessionStorageType.REDIS) {
|
|
57
|
+
return session_options_interface_1.SessionStorageType.REDIS;
|
|
58
|
+
}
|
|
59
|
+
if (normalized === session_options_interface_1.SessionStorageType.MEMORY) {
|
|
60
|
+
return session_options_interface_1.SessionStorageType.MEMORY;
|
|
61
|
+
}
|
|
62
|
+
return session_options_interface_1.SessionStorageType.DATABASE;
|
|
63
|
+
}
|
|
64
|
+
static resolveRedisOptions(session) {
|
|
65
|
+
const redis = {
|
|
66
|
+
...(session?.redis || {}),
|
|
67
|
+
};
|
|
68
|
+
if (!redis.url && session?.redisUrl) {
|
|
69
|
+
redis.url = session.redisUrl;
|
|
70
|
+
}
|
|
71
|
+
return redis;
|
|
72
|
+
}
|
|
73
|
+
static resolveDefaultTtlSeconds(session) {
|
|
74
|
+
const expiry = session?.sessionExpiry;
|
|
75
|
+
if (typeof expiry === 'string') {
|
|
76
|
+
const msValue = (0, ms_1.default)(expiry);
|
|
77
|
+
if (typeof msValue === 'number' && msValue > 0) {
|
|
78
|
+
return Math.floor(msValue / 1000);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (typeof expiry === 'number' && expiry > 0) {
|
|
82
|
+
return Math.floor(expiry);
|
|
83
|
+
}
|
|
84
|
+
return 7 * 24 * 60 * 60;
|
|
85
|
+
}
|
|
86
|
+
static buildRedisClientOptions(redis) {
|
|
87
|
+
const options = {
|
|
88
|
+
enableOfflineQueue: redis.enableOfflineQueue ?? true,
|
|
89
|
+
maxRetriesPerRequest: redis.maxRetriesPerRequest ?? null,
|
|
90
|
+
retryStrategy: redis.retryStrategy ||
|
|
91
|
+
((times) => Math.min(times * 50, 2000)),
|
|
92
|
+
reconnectOnError: redis.reconnectOnError ||
|
|
93
|
+
((error) => error?.message?.includes('READONLY') ? 2 : false),
|
|
94
|
+
};
|
|
95
|
+
if (redis.host)
|
|
96
|
+
options.host = redis.host;
|
|
97
|
+
if (redis.port !== undefined)
|
|
98
|
+
options.port = redis.port;
|
|
99
|
+
if (redis.password)
|
|
100
|
+
options.password = redis.password;
|
|
101
|
+
if (redis.db !== undefined)
|
|
102
|
+
options.db = redis.db;
|
|
103
|
+
if (redis.tls)
|
|
104
|
+
options.tls = redis.tls;
|
|
105
|
+
return options;
|
|
106
|
+
}
|
|
47
107
|
};
|
|
48
108
|
exports.SessionModule = SessionModule;
|
|
49
|
-
exports.SessionModule = SessionModule = __decorate([
|
|
109
|
+
exports.SessionModule = SessionModule = SessionModule_1 = __decorate([
|
|
50
110
|
(0, common_1.Module)({
|
|
51
111
|
imports: [
|
|
52
112
|
typeorm_1.TypeOrmModule.forFeature([session_entity_1.NestAuthSession]),
|
|
@@ -55,28 +115,35 @@ exports.SessionModule = SessionModule = __decorate([
|
|
|
55
115
|
providers: [
|
|
56
116
|
typeorm_session_repository_1.TypeORMSessionRepository,
|
|
57
117
|
memory_session_repository_1.MemorySessionRepository,
|
|
118
|
+
database_session_store_1.DatabaseSessionStore,
|
|
58
119
|
{
|
|
59
|
-
provide: session_manager_service_1.
|
|
60
|
-
useFactory: (
|
|
120
|
+
provide: session_manager_service_1.SESSION_STORE,
|
|
121
|
+
useFactory: (databaseStore, memoryStore) => {
|
|
61
122
|
const config = auth_config_service_1.AuthConfigService.getOptions();
|
|
62
|
-
const storageType = config.session
|
|
123
|
+
const storageType = SessionModule.resolveStorageType(config.session);
|
|
63
124
|
if (storageType === session_options_interface_1.SessionStorageType.REDIS) {
|
|
64
|
-
return SessionModule.
|
|
125
|
+
return SessionModule.createRedisStore(config.session);
|
|
65
126
|
}
|
|
66
127
|
if (storageType === session_options_interface_1.SessionStorageType.MEMORY) {
|
|
67
|
-
return
|
|
128
|
+
return memoryStore;
|
|
68
129
|
}
|
|
69
|
-
return
|
|
130
|
+
return databaseStore;
|
|
70
131
|
},
|
|
71
|
-
inject: [
|
|
132
|
+
inject: [database_session_store_1.DatabaseSessionStore, memory_session_repository_1.MemorySessionRepository],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
provide: session_manager_service_1.SESSION_REPOSITORY,
|
|
136
|
+
useExisting: session_manager_service_1.SESSION_STORE,
|
|
72
137
|
},
|
|
73
138
|
session_manager_service_1.SessionManagerService,
|
|
74
139
|
],
|
|
75
140
|
exports: [
|
|
141
|
+
session_manager_service_1.SESSION_STORE,
|
|
76
142
|
session_manager_service_1.SESSION_REPOSITORY,
|
|
77
143
|
session_manager_service_1.SessionManagerService,
|
|
78
144
|
typeorm_session_repository_1.TypeORMSessionRepository,
|
|
79
145
|
memory_session_repository_1.MemorySessionRepository,
|
|
146
|
+
database_session_store_1.DatabaseSessionStore,
|
|
80
147
|
],
|
|
81
148
|
})
|
|
82
149
|
], SessionModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.module.js","sourceRoot":"","sources":["../../../src/lib/session/session.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.module.js","sourceRoot":"","sources":["../../../src/lib/session/session.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SessionStore } from '../interfaces/session-store.interface';
|
|
2
|
+
import { TypeORMSessionRepository } from '../repositories/typeorm-session.repository';
|
|
3
|
+
import { NestAuthSession } from '../entities/session.entity';
|
|
4
|
+
import { SessionPayload } from '../../core/interfaces/token-payload.interface';
|
|
5
|
+
export declare class DatabaseSessionStore implements SessionStore {
|
|
6
|
+
private readonly repository;
|
|
7
|
+
constructor(repository: TypeORMSessionRepository);
|
|
8
|
+
create(session: SessionPayload): Promise<NestAuthSession>;
|
|
9
|
+
findById(sessionId: string): Promise<NestAuthSession | null>;
|
|
10
|
+
findByUserId(userId: string): Promise<NestAuthSession[]>;
|
|
11
|
+
findActiveByUserId(userId: string): Promise<NestAuthSession[]>;
|
|
12
|
+
update(sessionId: string, updates: Partial<NestAuthSession>): Promise<NestAuthSession>;
|
|
13
|
+
delete(sessionId: string): Promise<void>;
|
|
14
|
+
deleteByUserId(userId: string): Promise<void>;
|
|
15
|
+
deleteExpired(): Promise<number>;
|
|
16
|
+
countActiveByUserId(userId: string): Promise<number>;
|
|
17
|
+
updateLastActive(sessionId: string): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=database-session.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-session.store.d.ts","sourceRoot":"","sources":["../../../../src/lib/session/stores/database-session.store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAK/E,qBACa,oBAAqB,YAAW,YAAY;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,wBAAwB;IAEjE,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAIzD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI5D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIxD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAI9D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAItF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAIhC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGrD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DatabaseSessionStore = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const typeorm_session_repository_1 = require("../repositories/typeorm-session.repository");
|
|
15
|
+
let DatabaseSessionStore = class DatabaseSessionStore {
|
|
16
|
+
repository;
|
|
17
|
+
constructor(repository) {
|
|
18
|
+
this.repository = repository;
|
|
19
|
+
}
|
|
20
|
+
create(session) {
|
|
21
|
+
return this.repository.create(session);
|
|
22
|
+
}
|
|
23
|
+
findById(sessionId) {
|
|
24
|
+
return this.repository.findById(sessionId);
|
|
25
|
+
}
|
|
26
|
+
findByUserId(userId) {
|
|
27
|
+
return this.repository.findByUserId(userId);
|
|
28
|
+
}
|
|
29
|
+
findActiveByUserId(userId) {
|
|
30
|
+
return this.repository.findActiveByUserId(userId);
|
|
31
|
+
}
|
|
32
|
+
update(sessionId, updates) {
|
|
33
|
+
return this.repository.update(sessionId, updates);
|
|
34
|
+
}
|
|
35
|
+
delete(sessionId) {
|
|
36
|
+
return this.repository.delete(sessionId);
|
|
37
|
+
}
|
|
38
|
+
deleteByUserId(userId) {
|
|
39
|
+
return this.repository.deleteByUserId(userId);
|
|
40
|
+
}
|
|
41
|
+
deleteExpired() {
|
|
42
|
+
return this.repository.deleteExpired();
|
|
43
|
+
}
|
|
44
|
+
countActiveByUserId(userId) {
|
|
45
|
+
return this.repository.countActiveByUserId(userId);
|
|
46
|
+
}
|
|
47
|
+
updateLastActive(sessionId) {
|
|
48
|
+
return this.repository.updateLastActive(sessionId);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
exports.DatabaseSessionStore = DatabaseSessionStore;
|
|
52
|
+
exports.DatabaseSessionStore = DatabaseSessionStore = __decorate([
|
|
53
|
+
(0, common_1.Injectable)(),
|
|
54
|
+
__metadata("design:paramtypes", [typeorm_session_repository_1.TypeORMSessionRepository])
|
|
55
|
+
], DatabaseSessionStore);
|
|
56
|
+
//# sourceMappingURL=database-session.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-session.store.js","sourceRoot":"","sources":["../../../../src/lib/session/stores/database-session.store.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,2FAAsF;AAQ/E,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACA;IAA7B,YAA6B,UAAoC;QAApC,eAAU,GAAV,UAAU,CAA0B;IAAG,CAAC;IAErE,MAAM,CAAC,OAAuB;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,SAAiB;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,YAAY,CAAC,MAAc;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,kBAAkB,CAAC,MAAc;QAC7B,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,SAAiB,EAAE,OAAiC;QACvD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,SAAiB;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,cAAc,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC;IAED,mBAAmB,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,gBAAgB,CAAC,SAAiB;QAC9B,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACJ,CAAA;AA1CY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;qCAEgC,qDAAwB;GADxD,oBAAoB,CA0ChC"}
|
|
@@ -32,7 +32,7 @@ export declare class NestAuthUser extends BaseEntity {
|
|
|
32
32
|
getPermissions(): Promise<string[]>;
|
|
33
33
|
getRoles(): Promise<NestAuthRole[]>;
|
|
34
34
|
assignRoles(roles: string | string[], guard: string): Promise<void>;
|
|
35
|
-
|
|
35
|
+
assignRolesWithMultipleGuard(roles: {
|
|
36
36
|
name: string;
|
|
37
37
|
guard: string;
|
|
38
38
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.entity.d.ts","sourceRoot":"","sources":["../../../../src/lib/user/entities/user.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAQH,UAAU,EAMb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,qBACa,YAAa,SAAQ,UAAU;IAExC,EAAE,EAAE,MAAM,CAAC;IAIX,KAAK,EAAE,MAAM,CAAC;IAId,eAAe,EAAE,IAAI,CAAC;IAItB,KAAK,EAAE,MAAM,CAAC;IAId,eAAe,EAAE,IAAI,CAAC;IAGtB,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,OAAO,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,EAAE,cAAc,CAAC;IAGvB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAG/B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAGhC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAG5B,IAAI,EAAE,WAAW,EAAE,CAAC;IAGpB,KAAK,EAAE,YAAY,EAAE,CAAC;IAItB,WAAW,EAAE,MAAM,CAAC;IAIpB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;IAMhB,kBAAkB;IASZ,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBnC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAenC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,
|
|
1
|
+
{"version":3,"file":"user.entity.d.ts","sourceRoot":"","sources":["../../../../src/lib/user/entities/user.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAQH,UAAU,EAMb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,qBACa,YAAa,SAAQ,UAAU;IAExC,EAAE,EAAE,MAAM,CAAC;IAIX,KAAK,EAAE,MAAM,CAAC;IAId,eAAe,EAAE,IAAI,CAAC;IAItB,KAAK,EAAE,MAAM,CAAC;IAId,eAAe,EAAE,IAAI,CAAC;IAGtB,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,OAAO,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,EAAE,OAAO,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,MAAM,EAAE,cAAc,CAAC;IAGvB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAG/B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAGhC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAG5B,IAAI,EAAE,WAAW,EAAE,CAAC;IAGpB,KAAK,EAAE,YAAY,EAAE,CAAC;IAItB,WAAW,EAAE,MAAM,CAAC;IAIpB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;IAMhB,kBAAkB;IASZ,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBnC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAenC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,4BAA4B,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAevH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAiBzD,sBAAsB,CACxB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAChC,OAAO,CAAC,gBAAgB,CAAC;IAqBtB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBrD"}
|
|
@@ -89,7 +89,7 @@ let NestAuthUser = class NestAuthUser extends typeorm_1.BaseEntity {
|
|
|
89
89
|
]
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
-
async
|
|
92
|
+
async assignRolesWithMultipleGuard(roles) {
|
|
93
93
|
const roleAssignments = Array.isArray(roles) ? roles : [roles];
|
|
94
94
|
if (roleAssignments.length === 0) {
|
|
95
95
|
this.roles = [];
|
|
@@ -115,19 +115,19 @@ let NestAuthUser = class NestAuthUser extends typeorm_1.BaseEntity {
|
|
|
115
115
|
return identity.save();
|
|
116
116
|
}
|
|
117
117
|
async updateOrCreateIdentity(provider, data) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
118
|
+
const existingIdentity = await identity_entity_1.NestAuthIdentity.findOne({
|
|
119
|
+
where: { provider, userId: this.id },
|
|
120
|
+
});
|
|
121
|
+
if (existingIdentity) {
|
|
122
|
+
Object.assign(existingIdentity, data);
|
|
123
|
+
return existingIdentity.save();
|
|
123
124
|
}
|
|
124
|
-
|
|
125
|
+
const newIdentity = identity_entity_1.NestAuthIdentity.create({
|
|
125
126
|
provider,
|
|
126
|
-
...identity,
|
|
127
|
-
...data,
|
|
128
127
|
userId: this.id,
|
|
128
|
+
...data,
|
|
129
129
|
});
|
|
130
|
-
return
|
|
130
|
+
return newIdentity.save();
|
|
131
131
|
}
|
|
132
132
|
async validatePassword(password) {
|
|
133
133
|
if (!this.passwordHash)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../../src/lib/user/entities/user.entity.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../../../src/lib/user/entities/user.entity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackplus/nest-auth",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.46",
|
|
4
4
|
"description": "Powerful CRUD operations for NestJS with TypeORM - automatic REST endpoints, advanced filtering, relations, pagination, and more",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"qrcode": "^1.5.0",
|
|
40
40
|
"qs": "^6.11.2",
|
|
41
41
|
"speakeasy": "^2.0.0",
|
|
42
|
-
"@ackplus/nest-auth-contracts": "1.1.
|
|
42
|
+
"@ackplus/nest-auth-contracts": "1.1.46"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@nestjs/common": "^10 || ^11",
|