@fabx.vn/core 1.0.2 → 1.0.4
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/core/core.module.js +1 -1
- package/dist/core/core.module.js.map +1 -1
- package/dist/core/services/redis.service.js +6 -0
- package/dist/core/services/redis.service.js.map +1 -1
- package/dist/core/services/session.service.d.ts +3 -1
- package/dist/core/services/session.service.js +26 -22
- package/dist/core/services/session.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/core/core.module.js
CHANGED
|
@@ -41,10 +41,10 @@ exports.CoreModule = CoreModule = __decorate([
|
|
|
41
41
|
}),
|
|
42
42
|
],
|
|
43
43
|
providers: [
|
|
44
|
+
redis_service_1.RedisService,
|
|
44
45
|
request_info_service_1.RequestInfoService,
|
|
45
46
|
jwt_service_1.CoreJwtService,
|
|
46
47
|
session_service_1.SessionService,
|
|
47
|
-
redis_service_1.RedisService,
|
|
48
48
|
rabbitmq_publisher_service_1.RabbitMQPublisher,
|
|
49
49
|
jwt_strategy_1.JwtStrategy,
|
|
50
50
|
jwt_auth_guard_1.JwtAuthGuard,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../../src/core/core.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,+CAAkD;AAClD,qCAAwC;AACxC,uCAA+C;AAC/C,mDAA+C;AAG/C,8EAAyE;AACzE,4DAA4D;AAC5D,oEAAgE;AAChE,gEAA4D;AAC5D,0FAA8E;AAG9E,gEAA4D;AAG5D,gEAA2D;AAC3D,0EAAqE;AAGrE,gGAA2F;AAG3F,yEAAqE;AAqD9D,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAnDtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,yBAAc;YACd,eAAS,CAAC,aAAa,CAAC;gBACtB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjB,MAAM,EAAE,sBAAS,CAAC,MAAM;oBACxB,WAAW,EAAE;wBACX,SAAS,EAAE,sBAAS,CAAC,SAAS;qBAC/B;iBACF,CAAC;aACH,CAAC;SACH;QACD,SAAS,EAAE;YAET,yCAAkB;YAClB,4BAAc;YACd,gCAAc;YACd,
|
|
1
|
+
{"version":3,"file":"core.module.js","sourceRoot":"","sources":["../../src/core/core.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,+CAAkD;AAClD,qCAAwC;AACxC,uCAA+C;AAC/C,mDAA+C;AAG/C,8EAAyE;AACzE,4DAA4D;AAC5D,oEAAgE;AAChE,gEAA4D;AAC5D,0FAA8E;AAG9E,gEAA4D;AAG5D,gEAA2D;AAC3D,0EAAqE;AAGrE,gGAA2F;AAG3F,yEAAqE;AAqD9D,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IAnDtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,yBAAc;YACd,eAAS,CAAC,aAAa,CAAC;gBACtB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjB,MAAM,EAAE,sBAAS,CAAC,MAAM;oBACxB,WAAW,EAAE;wBACX,SAAS,EAAE,sBAAS,CAAC,SAAS;qBAC/B;iBACF,CAAC;aACH,CAAC;SACH;QACD,SAAS,EAAE;YAET,4BAAY;YACZ,yCAAkB;YAClB,4BAAc;YACd,gCAAc;YACd,8CAAiB;YAEjB,0BAAW;YAEX,6BAAY;YACZ,uCAAiB;YAEjB,uDAAyB;YACzB;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,uDAAyB;aACpC;YAED,kCAAe;SAChB;QACD,OAAO,EAAE;YAEP,yCAAkB;YAClB,4BAAc;YACd,gCAAc;YACd,4BAAY;YACZ,8CAAiB;YAEjB,0BAAW;YAEX,6BAAY;YACZ,uCAAiB;YAEjB,uDAAyB;SAC1B;KACF,CAAC;GACW,UAAU,CAAG"}
|
|
@@ -12,12 +12,18 @@ const ioredis_1 = require("ioredis");
|
|
|
12
12
|
const redis_config_1 = require("../../config/redis.config");
|
|
13
13
|
let RedisService = class RedisService {
|
|
14
14
|
async onModuleInit() {
|
|
15
|
+
console.log(`[RedisService] Initializing Redis connection to ${redis_config_1.redisConfig.host}:${redis_config_1.redisConfig.port}, DB: ${redis_config_1.redisConfig.db}`);
|
|
15
16
|
this.redis = new ioredis_1.default(redis_config_1.redisConfig);
|
|
17
|
+
await this.redis.ping();
|
|
18
|
+
console.log(`[RedisService] Redis connection established successfully`);
|
|
16
19
|
}
|
|
17
20
|
async onModuleDestroy() {
|
|
18
21
|
await this.redis.quit();
|
|
19
22
|
}
|
|
20
23
|
async get(key) {
|
|
24
|
+
if (!this.redis) {
|
|
25
|
+
throw new Error("Redis is not initialized. Make sure RedisService.onModuleInit() has been called.");
|
|
26
|
+
}
|
|
21
27
|
return this.redis.get(key);
|
|
22
28
|
}
|
|
23
29
|
async set(key, value, ttl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../src/core/services/redis.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA2E;AAC3E,qCAA4B;AAC5B,uDAAmD;AAG5C,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC,0BAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../src/core/services/redis.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,9 @@ export interface CurrentUserDto {
|
|
|
13
13
|
export declare class SessionService {
|
|
14
14
|
private readonly redisService;
|
|
15
15
|
constructor(redisService: RedisService);
|
|
16
|
-
|
|
16
|
+
private sessionKey;
|
|
17
|
+
private userSessionsKey;
|
|
18
|
+
createSession(data: CurrentUserDto, ttlSec: number): Promise<string>;
|
|
17
19
|
getSession(sid: string): Promise<CurrentUserDto | null>;
|
|
18
20
|
extendSession(sid: string, ttlSec: number): Promise<boolean>;
|
|
19
21
|
deleteSession(sid: string): Promise<number>;
|
|
@@ -17,48 +17,52 @@ let SessionService = class SessionService {
|
|
|
17
17
|
constructor(redisService) {
|
|
18
18
|
this.redisService = redisService;
|
|
19
19
|
}
|
|
20
|
+
sessionKey(sid) {
|
|
21
|
+
return `session:${sid}`;
|
|
22
|
+
}
|
|
23
|
+
userSessionsKey(userId) {
|
|
24
|
+
return `user_sessions:${userId}`;
|
|
25
|
+
}
|
|
20
26
|
async createSession(data, ttlSec) {
|
|
21
27
|
const sid = (0, crypto_1.randomUUID)();
|
|
22
|
-
|
|
23
|
-
await this.redisService.setWithOptions(key, JSON.stringify(data), "EX", ttlSec);
|
|
28
|
+
await this.redisService.setWithOptions(this.sessionKey(sid), JSON.stringify(data), "EX", ttlSec);
|
|
24
29
|
if (data.userId) {
|
|
25
|
-
|
|
26
|
-
await this.redisService.
|
|
30
|
+
const userKey = this.userSessionsKey(data.userId);
|
|
31
|
+
await this.redisService.sadd(userKey, sid);
|
|
32
|
+
await this.redisService.expire(userKey, ttlSec);
|
|
27
33
|
}
|
|
28
34
|
return sid;
|
|
29
35
|
}
|
|
30
36
|
async getSession(sid) {
|
|
31
|
-
const key =
|
|
37
|
+
const key = this.sessionKey(sid);
|
|
32
38
|
const json = await this.redisService.get(key);
|
|
33
|
-
if (!json)
|
|
39
|
+
if (!json) {
|
|
40
|
+
console.log(`[SessionService] Session not found for key: ${key}`);
|
|
34
41
|
return null;
|
|
42
|
+
}
|
|
35
43
|
return JSON.parse(json);
|
|
36
44
|
}
|
|
37
45
|
async extendSession(sid, ttlSec) {
|
|
38
|
-
|
|
39
|
-
const res = await this.redisService.expire(key, ttlSec);
|
|
40
|
-
return res === 1;
|
|
46
|
+
return (await this.redisService.expire(this.sessionKey(sid), ttlSec)) === 1;
|
|
41
47
|
}
|
|
42
48
|
async deleteSession(sid) {
|
|
43
|
-
const
|
|
44
|
-
const json = await this.redisService.get(key);
|
|
49
|
+
const json = await this.redisService.get(this.sessionKey(sid));
|
|
45
50
|
if (json) {
|
|
46
51
|
const data = JSON.parse(json);
|
|
47
|
-
if (data
|
|
48
|
-
await this.redisService.srem(
|
|
52
|
+
if (data?.userId) {
|
|
53
|
+
await this.redisService.srem(this.userSessionsKey(data.userId), sid);
|
|
49
54
|
}
|
|
50
55
|
}
|
|
51
|
-
return this.redisService.del(
|
|
56
|
+
return this.redisService.del(this.sessionKey(sid));
|
|
52
57
|
}
|
|
53
58
|
async revokeAllForUser(userId) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
59
|
+
const sids = await this.redisService.smembers(this.userSessionsKey(userId));
|
|
60
|
+
if (!sids.length)
|
|
61
|
+
return true;
|
|
62
|
+
const pipeline = this.redisService.pipeline();
|
|
63
|
+
sids.forEach((sid) => pipeline.del(this.sessionKey(sid)));
|
|
64
|
+
pipeline.del(this.userSessionsKey(userId));
|
|
65
|
+
await pipeline.exec();
|
|
62
66
|
return true;
|
|
63
67
|
}
|
|
64
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../../src/core/services/session.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,mCAAoC;AACpC,gEAA4D;AAerD,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../../src/core/services/session.service.ts"],"names":[],"mappings":"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"}
|