@xbg.solutions/backend-core 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 (185) hide show
  1. package/lib/core/src/app.d.ts +28 -0
  2. package/lib/core/src/app.d.ts.map +1 -0
  3. package/lib/core/src/app.js +188 -0
  4. package/lib/core/src/app.js.map +1 -0
  5. package/lib/core/src/base/BaseController.d.ts +108 -0
  6. package/lib/core/src/base/BaseController.d.ts.map +1 -0
  7. package/lib/core/src/base/BaseController.js +307 -0
  8. package/lib/core/src/base/BaseController.js.map +1 -0
  9. package/lib/core/src/base/BaseEntity.d.ts +92 -0
  10. package/lib/core/src/base/BaseEntity.d.ts.map +1 -0
  11. package/lib/core/src/base/BaseEntity.js +143 -0
  12. package/lib/core/src/base/BaseEntity.js.map +1 -0
  13. package/lib/core/src/base/BaseRepository.d.ts +124 -0
  14. package/lib/core/src/base/BaseRepository.d.ts.map +1 -0
  15. package/lib/core/src/base/BaseRepository.js +414 -0
  16. package/lib/core/src/base/BaseRepository.js.map +1 -0
  17. package/lib/core/src/base/BaseService.d.ts +89 -0
  18. package/lib/core/src/base/BaseService.d.ts.map +1 -0
  19. package/lib/core/src/base/BaseService.js +342 -0
  20. package/lib/core/src/base/BaseService.js.map +1 -0
  21. package/lib/core/src/base/index.d.ts +8 -0
  22. package/lib/core/src/base/index.d.ts.map +1 -0
  23. package/lib/core/src/base/index.js +24 -0
  24. package/lib/core/src/base/index.js.map +1 -0
  25. package/lib/core/src/config/app.config.d.ts +70 -0
  26. package/lib/core/src/config/app.config.d.ts.map +1 -0
  27. package/lib/core/src/config/app.config.js +106 -0
  28. package/lib/core/src/config/app.config.js.map +1 -0
  29. package/lib/core/src/config/auth.config.d.ts +54 -0
  30. package/lib/core/src/config/auth.config.d.ts.map +1 -0
  31. package/lib/core/src/config/auth.config.js +88 -0
  32. package/lib/core/src/config/auth.config.js.map +1 -0
  33. package/lib/core/src/config/cache.config.d.ts +47 -0
  34. package/lib/core/src/config/cache.config.d.ts.map +1 -0
  35. package/lib/core/src/config/cache.config.js +225 -0
  36. package/lib/core/src/config/cache.config.js.map +1 -0
  37. package/lib/core/src/config/communications.config.d.ts +175 -0
  38. package/lib/core/src/config/communications.config.d.ts.map +1 -0
  39. package/lib/core/src/config/communications.config.js +219 -0
  40. package/lib/core/src/config/communications.config.js.map +1 -0
  41. package/lib/core/src/config/database.config.d.ts +68 -0
  42. package/lib/core/src/config/database.config.d.ts.map +1 -0
  43. package/lib/core/src/config/database.config.js +95 -0
  44. package/lib/core/src/config/database.config.js.map +1 -0
  45. package/lib/core/src/config/firebase-event-mapping.config.d.ts +41 -0
  46. package/lib/core/src/config/firebase-event-mapping.config.d.ts.map +1 -0
  47. package/lib/core/src/config/firebase-event-mapping.config.js +180 -0
  48. package/lib/core/src/config/firebase-event-mapping.config.js.map +1 -0
  49. package/lib/core/src/config/firestore.config.d.ts +61 -0
  50. package/lib/core/src/config/firestore.config.d.ts.map +1 -0
  51. package/lib/core/src/config/firestore.config.js +74 -0
  52. package/lib/core/src/config/firestore.config.js.map +1 -0
  53. package/lib/core/src/config/index.d.ts +15 -0
  54. package/lib/core/src/config/index.d.ts.map +1 -0
  55. package/lib/core/src/config/index.js +41 -0
  56. package/lib/core/src/config/index.js.map +1 -0
  57. package/lib/core/src/config/maps.config.d.ts +31 -0
  58. package/lib/core/src/config/maps.config.d.ts.map +1 -0
  59. package/lib/core/src/config/maps.config.js +50 -0
  60. package/lib/core/src/config/maps.config.js.map +1 -0
  61. package/lib/core/src/config/middleware.config.d.ts +57 -0
  62. package/lib/core/src/config/middleware.config.d.ts.map +1 -0
  63. package/lib/core/src/config/middleware.config.js +68 -0
  64. package/lib/core/src/config/middleware.config.js.map +1 -0
  65. package/lib/core/src/config/tokens.config.d.ts +53 -0
  66. package/lib/core/src/config/tokens.config.d.ts.map +1 -0
  67. package/lib/core/src/config/tokens.config.js +129 -0
  68. package/lib/core/src/config/tokens.config.js.map +1 -0
  69. package/lib/core/src/generator/generator.d.ts +38 -0
  70. package/lib/core/src/generator/generator.d.ts.map +1 -0
  71. package/lib/core/src/generator/generator.js +159 -0
  72. package/lib/core/src/generator/generator.js.map +1 -0
  73. package/lib/core/src/generator/index.d.ts +7 -0
  74. package/lib/core/src/generator/index.d.ts.map +1 -0
  75. package/lib/core/src/generator/index.js +23 -0
  76. package/lib/core/src/generator/index.js.map +1 -0
  77. package/lib/core/src/generator/parser.d.ts +10 -0
  78. package/lib/core/src/generator/parser.d.ts.map +1 -0
  79. package/lib/core/src/generator/parser.js +197 -0
  80. package/lib/core/src/generator/parser.js.map +1 -0
  81. package/lib/core/src/generator/types.d.ts +112 -0
  82. package/lib/core/src/generator/types.d.ts.map +1 -0
  83. package/lib/core/src/generator/types.js +7 -0
  84. package/lib/core/src/generator/types.js.map +1 -0
  85. package/lib/core/src/index.d.ts +19 -0
  86. package/lib/core/src/index.d.ts.map +1 -0
  87. package/lib/core/src/index.js +46 -0
  88. package/lib/core/src/index.js.map +1 -0
  89. package/lib/core/src/middleware/auth.middleware.d.ts +57 -0
  90. package/lib/core/src/middleware/auth.middleware.d.ts.map +1 -0
  91. package/lib/core/src/middleware/auth.middleware.js +256 -0
  92. package/lib/core/src/middleware/auth.middleware.js.map +1 -0
  93. package/lib/core/src/middleware/cors.middleware.d.ts +13 -0
  94. package/lib/core/src/middleware/cors.middleware.d.ts.map +1 -0
  95. package/lib/core/src/middleware/cors.middleware.js +50 -0
  96. package/lib/core/src/middleware/cors.middleware.js.map +1 -0
  97. package/lib/core/src/middleware/error.middleware.d.ts +46 -0
  98. package/lib/core/src/middleware/error.middleware.d.ts.map +1 -0
  99. package/lib/core/src/middleware/error.middleware.js +174 -0
  100. package/lib/core/src/middleware/error.middleware.js.map +1 -0
  101. package/lib/core/src/middleware/index.d.ts +11 -0
  102. package/lib/core/src/middleware/index.d.ts.map +1 -0
  103. package/lib/core/src/middleware/index.js +27 -0
  104. package/lib/core/src/middleware/index.js.map +1 -0
  105. package/lib/core/src/middleware/logging.middleware.d.ts +10 -0
  106. package/lib/core/src/middleware/logging.middleware.d.ts.map +1 -0
  107. package/lib/core/src/middleware/logging.middleware.js +87 -0
  108. package/lib/core/src/middleware/logging.middleware.js.map +1 -0
  109. package/lib/core/src/middleware/rateLimit.middleware.d.ts +26 -0
  110. package/lib/core/src/middleware/rateLimit.middleware.d.ts.map +1 -0
  111. package/lib/core/src/middleware/rateLimit.middleware.js +105 -0
  112. package/lib/core/src/middleware/rateLimit.middleware.js.map +1 -0
  113. package/lib/core/src/middleware/requestId.middleware.d.ts +11 -0
  114. package/lib/core/src/middleware/requestId.middleware.d.ts.map +1 -0
  115. package/lib/core/src/middleware/requestId.middleware.js +26 -0
  116. package/lib/core/src/middleware/requestId.middleware.js.map +1 -0
  117. package/lib/core/src/middleware/validation.middleware.d.ts +25 -0
  118. package/lib/core/src/middleware/validation.middleware.d.ts.map +1 -0
  119. package/lib/core/src/middleware/validation.middleware.js +133 -0
  120. package/lib/core/src/middleware/validation.middleware.js.map +1 -0
  121. package/lib/core/src/types/errors.d.ts +119 -0
  122. package/lib/core/src/types/errors.d.ts.map +1 -0
  123. package/lib/core/src/types/errors.js +210 -0
  124. package/lib/core/src/types/errors.js.map +1 -0
  125. package/lib/utils-cache-connector/src/cache-connector.d.ts +139 -0
  126. package/lib/utils-cache-connector/src/cache-connector.d.ts.map +1 -0
  127. package/lib/utils-cache-connector/src/cache-connector.js +277 -0
  128. package/lib/utils-cache-connector/src/cache-connector.js.map +1 -0
  129. package/lib/utils-cache-connector/src/index.d.ts +52 -0
  130. package/lib/utils-cache-connector/src/index.d.ts.map +1 -0
  131. package/lib/utils-cache-connector/src/index.js +103 -0
  132. package/lib/utils-cache-connector/src/index.js.map +1 -0
  133. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts +95 -0
  134. package/lib/utils-cache-connector/src/providers/base-cache-provider.d.ts.map +1 -0
  135. package/lib/utils-cache-connector/src/providers/base-cache-provider.js +120 -0
  136. package/lib/utils-cache-connector/src/providers/base-cache-provider.js.map +1 -0
  137. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts +58 -0
  138. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.d.ts.map +1 -0
  139. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js +418 -0
  140. package/lib/utils-cache-connector/src/providers/firestore-cache-provider.js.map +1 -0
  141. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts +57 -0
  142. package/lib/utils-cache-connector/src/providers/memory-cache-provider.d.ts.map +1 -0
  143. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js +217 -0
  144. package/lib/utils-cache-connector/src/providers/memory-cache-provider.js.map +1 -0
  145. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts +21 -0
  146. package/lib/utils-cache-connector/src/providers/noop-cache-provider.d.ts.map +1 -0
  147. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js +42 -0
  148. package/lib/utils-cache-connector/src/providers/noop-cache-provider.js.map +1 -0
  149. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts +64 -0
  150. package/lib/utils-cache-connector/src/providers/redis-cache-provider.d.ts.map +1 -0
  151. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js +414 -0
  152. package/lib/utils-cache-connector/src/providers/redis-cache-provider.js.map +1 -0
  153. package/lib/utils-cache-connector/src/types.d.ts +342 -0
  154. package/lib/utils-cache-connector/src/types.d.ts.map +1 -0
  155. package/lib/utils-cache-connector/src/types.js +8 -0
  156. package/lib/utils-cache-connector/src/types.js.map +1 -0
  157. package/lib/utils-events/src/event-bus.d.ts +42 -0
  158. package/lib/utils-events/src/event-bus.d.ts.map +1 -0
  159. package/lib/utils-events/src/event-bus.js +93 -0
  160. package/lib/utils-events/src/event-bus.js.map +1 -0
  161. package/lib/utils-events/src/event-types.d.ts +146 -0
  162. package/lib/utils-events/src/event-types.d.ts.map +1 -0
  163. package/lib/utils-events/src/event-types.js +49 -0
  164. package/lib/utils-events/src/event-types.js.map +1 -0
  165. package/lib/utils-events/src/index.d.ts +7 -0
  166. package/lib/utils-events/src/index.d.ts.map +1 -0
  167. package/lib/utils-events/src/index.js +11 -0
  168. package/lib/utils-events/src/index.js.map +1 -0
  169. package/lib/utils-logger/src/index.d.ts +12 -0
  170. package/lib/utils-logger/src/index.d.ts.map +1 -0
  171. package/lib/utils-logger/src/index.js +29 -0
  172. package/lib/utils-logger/src/index.js.map +1 -0
  173. package/lib/utils-logger/src/logger-types.d.ts +32 -0
  174. package/lib/utils-logger/src/logger-types.d.ts.map +1 -0
  175. package/lib/utils-logger/src/logger-types.js +17 -0
  176. package/lib/utils-logger/src/logger-types.js.map +1 -0
  177. package/lib/utils-logger/src/logger.d.ts +42 -0
  178. package/lib/utils-logger/src/logger.d.ts.map +1 -0
  179. package/lib/utils-logger/src/logger.js +123 -0
  180. package/lib/utils-logger/src/logger.js.map +1 -0
  181. package/package.json +49 -0
  182. package/src/templates/controller.hbs +48 -0
  183. package/src/templates/entity.hbs +80 -0
  184. package/src/templates/repository.hbs +56 -0
  185. package/src/templates/service.hbs +108 -0
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Firestore Cache Provider
3
+ *
4
+ * Firestore-based cache provider for distributed caching across function instances.
5
+ *
6
+ * Features:
7
+ * - Shared cache across all function instances
8
+ * - Persistent across cold starts
9
+ * - TTL-based expiration using Firestore timestamps
10
+ * - Tag-based invalidation
11
+ * - Automatic cleanup of expired entries
12
+ *
13
+ * Best for:
14
+ * - Medium-traffic repositories
15
+ * - Data that needs to be shared across instances
16
+ * - Cache data that should survive cold starts
17
+ *
18
+ * Trade-offs:
19
+ * - Latency: ~50-100ms (vs memory ~1-5ms)
20
+ * - Cost: Firestore read/write operations
21
+ * - Size limit: 1MB per document
22
+ */
23
+ import { BaseCacheProvider } from './base-cache-provider';
24
+ import { CacheProviderType, CacheSetOptions, CacheEntry, FirestoreCacheProviderConfig } from '../types';
25
+ export declare class FirestoreCacheProvider extends BaseCacheProvider {
26
+ private config;
27
+ private db;
28
+ private cleanupInterval;
29
+ constructor(config: FirestoreCacheProviderConfig);
30
+ getType(): CacheProviderType;
31
+ /**
32
+ * Get collection reference
33
+ */
34
+ private getCollection;
35
+ get<T>(key: string): Promise<T | null>;
36
+ getWithMetadata<T>(key: string): Promise<CacheEntry<T> | null>;
37
+ set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
38
+ delete(key: string): Promise<boolean>;
39
+ has(key: string): Promise<boolean>;
40
+ invalidateByTags(tags: string[]): Promise<number>;
41
+ invalidateByPattern(pattern: string, mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
42
+ clear(): Promise<void>;
43
+ cleanup(): Promise<number>;
44
+ getStats(): Promise<any>;
45
+ /**
46
+ * Start automatic cleanup of expired entries
47
+ */
48
+ private startCleanup;
49
+ /**
50
+ * Stop automatic cleanup
51
+ */
52
+ stopCleanup(): void;
53
+ /**
54
+ * Cleanup on provider destruction
55
+ */
56
+ destroy(): void;
57
+ }
58
+ //# sourceMappingURL=firestore-cache-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore-cache-provider.d.ts","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/firestore-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,4BAA4B,EAC7B,MAAM,UAAU,CAAC;AAclB,qBAAa,sBAAuB,SAAQ,iBAAiB;IAI/C,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,EAAE,CAA4B;IACtC,OAAO,CAAC,eAAe,CAA+B;gBAElC,MAAM,EAAE,4BAA4B;IAaxD,OAAO,IAAI,iBAAiB;IAI5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIf,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAkDtC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAiD9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBrC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgClC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BjD,mBAAmB,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,GAChD,OAAO,CAAC,MAAM,CAAC;IA6CZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAiC1B,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IA2B9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,418 @@
1
+ "use strict";
2
+ /**
3
+ * Firestore Cache Provider
4
+ *
5
+ * Firestore-based cache provider for distributed caching across function instances.
6
+ *
7
+ * Features:
8
+ * - Shared cache across all function instances
9
+ * - Persistent across cold starts
10
+ * - TTL-based expiration using Firestore timestamps
11
+ * - Tag-based invalidation
12
+ * - Automatic cleanup of expired entries
13
+ *
14
+ * Best for:
15
+ * - Medium-traffic repositories
16
+ * - Data that needs to be shared across instances
17
+ * - Cache data that should survive cold starts
18
+ *
19
+ * Trade-offs:
20
+ * - Latency: ~50-100ms (vs memory ~1-5ms)
21
+ * - Cost: Firestore read/write operations
22
+ * - Size limit: 1MB per document
23
+ */
24
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ var desc = Object.getOwnPropertyDescriptor(m, k);
27
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
28
+ desc = { enumerable: true, get: function() { return m[k]; } };
29
+ }
30
+ Object.defineProperty(o, k2, desc);
31
+ }) : (function(o, m, k, k2) {
32
+ if (k2 === undefined) k2 = k;
33
+ o[k2] = m[k];
34
+ }));
35
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
36
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
37
+ }) : function(o, v) {
38
+ o["default"] = v;
39
+ });
40
+ var __importStar = (this && this.__importStar) || (function () {
41
+ var ownKeys = function(o) {
42
+ ownKeys = Object.getOwnPropertyNames || function (o) {
43
+ var ar = [];
44
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
45
+ return ar;
46
+ };
47
+ return ownKeys(o);
48
+ };
49
+ return function (mod) {
50
+ if (mod && mod.__esModule) return mod;
51
+ var result = {};
52
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
53
+ __setModuleDefault(result, mod);
54
+ return result;
55
+ };
56
+ })();
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ exports.FirestoreCacheProvider = void 0;
59
+ const admin = __importStar(require("firebase-admin"));
60
+ const firestore_1 = require("firebase-admin/firestore");
61
+ const base_cache_provider_1 = require("./base-cache-provider");
62
+ const utils_logger_1 = require("@xbg/utils-logger");
63
+ class FirestoreCacheProvider extends base_cache_provider_1.BaseCacheProvider {
64
+ constructor(config) {
65
+ super();
66
+ this.config = config;
67
+ this.cleanupInterval = null;
68
+ // Get Firestore instance
69
+ // We use the default app's Firestore (configured via CACHE_FIRESTORE_DATABASE)
70
+ this.db = admin.firestore();
71
+ // Start automatic cleanup if enabled
72
+ if (config.enableCleanup) {
73
+ this.startCleanup();
74
+ }
75
+ }
76
+ getType() {
77
+ return 'firestore';
78
+ }
79
+ /**
80
+ * Get collection reference
81
+ */
82
+ getCollection() {
83
+ return this.db.collection(this.config.collection);
84
+ }
85
+ async get(key) {
86
+ try {
87
+ const docRef = this.getCollection().doc(key);
88
+ const doc = await docRef.get();
89
+ if (!doc.exists) {
90
+ this.recordMiss();
91
+ return null;
92
+ }
93
+ const data = doc.data();
94
+ if (!data) {
95
+ this.recordMiss();
96
+ return null;
97
+ }
98
+ // Check if expired
99
+ const expiresAt = data.expiresAt.toDate();
100
+ if (this.isExpired(expiresAt)) {
101
+ // Delete expired entry
102
+ await docRef.delete();
103
+ this.recordExpiration();
104
+ this.recordMiss();
105
+ return null;
106
+ }
107
+ // Update access metadata (fire and forget)
108
+ docRef.update({
109
+ hitCount: admin.firestore.FieldValue.increment(1),
110
+ lastAccessedAt: firestore_1.Timestamp.now(),
111
+ }).catch((error) => {
112
+ utils_logger_1.logger.warn('Failed to update cache access metadata', {
113
+ operation: 'cache.get',
114
+ key,
115
+ error,
116
+ });
117
+ });
118
+ this.recordHit();
119
+ return data.value;
120
+ }
121
+ catch (error) {
122
+ utils_logger_1.logger.error('Error getting cache entry from Firestore', error, {
123
+ operation: 'cache.get',
124
+ key,
125
+ });
126
+ this.recordMiss();
127
+ return null;
128
+ }
129
+ }
130
+ async getWithMetadata(key) {
131
+ try {
132
+ const docRef = this.getCollection().doc(key);
133
+ const doc = await docRef.get();
134
+ if (!doc.exists) {
135
+ this.recordMiss();
136
+ return null;
137
+ }
138
+ const data = doc.data();
139
+ if (!data) {
140
+ this.recordMiss();
141
+ return null;
142
+ }
143
+ // Check if expired
144
+ const expiresAt = data.expiresAt.toDate();
145
+ if (this.isExpired(expiresAt)) {
146
+ await docRef.delete();
147
+ this.recordExpiration();
148
+ this.recordMiss();
149
+ return null;
150
+ }
151
+ this.recordHit();
152
+ return {
153
+ key,
154
+ value: data.value,
155
+ metadata: {
156
+ createdAt: data.createdAt.toDate(),
157
+ expiresAt: expiresAt,
158
+ hitCount: data.hitCount,
159
+ lastAccessedAt: data.lastAccessedAt.toDate(),
160
+ tags: data.tags,
161
+ size: data.size,
162
+ },
163
+ };
164
+ }
165
+ catch (error) {
166
+ utils_logger_1.logger.error('Error getting cache entry with metadata from Firestore', error, {
167
+ operation: 'cache.getWithMetadata',
168
+ key,
169
+ });
170
+ this.recordMiss();
171
+ return null;
172
+ }
173
+ }
174
+ async set(key, value, options = {}) {
175
+ try {
176
+ const ttl = options.ttl || 300; // Default 5 minutes
177
+ const tags = options.tags || [];
178
+ const size = this.estimateSize(value);
179
+ const now = firestore_1.Timestamp.now();
180
+ const expiresAt = firestore_1.Timestamp.fromDate(this.calculateExpiresAt(ttl));
181
+ const cacheDoc = {
182
+ key,
183
+ value,
184
+ createdAt: now,
185
+ expiresAt,
186
+ hitCount: 0,
187
+ lastAccessedAt: now,
188
+ tags,
189
+ size,
190
+ };
191
+ await this.getCollection().doc(key).set(cacheDoc);
192
+ }
193
+ catch (error) {
194
+ utils_logger_1.logger.error('Error setting cache entry in Firestore', error, {
195
+ operation: 'cache.set',
196
+ key,
197
+ ttl: options.ttl,
198
+ });
199
+ throw error;
200
+ }
201
+ }
202
+ async delete(key) {
203
+ try {
204
+ const docRef = this.getCollection().doc(key);
205
+ const doc = await docRef.get();
206
+ if (!doc.exists) {
207
+ return false;
208
+ }
209
+ await docRef.delete();
210
+ return true;
211
+ }
212
+ catch (error) {
213
+ utils_logger_1.logger.error('Error deleting cache entry from Firestore', error, {
214
+ operation: 'cache.delete',
215
+ key,
216
+ });
217
+ return false;
218
+ }
219
+ }
220
+ async has(key) {
221
+ try {
222
+ const docRef = this.getCollection().doc(key);
223
+ const doc = await docRef.get();
224
+ if (!doc.exists) {
225
+ return false;
226
+ }
227
+ const data = doc.data();
228
+ if (!data) {
229
+ return false;
230
+ }
231
+ // Check if expired
232
+ const expiresAt = data.expiresAt.toDate();
233
+ if (this.isExpired(expiresAt)) {
234
+ await docRef.delete();
235
+ this.recordExpiration();
236
+ return false;
237
+ }
238
+ return true;
239
+ }
240
+ catch (error) {
241
+ utils_logger_1.logger.error('Error checking cache entry in Firestore', error, {
242
+ operation: 'cache.has',
243
+ key,
244
+ });
245
+ return false;
246
+ }
247
+ }
248
+ async invalidateByTags(tags) {
249
+ try {
250
+ let count = 0;
251
+ // Query for documents with any of the specified tags
252
+ for (const tag of tags) {
253
+ const query = this.getCollection().where('tags', 'array-contains', tag);
254
+ const snapshot = await query.get();
255
+ // Delete matching documents in batch
256
+ const batch = this.db.batch();
257
+ snapshot.docs.forEach((doc) => {
258
+ batch.delete(doc.ref);
259
+ count++;
260
+ });
261
+ if (!snapshot.empty) {
262
+ await batch.commit();
263
+ }
264
+ }
265
+ return count;
266
+ }
267
+ catch (error) {
268
+ utils_logger_1.logger.error('Error invalidating cache by tags in Firestore', error, {
269
+ operation: 'cache.invalidateByTags',
270
+ tags,
271
+ });
272
+ return 0;
273
+ }
274
+ }
275
+ async invalidateByPattern(pattern, mode = 'prefix') {
276
+ try {
277
+ let query;
278
+ if (mode === 'prefix') {
279
+ // Use Firestore range query for prefix matching
280
+ const endPattern = pattern.slice(0, -1) + String.fromCharCode(pattern.charCodeAt(pattern.length - 1) + 1);
281
+ query = this.getCollection()
282
+ .where('key', '>=', pattern)
283
+ .where('key', '<', endPattern);
284
+ }
285
+ else {
286
+ // For suffix and contains, we need to get all documents and filter
287
+ // This is inefficient but Firestore doesn't support these natively
288
+ query = this.getCollection();
289
+ }
290
+ const snapshot = await query.get();
291
+ let count = 0;
292
+ const batch = this.db.batch();
293
+ snapshot.docs.forEach((doc) => {
294
+ const key = doc.data().key;
295
+ // Apply pattern matching
296
+ if (mode === 'prefix' || this.matchPattern(key, pattern, mode)) {
297
+ batch.delete(doc.ref);
298
+ count++;
299
+ }
300
+ });
301
+ if (count > 0) {
302
+ await batch.commit();
303
+ }
304
+ return count;
305
+ }
306
+ catch (error) {
307
+ utils_logger_1.logger.error('Error invalidating cache by pattern in Firestore', error, {
308
+ operation: 'cache.invalidateByPattern',
309
+ pattern,
310
+ mode,
311
+ });
312
+ return 0;
313
+ }
314
+ }
315
+ async clear() {
316
+ try {
317
+ // Delete all documents in batches
318
+ const batchSize = 500;
319
+ let snapshot = await this.getCollection().limit(batchSize).get();
320
+ while (!snapshot.empty) {
321
+ const batch = this.db.batch();
322
+ snapshot.docs.forEach((doc) => {
323
+ batch.delete(doc.ref);
324
+ });
325
+ await batch.commit();
326
+ // Get next batch
327
+ snapshot = await this.getCollection().limit(batchSize).get();
328
+ }
329
+ }
330
+ catch (error) {
331
+ utils_logger_1.logger.error('Error clearing cache in Firestore', error, {
332
+ operation: 'cache.clear',
333
+ });
334
+ throw error;
335
+ }
336
+ }
337
+ async cleanup() {
338
+ try {
339
+ const now = firestore_1.Timestamp.now();
340
+ const query = this.getCollection().where('expiresAt', '<', now);
341
+ const snapshot = await query.get();
342
+ if (snapshot.empty) {
343
+ return 0;
344
+ }
345
+ // Delete expired documents in batches
346
+ const batch = this.db.batch();
347
+ snapshot.docs.forEach((doc) => {
348
+ batch.delete(doc.ref);
349
+ this.recordExpiration();
350
+ });
351
+ await batch.commit();
352
+ utils_logger_1.logger.debug(`Cleaned up ${snapshot.size} expired cache entries`, {
353
+ operation: 'cache.cleanup',
354
+ count: snapshot.size,
355
+ });
356
+ return snapshot.size;
357
+ }
358
+ catch (error) {
359
+ utils_logger_1.logger.error('Error cleaning up expired cache entries in Firestore', error, {
360
+ operation: 'cache.cleanup',
361
+ });
362
+ return 0;
363
+ }
364
+ }
365
+ async getStats() {
366
+ try {
367
+ const snapshot = await this.getCollection().get();
368
+ let totalSize = 0;
369
+ let expiredCount = 0;
370
+ snapshot.docs.forEach((doc) => {
371
+ const data = doc.data();
372
+ totalSize += data.size || 0;
373
+ if (this.isExpired(data.expiresAt.toDate())) {
374
+ expiredCount++;
375
+ }
376
+ });
377
+ this.updateEntryCount(snapshot.size - expiredCount);
378
+ this.updateSize(totalSize);
379
+ return super.getStats();
380
+ }
381
+ catch (error) {
382
+ utils_logger_1.logger.error('Error getting cache stats from Firestore', error, {
383
+ operation: 'cache.getStats',
384
+ });
385
+ return super.getStats();
386
+ }
387
+ }
388
+ /**
389
+ * Start automatic cleanup of expired entries
390
+ */
391
+ startCleanup() {
392
+ if (this.cleanupInterval) {
393
+ return;
394
+ }
395
+ this.cleanupInterval = setInterval(async () => {
396
+ await this.cleanup();
397
+ }, this.config.cleanupInterval * 1000);
398
+ // Don't prevent Node.js from exiting
399
+ this.cleanupInterval.unref();
400
+ }
401
+ /**
402
+ * Stop automatic cleanup
403
+ */
404
+ stopCleanup() {
405
+ if (this.cleanupInterval) {
406
+ clearInterval(this.cleanupInterval);
407
+ this.cleanupInterval = null;
408
+ }
409
+ }
410
+ /**
411
+ * Cleanup on provider destruction
412
+ */
413
+ destroy() {
414
+ this.stopCleanup();
415
+ }
416
+ }
417
+ exports.FirestoreCacheProvider = FirestoreCacheProvider;
418
+ //# sourceMappingURL=firestore-cache-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firestore-cache-provider.js","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/firestore-cache-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Memory Cache Provider
3
+ *
4
+ * In-memory cache provider using Map data structure.
5
+ * Features:
6
+ * - TTL-based expiration
7
+ * - LRU eviction when max size is reached
8
+ * - Automatic cleanup of expired entries
9
+ * - Tag-based invalidation
10
+ *
11
+ * Best for:
12
+ * - Request-scoped caching
13
+ * - Hot data within a single function instance
14
+ * - Auth/permissions data
15
+ * - Configuration values
16
+ *
17
+ * Limitations:
18
+ * - Not shared across function instances
19
+ * - Lost on cold starts
20
+ * - Limited by instance memory
21
+ */
22
+ import { BaseCacheProvider } from './base-cache-provider';
23
+ import { CacheProviderType, CacheSetOptions, CacheEntry, MemoryCacheProviderConfig } from '../types';
24
+ export declare class MemoryCacheProvider extends BaseCacheProvider {
25
+ private config;
26
+ private cache;
27
+ private cleanupInterval;
28
+ private currentSize;
29
+ constructor(config: MemoryCacheProviderConfig);
30
+ getType(): CacheProviderType;
31
+ get<T>(key: string): Promise<T | null>;
32
+ getWithMetadata<T>(key: string): Promise<CacheEntry<T> | null>;
33
+ set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
34
+ delete(key: string): Promise<boolean>;
35
+ has(key: string): Promise<boolean>;
36
+ invalidateByTags(tags: string[]): Promise<number>;
37
+ invalidateByPattern(pattern: string, mode?: 'prefix' | 'suffix' | 'contains'): Promise<number>;
38
+ clear(): Promise<void>;
39
+ cleanup(): Promise<number>;
40
+ /**
41
+ * Evict least recently used entries to make space
42
+ */
43
+ private evictLRU;
44
+ /**
45
+ * Start automatic cleanup of expired entries
46
+ */
47
+ private startCleanup;
48
+ /**
49
+ * Stop automatic cleanup
50
+ */
51
+ stopCleanup(): void;
52
+ /**
53
+ * Cleanup on provider destruction
54
+ */
55
+ destroy(): void;
56
+ }
57
+ //# sourceMappingURL=memory-cache-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-cache-provider.d.ts","sourceRoot":"","sources":["../../../../../utils-cache-connector/src/providers/memory-cache-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,UAAU,EAEV,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAOlB,qBAAa,mBAAoB,SAAQ,iBAAiB;IAK5C,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,WAAW,CAAa;gBAEZ,MAAM,EAAE,yBAAyB;IAQrD,OAAO,IAAI,iBAAiB;IAItB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA8BtC,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAgB9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3E,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAerC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBlC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBjD,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,QAAQ,GAAG,UAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBxG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBhC;;OAEG;YACW,QAAQ;IAwBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAOnB;;OAEG;IACH,OAAO,IAAI,IAAI;CAIhB"}