@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.
@@ -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,4BAAY;YACZ,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"}
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;IACtC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,GAAY;QAChD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,GAAW,EACX,KAAa,EACb,GAAG,OAAc;QAEjB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,GAAW;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAGD,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,GAAG,OAA4B;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,GAAG,OAA4B;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC;IAC1C,CAAC;IAGD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC/B,CAAC;CACF,CAAA;AApEY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAoExB"}
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
- createSession(data: CurrentUserDto, ttlSec: number): Promise<`${string}-${string}-${string}-${string}-${string}`>;
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
- const key = `session:${sid}`;
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
- await this.redisService.sadd(`user_sessions:${data.userId}`, sid);
26
- await this.redisService.expire(`user_sessions:${data.userId}`, ttlSec);
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 = `session:${sid}`;
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
- const key = `session:${sid}`;
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 key = `session:${sid}`;
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.userId) {
48
- await this.redisService.srem(`user_sessions:${data.userId}`, sid);
52
+ if (data?.userId) {
53
+ await this.redisService.srem(this.userSessionsKey(data.userId), sid);
49
54
  }
50
55
  }
51
- return this.redisService.del(key);
56
+ return this.redisService.del(this.sessionKey(sid));
52
57
  }
53
58
  async revokeAllForUser(userId) {
54
- const setKey = `user_sessions:${userId}`;
55
- const sids = await this.redisService.smembers(setKey);
56
- if (sids.length) {
57
- const pipeline = this.redisService.pipeline();
58
- sids.forEach((sid) => pipeline.del(`session:${sid}`));
59
- pipeline.del(setKey);
60
- await pipeline.exec();
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":"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"}
1
+ {"version":3,"file":"session.service.js","sourceRoot":"","sources":["../../../src/core/services/session.service.ts"],"names":[],"mappings":"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"}