@vritti/api-sdk 0.3.3 → 0.3.5

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 (133) hide show
  1. package/dist/auth.cjs +942 -0
  2. package/dist/auth.cjs.map +1 -0
  3. package/dist/auth.d.cts +95 -0
  4. package/dist/auth.d.ts +95 -0
  5. package/dist/auth.js +884 -0
  6. package/dist/auth.js.map +1 -0
  7. package/dist/cache.cjs +182 -14
  8. package/dist/cache.cjs.map +1 -1
  9. package/dist/cache.d.cts +48 -4
  10. package/dist/cache.d.ts +48 -4
  11. package/dist/cache.js +177 -12
  12. package/dist/cache.js.map +1 -1
  13. package/dist/catalog-resolver.cjs +226 -51
  14. package/dist/catalog-resolver.cjs.map +1 -1
  15. package/dist/catalog-resolver.d.cts +41 -19
  16. package/dist/catalog-resolver.d.ts +41 -19
  17. package/dist/catalog-resolver.js +212 -46
  18. package/dist/catalog-resolver.js.map +1 -1
  19. package/dist/code-pattern-BP4zkNtT.d.cts +12 -0
  20. package/dist/code-pattern-BP4zkNtT.d.ts +12 -0
  21. package/dist/context.cjs +93 -0
  22. package/dist/context.cjs.map +1 -0
  23. package/dist/context.d.cts +19 -0
  24. package/dist/context.d.ts +19 -0
  25. package/dist/context.js +64 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/countries.cjs +1559 -0
  28. package/dist/countries.cjs.map +1 -0
  29. package/dist/countries.d.cts +13 -0
  30. package/dist/countries.d.ts +13 -0
  31. package/dist/countries.js +1532 -0
  32. package/dist/countries.js.map +1 -0
  33. package/dist/data-table.cjs +1280 -0
  34. package/dist/data-table.cjs.map +1 -0
  35. package/dist/data-table.d.cts +123 -0
  36. package/dist/data-table.d.ts +123 -0
  37. package/dist/data-table.js +1260 -0
  38. package/dist/data-table.js.map +1 -0
  39. package/dist/database.cjs +1510 -0
  40. package/dist/database.cjs.map +1 -0
  41. package/dist/database.d.cts +287 -0
  42. package/dist/database.d.ts +287 -0
  43. package/dist/database.js +1469 -0
  44. package/dist/database.js.map +1 -0
  45. package/dist/decimal.d.cts +0 -1
  46. package/dist/decimal.d.ts +0 -1
  47. package/dist/decorators.cjs +1817 -0
  48. package/dist/decorators.cjs.map +1 -0
  49. package/dist/decorators.d.cts +24 -0
  50. package/dist/decorators.d.ts +24 -0
  51. package/dist/decorators.js +1780 -0
  52. package/dist/decorators.js.map +1 -0
  53. package/dist/drizzle-pg-core.cjs +25 -0
  54. package/dist/drizzle-pg-core.cjs.map +1 -1
  55. package/dist/drizzle-pg-core.d.cts +7 -0
  56. package/dist/drizzle-pg-core.d.ts +7 -0
  57. package/dist/drizzle-pg-core.js +22 -0
  58. package/dist/drizzle-pg-core.js.map +1 -1
  59. package/dist/exceptions.cjs +301 -0
  60. package/dist/exceptions.cjs.map +1 -0
  61. package/dist/exceptions.d.cts +90 -0
  62. package/dist/exceptions.d.ts +90 -0
  63. package/dist/exceptions.js +257 -0
  64. package/dist/exceptions.js.map +1 -0
  65. package/dist/filter.types-PuARU9XD.d.cts +50 -0
  66. package/dist/filter.types-PuARU9XD.d.ts +50 -0
  67. package/dist/filters.cjs +407 -0
  68. package/dist/filters.cjs.map +1 -0
  69. package/dist/filters.d.cts +55 -0
  70. package/dist/filters.d.ts +55 -0
  71. package/dist/filters.js +377 -0
  72. package/dist/filters.js.map +1 -0
  73. package/dist/index.cjs +0 -5423
  74. package/dist/index.cjs.map +1 -1
  75. package/dist/index.d.cts +93 -854
  76. package/dist/index.d.ts +93 -854
  77. package/dist/index.js +0 -5301
  78. package/dist/index.js.map +1 -1
  79. package/dist/is-country.decorator-CcNwSSr5.d.cts +5 -0
  80. package/dist/is-country.decorator-CcNwSSr5.d.ts +5 -0
  81. package/dist/license.d.cts +1 -1
  82. package/dist/license.d.ts +1 -1
  83. package/dist/lodash.cjs.map +1 -1
  84. package/dist/lodash.js.map +1 -1
  85. package/dist/logger.cjs +862 -0
  86. package/dist/logger.cjs.map +1 -0
  87. package/dist/logger.d.cts +118 -0
  88. package/dist/logger.d.ts +118 -0
  89. package/dist/logger.js +816 -0
  90. package/dist/logger.js.map +1 -0
  91. package/dist/migrate.cjs +2 -2
  92. package/dist/migrate.cjs.map +1 -1
  93. package/dist/migrate.d.cts +2 -0
  94. package/dist/migrate.d.ts +2 -0
  95. package/dist/migrate.js +2 -2
  96. package/dist/migrate.js.map +1 -1
  97. package/dist/money.cjs +18 -3
  98. package/dist/money.cjs.map +1 -1
  99. package/dist/money.d.cts +13 -13
  100. package/dist/money.d.ts +13 -13
  101. package/dist/money.js +18 -3
  102. package/dist/money.js.map +1 -1
  103. package/dist/nats.cjs +34 -35
  104. package/dist/nats.cjs.map +1 -1
  105. package/dist/nats.d.cts +14 -14
  106. package/dist/nats.d.ts +14 -14
  107. package/dist/nats.js +32 -33
  108. package/dist/nats.js.map +1 -1
  109. package/dist/root.cjs +225 -0
  110. package/dist/root.cjs.map +1 -0
  111. package/dist/root.d.cts +4 -0
  112. package/dist/root.d.ts +4 -0
  113. package/dist/root.js +200 -0
  114. package/dist/root.js.map +1 -0
  115. package/dist/{types-DQRwj5rr.d.cts → types-C9jPdQqH.d.cts} +32 -6
  116. package/dist/{types-DQRwj5rr.d.ts → types-C9jPdQqH.d.ts} +32 -6
  117. package/dist/types.cjs +19 -0
  118. package/dist/types.cjs.map +1 -0
  119. package/dist/types.d.cts +17 -0
  120. package/dist/types.d.ts +17 -0
  121. package/dist/types.js +1 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/utils.cjs +273 -0
  124. package/dist/utils.cjs.map +1 -0
  125. package/dist/utils.d.cts +8 -0
  126. package/dist/utils.d.ts +8 -0
  127. package/dist/utils.js +245 -0
  128. package/dist/utils.js.map +1 -0
  129. package/package.json +122 -1
  130. package/dist/cache.service-_SuJIcNA.d.cts +0 -20
  131. package/dist/cache.service-_SuJIcNA.d.ts +0 -20
  132. package/dist/fastify-augmentation-CQPBNS5a.d.cts +0 -105
  133. package/dist/fastify-augmentation-CQPBNS5a.d.ts +0 -105
package/dist/cache.js CHANGED
@@ -10,6 +10,9 @@ import { Inject, Injectable, Logger } from "@nestjs/common";
10
10
 
11
11
  // src/cache/constants.ts
12
12
  var CACHE_PROVIDER = Symbol("CACHE_PROVIDER");
13
+ var LRU_CACHE_OPTIONS = Symbol("LRU_CACHE_OPTIONS");
14
+ var CACHE_MODULE_OPTIONS = Symbol("CACHE_MODULE_OPTIONS");
15
+ var DEFAULT_LRU_MAX = 1e4;
13
16
 
14
17
  // src/cache/cache.service.ts
15
18
  function _ts_decorate(decorators, target, key, desc) {
@@ -91,10 +94,9 @@ CacheService = _ts_decorate([
91
94
  ])
92
95
  ], CacheService);
93
96
 
94
- // src/cache/providers/redis.provider.ts
95
- import { Injectable as Injectable2, Logger as Logger2 } from "@nestjs/common";
96
- import { ConfigService } from "@nestjs/config";
97
- import Redis from "ioredis";
97
+ // src/cache/providers/lru.provider.ts
98
+ import { Inject as Inject2, Injectable as Injectable2, Optional } from "@nestjs/common";
99
+ import { LRUCache } from "lru-cache";
98
100
  function _ts_decorate2(decorators, target, key, desc) {
99
101
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
100
102
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -106,6 +108,81 @@ function _ts_metadata2(k, v) {
106
108
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
107
109
  }
108
110
  __name(_ts_metadata2, "_ts_metadata");
111
+ function _ts_param2(paramIndex, decorator) {
112
+ return function(target, key) {
113
+ decorator(target, key, paramIndex);
114
+ };
115
+ }
116
+ __name(_ts_param2, "_ts_param");
117
+ function globToRegExp(pattern) {
118
+ const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*").replace(/\?/g, ".");
119
+ return new RegExp(`^${escaped}$`);
120
+ }
121
+ __name(globToRegExp, "globToRegExp");
122
+ var LruCacheProvider = class {
123
+ static {
124
+ __name(this, "LruCacheProvider");
125
+ }
126
+ cache;
127
+ constructor(options) {
128
+ this.cache = new LRUCache({
129
+ max: options?.max ?? DEFAULT_LRU_MAX
130
+ });
131
+ }
132
+ // Stores a value with a per-key TTL (wrapped so primitives survive lru-cache's object value type)
133
+ async set(key, value, ttlSeconds) {
134
+ this.cache.set(key, {
135
+ value
136
+ }, {
137
+ ttl: ttlSeconds * 1e3
138
+ });
139
+ }
140
+ // Returns the stored value, or null on miss or expiry
141
+ async get(key) {
142
+ const entry = this.cache.get(key);
143
+ return entry ? entry.value : null;
144
+ }
145
+ // Deletes one or more keys
146
+ async del(...keys) {
147
+ for (const key of keys) this.cache.delete(key);
148
+ }
149
+ // Returns all live keys matching a Redis-style glob pattern
150
+ async scanKeys(pattern) {
151
+ const regex = globToRegExp(pattern);
152
+ return [
153
+ ...this.cache.keys()
154
+ ].filter((key) => regex.test(key));
155
+ }
156
+ // Reports entry count for monitoring utilities
157
+ async getMemoryInfo() {
158
+ return `entries:${this.cache.size} max:${this.cache.max}`;
159
+ }
160
+ };
161
+ LruCacheProvider = _ts_decorate2([
162
+ Injectable2(),
163
+ _ts_param2(0, Optional()),
164
+ _ts_param2(0, Inject2(LRU_CACHE_OPTIONS)),
165
+ _ts_metadata2("design:type", Function),
166
+ _ts_metadata2("design:paramtypes", [
167
+ typeof LruCacheOptions === "undefined" ? Object : LruCacheOptions
168
+ ])
169
+ ], LruCacheProvider);
170
+
171
+ // src/cache/providers/redis.provider.ts
172
+ import { Injectable as Injectable3, Logger as Logger2 } from "@nestjs/common";
173
+ import { ConfigService } from "@nestjs/config";
174
+ import Redis from "ioredis";
175
+ function _ts_decorate3(decorators, target, key, desc) {
176
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
177
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
178
+ 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;
179
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
180
+ }
181
+ __name(_ts_decorate3, "_ts_decorate");
182
+ function _ts_metadata3(k, v) {
183
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
184
+ }
185
+ __name(_ts_metadata3, "_ts_metadata");
109
186
  var RedisCacheProvider = class _RedisCacheProvider {
110
187
  static {
111
188
  __name(this, "RedisCacheProvider");
@@ -164,28 +241,113 @@ var RedisCacheProvider = class _RedisCacheProvider {
164
241
  return this.client.info("memory");
165
242
  }
166
243
  };
167
- RedisCacheProvider = _ts_decorate2([
168
- Injectable2(),
169
- _ts_metadata2("design:type", Function),
170
- _ts_metadata2("design:paramtypes", [
244
+ RedisCacheProvider = _ts_decorate3([
245
+ Injectable3(),
246
+ _ts_metadata3("design:type", Function),
247
+ _ts_metadata3("design:paramtypes", [
171
248
  typeof ConfigService === "undefined" ? Object : ConfigService
172
249
  ])
173
250
  ], RedisCacheProvider);
174
251
 
175
252
  // src/cache/cache.module.ts
176
- function _ts_decorate3(decorators, target, key, desc) {
253
+ function _ts_decorate4(decorators, target, key, desc) {
177
254
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
178
255
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
179
256
  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;
180
257
  return c > 3 && r && Object.defineProperty(target, key, r), r;
181
258
  }
182
- __name(_ts_decorate3, "_ts_decorate");
183
- var CacheModule = class {
259
+ __name(_ts_decorate4, "_ts_decorate");
260
+ var CacheModule = class _CacheModule {
184
261
  static {
185
262
  __name(this, "CacheModule");
186
263
  }
264
+ // Selects the backing provider; each import gets its own CacheService bound to the chosen driver
265
+ static forRoot(options = {}) {
266
+ if (options.driver === "lru") {
267
+ return {
268
+ module: _CacheModule,
269
+ providers: [
270
+ {
271
+ provide: LRU_CACHE_OPTIONS,
272
+ useValue: options.lru ?? {}
273
+ },
274
+ LruCacheProvider,
275
+ {
276
+ provide: CACHE_PROVIDER,
277
+ useExisting: LruCacheProvider
278
+ },
279
+ CacheService
280
+ ],
281
+ exports: [
282
+ LruCacheProvider,
283
+ CACHE_PROVIDER,
284
+ CacheService
285
+ ]
286
+ };
287
+ }
288
+ return {
289
+ module: _CacheModule,
290
+ imports: [
291
+ ConfigModule
292
+ ],
293
+ providers: [
294
+ RedisCacheProvider,
295
+ {
296
+ provide: CACHE_PROVIDER,
297
+ useExisting: RedisCacheProvider
298
+ },
299
+ CacheService
300
+ ],
301
+ exports: [
302
+ RedisCacheProvider,
303
+ CACHE_PROVIDER,
304
+ CacheService
305
+ ]
306
+ };
307
+ }
308
+ // Same driver selection as forRoot, but options (and the driver) resolve via a factory
309
+ static forRootAsync(options) {
310
+ const optionsProvider = {
311
+ provide: CACHE_MODULE_OPTIONS,
312
+ useFactory: options.useFactory,
313
+ inject: options.inject ?? []
314
+ };
315
+ return {
316
+ module: _CacheModule,
317
+ imports: [
318
+ ConfigModule,
319
+ ...options.imports ?? []
320
+ ],
321
+ providers: [
322
+ optionsProvider,
323
+ {
324
+ provide: LRU_CACHE_OPTIONS,
325
+ useFactory: /* @__PURE__ */ __name((opts) => opts.lru ?? {}, "useFactory"),
326
+ inject: [
327
+ CACHE_MODULE_OPTIONS
328
+ ]
329
+ },
330
+ LruCacheProvider,
331
+ RedisCacheProvider,
332
+ {
333
+ provide: CACHE_PROVIDER,
334
+ useFactory: /* @__PURE__ */ __name((opts, lru, redis) => opts.driver === "redis" ? redis : lru, "useFactory"),
335
+ inject: [
336
+ CACHE_MODULE_OPTIONS,
337
+ LruCacheProvider,
338
+ RedisCacheProvider
339
+ ]
340
+ },
341
+ CacheService
342
+ ],
343
+ exports: [
344
+ CACHE_PROVIDER,
345
+ CacheService
346
+ ]
347
+ };
348
+ }
187
349
  };
188
- CacheModule = _ts_decorate3([
350
+ CacheModule = _ts_decorate4([
189
351
  Module({
190
352
  imports: [
191
353
  ConfigModule
@@ -209,6 +371,9 @@ export {
209
371
  CACHE_PROVIDER,
210
372
  CacheModule,
211
373
  CacheService,
374
+ DEFAULT_LRU_MAX,
375
+ LRU_CACHE_OPTIONS,
376
+ LruCacheProvider,
212
377
  RedisCacheProvider
213
378
  };
214
379
  //# sourceMappingURL=cache.js.map
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cache/cache.module.ts","../src/cache/cache.service.ts","../src/cache/constants.ts","../src/cache/providers/redis.provider.ts"],"sourcesContent":["import { Module } from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { CacheService } from './cache.service';\nimport { CACHE_PROVIDER } from './constants';\nimport { RedisCacheProvider } from './providers/redis.provider';\n\n// To add a new provider in the future:\n// 1. Create providers/memcached.provider.ts implementing ICacheProvider\n// 2. Replace RedisCacheProvider with the new class in useExisting below\n\n@Module({\n imports: [ConfigModule],\n providers: [\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useExisting: RedisCacheProvider,\n },\n CacheService,\n ],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n})\nexport class CacheModule {}\n","import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { CACHE_PROVIDER } from './constants';\nimport type { ICacheProvider } from './interfaces/cache-provider.interface';\n\n@Injectable()\nexport class CacheService {\n private readonly logger = new Logger(CacheService.name);\n\n constructor(@Inject(CACHE_PROVIDER) private readonly provider: ICacheProvider) {}\n\n // Stores a value with mandatory TTL — errors are logged and swallowed so DB writes still succeed\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n try {\n await this.provider.set(key, value, ttlSeconds);\n } catch (err) {\n this.logger.error(`Cache set failed for key \"${key}\"`, err);\n }\n }\n\n // Returns cached value or null on miss or any Redis error — callers fall back to DB\n async get<T>(key: string): Promise<T | null> {\n try {\n return await this.provider.get<T>(key);\n } catch (err) {\n this.logger.error(`Cache get failed for key \"${key}\"`, err);\n return null;\n }\n }\n\n // Deletes one or more keys — errors are logged and swallowed\n async del(...keys: string[]): Promise<void> {\n try {\n await this.provider.del(...keys);\n } catch (err) {\n this.logger.error(`Cache del failed for keys \"${keys.join(', ')}\"`, err);\n }\n }\n\n // Returns all keys matching a glob pattern — returns empty array on error\n async scanKeys(pattern: string): Promise<string[]> {\n try {\n return await this.provider.scanKeys(pattern);\n } catch (err) {\n this.logger.error(`Cache scanKeys failed for pattern \"${pattern}\"`, err);\n return [];\n }\n }\n\n // Returns raw memory info from the provider — returns empty string on error\n async getMemoryInfo(): Promise<string> {\n try {\n return await this.provider.getMemoryInfo();\n } catch (err) {\n this.logger.error('Cache getMemoryInfo failed', err);\n return '';\n }\n }\n}\n","// Injection token for the active cache provider — use this to inject ICacheProvider\nexport const CACHE_PROVIDER = Symbol('CACHE_PROVIDER');\n","import { Injectable, Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport Redis from 'ioredis';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\n@Injectable()\nexport class RedisCacheProvider implements ICacheProvider, OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(RedisCacheProvider.name);\n private client: Redis;\n\n constructor(private readonly configService: ConfigService) {}\n\n // Creates the ioredis client and attaches connection/error listeners\n onModuleInit(): void {\n const url = this.configService.getOrThrow<string>('REDIS_URL');\n this.client = new Redis(url, {\n lazyConnect: true,\n maxRetriesPerRequest: 3,\n });\n this.client.on('connect', () => this.logger.log('Redis connected'));\n this.client.on('error', (err) => this.logger.error('Redis error', err));\n }\n\n // Gracefully closes the ioredis connection on app shutdown\n async onModuleDestroy(): Promise<void> {\n await this.client.quit();\n this.logger.log('Redis disconnected');\n }\n\n // Serializes value to JSON and stores with a mandatory TTL\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n const json = JSON.stringify(value);\n await this.client.setex(key, ttlSeconds, json);\n }\n\n // Reads the stored JSON string and parses back to the original type\n async get<T>(key: string): Promise<T | null> {\n const json = await this.client.get(key);\n if (!json) return null;\n return JSON.parse(json) as T;\n }\n\n // Deletes one or more keys in a single command\n async del(...keys: string[]): Promise<void> {\n if (keys.length > 0) {\n await this.client.del(...keys);\n }\n }\n\n // Cursor-iterates all keys matching a glob pattern — never uses KEYS command\n async scanKeys(pattern: string): Promise<string[]> {\n const keys: string[] = [];\n let cursor = '0';\n do {\n const [nextCursor, batch] = await this.client.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n keys.push(...batch);\n } while (cursor !== '0');\n return keys;\n }\n\n // Returns raw INFO memory output for memory monitoring\n async getMemoryInfo(): Promise<string> {\n return this.client.info('memory');\n }\n}\n"],"mappings":"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","names":["Module","ConfigModule","Inject","Injectable","Logger","CACHE_PROVIDER","Symbol","CacheService","logger","Logger","name","provider","set","key","value","ttlSeconds","err","error","get","del","keys","join","scanKeys","pattern","getMemoryInfo","Injectable","Logger","ConfigService","Redis","RedisCacheProvider","logger","Logger","name","client","configService","onModuleInit","url","getOrThrow","Redis","lazyConnect","maxRetriesPerRequest","on","log","err","error","onModuleDestroy","quit","set","key","value","ttlSeconds","json","JSON","stringify","setex","get","parse","del","keys","length","scanKeys","pattern","cursor","nextCursor","batch","scan","push","getMemoryInfo","info","CacheModule","imports","ConfigModule","providers","RedisCacheProvider","provide","CACHE_PROVIDER","useExisting","CacheService","exports"]}
1
+ {"version":3,"sources":["../src/cache/cache.module.ts","../src/cache/cache.service.ts","../src/cache/constants.ts","../src/cache/providers/lru.provider.ts","../src/cache/providers/redis.provider.ts"],"sourcesContent":["import { type DynamicModule, Module, type Provider } from '@nestjs/common';\nimport { ConfigModule } from '@nestjs/config';\nimport { CacheService } from './cache.service';\nimport { CACHE_MODULE_OPTIONS, CACHE_PROVIDER, LRU_CACHE_OPTIONS } from './constants';\nimport { type LruCacheOptions, LruCacheProvider } from './providers/lru.provider';\nimport { RedisCacheProvider } from './providers/redis.provider';\n\nexport interface CacheModuleOptions {\n driver?: 'redis' | 'lru';\n lru?: LruCacheOptions;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: NestJS async factory injects/imports are heterogeneous\ntype AnyList = any[];\n\nexport interface CacheModuleAsyncOptions {\n imports?: AnyList;\n inject?: AnyList;\n useFactory: (...args: AnyList) => CacheModuleOptions | Promise<CacheModuleOptions>;\n}\n\n@Module({\n imports: [ConfigModule],\n providers: [\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useExisting: RedisCacheProvider,\n },\n CacheService,\n ],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n})\nexport class CacheModule {\n // Selects the backing provider; each import gets its own CacheService bound to the chosen driver\n static forRoot(options: CacheModuleOptions = {}): DynamicModule {\n if (options.driver === 'lru') {\n return {\n module: CacheModule,\n providers: [\n { provide: LRU_CACHE_OPTIONS, useValue: options.lru ?? {} },\n LruCacheProvider,\n { provide: CACHE_PROVIDER, useExisting: LruCacheProvider },\n CacheService,\n ],\n exports: [LruCacheProvider, CACHE_PROVIDER, CacheService],\n };\n }\n return {\n module: CacheModule,\n imports: [ConfigModule],\n providers: [RedisCacheProvider, { provide: CACHE_PROVIDER, useExisting: RedisCacheProvider }, CacheService],\n exports: [RedisCacheProvider, CACHE_PROVIDER, CacheService],\n };\n }\n\n // Same driver selection as forRoot, but options (and the driver) resolve via a factory\n static forRootAsync(options: CacheModuleAsyncOptions): DynamicModule {\n const optionsProvider: Provider = {\n provide: CACHE_MODULE_OPTIONS,\n useFactory: options.useFactory,\n inject: options.inject ?? [],\n };\n return {\n module: CacheModule,\n imports: [ConfigModule, ...(options.imports ?? [])],\n providers: [\n optionsProvider,\n {\n provide: LRU_CACHE_OPTIONS,\n useFactory: (opts: CacheModuleOptions) => opts.lru ?? {},\n inject: [CACHE_MODULE_OPTIONS],\n },\n LruCacheProvider,\n RedisCacheProvider,\n {\n provide: CACHE_PROVIDER,\n useFactory: (opts: CacheModuleOptions, lru: LruCacheProvider, redis: RedisCacheProvider) =>\n opts.driver === 'redis' ? redis : lru,\n inject: [CACHE_MODULE_OPTIONS, LruCacheProvider, RedisCacheProvider],\n },\n CacheService,\n ],\n exports: [CACHE_PROVIDER, CacheService],\n };\n }\n}\n","import { Inject, Injectable, Logger } from '@nestjs/common';\nimport { CACHE_PROVIDER } from './constants';\nimport type { ICacheProvider } from './interfaces/cache-provider.interface';\n\n@Injectable()\nexport class CacheService {\n private readonly logger = new Logger(CacheService.name);\n\n constructor(@Inject(CACHE_PROVIDER) private readonly provider: ICacheProvider) {}\n\n // Stores a value with mandatory TTL — errors are logged and swallowed so DB writes still succeed\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n try {\n await this.provider.set(key, value, ttlSeconds);\n } catch (err) {\n this.logger.error(`Cache set failed for key \"${key}\"`, err);\n }\n }\n\n // Returns cached value or null on miss or any Redis error — callers fall back to DB\n async get<T>(key: string): Promise<T | null> {\n try {\n return await this.provider.get<T>(key);\n } catch (err) {\n this.logger.error(`Cache get failed for key \"${key}\"`, err);\n return null;\n }\n }\n\n // Deletes one or more keys — errors are logged and swallowed\n async del(...keys: string[]): Promise<void> {\n try {\n await this.provider.del(...keys);\n } catch (err) {\n this.logger.error(`Cache del failed for keys \"${keys.join(', ')}\"`, err);\n }\n }\n\n // Returns all keys matching a glob pattern — returns empty array on error\n async scanKeys(pattern: string): Promise<string[]> {\n try {\n return await this.provider.scanKeys(pattern);\n } catch (err) {\n this.logger.error(`Cache scanKeys failed for pattern \"${pattern}\"`, err);\n return [];\n }\n }\n\n // Returns raw memory info from the provider — returns empty string on error\n async getMemoryInfo(): Promise<string> {\n try {\n return await this.provider.getMemoryInfo();\n } catch (err) {\n this.logger.error('Cache getMemoryInfo failed', err);\n return '';\n }\n }\n}\n","// Injection token for the active cache provider — use this to inject ICacheProvider\nexport const CACHE_PROVIDER = Symbol('CACHE_PROVIDER');\n\n// Injection token for LruCacheProvider construction options\nexport const LRU_CACHE_OPTIONS = Symbol('LRU_CACHE_OPTIONS');\n\n// Injection token for the resolved CacheModuleOptions (used by forRootAsync)\nexport const CACHE_MODULE_OPTIONS = Symbol('CACHE_MODULE_OPTIONS');\n\n// Default entry cap for the in-memory LRU provider when no max is configured\nexport const DEFAULT_LRU_MAX = 10000;\n","import { Inject, Injectable, Optional } from '@nestjs/common';\nimport { LRUCache } from 'lru-cache';\nimport { DEFAULT_LRU_MAX, LRU_CACHE_OPTIONS } from '../constants';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\nexport interface LruCacheOptions {\n max?: number;\n}\n\n// Escapes a Redis-style glob (only * and ? are special) into an anchored RegExp for key scanning\nfunction globToRegExp(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.');\n return new RegExp(`^${escaped}$`);\n}\n\n@Injectable()\nexport class LruCacheProvider implements ICacheProvider {\n private readonly cache: LRUCache<string, object>;\n\n constructor(@Optional() @Inject(LRU_CACHE_OPTIONS) options?: LruCacheOptions) {\n this.cache = new LRUCache<string, object>({ max: options?.max ?? DEFAULT_LRU_MAX });\n }\n\n // Stores a value with a per-key TTL (wrapped so primitives survive lru-cache's object value type)\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n this.cache.set(key, { value } as object, { ttl: ttlSeconds * 1000 });\n }\n\n // Returns the stored value, or null on miss or expiry\n async get<T>(key: string): Promise<T | null> {\n const entry = this.cache.get(key) as { value: T } | undefined;\n return entry ? entry.value : null;\n }\n\n // Deletes one or more keys\n async del(...keys: string[]): Promise<void> {\n for (const key of keys) this.cache.delete(key);\n }\n\n // Returns all live keys matching a Redis-style glob pattern\n async scanKeys(pattern: string): Promise<string[]> {\n const regex = globToRegExp(pattern);\n return [...this.cache.keys()].filter((key) => regex.test(key));\n }\n\n // Reports entry count for monitoring utilities\n async getMemoryInfo(): Promise<string> {\n return `entries:${this.cache.size} max:${this.cache.max}`;\n }\n}\n","import { Injectable, Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';\nimport { ConfigService } from '@nestjs/config';\nimport Redis from 'ioredis';\nimport type { ICacheProvider } from '../interfaces/cache-provider.interface';\n\n@Injectable()\nexport class RedisCacheProvider implements ICacheProvider, OnModuleInit, OnModuleDestroy {\n private readonly logger = new Logger(RedisCacheProvider.name);\n private client: Redis;\n\n constructor(private readonly configService: ConfigService) {}\n\n // Creates the ioredis client and attaches connection/error listeners\n onModuleInit(): void {\n const url = this.configService.getOrThrow<string>('REDIS_URL');\n this.client = new Redis(url, {\n lazyConnect: true,\n maxRetriesPerRequest: 3,\n });\n this.client.on('connect', () => this.logger.log('Redis connected'));\n this.client.on('error', (err) => this.logger.error('Redis error', err));\n }\n\n // Gracefully closes the ioredis connection on app shutdown\n async onModuleDestroy(): Promise<void> {\n await this.client.quit();\n this.logger.log('Redis disconnected');\n }\n\n // Serializes value to JSON and stores with a mandatory TTL\n async set<T>(key: string, value: T, ttlSeconds: number): Promise<void> {\n const json = JSON.stringify(value);\n await this.client.setex(key, ttlSeconds, json);\n }\n\n // Reads the stored JSON string and parses back to the original type\n async get<T>(key: string): Promise<T | null> {\n const json = await this.client.get(key);\n if (!json) return null;\n return JSON.parse(json) as T;\n }\n\n // Deletes one or more keys in a single command\n async del(...keys: string[]): Promise<void> {\n if (keys.length > 0) {\n await this.client.del(...keys);\n }\n }\n\n // Cursor-iterates all keys matching a glob pattern — never uses KEYS command\n async scanKeys(pattern: string): Promise<string[]> {\n const keys: string[] = [];\n let cursor = '0';\n do {\n const [nextCursor, batch] = await this.client.scan(cursor, 'MATCH', pattern, 'COUNT', 100);\n cursor = nextCursor;\n keys.push(...batch);\n } while (cursor !== '0');\n return keys;\n }\n\n // Returns raw INFO memory output for memory monitoring\n async getMemoryInfo(): Promise<string> {\n return this.client.info('memory');\n }\n}\n"],"mappings":"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","names":["Module","ConfigModule","Inject","Injectable","Logger","CACHE_PROVIDER","Symbol","LRU_CACHE_OPTIONS","CACHE_MODULE_OPTIONS","DEFAULT_LRU_MAX","CacheService","logger","Logger","name","provider","set","key","value","ttlSeconds","err","error","get","del","keys","join","scanKeys","pattern","getMemoryInfo","Inject","Injectable","Optional","LRUCache","globToRegExp","pattern","escaped","replace","RegExp","LruCacheProvider","cache","options","LRUCache","max","DEFAULT_LRU_MAX","set","key","value","ttlSeconds","ttl","get","entry","del","keys","delete","scanKeys","regex","filter","test","getMemoryInfo","size","Injectable","Logger","ConfigService","Redis","RedisCacheProvider","logger","Logger","name","client","configService","onModuleInit","url","getOrThrow","Redis","lazyConnect","maxRetriesPerRequest","on","log","err","error","onModuleDestroy","quit","set","key","value","ttlSeconds","json","JSON","stringify","setex","get","parse","del","keys","length","scanKeys","pattern","cursor","nextCursor","batch","scan","push","getMemoryInfo","info","CacheModule","forRoot","options","driver","module","providers","provide","LRU_CACHE_OPTIONS","useValue","lru","LruCacheProvider","CACHE_PROVIDER","useExisting","CacheService","exports","imports","ConfigModule","RedisCacheProvider","forRootAsync","optionsProvider","CACHE_MODULE_OPTIONS","useFactory","inject","opts","redis"]}