@goatlab/node-backend 0.0.16 → 0.1.1

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 (129) hide show
  1. package/README.md +54 -38
  2. package/dist/container/Container.d.ts +441 -0
  3. package/dist/container/Container.js +895 -0
  4. package/dist/container/Container.js.map +1 -0
  5. package/dist/container/DistributedCacheInvalidator.d.ts +84 -0
  6. package/dist/container/DistributedCacheInvalidator.js +213 -0
  7. package/dist/container/DistributedCacheInvalidator.js.map +1 -0
  8. package/dist/container/LruCache.d.ts +14 -0
  9. package/dist/container/LruCache.js +23 -0
  10. package/dist/container/LruCache.js.map +1 -0
  11. package/dist/container/types.d.ts +128 -0
  12. package/dist/container/types.js +6 -0
  13. package/dist/container/types.js.map +1 -0
  14. package/dist/index.d.ts +31 -0
  15. package/dist/index.js +53 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/server/bootstraps/getExpressTrpcApp.d.ts +17 -0
  18. package/dist/server/bootstraps/getExpressTrpcApp.js +98 -0
  19. package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -0
  20. package/dist/server/consts.d.ts +35 -0
  21. package/dist/server/consts.js +33 -0
  22. package/dist/server/consts.js.map +1 -0
  23. package/dist/server/context/context.model.d.ts +13 -0
  24. package/dist/server/context/context.model.js +3 -0
  25. package/dist/server/context/context.model.js.map +1 -0
  26. package/dist/server/context/request.context.d.ts +40 -0
  27. package/dist/server/context/request.context.js +91 -0
  28. package/dist/server/context/request.context.js.map +1 -0
  29. package/dist/server/context/trpc.context.d.ts +11 -0
  30. package/dist/server/context/trpc.context.js +67 -0
  31. package/dist/server/context/trpc.context.js.map +1 -0
  32. package/dist/server/initOpenApiDocs.d.ts +9 -0
  33. package/dist/server/initOpenApiDocs.js +18 -0
  34. package/dist/server/initOpenApiDocs.js.map +1 -0
  35. package/dist/server/middleware/cloudTaskDecrypt.middleware.d.ts +6 -0
  36. package/dist/server/middleware/cloudTaskDecrypt.middleware.js +44 -0
  37. package/dist/server/middleware/cloudTaskDecrypt.middleware.js.map +1 -0
  38. package/dist/server/middleware/error.middleware.d.ts +17 -0
  39. package/dist/server/middleware/error.middleware.js +66 -0
  40. package/dist/server/middleware/error.middleware.js.map +1 -0
  41. package/dist/server/middleware/handleRequest.middleware.d.ts +7 -0
  42. package/dist/server/middleware/handleRequest.middleware.js +40 -0
  43. package/dist/server/middleware/handleRequest.middleware.js.map +1 -0
  44. package/dist/server/middleware/logger/cloudRun.logger.d.ts +27 -0
  45. package/dist/server/middleware/logger/cloudRun.logger.js +87 -0
  46. package/dist/server/middleware/logger/cloudRun.logger.js.map +1 -0
  47. package/dist/server/middleware/logger/logger.service.d.ts +6 -0
  48. package/dist/server/middleware/logger/logger.service.js +17 -0
  49. package/dist/server/middleware/logger/logger.service.js.map +1 -0
  50. package/dist/server/middleware/logs.middleware.d.ts +7 -0
  51. package/dist/server/middleware/logs.middleware.js +130 -0
  52. package/dist/server/middleware/logs.middleware.js.map +1 -0
  53. package/dist/server/middleware/requireAuthenticated.d.ts +2 -0
  54. package/dist/server/middleware/requireAuthenticated.js +13 -0
  55. package/dist/server/middleware/requireAuthenticated.js.map +1 -0
  56. package/dist/server/middleware/trpcError.middleware.d.ts +4 -0
  57. package/dist/server/middleware/trpcError.middleware.js +38 -0
  58. package/dist/server/middleware/trpcError.middleware.js.map +1 -0
  59. package/dist/server/schemas/user.schema.d.ts +109 -0
  60. package/dist/server/schemas/user.schema.js +28 -0
  61. package/dist/server/schemas/user.schema.js.map +1 -0
  62. package/dist/server/sentry/getSentry.d.ts +6 -0
  63. package/dist/server/sentry/getSentry.js +45 -0
  64. package/dist/server/sentry/getSentry.js.map +1 -0
  65. package/dist/server/sentry/sentry.service.d.ts +34 -0
  66. package/dist/server/sentry/sentry.service.js +110 -0
  67. package/dist/server/sentry/sentry.service.js.map +1 -0
  68. package/dist/server/services/email/email.model.d.ts +84 -0
  69. package/dist/server/services/email/email.model.js +62 -0
  70. package/dist/server/services/email/email.model.js.map +1 -0
  71. package/dist/server/services/email/email.service.d.ts +23 -0
  72. package/dist/server/services/email/email.service.js +139 -0
  73. package/dist/server/services/email/email.service.js.map +1 -0
  74. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.d.ts +15 -0
  75. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js +9 -0
  76. package/dist/server/services/gcp/getGcpServiceAccountFromBase64.js.map +1 -0
  77. package/dist/server/services/secrets/secret.service.d.ts +32 -0
  78. package/dist/server/services/secrets/secret.service.js +220 -0
  79. package/dist/server/services/secrets/secret.service.js.map +1 -0
  80. package/dist/server/services/sendgrid/sendgrid.model.d.ts +118 -0
  81. package/dist/server/services/sendgrid/sendgrid.model.js +3 -0
  82. package/dist/server/services/sendgrid/sendgrid.model.js.map +1 -0
  83. package/dist/server/services/sendgrid/sendgridApi.service.d.ts +13 -0
  84. package/dist/server/services/sendgrid/sendgridApi.service.js +79 -0
  85. package/dist/server/services/sendgrid/sendgridApi.service.js.map +1 -0
  86. package/dist/server/services/sendgrid/sendgridHooks.model.d.ts +27 -0
  87. package/dist/server/services/sendgrid/sendgridHooks.model.js +19 -0
  88. package/dist/server/services/sendgrid/sendgridHooks.model.js.map +1 -0
  89. package/dist/server/services/translations/template.util.d.ts +7 -0
  90. package/dist/server/services/translations/template.util.js +11 -0
  91. package/dist/server/services/translations/template.util.js.map +1 -0
  92. package/dist/server/services/translations/translation.model.d.ts +4 -0
  93. package/dist/server/services/translations/translation.model.js +6 -0
  94. package/dist/server/services/translations/translation.model.js.map +1 -0
  95. package/dist/server/services/translations/translation.service.d.ts +25 -0
  96. package/dist/server/services/translations/translation.service.js +97 -0
  97. package/dist/server/services/translations/translation.service.js.map +1 -0
  98. package/dist/server/services/util/benchmarker.d.ts +13 -0
  99. package/dist/server/services/util/benchmarker.js +34 -0
  100. package/dist/server/services/util/benchmarker.js.map +1 -0
  101. package/dist/server/services/util/pagination.d.ts +50 -0
  102. package/dist/server/services/util/pagination.js +57 -0
  103. package/dist/server/services/util/pagination.js.map +1 -0
  104. package/dist/server/services/util/url.service.d.ts +75 -0
  105. package/dist/server/services/util/url.service.js +139 -0
  106. package/dist/server/services/util/url.service.js.map +1 -0
  107. package/dist/server/test/express.mock.d.ts +6 -0
  108. package/dist/server/test/express.mock.js +49 -0
  109. package/dist/server/test/express.mock.js.map +1 -0
  110. package/dist/server/test/firebase.mock.d.ts +4 -0
  111. package/dist/server/test/firebase.mock.js +30 -0
  112. package/dist/server/test/firebase.mock.js.map +1 -0
  113. package/dist/server/test/mock.model.d.ts +5 -0
  114. package/dist/server/test/mock.model.js +3 -0
  115. package/dist/server/test/mock.model.js.map +1 -0
  116. package/dist/server/test/trpc.mock.d.ts +6 -0
  117. package/dist/server/test/trpc.mock.js +14 -0
  118. package/dist/server/test/trpc.mock.js.map +1 -0
  119. package/dist/server/trpc.d.ts +364 -0
  120. package/dist/server/trpc.js +87 -0
  121. package/dist/server/trpc.js.map +1 -0
  122. package/dist/server/types/Envinronment.d.ts +1 -0
  123. package/dist/server/types/Envinronment.js +3 -0
  124. package/dist/server/types/Envinronment.js.map +1 -0
  125. package/dist/test/const.d.ts +4 -0
  126. package/dist/test/const.js +11 -1
  127. package/dist/test/const.js.map +1 -1
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +34 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Container.js","sourceRoot":"","sources":["../../src/container/Container.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import { EventEmitter } from 'events';
2
+ /**
3
+ * Distributed Cache Invalidation System
4
+ *
5
+ * Handles cache invalidation across multiple backend instances using:
6
+ * 1. Redis Pub/Sub for real-time invalidation
7
+ * 2. Versioning for graceful degradation
8
+ * 3. Event-driven architecture for decoupling
9
+ */
10
+ export interface CacheInvalidationMessage {
11
+ type: 'INVALIDATE_TENANT' | 'INVALIDATE_SERVICE' | 'INVALIDATE_ALL';
12
+ tenantId?: string;
13
+ serviceType?: string;
14
+ reason?: string;
15
+ timestamp: number;
16
+ instanceId: string;
17
+ }
18
+ export interface DistributedCacheOptions {
19
+ redisUrl?: string;
20
+ channelPrefix?: string;
21
+ instanceId?: string;
22
+ enableFallback?: boolean;
23
+ }
24
+ export declare class DistributedCacheInvalidator extends EventEmitter {
25
+ private readonly redis;
26
+ private readonly subscriber;
27
+ private readonly channelPrefix;
28
+ private readonly instanceId;
29
+ private readonly enableFallback;
30
+ private heartbeatInterval?;
31
+ private readonly INVALIDATION_CHANNEL;
32
+ private readonly HEARTBEAT_CHANNEL;
33
+ private readonly HEARTBEAT_INTERVAL;
34
+ constructor(options?: DistributedCacheOptions);
35
+ /**
36
+ * Generate unique instance ID for this backend instance
37
+ */
38
+ private generateInstanceId;
39
+ /**
40
+ * Setup Redis pub/sub subscriptions
41
+ */
42
+ private setupSubscriptions;
43
+ /**
44
+ * Setup heartbeat to monitor Redis connectivity
45
+ */
46
+ private setupHeartbeat;
47
+ /**
48
+ * Send heartbeat to other instances
49
+ */
50
+ private sendHeartbeat;
51
+ /**
52
+ * Handle incoming invalidation messages
53
+ */
54
+ private handleInvalidationMessage;
55
+ /**
56
+ * Handle heartbeat messages (for monitoring)
57
+ */
58
+ private handleHeartbeatMessage;
59
+ /**
60
+ * Invalidate all cached data for a specific tenant across all instances
61
+ */
62
+ invalidateTenant(tenantId: string, reason?: string): Promise<void>;
63
+ /**
64
+ * Invalidate all cached data for a specific service type across all instances
65
+ */
66
+ invalidateService(serviceType: string, reason?: string): Promise<void>;
67
+ /**
68
+ * Invalidate all cached data across all instances
69
+ */
70
+ invalidateAll(reason?: string): Promise<void>;
71
+ /**
72
+ * Publish invalidation message to Redis
73
+ */
74
+ private publishInvalidation;
75
+ /**
76
+ * Get list of active instances (based on recent heartbeats)
77
+ */
78
+ getActiveInstances(_maxAge?: number): Promise<string[]>;
79
+ /**
80
+ * Cleanup Redis connections
81
+ */
82
+ shutdown(): Promise<void>;
83
+ }
84
+ export declare function getDistributedCacheInvalidator(options?: DistributedCacheOptions): DistributedCacheInvalidator;
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DistributedCacheInvalidator = void 0;
4
+ exports.getDistributedCacheInvalidator = getDistributedCacheInvalidator;
5
+ const events_1 = require("events");
6
+ const ioredis_1 = require("ioredis");
7
+ class DistributedCacheInvalidator extends events_1.EventEmitter {
8
+ redis;
9
+ subscriber;
10
+ channelPrefix;
11
+ instanceId;
12
+ enableFallback;
13
+ heartbeatInterval;
14
+ INVALIDATION_CHANNEL = 'cache:invalidation';
15
+ HEARTBEAT_CHANNEL = 'cache:heartbeat';
16
+ HEARTBEAT_INTERVAL = 30000; // 30 seconds
17
+ constructor(options = {}) {
18
+ super();
19
+ this.channelPrefix = options.channelPrefix || 'sodium';
20
+ this.instanceId = options.instanceId || this.generateInstanceId();
21
+ this.enableFallback = options.enableFallback ?? true;
22
+ // Create Redis connections
23
+ const redisConfig = options.redisUrl || process.env.REDIS_URL || 'redis://localhost:6379';
24
+ this.redis = new ioredis_1.default(redisConfig);
25
+ this.subscriber = new ioredis_1.default(redisConfig);
26
+ this.setupSubscriptions();
27
+ this.setupHeartbeat();
28
+ }
29
+ /**
30
+ * Generate unique instance ID for this backend instance
31
+ */
32
+ generateInstanceId() {
33
+ const hostname = process.env.HOSTNAME || 'unknown';
34
+ const pid = process.pid;
35
+ const timestamp = Date.now();
36
+ return `${hostname}-${pid}-${timestamp}`;
37
+ }
38
+ /**
39
+ * Setup Redis pub/sub subscriptions
40
+ */
41
+ setupSubscriptions() {
42
+ const invalidationChannel = `${this.channelPrefix}:${this.INVALIDATION_CHANNEL}`;
43
+ const heartbeatChannel = `${this.channelPrefix}:${this.HEARTBEAT_CHANNEL}`;
44
+ // Subscribe to channels (fire-and-forget, will handle errors via event listeners)
45
+ this.subscriber
46
+ .subscribe(invalidationChannel, heartbeatChannel)
47
+ .catch((err) => {
48
+ console.error('Failed to subscribe to Redis channels:', err);
49
+ if (this.enableFallback) {
50
+ this.emit('redis-error', err);
51
+ }
52
+ });
53
+ this.subscriber.on('message', (channel, message) => {
54
+ try {
55
+ if (channel === invalidationChannel) {
56
+ this.handleInvalidationMessage(JSON.parse(message));
57
+ }
58
+ else if (channel === heartbeatChannel) {
59
+ this.handleHeartbeatMessage(JSON.parse(message));
60
+ }
61
+ }
62
+ catch (err) {
63
+ console.error('Failed to process invalidation message:', err);
64
+ }
65
+ });
66
+ this.subscriber.on('error', (error) => {
67
+ console.error('Redis subscriber error:', error);
68
+ if (this.enableFallback) {
69
+ this.emit('redis-error', error);
70
+ }
71
+ });
72
+ }
73
+ /**
74
+ * Setup heartbeat to monitor Redis connectivity
75
+ */
76
+ setupHeartbeat() {
77
+ this.heartbeatInterval = setInterval(() => {
78
+ this.sendHeartbeat().catch(console.error);
79
+ }, this.HEARTBEAT_INTERVAL);
80
+ }
81
+ /**
82
+ * Send heartbeat to other instances
83
+ */
84
+ async sendHeartbeat() {
85
+ const heartbeatChannel = `${this.channelPrefix}:${this.HEARTBEAT_CHANNEL}`;
86
+ const message = {
87
+ instanceId: this.instanceId,
88
+ timestamp: Date.now(),
89
+ status: 'alive',
90
+ };
91
+ await this.redis.publish(heartbeatChannel, JSON.stringify(message));
92
+ }
93
+ /**
94
+ * Handle incoming invalidation messages
95
+ */
96
+ handleInvalidationMessage(message) {
97
+ // Ignore messages from this instance
98
+ if (message.instanceId === this.instanceId) {
99
+ return;
100
+ }
101
+ console.log(`Received cache invalidation from ${message.instanceId}:`, message);
102
+ // Emit events for container to handle
103
+ switch (message.type) {
104
+ case 'INVALIDATE_TENANT':
105
+ if (message.tenantId) {
106
+ this.emit('invalidate-tenant', message.tenantId, message.reason);
107
+ }
108
+ break;
109
+ case 'INVALIDATE_SERVICE':
110
+ if (message.serviceType) {
111
+ this.emit('invalidate-service', message.serviceType, message.reason);
112
+ }
113
+ break;
114
+ case 'INVALIDATE_ALL':
115
+ this.emit('invalidate-all', message.reason);
116
+ break;
117
+ }
118
+ }
119
+ /**
120
+ * Handle heartbeat messages (for monitoring)
121
+ */
122
+ handleHeartbeatMessage(message) {
123
+ if (message.instanceId !== this.instanceId) {
124
+ this.emit('instance-heartbeat', message);
125
+ }
126
+ }
127
+ /**
128
+ * Invalidate all cached data for a specific tenant across all instances
129
+ */
130
+ async invalidateTenant(tenantId, reason) {
131
+ const message = {
132
+ type: 'INVALIDATE_TENANT',
133
+ tenantId,
134
+ reason: reason || 'Tenant credentials changed',
135
+ timestamp: Date.now(),
136
+ instanceId: this.instanceId,
137
+ };
138
+ await this.publishInvalidation(message);
139
+ }
140
+ /**
141
+ * Invalidate all cached data for a specific service type across all instances
142
+ */
143
+ async invalidateService(serviceType, reason) {
144
+ const message = {
145
+ type: 'INVALIDATE_SERVICE',
146
+ serviceType,
147
+ reason: reason || 'Service configuration changed',
148
+ timestamp: Date.now(),
149
+ instanceId: this.instanceId,
150
+ };
151
+ await this.publishInvalidation(message);
152
+ }
153
+ /**
154
+ * Invalidate all cached data across all instances
155
+ */
156
+ async invalidateAll(reason) {
157
+ const message = {
158
+ type: 'INVALIDATE_ALL',
159
+ reason: reason || 'Global cache refresh',
160
+ timestamp: Date.now(),
161
+ instanceId: this.instanceId,
162
+ };
163
+ await this.publishInvalidation(message);
164
+ }
165
+ /**
166
+ * Publish invalidation message to Redis
167
+ */
168
+ async publishInvalidation(message) {
169
+ const channel = `${this.channelPrefix}:${this.INVALIDATION_CHANNEL}`;
170
+ try {
171
+ await this.redis.publish(channel, JSON.stringify(message));
172
+ console.log(`Published invalidation message:`, message);
173
+ }
174
+ catch (err) {
175
+ console.error('Failed to publish invalidation message:', err);
176
+ if (this.enableFallback) {
177
+ // Emit local invalidation as fallback
178
+ this.emit('redis-publish-failed', err, message);
179
+ }
180
+ throw err;
181
+ }
182
+ }
183
+ /**
184
+ * Get list of active instances (based on recent heartbeats)
185
+ */
186
+ async getActiveInstances(_maxAge = 60000) {
187
+ // This would require storing heartbeat data in Redis
188
+ // For now, return empty array as this is a monitoring feature
189
+ return [];
190
+ }
191
+ /**
192
+ * Cleanup Redis connections
193
+ */
194
+ async shutdown() {
195
+ if (this.heartbeatInterval) {
196
+ clearInterval(this.heartbeatInterval);
197
+ }
198
+ this.subscriber.disconnect();
199
+ this.redis.disconnect();
200
+ }
201
+ }
202
+ exports.DistributedCacheInvalidator = DistributedCacheInvalidator;
203
+ /**
204
+ * Singleton instance for global use
205
+ */
206
+ let globalInvalidator = null;
207
+ function getDistributedCacheInvalidator(options) {
208
+ if (!globalInvalidator) {
209
+ globalInvalidator = new DistributedCacheInvalidator(options);
210
+ }
211
+ return globalInvalidator;
212
+ }
213
+ //# sourceMappingURL=DistributedCacheInvalidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistributedCacheInvalidator.js","sourceRoot":"","sources":["../../src/container/DistributedCacheInvalidator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { MapInterface } from './types';
2
+ /**
3
+ * Creates an LRU cache for service instances
4
+ *
5
+ * @param max Maximum number of entries before LRU eviction (default: 100)
6
+ * @returns LRU cache instance optimized for service caching
7
+ *
8
+ * Note: tiny-lru is optimal for this use case because:
9
+ * - Lightweight (~2KB)
10
+ * - Fast O(1) operations
11
+ * - Simple LRU eviction
12
+ * - No unnecessary features (TTL, async, etc.)
13
+ */
14
+ export declare function createServiceCache<T>(max?: number): MapInterface<T>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createServiceCache = createServiceCache;
4
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
5
+ const tinyLRU = require('tiny-lru');
6
+ // Default cache size - can be overridden per container
7
+ const DEFAULT_CACHE_SIZE = 100;
8
+ /**
9
+ * Creates an LRU cache for service instances
10
+ *
11
+ * @param max Maximum number of entries before LRU eviction (default: 100)
12
+ * @returns LRU cache instance optimized for service caching
13
+ *
14
+ * Note: tiny-lru is optimal for this use case because:
15
+ * - Lightweight (~2KB)
16
+ * - Fast O(1) operations
17
+ * - Simple LRU eviction
18
+ * - No unnecessary features (TTL, async, etc.)
19
+ */
20
+ function createServiceCache(max) {
21
+ return new tinyLRU.LRU(max || DEFAULT_CACHE_SIZE);
22
+ }
23
+ //# sourceMappingURL=LruCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LruCache.js","sourceRoot":"","sources":["../../src/container/LruCache.ts"],"names":[],"mappings":";;AAoBA,gDAEC;AApBD,iEAAiE;AACjE,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAEnC,uDAAuD;AACvD,MAAM,kBAAkB,GAAG,GAAG,CAAA;AAE9B;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAAI,GAAY;IAChD,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,kBAAkB,CAAoB,CAAA;AACtE,CAAC"}
@@ -0,0 +1,128 @@
1
+ import type { Container } from './Container';
2
+ import { DistributedCacheInvalidator } from './DistributedCacheInvalidator';
3
+ export interface MapInterface<T> {
4
+ clear(): void;
5
+ delete(key: string): boolean;
6
+ get(key: string): T | undefined;
7
+ set(key: string, value: T, ttl?: number): 1 | 0;
8
+ size?: number | (() => number);
9
+ }
10
+ /**
11
+ * A Factory can be either a class constructor or a factory function
12
+ * that creates service instances. Supports parameters for dependency injection.
13
+ *
14
+ * @template T - The type of service instance this factory creates
15
+ * @template P - Tuple type representing the constructor/function parameters
16
+ *
17
+ * Examples:
18
+ * - Class constructor: `class UserService { constructor(db: Database) {} }`
19
+ * - Factory function: `(db: Database) => new UserService(db)`
20
+ */
21
+ export type Factory<T, P extends readonly unknown[] = []> = ((...params: P) => T) | (new (...params: P) => T);
22
+ /**
23
+ * PreloadStructure represents the "blueprint" phase of the container.
24
+ * Each factory becomes a function that takes (id, ...params) and returns an instance.
25
+ * This allows for parametric service creation during the initialization phase.
26
+ *
27
+ * Example transformation:
28
+ * ```
29
+ * factories: { userService: UserService }
30
+ * preload: { userService: (id: string, db: Database) => UserService }
31
+ * ```
32
+ */
33
+ export type PreloadStructure<D> = {
34
+ [K in keyof D]: D[K] extends Factory<infer T, infer P> ? (id: string, ...params: P) => T : D[K] extends Record<string, unknown> ? PreloadStructure<D[K]> : never;
35
+ };
36
+ /**
37
+ * InstancesStructure represents the final resolved services available at runtime.
38
+ * All factories have been instantiated and are ready for use.
39
+ *
40
+ * Example transformation:
41
+ * ```
42
+ * factories: { userService: UserService }
43
+ * instances: { userService: UserService instance }
44
+ * ```
45
+ */
46
+ export type InstancesStructure<D> = {
47
+ [K in keyof D]: D[K] extends Factory<infer T, any> ? T : D[K] extends Record<string, unknown> ? InstancesStructure<D[K]> : never;
48
+ };
49
+ /**
50
+ * Extract the factory definitions from a Container type
51
+ * Useful for TypeScript type manipulation and testing
52
+ */
53
+ export type ContainerFactories<C> = C extends Container<infer Defs, any> ? Defs : never;
54
+ /**
55
+ * Extract the tenant metadata type from a Container
56
+ * Helps maintain type safety when working with tenant-specific data
57
+ */
58
+ export type ContainerMetadata<C> = C extends Container<any, infer Meta> ? Meta : never;
59
+ /**
60
+ * Extract the runtime context type (available services) from a Container
61
+ * This is what you get when calling `container.context`
62
+ */
63
+ export type ContainerContext<C> = C extends Container<infer Defs, any> ? InstancesStructure<Defs> : never;
64
+ /**
65
+ * Extract the preload structure type from a Container
66
+ * Useful for initializer function type checking
67
+ */
68
+ export type ContainerPreload<C> = C extends Container<infer Defs, any> ? PreloadStructure<Defs> : never;
69
+ /**
70
+ * Extract the bootstrap result type from a Container
71
+ * Contains both instances and any result from the bootstrap function
72
+ */
73
+ export type ContainerBootstrapResult<C> = C extends Container<infer Defs, any> ? {
74
+ instances: InstancesStructure<Defs>;
75
+ result?: any;
76
+ } : never;
77
+ /**
78
+ * Get the type of a specific service by its path (e.g., "database.userRepo")
79
+ * Provides compile-time type safety when accessing nested services
80
+ */
81
+ export type ServiceType<C, ServicePath extends string> = C extends Container<infer Defs, any> ? GetServiceType<InstancesStructure<Defs>, ServicePath> : never;
82
+ /**
83
+ * Recursive type helper to resolve service types by dot-notation path
84
+ * Supports deep nesting like "api.services.user.repository"
85
+ */
86
+ type GetServiceType<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? GetServiceType<T[K], Rest> : never : Path extends keyof T ? T[Path] : never;
87
+ /**
88
+ * Get all possible service paths as string literal union types
89
+ * Enables IDE autocomplete for service paths
90
+ */
91
+ export type ServicePaths<C> = C extends Container<infer Defs, any> ? GetAllPaths<InstancesStructure<Defs>> : never;
92
+ /**
93
+ * Recursively build all possible dot-notation paths through the service tree
94
+ * Creates union types like "user" | "user.repository" | "api.services.auth"
95
+ */
96
+ type GetAllPaths<T, Prefix extends string = ''> = {
97
+ [K in keyof T]: T[K] extends Record<string, unknown> ? T[K] extends (...args: any[]) => any ? Prefix extends '' ? K : `${Prefix}.${K & string}` : GetAllPaths<T[K], Prefix extends '' ? K & string : `${Prefix}.${K & string}`> : Prefix extends '' ? K : `${Prefix}.${K & string}`;
98
+ }[keyof T];
99
+ /**
100
+ * Type-level check if a service exists at the given path
101
+ * Returns true/false at compile time
102
+ */
103
+ export type HasService<C, ServicePath extends string> = ServiceType<C, ServicePath> extends never ? false : true;
104
+ /**
105
+ * Extract factory parameter types for a service at the given path
106
+ * Useful for understanding what parameters a service factory expects
107
+ */
108
+ export type ServiceFactoryParams<C, ServicePath extends string> = C extends Container<infer Defs, any> ? GetFactoryParams<Defs, ServicePath> : never;
109
+ /**
110
+ * Recursive helper to extract factory parameters by path
111
+ */
112
+ type GetFactoryParams<T, Path extends string> = Path extends `${infer K}.${infer Rest}` ? K extends keyof T ? GetFactoryParams<T[K], Rest> : never : Path extends keyof T ? T[Path] extends Factory<any, infer P> ? P : never : never;
113
+ /**
114
+ * Container configuration options for performance tuning and debugging
115
+ */
116
+ export interface ContainerOptions {
117
+ /** Maximum number of instances to cache per service (default: 100) */
118
+ cacheSize?: number;
119
+ /** Enable performance metrics collection (default: false) */
120
+ enableMetrics?: boolean;
121
+ /** Enable detailed error logging and diagnostics (default: false) */
122
+ enableDiagnostics?: boolean;
123
+ /** Enable distributed cache invalidation (default: false) */
124
+ enableDistributedInvalidation?: boolean;
125
+ /** Distributed cache invalidator instance */
126
+ distributedInvalidator?: DistributedCacheInvalidator;
127
+ }
128
+ export {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // ═══════════════════════════════════════════════════════════════════════════════
3
+ // 🏭 FACTORY TYPES
4
+ // ═══════════════════════════════════════════════════════════════════════════════
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/container/types.ts"],"names":[],"mappings":";AAAA,kFAAkF;AAClF,mBAAmB;AACnB,kFAAkF"}
package/dist/index.d.ts CHANGED
@@ -2,3 +2,34 @@ import { Cache } from './Cache';
2
2
  import type { Options } from 'keyv';
3
3
  export { Cache };
4
4
  export type { Options };
5
+ export { getExpressTrpcApp } from './server/bootstraps/getExpressTrpcApp';
6
+ export { SentryService } from './server/sentry/sentry.service';
7
+ export { getSentry } from './server/sentry/getSentry';
8
+ export { getLogger } from './server/middleware/logger/logger.service';
9
+ export { handleRequest } from './server/middleware/handleRequest.middleware';
10
+ export { useCloudTaskDecryptMiddleware } from './server/middleware/cloudTaskDecrypt.middleware';
11
+ export { getTrpc } from './server/trpc';
12
+ export { requestContext } from './server/context/request.context';
13
+ export { mockedAuthenticatedTrpcRouter } from './server/test/trpc.mock';
14
+ export type * from '@trpc/server/unstable-core-do-not-import';
15
+ export type * from '@trpc/server';
16
+ export type { LocationOutput } from './server/context/context.model';
17
+ export type { PackageInfo } from './server/consts';
18
+ export { config } from './server/consts';
19
+ export { EmailService } from './server/services/email/email.service';
20
+ export { Layout, Content, EmailCategory } from './server/services/email/email.model';
21
+ export type { EmailTemplates, Theme, EmailAttachment } from './server/services/email/email.model';
22
+ export { SendgridService } from './server/services/sendgrid/sendgridApi.service';
23
+ export { getGcpServiceAccountFromBase64 } from './server/services/gcp/getGcpServiceAccountFromBase64';
24
+ export type { SecretProvider, VaultConfig } from './server/services/secrets/secret.service';
25
+ export { SecretService } from './server/services/secrets/secret.service';
26
+ export { UrlService } from './server/services/util/url.service';
27
+ export { paginationUtility } from './server/services/util/pagination';
28
+ export type { SendGridEmailResponse } from './server/services/sendgrid/sendgrid.model';
29
+ export { TRPCError } from '@trpc/server';
30
+ export { translationService, tr } from './server/services/translations/translation.service';
31
+ export type { Environment } from './server/types/Envinronment';
32
+ export { Container } from './container/Container';
33
+ export type { Factory, ContainerOptions, PreloadStructure, ContainerFactories, ContainerMetadata, ContainerContext, MapInterface, ContainerBootstrapResult } from './container/types';
34
+ export { createServiceCache } from './container/LruCache';
35
+ export { DistributedCacheInvalidator, getDistributedCacheInvalidator } from './container/DistributedCacheInvalidator';
package/dist/index.js CHANGED
@@ -1,6 +1,58 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Cache = void 0;
3
+ exports.getDistributedCacheInvalidator = exports.DistributedCacheInvalidator = exports.createServiceCache = exports.Container = exports.tr = exports.translationService = exports.TRPCError = exports.paginationUtility = exports.UrlService = exports.SecretService = exports.getGcpServiceAccountFromBase64 = exports.SendgridService = exports.EmailCategory = exports.Content = exports.Layout = exports.EmailService = exports.config = exports.mockedAuthenticatedTrpcRouter = exports.requestContext = exports.getTrpc = exports.useCloudTaskDecryptMiddleware = exports.handleRequest = exports.getLogger = exports.getSentry = exports.SentryService = exports.getExpressTrpcApp = exports.Cache = void 0;
4
4
  const Cache_1 = require("./Cache");
5
5
  Object.defineProperty(exports, "Cache", { enumerable: true, get: function () { return Cache_1.Cache; } });
6
+ // New backend package
7
+ var getExpressTrpcApp_1 = require("./server/bootstraps/getExpressTrpcApp");
8
+ Object.defineProperty(exports, "getExpressTrpcApp", { enumerable: true, get: function () { return getExpressTrpcApp_1.getExpressTrpcApp; } });
9
+ var sentry_service_1 = require("./server/sentry/sentry.service");
10
+ Object.defineProperty(exports, "SentryService", { enumerable: true, get: function () { return sentry_service_1.SentryService; } });
11
+ var getSentry_1 = require("./server/sentry/getSentry");
12
+ Object.defineProperty(exports, "getSentry", { enumerable: true, get: function () { return getSentry_1.getSentry; } });
13
+ var logger_service_1 = require("./server/middleware/logger/logger.service");
14
+ Object.defineProperty(exports, "getLogger", { enumerable: true, get: function () { return logger_service_1.getLogger; } });
15
+ var handleRequest_middleware_1 = require("./server/middleware/handleRequest.middleware");
16
+ Object.defineProperty(exports, "handleRequest", { enumerable: true, get: function () { return handleRequest_middleware_1.handleRequest; } });
17
+ var cloudTaskDecrypt_middleware_1 = require("./server/middleware/cloudTaskDecrypt.middleware");
18
+ Object.defineProperty(exports, "useCloudTaskDecryptMiddleware", { enumerable: true, get: function () { return cloudTaskDecrypt_middleware_1.useCloudTaskDecryptMiddleware; } });
19
+ var trpc_1 = require("./server/trpc");
20
+ Object.defineProperty(exports, "getTrpc", { enumerable: true, get: function () { return trpc_1.getTrpc; } });
21
+ var request_context_1 = require("./server/context/request.context");
22
+ Object.defineProperty(exports, "requestContext", { enumerable: true, get: function () { return request_context_1.requestContext; } });
23
+ var trpc_mock_1 = require("./server/test/trpc.mock");
24
+ Object.defineProperty(exports, "mockedAuthenticatedTrpcRouter", { enumerable: true, get: function () { return trpc_mock_1.mockedAuthenticatedTrpcRouter; } });
25
+ var consts_1 = require("./server/consts");
26
+ Object.defineProperty(exports, "config", { enumerable: true, get: function () { return consts_1.config; } });
27
+ var email_service_1 = require("./server/services/email/email.service");
28
+ Object.defineProperty(exports, "EmailService", { enumerable: true, get: function () { return email_service_1.EmailService; } });
29
+ var email_model_1 = require("./server/services/email/email.model");
30
+ Object.defineProperty(exports, "Layout", { enumerable: true, get: function () { return email_model_1.Layout; } });
31
+ Object.defineProperty(exports, "Content", { enumerable: true, get: function () { return email_model_1.Content; } });
32
+ Object.defineProperty(exports, "EmailCategory", { enumerable: true, get: function () { return email_model_1.EmailCategory; } });
33
+ var sendgridApi_service_1 = require("./server/services/sendgrid/sendgridApi.service");
34
+ Object.defineProperty(exports, "SendgridService", { enumerable: true, get: function () { return sendgridApi_service_1.SendgridService; } });
35
+ var getGcpServiceAccountFromBase64_1 = require("./server/services/gcp/getGcpServiceAccountFromBase64");
36
+ Object.defineProperty(exports, "getGcpServiceAccountFromBase64", { enumerable: true, get: function () { return getGcpServiceAccountFromBase64_1.getGcpServiceAccountFromBase64; } });
37
+ var secret_service_1 = require("./server/services/secrets/secret.service");
38
+ Object.defineProperty(exports, "SecretService", { enumerable: true, get: function () { return secret_service_1.SecretService; } });
39
+ var url_service_1 = require("./server/services/util/url.service");
40
+ Object.defineProperty(exports, "UrlService", { enumerable: true, get: function () { return url_service_1.UrlService; } });
41
+ var pagination_1 = require("./server/services/util/pagination");
42
+ Object.defineProperty(exports, "paginationUtility", { enumerable: true, get: function () { return pagination_1.paginationUtility; } });
43
+ var server_1 = require("@trpc/server");
44
+ Object.defineProperty(exports, "TRPCError", { enumerable: true, get: function () { return server_1.TRPCError; } });
45
+ var translation_service_1 = require("./server/services/translations/translation.service");
46
+ Object.defineProperty(exports, "translationService", { enumerable: true, get: function () { return translation_service_1.translationService; } });
47
+ Object.defineProperty(exports, "tr", { enumerable: true, get: function () { return translation_service_1.tr; } });
48
+ ////////////////////////
49
+ // Container System
50
+ ////////////////////////
51
+ var Container_1 = require("./container/Container");
52
+ Object.defineProperty(exports, "Container", { enumerable: true, get: function () { return Container_1.Container; } });
53
+ var LruCache_1 = require("./container/LruCache");
54
+ Object.defineProperty(exports, "createServiceCache", { enumerable: true, get: function () { return LruCache_1.createServiceCache; } });
55
+ var DistributedCacheInvalidator_1 = require("./container/DistributedCacheInvalidator");
56
+ Object.defineProperty(exports, "DistributedCacheInvalidator", { enumerable: true, get: function () { return DistributedCacheInvalidator_1.DistributedCacheInvalidator; } });
57
+ Object.defineProperty(exports, "getDistributedCacheInvalidator", { enumerable: true, get: function () { return DistributedCacheInvalidator_1.getDistributedCacheInvalidator; } });
6
58
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAGtB,sFAHA,aAAK,OAGA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAGtB,sFAHA,aAAK,OAGA;AAGd,sBAAsB;AACtB,2EAAyE;AAAhE,sHAAA,iBAAiB,OAAA;AAC1B,iEAA8D;AAArD,+GAAA,aAAa,OAAA;AACtB,uDAAqD;AAA5C,sGAAA,SAAS,OAAA;AAClB,4EAAqE;AAA5D,2GAAA,SAAS,OAAA;AAClB,yFAA4E;AAAnE,yHAAA,aAAa,OAAA;AACtB,+FAA+F;AAAtF,4IAAA,6BAA6B,OAAA;AACtC,sCAAuC;AAA9B,+FAAA,OAAO,OAAA;AAChB,oEAAiE;AAAxD,iHAAA,cAAc,OAAA;AAEvB,qDAAuE;AAA9D,0HAAA,6BAA6B,OAAA;AAMtC,0CAAwC;AAA/B,gGAAA,MAAM,OAAA;AACf,uEAAoE;AAA3D,6GAAA,YAAY,OAAA;AACrB,mEAI4C;AAH1C,qGAAA,MAAM,OAAA;AACN,sGAAA,OAAO,OAAA;AACP,4GAAA,aAAa,OAAA;AAOf,sFAAgF;AAAvE,sHAAA,eAAe,OAAA;AACxB,uGAAqG;AAA5F,gJAAA,8BAA8B,OAAA;AAMvC,2EAAwE;AAA/D,+GAAA,aAAa,OAAA;AACtB,kEAA+D;AAAtD,yGAAA,UAAU,OAAA;AACnB,gEAAqE;AAA5D,+GAAA,iBAAiB,OAAA;AAE1B,uCAAwC;AAA/B,mGAAA,SAAS,OAAA;AAClB,0FAG2D;AAFzD,yHAAA,kBAAkB,OAAA;AAClB,yGAAA,EAAE,OAAA;AAKJ,wBAAwB;AACxB,mBAAmB;AACnB,wBAAwB;AACxB,mDAAiD;AAAxC,sGAAA,SAAS,OAAA;AAYlB,iDAAyD;AAAhD,8GAAA,kBAAkB,OAAA;AAC3B,uFAGgD;AAF9C,0IAAA,2BAA2B,OAAA;AAC3B,6IAAA,8BAA8B,OAAA"}