@goatlab/node-backend 1.2.1 → 1.4.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.
- package/dist/Cache.d.ts +19 -0
- package/dist/Cache.js +38 -6
- package/dist/Cache.js.map +1 -1
- package/dist/cache/LazyRedisStore.d.ts +15 -8
- package/dist/cache/LazyRedisStore.js +14 -11
- package/dist/cache/LazyRedisStore.js.map +1 -1
- package/dist/cache/RedisConnectionPool.d.ts +13 -0
- package/dist/cache/RedisConnectionPool.js +35 -0
- package/dist/cache/RedisConnectionPool.js.map +1 -1
- package/dist/container/Container.d.ts +45 -13
- package/dist/container/Container.js +260 -140
- package/dist/container/Container.js.map +1 -1
- package/dist/container/types.d.ts +70 -0
- package/dist/container/types.js +20 -0
- package/dist/container/types.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bootstraps/ExpressTrpcAppConfig.d.ts +12 -0
- package/dist/server/bootstraps/ExpressTrpcAppConfig.js +1 -0
- package/dist/server/bootstraps/ExpressTrpcAppConfig.js.map +1 -1
- package/dist/server/bootstraps/getExpressTrpcApp.js +2 -2
- package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
- package/dist/server/middleware/logs.middleware.d.ts +6 -1
- package/dist/server/middleware/logs.middleware.js +10 -4
- package/dist/server/middleware/logs.middleware.js.map +1 -1
- package/dist/server/trpc.d.ts +6 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -1
package/dist/Cache.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { type Milliseconds } from '@goatlab/js-utils';
|
|
2
|
+
import type { ClusterOptions } from 'ioredis';
|
|
2
3
|
import type { Options } from 'keyv';
|
|
3
4
|
declare const Keyv: any;
|
|
5
|
+
export interface CacheClusterConfig {
|
|
6
|
+
nodes: Array<{
|
|
7
|
+
host: string;
|
|
8
|
+
port: number;
|
|
9
|
+
}>;
|
|
10
|
+
options?: ClusterOptions;
|
|
11
|
+
}
|
|
4
12
|
export interface CacheOptions<T> extends Options<T> {
|
|
5
13
|
usesLRUMemory?: boolean;
|
|
6
14
|
tenantId?: string;
|
|
@@ -14,6 +22,12 @@ export interface CacheOptions<T> extends Options<T> {
|
|
|
14
22
|
* @default true
|
|
15
23
|
*/
|
|
16
24
|
lazy?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Redis Cluster configuration.
|
|
27
|
+
* When provided, the cache connects to a Redis Cluster instead of standalone Redis.
|
|
28
|
+
* Takes precedence over the `connection` string for store creation.
|
|
29
|
+
*/
|
|
30
|
+
cluster?: CacheClusterConfig;
|
|
17
31
|
}
|
|
18
32
|
export declare class Cache<T extends object = any> extends Keyv<T> {
|
|
19
33
|
private ns;
|
|
@@ -85,6 +99,11 @@ export declare class Cache<T extends object = any> extends Keyv<T> {
|
|
|
85
99
|
* @return void
|
|
86
100
|
*/
|
|
87
101
|
flush(): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* SCAN a single Redis node for keys matching a pattern and UNLINK them.
|
|
104
|
+
* Used for cluster-safe flush operations where `keys()` is not viable.
|
|
105
|
+
*/
|
|
106
|
+
private scanAndUnlink;
|
|
88
107
|
/**
|
|
89
108
|
* Get the underlying Redis client if available.
|
|
90
109
|
* Ensures lazy connection is established first.
|
package/dist/Cache.js
CHANGED
|
@@ -19,6 +19,7 @@ class Cache extends Keyv {
|
|
|
19
19
|
const tenantId = opts?.tenantId;
|
|
20
20
|
const namespace = opts?.namespace || '';
|
|
21
21
|
const lazy = opts?.lazy !== false; // Default to true
|
|
22
|
+
const clusterConfig = opts?.cluster;
|
|
22
23
|
// Build the full namespace including tenant ID if provided
|
|
23
24
|
// Format: "tenantId:namespace" or "tenantId" or "namespace" or ""
|
|
24
25
|
const fullNamespace = tenantId && namespace
|
|
@@ -29,7 +30,15 @@ class Cache extends Keyv {
|
|
|
29
30
|
// Determine which store to use
|
|
30
31
|
let store;
|
|
31
32
|
let lazyStore;
|
|
32
|
-
if (
|
|
33
|
+
if (clusterConfig) {
|
|
34
|
+
// Cluster mode: always lazy, use cluster config
|
|
35
|
+
lazyStore = new LazyRedisStore_1.LazyRedisStore(connection || 'cluster', {
|
|
36
|
+
nodes: clusterConfig.nodes,
|
|
37
|
+
options: clusterConfig.options,
|
|
38
|
+
});
|
|
39
|
+
store = lazyStore;
|
|
40
|
+
}
|
|
41
|
+
else if (connection) {
|
|
33
42
|
if (lazy) {
|
|
34
43
|
// Lazy mode: use LazyRedisStore that defers connection
|
|
35
44
|
lazyStore = new LazyRedisStore_1.LazyRedisStore(connection);
|
|
@@ -221,12 +230,21 @@ class Cache extends Keyv {
|
|
|
221
230
|
// Try to get direct Redis access for batch deletion (much faster)
|
|
222
231
|
const redis = await this.getRedisClient();
|
|
223
232
|
if (redis) {
|
|
224
|
-
// Use Redis SCAN + UNLINK for fast bulk deletion
|
|
225
233
|
const pattern = this.ns ? `${this.ns}:*` : '*';
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
//
|
|
229
|
-
|
|
234
|
+
if (typeof redis.nodes === 'function') {
|
|
235
|
+
// Redis Cluster: SCAN each master node individually
|
|
236
|
+
// redis.keys() fails on cluster because it only hits one slot
|
|
237
|
+
const masterNodes = redis.nodes('master');
|
|
238
|
+
for (const node of masterNodes) {
|
|
239
|
+
await this.scanAndUnlink(node, pattern);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
// Standalone: Use Redis SCAN + UNLINK for fast bulk deletion
|
|
244
|
+
const keys = await redis.keys(pattern);
|
|
245
|
+
if (keys.length > 0) {
|
|
246
|
+
await redis.unlink(keys);
|
|
247
|
+
}
|
|
230
248
|
}
|
|
231
249
|
}
|
|
232
250
|
else {
|
|
@@ -252,6 +270,20 @@ class Cache extends Keyv {
|
|
|
252
270
|
await this.memoryCache.clear();
|
|
253
271
|
}
|
|
254
272
|
}
|
|
273
|
+
/**
|
|
274
|
+
* SCAN a single Redis node for keys matching a pattern and UNLINK them.
|
|
275
|
+
* Used for cluster-safe flush operations where `keys()` is not viable.
|
|
276
|
+
*/
|
|
277
|
+
async scanAndUnlink(node, pattern) {
|
|
278
|
+
let cursor = '0';
|
|
279
|
+
do {
|
|
280
|
+
const [nextCursor, keys] = await node.scan(cursor, 'MATCH', pattern, 'COUNT', 200);
|
|
281
|
+
cursor = nextCursor;
|
|
282
|
+
if (keys.length > 0) {
|
|
283
|
+
await node.unlink(...keys);
|
|
284
|
+
}
|
|
285
|
+
} while (cursor !== '0');
|
|
286
|
+
}
|
|
255
287
|
/**
|
|
256
288
|
* Get the underlying Redis client if available.
|
|
257
289
|
* Ensures lazy connection is established first.
|
package/dist/Cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../src/Cache.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../src/Cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import KeyvRedis from '@keyv/redis';
|
|
2
|
+
import type { ClusterNode, ClusterOptions } from 'ioredis';
|
|
3
|
+
export interface ClusterConfig {
|
|
4
|
+
nodes: ClusterNode[];
|
|
5
|
+
options?: ClusterOptions;
|
|
6
|
+
}
|
|
2
7
|
/**
|
|
3
8
|
* A lazy-loading Redis store for Keyv.
|
|
4
9
|
* Defers Redis connection until the first operation is performed.
|
|
5
10
|
* This prevents connection exhaustion during Cloud Run/serverless deployments
|
|
6
11
|
* where old and new containers may briefly run simultaneously.
|
|
7
12
|
*
|
|
13
|
+
* Supports both standalone Redis (via connection string) and Redis Cluster (via clusterConfig).
|
|
14
|
+
*
|
|
8
15
|
* @example
|
|
9
16
|
* ```typescript
|
|
17
|
+
* // Standalone
|
|
10
18
|
* const store = new LazyRedisStore('redis://localhost:6379')
|
|
11
|
-
* // No connection yet!
|
|
12
19
|
*
|
|
13
|
-
*
|
|
20
|
+
* // Cluster
|
|
21
|
+
* const store = new LazyRedisStore('cluster', {
|
|
22
|
+
* nodes: [{ host: '10.0.0.2', port: 6379 }],
|
|
23
|
+
* options: { redisOptions: { password: 'secret', tls: { rejectUnauthorized: false } } }
|
|
24
|
+
* })
|
|
14
25
|
* ```
|
|
15
26
|
*/
|
|
16
27
|
export declare class LazyRedisStore {
|
|
@@ -19,6 +30,7 @@ export declare class LazyRedisStore {
|
|
|
19
30
|
private _store;
|
|
20
31
|
private _connecting;
|
|
21
32
|
private _namespace;
|
|
33
|
+
private _clusterConfig?;
|
|
22
34
|
/**
|
|
23
35
|
* Opts property for Keyv compatibility.
|
|
24
36
|
* Keyv checks for store.opts to detect if iteration is supported.
|
|
@@ -29,7 +41,7 @@ export declare class LazyRedisStore {
|
|
|
29
41
|
dialect: string;
|
|
30
42
|
url: string;
|
|
31
43
|
};
|
|
32
|
-
constructor(connectionString: string);
|
|
44
|
+
constructor(connectionString: string, clusterConfig?: ClusterConfig);
|
|
33
45
|
/**
|
|
34
46
|
* Namespace property for Keyv compatibility.
|
|
35
47
|
* Keyv sets this after construction to enable namespace-scoped operations.
|
|
@@ -43,11 +55,6 @@ export declare class LazyRedisStore {
|
|
|
43
55
|
* if multiple operations are called simultaneously.
|
|
44
56
|
*/
|
|
45
57
|
getStore(): Promise<KeyvRedis>;
|
|
46
|
-
/**
|
|
47
|
-
* Get the store synchronously if already connected.
|
|
48
|
-
* Returns undefined if not yet connected.
|
|
49
|
-
*/
|
|
50
|
-
private getStoreSync;
|
|
51
58
|
get(key: string): Promise<any>;
|
|
52
59
|
getMany(keys: string[]): Promise<any[]>;
|
|
53
60
|
set(key: string, value: any, ttl?: number): Promise<any>;
|
|
@@ -8,12 +8,18 @@ const RedisConnectionPool_1 = require("./RedisConnectionPool");
|
|
|
8
8
|
* This prevents connection exhaustion during Cloud Run/serverless deployments
|
|
9
9
|
* where old and new containers may briefly run simultaneously.
|
|
10
10
|
*
|
|
11
|
+
* Supports both standalone Redis (via connection string) and Redis Cluster (via clusterConfig).
|
|
12
|
+
*
|
|
11
13
|
* @example
|
|
12
14
|
* ```typescript
|
|
15
|
+
* // Standalone
|
|
13
16
|
* const store = new LazyRedisStore('redis://localhost:6379')
|
|
14
|
-
* // No connection yet!
|
|
15
17
|
*
|
|
16
|
-
*
|
|
18
|
+
* // Cluster
|
|
19
|
+
* const store = new LazyRedisStore('cluster', {
|
|
20
|
+
* nodes: [{ host: '10.0.0.2', port: 6379 }],
|
|
21
|
+
* options: { redisOptions: { password: 'secret', tls: { rejectUnauthorized: false } } }
|
|
22
|
+
* })
|
|
17
23
|
* ```
|
|
18
24
|
*/
|
|
19
25
|
class LazyRedisStore {
|
|
@@ -22,6 +28,7 @@ class LazyRedisStore {
|
|
|
22
28
|
_store;
|
|
23
29
|
_connecting;
|
|
24
30
|
_namespace;
|
|
31
|
+
_clusterConfig;
|
|
25
32
|
/**
|
|
26
33
|
* Opts property for Keyv compatibility.
|
|
27
34
|
* Keyv checks for store.opts to detect if iteration is supported.
|
|
@@ -29,8 +36,9 @@ class LazyRedisStore {
|
|
|
29
36
|
* @see https://github.com/jaredwray/keyv/blob/main/packages/keyv/src/index.ts
|
|
30
37
|
*/
|
|
31
38
|
opts;
|
|
32
|
-
constructor(connectionString) {
|
|
39
|
+
constructor(connectionString, clusterConfig) {
|
|
33
40
|
this.connectionString = connectionString;
|
|
41
|
+
this._clusterConfig = clusterConfig;
|
|
34
42
|
this.pool = RedisConnectionPool_1.RedisConnectionPool.getInstance();
|
|
35
43
|
// Set opts for Keyv iterator detection
|
|
36
44
|
// Keyv's _checkIterableAdapter() checks if opts.dialect is in iterableAdapters
|
|
@@ -73,7 +81,9 @@ class LazyRedisStore {
|
|
|
73
81
|
// Start connection
|
|
74
82
|
this._connecting = new Promise((resolve, reject) => {
|
|
75
83
|
try {
|
|
76
|
-
this._store = this.
|
|
84
|
+
this._store = this._clusterConfig
|
|
85
|
+
? this.pool.getClusterConnection(this._clusterConfig.nodes, this._clusterConfig.options)
|
|
86
|
+
: this.pool.getConnection(this.connectionString);
|
|
77
87
|
// Forward namespace to the underlying store if set
|
|
78
88
|
// This is critical for clear() and other namespace-scoped operations
|
|
79
89
|
if (this._namespace !== undefined) {
|
|
@@ -88,13 +98,6 @@ class LazyRedisStore {
|
|
|
88
98
|
});
|
|
89
99
|
return this._connecting;
|
|
90
100
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Get the store synchronously if already connected.
|
|
93
|
-
* Returns undefined if not yet connected.
|
|
94
|
-
*/
|
|
95
|
-
getStoreSync() {
|
|
96
|
-
return this._store;
|
|
97
|
-
}
|
|
98
101
|
// Keyv store interface methods - all lazily connect
|
|
99
102
|
async get(key) {
|
|
100
103
|
const store = await this.getStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LazyRedisStore.js","sourceRoot":"","sources":["../../src/cache/LazyRedisStore.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"LazyRedisStore.js","sourceRoot":"","sources":["../../src/cache/LazyRedisStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import KeyvRedis from '@keyv/redis';
|
|
2
|
+
import { type ClusterNode, type ClusterOptions } from 'ioredis';
|
|
2
3
|
/**
|
|
3
4
|
* Singleton connection pool for Redis connections.
|
|
4
5
|
* Ensures multiple Cache instances pointing to the same Redis instance
|
|
@@ -17,6 +18,18 @@ export declare class RedisConnectionPool {
|
|
|
17
18
|
* @returns KeyvRedis store instance
|
|
18
19
|
*/
|
|
19
20
|
getConnection(connectionString: string): KeyvRedis;
|
|
21
|
+
/**
|
|
22
|
+
* Get a Redis store backed by an ioredis Cluster instance.
|
|
23
|
+
* Pools the underlying Cluster connection by a key derived from the sorted node list.
|
|
24
|
+
*
|
|
25
|
+
* IMPORTANT: Uses `useRedisSets: false` because MULTI/EXEC (used by the default
|
|
26
|
+
* useRedisSets: true) is not supported across slots in Redis Cluster.
|
|
27
|
+
*
|
|
28
|
+
* @param nodes Cluster seed nodes
|
|
29
|
+
* @param options ioredis ClusterOptions
|
|
30
|
+
* @returns KeyvRedis store wrapping the shared Cluster instance
|
|
31
|
+
*/
|
|
32
|
+
getClusterConnection(nodes: ClusterNode[], options?: ClusterOptions): KeyvRedis;
|
|
20
33
|
/**
|
|
21
34
|
* Release a Redis connection. When reference count reaches 0,
|
|
22
35
|
* the connection is kept in the pool for reuse.
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RedisConnectionPool = void 0;
|
|
4
4
|
// npx vitest run ./src/cache/RedisConnectionPool.test.ts
|
|
5
5
|
const redis_1 = require("@keyv/redis");
|
|
6
|
+
const ioredis_1 = require("ioredis");
|
|
6
7
|
/**
|
|
7
8
|
* Singleton connection pool for Redis connections.
|
|
8
9
|
* Ensures multiple Cache instances pointing to the same Redis instance
|
|
@@ -42,6 +43,40 @@ class RedisConnectionPool {
|
|
|
42
43
|
});
|
|
43
44
|
return store;
|
|
44
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Get a Redis store backed by an ioredis Cluster instance.
|
|
48
|
+
* Pools the underlying Cluster connection by a key derived from the sorted node list.
|
|
49
|
+
*
|
|
50
|
+
* IMPORTANT: Uses `useRedisSets: false` because MULTI/EXEC (used by the default
|
|
51
|
+
* useRedisSets: true) is not supported across slots in Redis Cluster.
|
|
52
|
+
*
|
|
53
|
+
* @param nodes Cluster seed nodes
|
|
54
|
+
* @param options ioredis ClusterOptions
|
|
55
|
+
* @returns KeyvRedis store wrapping the shared Cluster instance
|
|
56
|
+
*/
|
|
57
|
+
getClusterConnection(nodes, options) {
|
|
58
|
+
const poolKey = `cluster:${JSON.stringify([...nodes].sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b))))}`;
|
|
59
|
+
const entry = this.pool.get(poolKey);
|
|
60
|
+
if (entry) {
|
|
61
|
+
entry.refCount++;
|
|
62
|
+
return new redis_1.default(entry.client, { useRedisSets: false });
|
|
63
|
+
}
|
|
64
|
+
const cluster = new ioredis_1.Cluster(nodes, {
|
|
65
|
+
enableReadyCheck: true,
|
|
66
|
+
scaleReads: 'slave',
|
|
67
|
+
dnsLookup: (address, callback) => callback(null, address),
|
|
68
|
+
...options,
|
|
69
|
+
redisOptions: {
|
|
70
|
+
maxRetriesPerRequest: null,
|
|
71
|
+
...options?.redisOptions,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
this.pool.set(poolKey, {
|
|
75
|
+
client: cluster,
|
|
76
|
+
refCount: 1,
|
|
77
|
+
});
|
|
78
|
+
return new redis_1.default(cluster, { useRedisSets: false });
|
|
79
|
+
}
|
|
45
80
|
/**
|
|
46
81
|
* Release a Redis connection. When reference count reaches 0,
|
|
47
82
|
* the connection is kept in the pool for reuse.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedisConnectionPool.js","sourceRoot":"","sources":["../../src/cache/RedisConnectionPool.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AACzD,uCAAmC;
|
|
1
|
+
{"version":3,"file":"RedisConnectionPool.js","sourceRoot":"","sources":["../../src/cache/RedisConnectionPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -86,6 +86,22 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
86
86
|
* Lazy-allocated to save memory for unused services
|
|
87
87
|
*/
|
|
88
88
|
private readonly managers;
|
|
89
|
+
/**
|
|
90
|
+
* Kill switch: Set of blocked tenant IDs
|
|
91
|
+
* Blocked tenants are rejected immediately at bootstrap without initialization
|
|
92
|
+
*/
|
|
93
|
+
private readonly blockedTenants;
|
|
94
|
+
/**
|
|
95
|
+
* Cooldown tracker: tenants whose initializer recently failed
|
|
96
|
+
* Maps tenant cache key -> expiry timestamp (Date.now() + cooldown)
|
|
97
|
+
* Prevents retry storms when a tenant's initializer is broken
|
|
98
|
+
*/
|
|
99
|
+
private readonly initializerCooldowns;
|
|
100
|
+
/**
|
|
101
|
+
* Bootstrap call counter for sampled heap checks
|
|
102
|
+
* Only check memory every N calls to minimize overhead
|
|
103
|
+
*/
|
|
104
|
+
private bootstrapCounter;
|
|
89
105
|
/**
|
|
90
106
|
* AsyncLocalStorage provides automatic tenant context isolation
|
|
91
107
|
* Each async call tree gets its own isolated service instances
|
|
@@ -110,6 +126,12 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
110
126
|
* Prevents concurrent bootstrap for same tenant from running initializer twice
|
|
111
127
|
*/
|
|
112
128
|
private readonly initializerPromises;
|
|
129
|
+
/**
|
|
130
|
+
* Tracks in-flight disposal operations per tenant
|
|
131
|
+
* Bootstrap waits for pending disposal to complete before re-initializing
|
|
132
|
+
* Prevents duplicate live instances when invalidation overlaps with re-bootstrap
|
|
133
|
+
*/
|
|
134
|
+
private readonly disposalPromises;
|
|
113
135
|
/**
|
|
114
136
|
* Proxy object cache: reuses proxy objects for the same paths
|
|
115
137
|
* Reduces memory allocation and improves performance
|
|
@@ -123,16 +145,9 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
123
145
|
/**
|
|
124
146
|
* Initializer cache: stores initialized instances per tenant with LRU eviction
|
|
125
147
|
* Avoids re-running the expensive initializer function for the same tenant
|
|
126
|
-
*
|
|
127
|
-
* Uses accessOrder to track LRU for eviction when cache exceeds maxInitializerCacheSize
|
|
148
|
+
* Uses tiny-lru for O(1) eviction instead of hand-rolled linear scan
|
|
128
149
|
*/
|
|
129
150
|
private readonly initializerCache;
|
|
130
|
-
/**
|
|
131
|
-
* Tracks access order for LRU eviction of initializerCache entries
|
|
132
|
-
* Key is cache key, value is access timestamp (incrementing counter)
|
|
133
|
-
*/
|
|
134
|
-
private readonly initializerAccessOrder;
|
|
135
|
-
private initializerAccessCounter;
|
|
136
151
|
/**
|
|
137
152
|
* High-performance metrics using Uint32Array for better JIT optimization
|
|
138
153
|
* Indices: [hits, misses, creates, ctx, proxy, initHits, resets, batchOps, batchErrors]
|
|
@@ -153,6 +168,11 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
153
168
|
* Uint32Array automatically wraps at 2^32, but we maintain compatibility for tests
|
|
154
169
|
*/
|
|
155
170
|
private inc;
|
|
171
|
+
/**
|
|
172
|
+
* Emit a structured event if an event handler is configured
|
|
173
|
+
* No-op if onEvent is not set, keeping zero overhead when unused
|
|
174
|
+
*/
|
|
175
|
+
private emit;
|
|
156
176
|
/**
|
|
157
177
|
* Create a new Container instance
|
|
158
178
|
*
|
|
@@ -257,11 +277,6 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
257
277
|
* Uses common tenant properties or hashed JSON as fallback
|
|
258
278
|
*/
|
|
259
279
|
private createTenantCacheKey;
|
|
260
|
-
/**
|
|
261
|
-
* Evict the least recently used entry from initializerCache if at capacity
|
|
262
|
-
* Called before adding a new entry when cache is at maxInitializerCacheSize
|
|
263
|
-
*/
|
|
264
|
-
private evictLruFromInitializerCache;
|
|
265
280
|
/**
|
|
266
281
|
* Get or create initialized instances for a tenant with race condition protection
|
|
267
282
|
* Uses both result caching and inflight promise deduplication
|
|
@@ -554,4 +569,21 @@ export declare class Container<Defs extends Record<string, unknown>, TenantMetad
|
|
|
554
569
|
* Helper method for getAvailableServices()
|
|
555
570
|
*/
|
|
556
571
|
private collectServices;
|
|
572
|
+
/**
|
|
573
|
+
* Block a tenant from bootstrapping. Blocked tenants are rejected immediately.
|
|
574
|
+
* Use this for: runaway crons, infinite loops, compromised keys, legal holds.
|
|
575
|
+
*/
|
|
576
|
+
blockTenant(tenantId: string): void;
|
|
577
|
+
/**
|
|
578
|
+
* Unblock a previously blocked tenant, restoring normal bootstrap behavior.
|
|
579
|
+
*/
|
|
580
|
+
unblockTenant(tenantId: string): void;
|
|
581
|
+
/**
|
|
582
|
+
* Check if a tenant is currently blocked.
|
|
583
|
+
*/
|
|
584
|
+
isTenantBlocked(tenantId: string): boolean;
|
|
585
|
+
/**
|
|
586
|
+
* Get the set of all currently blocked tenant IDs.
|
|
587
|
+
*/
|
|
588
|
+
getBlockedTenants(): ReadonlySet<string>;
|
|
557
589
|
}
|