@ackplus/nest-auth 1.1.45 → 1.1.47
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 +14 -10
- package/dist/lib/admin-console/controllers/admin-users.controller.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/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/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 +18 -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/package.json +5 -5
- 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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ackplus/nest-auth",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.47",
|
|
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,20 +39,20 @@
|
|
|
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.47"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"@nestjs/common": "^10 || ^11",
|
|
46
46
|
"@nestjs/core": "^10 || ^11",
|
|
47
|
-
"@nestjs/event-emitter": "^2
|
|
47
|
+
"@nestjs/event-emitter": "^2 || ^3",
|
|
48
48
|
"@nestjs/platform-express": "^10 || ^11",
|
|
49
49
|
"@nestjs/swagger": "^10 || ^11",
|
|
50
50
|
"@nestjs/typeorm": "^10 || ^11",
|
|
51
51
|
"class-transformer": "^0.5.1",
|
|
52
52
|
"class-validator": "^0.14.1",
|
|
53
|
-
"express": "^4
|
|
53
|
+
"express": "^4 || ^5",
|
|
54
54
|
"moment": "^2.29.0",
|
|
55
|
-
"reflect-metadata": "^0.1.13",
|
|
55
|
+
"reflect-metadata": "^0.1.13 || ^0.2.0",
|
|
56
56
|
"rxjs": "^7.8.0",
|
|
57
57
|
"typeorm": "^0.3.21"
|
|
58
58
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-repository.interface.d.ts","sourceRoot":"","sources":["../../../../src/lib/session/interfaces/session-repository.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAM/E,MAAM,WAAW,kBAAkB;IAI/B,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAK1D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAK7D,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAKzD,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAK/D,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAIvF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAKzC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAK9C,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAKjC,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAKrD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-repository.interface.js","sourceRoot":"","sources":["../../../../src/lib/session/interfaces/session-repository.interface.ts"],"names":[],"mappings":""}
|