@sprout-idws/sprout-redis 1.0.0

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 (82) hide show
  1. package/dist/cache/cache-store.interface.d.ts +14 -0
  2. package/dist/cache/cache-store.interface.d.ts.map +1 -0
  3. package/dist/cache/cache-store.interface.js +5 -0
  4. package/dist/cache/cache-store.interface.js.map +1 -0
  5. package/dist/cache/cache.constants.d.ts +4 -0
  6. package/dist/cache/cache.constants.d.ts.map +1 -0
  7. package/dist/cache/cache.constants.js +7 -0
  8. package/dist/cache/cache.constants.js.map +1 -0
  9. package/dist/cache/cache.manager.d.ts +17 -0
  10. package/dist/cache/cache.manager.d.ts.map +1 -0
  11. package/dist/cache/cache.manager.js +59 -0
  12. package/dist/cache/cache.manager.js.map +1 -0
  13. package/dist/cache/cache.module.d.ts +3 -0
  14. package/dist/cache/cache.module.d.ts.map +1 -0
  15. package/dist/cache/cache.module.js +46 -0
  16. package/dist/cache/cache.module.js.map +1 -0
  17. package/dist/cache/index.d.ts +6 -0
  18. package/dist/cache/index.d.ts.map +1 -0
  19. package/dist/cache/index.js +17 -0
  20. package/dist/cache/index.js.map +1 -0
  21. package/dist/cache/stores/in-memory-cache.store.d.ts +15 -0
  22. package/dist/cache/stores/in-memory-cache.store.d.ts.map +1 -0
  23. package/dist/cache/stores/in-memory-cache.store.js +44 -0
  24. package/dist/cache/stores/in-memory-cache.store.js.map +1 -0
  25. package/dist/cache/stores/redis-cache.store.d.ts +12 -0
  26. package/dist/cache/stores/redis-cache.store.d.ts.map +1 -0
  27. package/dist/cache/stores/redis-cache.store.js +48 -0
  28. package/dist/cache/stores/redis-cache.store.js.map +1 -0
  29. package/dist/index.d.ts +19 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +36 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/lock/redis-lock.service.d.ts +15 -0
  34. package/dist/lock/redis-lock.service.d.ts.map +1 -0
  35. package/dist/lock/redis-lock.service.js +97 -0
  36. package/dist/lock/redis-lock.service.js.map +1 -0
  37. package/dist/redis-base.module.d.ts +9 -0
  38. package/dist/redis-base.module.d.ts.map +1 -0
  39. package/dist/redis-base.module.js +88 -0
  40. package/dist/redis-base.module.js.map +1 -0
  41. package/dist/redis-stream-consumer.module.d.ts +3 -0
  42. package/dist/redis-stream-consumer.module.d.ts.map +1 -0
  43. package/dist/redis-stream-consumer.module.js +36 -0
  44. package/dist/redis-stream-consumer.module.js.map +1 -0
  45. package/dist/stream/lua/ack-delete.lua +6 -0
  46. package/dist/stream/lua/delayed-retry.lua +11 -0
  47. package/dist/stream/lua/move-to-dlq.lua +27 -0
  48. package/dist/stream/lua/republish-delayed-messages.lua +30 -0
  49. package/dist/stream/lua/republish-inactive-consumer-messages.lua +52 -0
  50. package/dist/stream/lua-scripts.loader.d.ts +11 -0
  51. package/dist/stream/lua-scripts.loader.d.ts.map +1 -0
  52. package/dist/stream/lua-scripts.loader.js +39 -0
  53. package/dist/stream/lua-scripts.loader.js.map +1 -0
  54. package/dist/stream/periodic-executor.service.d.ts +30 -0
  55. package/dist/stream/periodic-executor.service.d.ts.map +1 -0
  56. package/dist/stream/periodic-executor.service.js +130 -0
  57. package/dist/stream/periodic-executor.service.js.map +1 -0
  58. package/dist/stream/redis-stream.service.d.ts +47 -0
  59. package/dist/stream/redis-stream.service.d.ts.map +1 -0
  60. package/dist/stream/redis-stream.service.js +200 -0
  61. package/dist/stream/redis-stream.service.js.map +1 -0
  62. package/dist/stream/stream-consumer-monitor.service.d.ts +19 -0
  63. package/dist/stream/stream-consumer-monitor.service.d.ts.map +1 -0
  64. package/dist/stream/stream-consumer-monitor.service.js +85 -0
  65. package/dist/stream/stream-consumer-monitor.service.js.map +1 -0
  66. package/dist/stream/stream-consumer.service.d.ts +25 -0
  67. package/dist/stream/stream-consumer.service.d.ts.map +1 -0
  68. package/dist/stream/stream-consumer.service.js +78 -0
  69. package/dist/stream/stream-consumer.service.js.map +1 -0
  70. package/dist/stream/stream-message-handler.service.d.ts +28 -0
  71. package/dist/stream/stream-message-handler.service.d.ts.map +1 -0
  72. package/dist/stream/stream-message-handler.service.js +145 -0
  73. package/dist/stream/stream-message-handler.service.js.map +1 -0
  74. package/dist/stream/stream-publisher.service.d.ts +9 -0
  75. package/dist/stream/stream-publisher.service.d.ts.map +1 -0
  76. package/dist/stream/stream-publisher.service.js +39 -0
  77. package/dist/stream/stream-publisher.service.js.map +1 -0
  78. package/dist/stream/stream-retry.service.d.ts +25 -0
  79. package/dist/stream/stream-retry.service.d.ts.map +1 -0
  80. package/dist/stream/stream-retry.service.js +74 -0
  81. package/dist/stream/stream-retry.service.js.map +1 -0
  82. package/package.json +67 -0
@@ -0,0 +1,14 @@
1
+ export declare const DEFAULT_CACHE_TTL_SECONDS = 1800;
2
+ export interface CacheOptions {
3
+ ttlSeconds?: number;
4
+ }
5
+ export interface CacheEntry<T> {
6
+ value: T;
7
+ options: CacheOptions;
8
+ }
9
+ export interface ICacheStore {
10
+ get<T>(key: string): Promise<CacheEntry<T> | null>;
11
+ set<T>(key: string, value: T, options?: CacheOptions): void | Promise<void>;
12
+ delete(key: string): void | Promise<void>;
13
+ }
14
+ //# sourceMappingURL=cache-store.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-store.interface.d.ts","sourceRoot":"","sources":["../../src/cache/cache-store.interface.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CACHE_TTL_SECONDS = void 0;
4
+ exports.DEFAULT_CACHE_TTL_SECONDS = 1800;
5
+ //# sourceMappingURL=cache-store.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-store.interface.js","sourceRoot":"","sources":["../../src/cache/cache-store.interface.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,IAAI,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const REDIS_CACHE_MANAGER = "REDIS_CACHE_MANAGER";
2
+ export declare const IN_MEMORY_CACHE_MANAGER = "IN_MEMORY_CACHE_MANAGER";
3
+ export declare const IN_MEMORY_THEN_REDIS_CACHE_MANAGER = "IN_MEMORY_THEN_REDIS_CACHE_MANAGER";
4
+ //# sourceMappingURL=cache.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.constants.d.ts","sourceRoot":"","sources":["../../src/cache/cache.constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,kCAAkC,uCAAuC,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IN_MEMORY_THEN_REDIS_CACHE_MANAGER = exports.IN_MEMORY_CACHE_MANAGER = exports.REDIS_CACHE_MANAGER = void 0;
4
+ exports.REDIS_CACHE_MANAGER = 'REDIS_CACHE_MANAGER';
5
+ exports.IN_MEMORY_CACHE_MANAGER = 'IN_MEMORY_CACHE_MANAGER';
6
+ exports.IN_MEMORY_THEN_REDIS_CACHE_MANAGER = 'IN_MEMORY_THEN_REDIS_CACHE_MANAGER';
7
+ //# sourceMappingURL=cache.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.constants.js","sourceRoot":"","sources":["../../src/cache/cache.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG,qBAAqB,CAAC;AAC5C,QAAA,uBAAuB,GAAG,yBAAyB,CAAC;AACpD,QAAA,kCAAkC,GAAG,oCAAoC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CacheOptions, ICacheStore } from './cache-store.interface';
2
+ export { DEFAULT_CACHE_TTL_SECONDS } from './cache-store.interface';
3
+ export type { CacheOptions } from './cache-store.interface';
4
+ export interface CacheManagerOptions {
5
+ levels: ICacheStore[];
6
+ defaultTtlSeconds?: number;
7
+ }
8
+ export declare class CacheManager {
9
+ private readonly levels;
10
+ private readonly defaultTtlSeconds;
11
+ constructor(options: CacheManagerOptions);
12
+ get<T>(key: string, notFoundFn: () => Promise<T>, options?: CacheOptions): Promise<T | null>;
13
+ requiredGet<T>(key: string, notFoundFn: () => Promise<T>, options?: CacheOptions): Promise<T>;
14
+ set<T>(key: string, value: T, options?: CacheOptions): void;
15
+ delete(key: string): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=cache.manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.manager.d.ts","sourceRoot":"","sources":["../../src/cache/cache.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,OAAO,EAAE,mBAAmB;IAQlC,GAAG,CAAC,CAAC,EACT,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA0Bd,WAAW,CAAC,CAAC,EACjB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC5B,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,CAAC,CAAC;IAQb,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAOrD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CacheManager = exports.DEFAULT_CACHE_TTL_SECONDS = void 0;
4
+ const cache_store_interface_1 = require("./cache-store.interface");
5
+ var cache_store_interface_2 = require("./cache-store.interface");
6
+ Object.defineProperty(exports, "DEFAULT_CACHE_TTL_SECONDS", { enumerable: true, get: function () { return cache_store_interface_2.DEFAULT_CACHE_TTL_SECONDS; } });
7
+ class CacheManager {
8
+ constructor(options) {
9
+ if (!options.levels?.length) {
10
+ throw new Error('CacheManager requires at least one cache store level');
11
+ }
12
+ this.levels = options.levels;
13
+ this.defaultTtlSeconds = options.defaultTtlSeconds ?? cache_store_interface_1.DEFAULT_CACHE_TTL_SECONDS;
14
+ }
15
+ async get(key, notFoundFn, options) {
16
+ const cacheOptions = options ?? { ttlSeconds: this.defaultTtlSeconds };
17
+ for (let i = 0; i < this.levels.length; i++) {
18
+ const store = this.levels[i];
19
+ const entry = await store.get(key);
20
+ if (entry !== null && entry !== undefined) {
21
+ for (let j = 0; j < i; j++) {
22
+ this.levels[j].set(key, entry.value, entry.options);
23
+ }
24
+ return entry.value;
25
+ }
26
+ }
27
+ const value = await notFoundFn();
28
+ if (value !== null && value !== undefined) {
29
+ for (const store of this.levels) {
30
+ store.set(key, value, cacheOptions);
31
+ }
32
+ return value;
33
+ }
34
+ return null;
35
+ }
36
+ async requiredGet(key, notFoundFn, options) {
37
+ const value = await this.get(key, notFoundFn, options);
38
+ if (value === null) {
39
+ throw new Error(`Value for key "${key}" not found in cache`);
40
+ }
41
+ return value;
42
+ }
43
+ set(key, value, options) {
44
+ const cacheOptions = options ?? { ttlSeconds: this.defaultTtlSeconds };
45
+ for (const store of this.levels) {
46
+ store.set(key, value, cacheOptions);
47
+ }
48
+ }
49
+ async delete(key) {
50
+ for (const store of this.levels) {
51
+ const result = store.delete(key);
52
+ if (result instanceof Promise) {
53
+ await result;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ exports.CacheManager = CacheManager;
59
+ //# sourceMappingURL=cache.manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.manager.js","sourceRoot":"","sources":["../../src/cache/cache.manager.ts"],"names":[],"mappings":";;;AACA,mEAAoE;AAEpE,iEAAoE;AAA3D,kIAAA,yBAAyB,OAAA;AAQlC,MAAa,YAAY;IAIvB,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,iDAAyB,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAW,EACX,UAA4B,EAC5B,OAAsB;QAEtB,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAI,GAAG,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,KAAK,CAAC,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,UAAU,EAAE,CAAC;QAEjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CACf,GAAW,EACX,UAA4B,EAC5B,OAAsB;QAEtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,sBAAsB,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,OAAsB;QAClD,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,MAAM,YAAY,OAAO,EAAE,CAAC;gBAC9B,MAAM,MAAM,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;CACF;AArED,oCAqEC"}
@@ -0,0 +1,3 @@
1
+ export declare class CacheModule {
2
+ }
3
+ //# sourceMappingURL=cache.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.module.d.ts","sourceRoot":"","sources":["../../src/cache/cache.module.ts"],"names":[],"mappings":"AAWA,qBA4Ba,WAAW;CAAG"}
@@ -0,0 +1,46 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CacheModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const redis_base_module_1 = require("../redis-base.module");
12
+ const cache_constants_1 = require("./cache.constants");
13
+ const cache_manager_1 = require("./cache.manager");
14
+ const in_memory_cache_store_1 = require("./stores/in-memory-cache.store");
15
+ const redis_cache_store_1 = require("./stores/redis-cache.store");
16
+ let CacheModule = class CacheModule {
17
+ };
18
+ exports.CacheModule = CacheModule;
19
+ exports.CacheModule = CacheModule = __decorate([
20
+ (0, common_1.Global)(),
21
+ (0, common_1.Module)({
22
+ imports: [redis_base_module_1.RedisBaseModule],
23
+ providers: [
24
+ {
25
+ provide: cache_constants_1.REDIS_CACHE_MANAGER,
26
+ useFactory: (redis) => new cache_manager_1.CacheManager({ levels: [new redis_cache_store_1.RedisCacheStore(redis)] }),
27
+ inject: ['REDIS_CLIENT'],
28
+ },
29
+ {
30
+ provide: cache_constants_1.IN_MEMORY_CACHE_MANAGER,
31
+ useFactory: () => new cache_manager_1.CacheManager({
32
+ levels: [new in_memory_cache_store_1.InMemoryCacheStore({ maxSize: 500 })],
33
+ }),
34
+ },
35
+ {
36
+ provide: cache_constants_1.IN_MEMORY_THEN_REDIS_CACHE_MANAGER,
37
+ useFactory: (redis) => new cache_manager_1.CacheManager({
38
+ levels: [new in_memory_cache_store_1.InMemoryCacheStore({ maxSize: 500 }), new redis_cache_store_1.RedisCacheStore(redis)],
39
+ }),
40
+ inject: ['REDIS_CLIENT'],
41
+ },
42
+ ],
43
+ exports: [cache_constants_1.REDIS_CACHE_MANAGER, cache_constants_1.IN_MEMORY_CACHE_MANAGER, cache_constants_1.IN_MEMORY_THEN_REDIS_CACHE_MANAGER],
44
+ })
45
+ ], CacheModule);
46
+ //# sourceMappingURL=cache.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.module.js","sourceRoot":"","sources":["../../src/cache/cache.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,4DAAuD;AACvD,uDAI2B;AAC3B,mDAA+C;AAC/C,0EAAoE;AACpE,kEAA6D;AA8BtD,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IA5BvB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,mCAAe,CAAC;QAC1B,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,qCAAmB;gBAC5B,UAAU,EAAE,CAAC,KAAgC,EAAE,EAAE,CAC/C,IAAI,4BAAY,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,mCAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,EAAE,CAAC,cAAc,CAAC;aACzB;YACD;gBACE,OAAO,EAAE,yCAAuB;gBAChC,UAAU,EAAE,GAAG,EAAE,CACf,IAAI,4BAAY,CAAC;oBACf,MAAM,EAAE,CAAC,IAAI,0CAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;iBACnD,CAAC;aACL;YACD;gBACE,OAAO,EAAE,oDAAkC;gBAC3C,UAAU,EAAE,CAAC,KAAgC,EAAE,EAAE,CAC/C,IAAI,4BAAY,CAAC;oBACf,MAAM,EAAE,CAAC,IAAI,0CAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,mCAAe,CAAC,KAAK,CAAC,CAAC;iBAC/E,CAAC;gBACJ,MAAM,EAAE,CAAC,cAAc,CAAC;aACzB;SACF;QACD,OAAO,EAAE,CAAC,qCAAmB,EAAE,yCAAuB,EAAE,oDAAkC,CAAC;KAC5F,CAAC;GACW,WAAW,CAAG"}
@@ -0,0 +1,6 @@
1
+ export { IN_MEMORY_CACHE_MANAGER, IN_MEMORY_THEN_REDIS_CACHE_MANAGER, REDIS_CACHE_MANAGER, } from './cache.constants';
2
+ export { CacheManager, DEFAULT_CACHE_TTL_SECONDS, type CacheManagerOptions, type CacheOptions, } from './cache.manager';
3
+ export { CacheModule } from './cache.module';
4
+ export { InMemoryCacheStore } from './stores/in-memory-cache.store';
5
+ export { RedisCacheStore } from './stores/redis-cache.store';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisCacheStore = exports.InMemoryCacheStore = exports.CacheModule = exports.DEFAULT_CACHE_TTL_SECONDS = exports.CacheManager = exports.REDIS_CACHE_MANAGER = exports.IN_MEMORY_THEN_REDIS_CACHE_MANAGER = exports.IN_MEMORY_CACHE_MANAGER = void 0;
4
+ var cache_constants_1 = require("./cache.constants");
5
+ Object.defineProperty(exports, "IN_MEMORY_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.IN_MEMORY_CACHE_MANAGER; } });
6
+ Object.defineProperty(exports, "IN_MEMORY_THEN_REDIS_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.IN_MEMORY_THEN_REDIS_CACHE_MANAGER; } });
7
+ Object.defineProperty(exports, "REDIS_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.REDIS_CACHE_MANAGER; } });
8
+ var cache_manager_1 = require("./cache.manager");
9
+ Object.defineProperty(exports, "CacheManager", { enumerable: true, get: function () { return cache_manager_1.CacheManager; } });
10
+ Object.defineProperty(exports, "DEFAULT_CACHE_TTL_SECONDS", { enumerable: true, get: function () { return cache_manager_1.DEFAULT_CACHE_TTL_SECONDS; } });
11
+ var cache_module_1 = require("./cache.module");
12
+ Object.defineProperty(exports, "CacheModule", { enumerable: true, get: function () { return cache_module_1.CacheModule; } });
13
+ var in_memory_cache_store_1 = require("./stores/in-memory-cache.store");
14
+ Object.defineProperty(exports, "InMemoryCacheStore", { enumerable: true, get: function () { return in_memory_cache_store_1.InMemoryCacheStore; } });
15
+ var redis_cache_store_1 = require("./stores/redis-cache.store");
16
+ Object.defineProperty(exports, "RedisCacheStore", { enumerable: true, get: function () { return redis_cache_store_1.RedisCacheStore; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":";;;AAAA,qDAI2B;AAHzB,0HAAA,uBAAuB,OAAA;AACvB,qIAAA,kCAAkC,OAAA;AAClC,sHAAA,mBAAmB,OAAA;AAErB,iDAKyB;AAJvB,6GAAA,YAAY,OAAA;AACZ,0HAAA,yBAAyB,OAAA;AAI3B,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,wEAAoE;AAA3D,2HAAA,kBAAkB,OAAA;AAC3B,gEAA6D;AAApD,oHAAA,eAAe,OAAA"}
@@ -0,0 +1,15 @@
1
+ import type { CacheEntry, CacheOptions, ICacheStore } from '../cache-store.interface';
2
+ export interface InMemoryCacheStoreOptions {
3
+ maxSize?: number;
4
+ ttlSeconds?: number;
5
+ }
6
+ export declare class InMemoryCacheStore implements ICacheStore {
7
+ private readonly cache;
8
+ private readonly defaultTtlSeconds;
9
+ constructor(options?: InMemoryCacheStoreOptions);
10
+ private buildKey;
11
+ get<T>(key: string): Promise<CacheEntry<T> | null>;
12
+ set<T>(key: string, value: T, options?: CacheOptions): void;
13
+ delete(key: string): void;
14
+ }
15
+ //# sourceMappingURL=in-memory-cache.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-cache.store.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/in-memory-cache.store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKtF,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;gBAE/B,OAAO,GAAE,yBAA8B;IAYnD,OAAO,CAAC,QAAQ;IAIV,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IASxD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAW3D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAI1B"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryCacheStore = void 0;
4
+ const lru_cache_1 = require("lru-cache");
5
+ const cache_store_interface_1 = require("../cache-store.interface");
6
+ const DEFAULT_MAX_SIZE = 500;
7
+ class InMemoryCacheStore {
8
+ constructor(options = {}) {
9
+ const maxSize = options.maxSize ?? DEFAULT_MAX_SIZE;
10
+ const ttlSeconds = options.ttlSeconds ?? cache_store_interface_1.DEFAULT_CACHE_TTL_SECONDS;
11
+ this.defaultTtlSeconds = ttlSeconds;
12
+ this.cache = new lru_cache_1.LRUCache({
13
+ max: maxSize,
14
+ ttl: ttlSeconds * 1000,
15
+ updateAgeOnGet: true,
16
+ });
17
+ }
18
+ buildKey(key) {
19
+ return `cache:memory:${key}`;
20
+ }
21
+ async get(key) {
22
+ const fullKey = this.buildKey(key);
23
+ const cached = this.cache.get(fullKey);
24
+ if (cached !== undefined) {
25
+ return JSON.parse(cached);
26
+ }
27
+ return null;
28
+ }
29
+ set(key, value, options) {
30
+ const fullKey = this.buildKey(key);
31
+ const ttlSeconds = options?.ttlSeconds ?? this.defaultTtlSeconds;
32
+ const cacheOptions = { ...options, ttlSeconds };
33
+ const entry = { value, options: cacheOptions };
34
+ const serialized = JSON.stringify(entry);
35
+ const ttlMs = ttlSeconds * 1000;
36
+ this.cache.set(fullKey, serialized, { ttl: ttlMs });
37
+ }
38
+ delete(key) {
39
+ const fullKey = this.buildKey(key);
40
+ this.cache.delete(fullKey);
41
+ }
42
+ }
43
+ exports.InMemoryCacheStore = InMemoryCacheStore;
44
+ //# sourceMappingURL=in-memory-cache.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-cache.store.js","sourceRoot":"","sources":["../../../src/cache/stores/in-memory-cache.store.ts"],"names":[],"mappings":";;;AAAA,yCAAqC;AAErC,oEAAqE;AAErE,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAO7B,MAAa,kBAAkB;IAI7B,YAAY,UAAqC,EAAE;QACjD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,iDAAyB,CAAC;QACnE,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;QAEpC,IAAI,CAAC,KAAK,GAAG,IAAI,oBAAQ,CAAiB;YACxC,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,UAAU,GAAG,IAAI;YACtB,cAAc,EAAE,IAAI;SACrB,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,OAAO,gBAAgB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAkB,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,OAAsB;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC;QACjE,MAAM,YAAY,GAAiB,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;QAEhC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF;AA5CD,gDA4CC"}
@@ -0,0 +1,12 @@
1
+ import type Redis from 'ioredis';
2
+ import type { CacheEntry, CacheOptions, ICacheStore } from '../cache-store.interface';
3
+ export declare class RedisCacheStore implements ICacheStore {
4
+ private readonly redis;
5
+ private readonly logger;
6
+ constructor(redis: Redis);
7
+ private buildKey;
8
+ get<T>(key: string): Promise<CacheEntry<T> | null>;
9
+ set<T>(key: string, value: T, options?: CacheOptions): void;
10
+ delete(key: string): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=redis-cache.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-cache.store.d.ts","sourceRoot":"","sources":["../../../src/cache/stores/redis-cache.store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGtF,qBAAa,eAAgB,YAAW,WAAW;IAGrC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAE9B,KAAK,EAAE,KAAK;IAEzC,OAAO,CAAC,QAAQ;IAIV,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAaxD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAYrD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQzC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisCacheStore = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const cache_store_interface_1 = require("../cache-store.interface");
6
+ class RedisCacheStore {
7
+ constructor(redis) {
8
+ this.redis = redis;
9
+ this.logger = new common_1.Logger(RedisCacheStore.name);
10
+ }
11
+ buildKey(key) {
12
+ return `cache:${key}`;
13
+ }
14
+ async get(key) {
15
+ const fullKey = this.buildKey(key);
16
+ try {
17
+ const cached = await this.redis.get(fullKey);
18
+ if (cached !== null) {
19
+ return JSON.parse(cached);
20
+ }
21
+ }
22
+ catch (error) {
23
+ this.logger.warn(`Failed to get cache key "${fullKey}": ${error.message}`);
24
+ }
25
+ return null;
26
+ }
27
+ set(key, value, options) {
28
+ const fullKey = this.buildKey(key);
29
+ const cacheOptions = options ?? { ttlSeconds: cache_store_interface_1.DEFAULT_CACHE_TTL_SECONDS };
30
+ const entry = { value, options: cacheOptions };
31
+ const serialized = JSON.stringify(entry);
32
+ const ttlSeconds = cacheOptions.ttlSeconds ?? cache_store_interface_1.DEFAULT_CACHE_TTL_SECONDS;
33
+ this.redis.setex(fullKey, ttlSeconds, serialized).catch((error) => {
34
+ this.logger.warn(`Failed to set cache key "${fullKey}": ${error.message}`);
35
+ });
36
+ }
37
+ async delete(key) {
38
+ const fullKey = this.buildKey(key);
39
+ try {
40
+ await this.redis.del(fullKey);
41
+ }
42
+ catch (error) {
43
+ this.logger.warn(`Failed to delete cache key "${fullKey}": ${error.message}`);
44
+ }
45
+ }
46
+ }
47
+ exports.RedisCacheStore = RedisCacheStore;
48
+ //# sourceMappingURL=redis-cache.store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-cache.store.js","sourceRoot":"","sources":["../../../src/cache/stores/redis-cache.store.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAGxC,oEAAqE;AAErE,MAAa,eAAe;IAG1B,YAA6B,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;QAFxB,WAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAEf,CAAC;IAErC,QAAQ,CAAC,GAAW;QAC1B,OAAO,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAkB,CAAC;YAC7C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,OAAsB;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,IAAI,EAAE,UAAU,EAAE,iDAAyB,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,iDAAyB,CAAC;QAExE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,OAAO,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF;AA1CD,0CA0CC"}
@@ -0,0 +1,19 @@
1
+ export { IN_MEMORY_CACHE_MANAGER, IN_MEMORY_THEN_REDIS_CACHE_MANAGER, REDIS_CACHE_MANAGER, } from './cache/cache.constants';
2
+ export { CacheManager, DEFAULT_CACHE_TTL_SECONDS, type CacheManagerOptions, type CacheOptions, } from './cache/cache.manager';
3
+ export { CacheModule } from './cache/cache.module';
4
+ export type { CacheEntry, ICacheStore } from './cache/cache-store.interface';
5
+ export { InMemoryCacheStore } from './cache/stores/in-memory-cache.store';
6
+ export { RedisCacheStore } from './cache/stores/redis-cache.store';
7
+ export { RedisLockService, type LockOptions } from './lock/redis-lock.service';
8
+ export type { StreamMessage } from './stream/redis-stream.service';
9
+ export { RedisStreamService } from './stream/redis-stream.service';
10
+ export { StreamPublisherService } from './stream/stream-publisher.service';
11
+ export { StreamConsumerService, CONSUMER_INTERVAL_TIME, type ConsumerConfig, } from './stream/stream-consumer.service';
12
+ export type { ProcessMessagesInput } from './stream/stream-message-handler.service';
13
+ export { StreamMessageHandlerService } from './stream/stream-message-handler.service';
14
+ export type { DelayedRetryInput } from './stream/stream-retry.service';
15
+ export { StreamRetryService } from './stream/stream-retry.service';
16
+ export { StreamConsumerMonitorService } from './stream/stream-consumer-monitor.service';
17
+ export { RedisBaseModule } from './redis-base.module';
18
+ export { RedisStreamConsumerModule } from './redis-stream-consumer.module';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,kCAAkC,EAClC,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG/E,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,cAAc,GACpB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,YAAY,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAC;AAGxF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RedisStreamConsumerModule = exports.RedisBaseModule = exports.StreamConsumerMonitorService = exports.StreamRetryService = exports.StreamMessageHandlerService = exports.CONSUMER_INTERVAL_TIME = exports.StreamConsumerService = exports.StreamPublisherService = exports.RedisStreamService = exports.RedisLockService = exports.RedisCacheStore = exports.InMemoryCacheStore = exports.CacheModule = exports.DEFAULT_CACHE_TTL_SECONDS = exports.CacheManager = exports.REDIS_CACHE_MANAGER = exports.IN_MEMORY_THEN_REDIS_CACHE_MANAGER = exports.IN_MEMORY_CACHE_MANAGER = void 0;
4
+ var cache_constants_1 = require("./cache/cache.constants");
5
+ Object.defineProperty(exports, "IN_MEMORY_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.IN_MEMORY_CACHE_MANAGER; } });
6
+ Object.defineProperty(exports, "IN_MEMORY_THEN_REDIS_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.IN_MEMORY_THEN_REDIS_CACHE_MANAGER; } });
7
+ Object.defineProperty(exports, "REDIS_CACHE_MANAGER", { enumerable: true, get: function () { return cache_constants_1.REDIS_CACHE_MANAGER; } });
8
+ var cache_manager_1 = require("./cache/cache.manager");
9
+ Object.defineProperty(exports, "CacheManager", { enumerable: true, get: function () { return cache_manager_1.CacheManager; } });
10
+ Object.defineProperty(exports, "DEFAULT_CACHE_TTL_SECONDS", { enumerable: true, get: function () { return cache_manager_1.DEFAULT_CACHE_TTL_SECONDS; } });
11
+ var cache_module_1 = require("./cache/cache.module");
12
+ Object.defineProperty(exports, "CacheModule", { enumerable: true, get: function () { return cache_module_1.CacheModule; } });
13
+ var in_memory_cache_store_1 = require("./cache/stores/in-memory-cache.store");
14
+ Object.defineProperty(exports, "InMemoryCacheStore", { enumerable: true, get: function () { return in_memory_cache_store_1.InMemoryCacheStore; } });
15
+ var redis_cache_store_1 = require("./cache/stores/redis-cache.store");
16
+ Object.defineProperty(exports, "RedisCacheStore", { enumerable: true, get: function () { return redis_cache_store_1.RedisCacheStore; } });
17
+ var redis_lock_service_1 = require("./lock/redis-lock.service");
18
+ Object.defineProperty(exports, "RedisLockService", { enumerable: true, get: function () { return redis_lock_service_1.RedisLockService; } });
19
+ var redis_stream_service_1 = require("./stream/redis-stream.service");
20
+ Object.defineProperty(exports, "RedisStreamService", { enumerable: true, get: function () { return redis_stream_service_1.RedisStreamService; } });
21
+ var stream_publisher_service_1 = require("./stream/stream-publisher.service");
22
+ Object.defineProperty(exports, "StreamPublisherService", { enumerable: true, get: function () { return stream_publisher_service_1.StreamPublisherService; } });
23
+ var stream_consumer_service_1 = require("./stream/stream-consumer.service");
24
+ Object.defineProperty(exports, "StreamConsumerService", { enumerable: true, get: function () { return stream_consumer_service_1.StreamConsumerService; } });
25
+ Object.defineProperty(exports, "CONSUMER_INTERVAL_TIME", { enumerable: true, get: function () { return stream_consumer_service_1.CONSUMER_INTERVAL_TIME; } });
26
+ var stream_message_handler_service_1 = require("./stream/stream-message-handler.service");
27
+ Object.defineProperty(exports, "StreamMessageHandlerService", { enumerable: true, get: function () { return stream_message_handler_service_1.StreamMessageHandlerService; } });
28
+ var stream_retry_service_1 = require("./stream/stream-retry.service");
29
+ Object.defineProperty(exports, "StreamRetryService", { enumerable: true, get: function () { return stream_retry_service_1.StreamRetryService; } });
30
+ var stream_consumer_monitor_service_1 = require("./stream/stream-consumer-monitor.service");
31
+ Object.defineProperty(exports, "StreamConsumerMonitorService", { enumerable: true, get: function () { return stream_consumer_monitor_service_1.StreamConsumerMonitorService; } });
32
+ var redis_base_module_1 = require("./redis-base.module");
33
+ Object.defineProperty(exports, "RedisBaseModule", { enumerable: true, get: function () { return redis_base_module_1.RedisBaseModule; } });
34
+ var redis_stream_consumer_module_1 = require("./redis-stream-consumer.module");
35
+ Object.defineProperty(exports, "RedisStreamConsumerModule", { enumerable: true, get: function () { return redis_stream_consumer_module_1.RedisStreamConsumerModule; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,2DAIiC;AAH/B,0HAAA,uBAAuB,OAAA;AACvB,qIAAA,kCAAkC,OAAA;AAClC,sHAAA,mBAAmB,OAAA;AAErB,uDAK+B;AAJ7B,6GAAA,YAAY,OAAA;AACZ,0HAAA,yBAAyB,OAAA;AAI3B,qDAAmD;AAA1C,2GAAA,WAAW,OAAA;AAEpB,8EAA0E;AAAjE,2HAAA,kBAAkB,OAAA;AAC3B,sEAAmE;AAA1D,oHAAA,eAAe,OAAA;AAGxB,gEAA+E;AAAtE,sHAAA,gBAAgB,OAAA;AAIzB,sEAAmE;AAA1D,0HAAA,kBAAkB,OAAA;AAC3B,8EAA2E;AAAlE,kIAAA,sBAAsB,OAAA;AAC/B,4EAI0C;AAHxC,gIAAA,qBAAqB,OAAA;AACrB,iIAAA,sBAAsB,OAAA;AAIxB,0FAAsF;AAA7E,6IAAA,2BAA2B,OAAA;AAEpC,sEAAmE;AAA1D,0HAAA,kBAAkB,OAAA;AAC3B,4FAAwF;AAA/E,+IAAA,4BAA4B,OAAA;AAGrC,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,+EAA2E;AAAlE,yIAAA,yBAAyB,OAAA"}
@@ -0,0 +1,15 @@
1
+ import Redis from 'ioredis';
2
+ export interface LockOptions {
3
+ ttl?: number;
4
+ retryDelay?: number;
5
+ maxRetries?: number;
6
+ }
7
+ export declare class RedisLockService {
8
+ private readonly redis;
9
+ private readonly logger;
10
+ constructor(redis: Redis);
11
+ runWithLock(key: string, options: LockOptions, callback: () => Promise<void>): Promise<void>;
12
+ acquireLock(key: string, value: string, options?: LockOptions): Promise<boolean>;
13
+ releaseLock(key: string, value: string): Promise<boolean>;
14
+ }
15
+ //# sourceMappingURL=redis-lock.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-lock.service.d.ts","sourceRoot":"","sources":["../../src/lock/redis-lock.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBACa,gBAAgB;IAGS,OAAO,CAAC,QAAQ,CAAC,KAAK;IAF1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEP,KAAK,EAAE,KAAK;IAE3D,WAAW,CACf,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,WAAgB,EACzB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC;IAeV,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAoCpF,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAwBhE"}
@@ -0,0 +1,97 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var RedisLockService_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RedisLockService = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const ioredis_1 = __importDefault(require("ioredis"));
22
+ let RedisLockService = RedisLockService_1 = class RedisLockService {
23
+ constructor(redis) {
24
+ this.redis = redis;
25
+ this.logger = new common_1.Logger(RedisLockService_1.name);
26
+ }
27
+ async runWithLock(key, options = {}, callback) {
28
+ const value = `${key}:${Date.now()}:${Math.random()}:${process.pid}`;
29
+ const lockAcquired = await this.acquireLock(key, value, options);
30
+ if (!lockAcquired) {
31
+ return;
32
+ }
33
+ try {
34
+ await callback();
35
+ }
36
+ finally {
37
+ await this.releaseLock(key, value);
38
+ }
39
+ }
40
+ async acquireLock(key, value, options = {}) {
41
+ const { ttl = 300, retryDelay = 100, maxRetries = 0, } = options;
42
+ let attempts = 0;
43
+ while (attempts <= maxRetries) {
44
+ try {
45
+ const result = await this.redis.set(key, value, 'EX', ttl, 'NX');
46
+ if (result === 'OK') {
47
+ this.logger.debug(`Lock acquired: ${key} with value: ${value}`);
48
+ return true;
49
+ }
50
+ if (attempts === maxRetries) {
51
+ this.logger.debug(`Lock already taken: ${key}, skipping...`);
52
+ return false;
53
+ }
54
+ attempts++;
55
+ if (retryDelay > 0) {
56
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
57
+ }
58
+ }
59
+ catch (error) {
60
+ this.logger.error(`Error acquiring lock ${key}:`, error);
61
+ return false;
62
+ }
63
+ }
64
+ return false;
65
+ }
66
+ async releaseLock(key, value) {
67
+ try {
68
+ const luaScript = `
69
+ if redis.call("get", KEYS[1]) == ARGV[1] then
70
+ return redis.call("del", KEYS[1])
71
+ else
72
+ return 0
73
+ end
74
+ `;
75
+ const result = await this.redis.eval(luaScript, 1, key, value);
76
+ if (result === 1) {
77
+ this.logger.debug(`Lock released: ${key}`);
78
+ return true;
79
+ }
80
+ else {
81
+ this.logger.debug(`Lock not released (value mismatch or already expired): ${key}`);
82
+ return false;
83
+ }
84
+ }
85
+ catch (error) {
86
+ this.logger.error(`Error releasing lock ${key}:`, error);
87
+ return false;
88
+ }
89
+ }
90
+ };
91
+ exports.RedisLockService = RedisLockService;
92
+ exports.RedisLockService = RedisLockService = RedisLockService_1 = __decorate([
93
+ (0, common_1.Injectable)(),
94
+ __param(0, (0, common_1.Inject)('REDIS_CLIENT')),
95
+ __metadata("design:paramtypes", [ioredis_1.default])
96
+ ], RedisLockService);
97
+ //# sourceMappingURL=redis-lock.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-lock.service.js","sourceRoot":"","sources":["../../src/lock/redis-lock.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { OnModuleDestroy } from '@nestjs/common';
2
+ import Redis from 'ioredis';
3
+ export declare class RedisBaseModule implements OnModuleDestroy {
4
+ private readonly redis;
5
+ private readonly logger;
6
+ constructor(redis: Redis);
7
+ onModuleDestroy(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=redis-base.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-base.module.d.ts","sourceRoot":"","sources":["../src/redis-base.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjF,OAAO,KAAK,MAAM,SAAS,CAAC;AAM5B,qBA6Ba,eAAgB,YAAW,eAAe;IAGjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAF1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAEN,KAAK,EAAE,KAAK;IAE3D,eAAe;CAiBtB"}