@goatlab/tasks-adapter-bullmq 0.9.5 → 0.10.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.
@@ -56,6 +56,17 @@ export declare class BullMQConnector implements TaskConnector<object> {
56
56
  private readonly _tenantId?;
57
57
  private readonly _prefix;
58
58
  private readonly config;
59
+ /**
60
+ * Shared ioredis instance for non-blocking operations (Queue enqueue,
61
+ * temp Worker getNextJob). Lazily created on first use. All Queue
62
+ * instances reuse this single TCP connection instead of each creating
63
+ * their own, keeping connection count O(1) per connector regardless
64
+ * of how many queues are used.
65
+ *
66
+ * Persistent blocking Workers (startWorker/getBullMQWorker) use raw
67
+ * connectionOptions so they get dedicated connections for BRPOPLPUSH.
68
+ */
69
+ private _sharedClient;
59
70
  /**
60
71
  * Optional hook called after a job is successfully enqueued.
61
72
  * Set via constructor config. Failures are non-fatal.
@@ -76,6 +87,12 @@ export declare class BullMQConnector implements TaskConnector<object> {
76
87
  */
77
88
  get prefix(): string;
78
89
  constructor(config?: BullMQConnectorConfig);
90
+ /**
91
+ * Returns a shared ioredis connection for non-blocking operations.
92
+ * Creates one lazily on first call. If the connector was constructed
93
+ * with a `redisInstance`, returns that directly (already shared).
94
+ */
95
+ private getSharedConnection;
79
96
  /**
80
97
  * Creates a new BullMQConnector instance scoped to a specific tenant.
81
98
  * The new connector uses the tenant ID as a Redis key prefix for isolation.
@@ -134,6 +151,7 @@ export declare class BullMQConnector implements TaskConnector<object> {
134
151
  }): Promise<Worker[]>;
135
152
  /**
136
153
  * Stops all workers and closes all queue connections.
154
+ * Also disconnects the shared ioredis client if one was created.
137
155
  */
138
156
  close(): Promise<void>;
139
157
  /**
@@ -38,6 +38,17 @@ class BullMQConnector {
38
38
  _tenantId;
39
39
  _prefix;
40
40
  config;
41
+ /**
42
+ * Shared ioredis instance for non-blocking operations (Queue enqueue,
43
+ * temp Worker getNextJob). Lazily created on first use. All Queue
44
+ * instances reuse this single TCP connection instead of each creating
45
+ * their own, keeping connection count O(1) per connector regardless
46
+ * of how many queues are used.
47
+ *
48
+ * Persistent blocking Workers (startWorker/getBullMQWorker) use raw
49
+ * connectionOptions so they get dedicated connections for BRPOPLPUSH.
50
+ */
51
+ _sharedClient = null;
41
52
  /**
42
53
  * Optional hook called after a job is successfully enqueued.
43
54
  * Set via constructor config. Failures are non-fatal.
@@ -103,6 +114,35 @@ class BullMQConnector {
103
114
  };
104
115
  this.onAfterQueue = config?.onAfterQueue;
105
116
  }
117
+ /**
118
+ * Returns a shared ioredis connection for non-blocking operations.
119
+ * Creates one lazily on first call. If the connector was constructed
120
+ * with a `redisInstance`, returns that directly (already shared).
121
+ */
122
+ getSharedConnection() {
123
+ // Already have a pre-built instance (passed via config or previous call)
124
+ if (this.config.redisInstance) {
125
+ return this.config.redisInstance;
126
+ }
127
+ // Lazily create a single shared ioredis instance
128
+ if (!this._sharedClient) {
129
+ // Dynamic import would be cleaner but ioredis is already a dependency
130
+ // of bullmq, so it's always available.
131
+ const IORedis = require('ioredis').default || require('ioredis');
132
+ this._sharedClient = new IORedis({
133
+ host: DEFAULT_HOST,
134
+ port: DEFAULT_PORT,
135
+ maxRetriesPerRequest: null,
136
+ family: 4,
137
+ ...this.config.connection,
138
+ // Prevent ioredis from exiting the process on connection errors
139
+ lazyConnect: false,
140
+ });
141
+ // Suppress unhandled error events (BullMQ attaches its own handlers)
142
+ this._sharedClient.on('error', () => { });
143
+ }
144
+ return this._sharedClient;
145
+ }
106
146
  /**
107
147
  * Creates a new BullMQConnector instance scoped to a specific tenant.
108
148
  * The new connector uses the tenant ID as a Redis key prefix for isolation.
@@ -127,11 +167,20 @@ class BullMQConnector {
127
167
  * ```
128
168
  */
129
169
  forTenant(tenantId, credentials) {
170
+ // When no per-tenant credentials are provided, share the parent's
171
+ // ioredis connection so all tenants reuse one TCP connection.
172
+ // Tenant isolation is via key prefix, not separate connections.
173
+ const sharedInstance = !credentials?.username && !credentials?.password
174
+ ? this.getSharedConnection()
175
+ : undefined;
176
+ // Spread parent config but remove explicit prefix — the child connector
177
+ // should derive its prefix from the new tenantId, not inherit the parent's.
178
+ const { prefix: _parentPrefix, ...parentConfig } = this.config;
130
179
  return new BullMQConnector({
131
- ...this.config,
180
+ ...parentConfig,
132
181
  tenantId,
133
- // Propagate pre-built Redis instance (cluster instances are safe to share)
134
- redisInstance: this.config.redisInstance,
182
+ // Propagate shared Redis instance when credentials match
183
+ redisInstance: sharedInstance ?? this.config.redisInstance,
135
184
  connection: {
136
185
  ...this.config.connection,
137
186
  // Override credentials if provided for stronger isolation
@@ -158,7 +207,7 @@ class BullMQConnector {
158
207
  return existing;
159
208
  }
160
209
  const queue = new bullmq_1.Queue(queueName, {
161
- connection: this.connectionOptions,
210
+ connection: this.getSharedConnection(),
162
211
  defaultJobOptions: this.defaultJobOptions,
163
212
  prefix: this._prefix,
164
213
  });
@@ -210,6 +259,7 @@ class BullMQConnector {
210
259
  }
211
260
  /**
212
261
  * Stops all workers and closes all queue connections.
262
+ * Also disconnects the shared ioredis client if one was created.
213
263
  */
214
264
  async close() {
215
265
  const closePromises = [];
@@ -222,6 +272,11 @@ class BullMQConnector {
222
272
  await Promise.all(closePromises);
223
273
  this.workers.clear();
224
274
  this.queues.clear();
275
+ // Disconnect the shared client (only if we created it, not if user provided redisInstance)
276
+ if (this._sharedClient && !this.config.redisInstance) {
277
+ this._sharedClient.disconnect();
278
+ this._sharedClient = null;
279
+ }
225
280
  }
226
281
  /**
227
282
  * Gets the status of a job by its ID.
@@ -462,11 +517,15 @@ class BullMQConnector {
462
517
  break;
463
518
  }
464
519
  const tempWorker = new bullmq_1.Worker(queueName, undefined, {
465
- connection: this.connectionOptions,
520
+ connection: this.getSharedConnection(),
466
521
  prefix: this._prefix,
467
522
  autorun: false,
468
523
  });
469
524
  try {
525
+ // Wait for the Worker's ioredis connection to be ready before
526
+ // calling getNextJob — otherwise it hangs or silently returns null
527
+ // when there's connection latency, auth delay, or TLS negotiation.
528
+ await tempWorker.waitUntilReady();
470
529
  while (Date.now() < deadline) {
471
530
  const job = await tempWorker.getNextJob('dispatch');
472
531
  if (!job) {
@@ -1 +1 @@
1
- {"version":3,"file":"BullMQConnector.js","sourceRoot":"","sources":["../src/BullMQConnector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BullMQConnector.js","sourceRoot":"","sources":["../src/BullMQConnector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Tests for processIncomingDispatch race condition fix.
3
+ *
4
+ * Uses a real Redis testcontainer (started by setup.ts globalSetup).
5
+ *
6
+ * The bug: processIncomingDispatch creates a temp Worker and immediately calls
7
+ * getNextJob() before the Worker's ioredis connection is ready. This causes
8
+ * getNextJob to hang indefinitely or silently return null.
9
+ *
10
+ * The fix: call `await tempWorker.waitUntilReady()` before `getNextJob()`.
11
+ *
12
+ * Run: npx vitest run ./src/processIncomingDispatch.spec.ts
13
+ */
14
+ export {};
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for processIncomingDispatch race condition fix.
4
+ *
5
+ * Uses a real Redis testcontainer (started by setup.ts globalSetup).
6
+ *
7
+ * The bug: processIncomingDispatch creates a temp Worker and immediately calls
8
+ * getNextJob() before the Worker's ioredis connection is ready. This causes
9
+ * getNextJob to hang indefinitely or silently return null.
10
+ *
11
+ * The fix: call `await tempWorker.waitUntilReady()` before `getNextJob()`.
12
+ *
13
+ * Run: npx vitest run ./src/processIncomingDispatch.spec.ts
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const vitest_1 = require("vitest");
17
+ const BullMQConnector_js_1 = require("./BullMQConnector.js");
18
+ const const_js_1 = require("./test/const.js");
19
+ const globalData = (0, const_js_1.getGlobalData)();
20
+ const REDIS_HOST = globalData.host || 'localhost';
21
+ const REDIS_PORT = globalData.port || 6379;
22
+ const TEST_PREFIX = `test:dispatch:${Date.now()}`;
23
+ (0, vitest_1.describe)('processIncomingDispatch', () => {
24
+ let connector;
25
+ (0, vitest_1.beforeAll)(() => {
26
+ connector = new BullMQConnector_js_1.BullMQConnector({
27
+ connection: {
28
+ host: REDIS_HOST,
29
+ port: REDIS_PORT,
30
+ maxRetriesPerRequest: null,
31
+ },
32
+ prefix: TEST_PREFIX,
33
+ });
34
+ });
35
+ (0, vitest_1.afterAll)(async () => {
36
+ await connector.close();
37
+ });
38
+ (0, vitest_1.it)('should pick up a job that was enqueued before dispatch is called', async () => {
39
+ const queueName = 'dispatch_race_test';
40
+ const jobData = { value: 'hello-from-race-test' };
41
+ await connector.addJob(queueName, 'test-job', jobData);
42
+ const counts = await connector.getJobCounts(queueName);
43
+ (0, vitest_1.expect)(counts.waiting).toBe(1);
44
+ let processedData = null;
45
+ const result = await connector.processIncomingDispatch({
46
+ handleTask: async (_name, data) => {
47
+ processedData = data;
48
+ return { ok: true };
49
+ },
50
+ timeBudgetMs: 10000,
51
+ validQueueNames: new Set([queueName]),
52
+ hint: { queueName },
53
+ });
54
+ (0, vitest_1.expect)(result.processed).toBe(1);
55
+ (0, vitest_1.expect)(result.failed).toBe(0);
56
+ (0, vitest_1.expect)(processedData).toEqual(jobData);
57
+ const countsAfter = await connector.getJobCounts(queueName);
58
+ (0, vitest_1.expect)(countsAfter.waiting).toBe(0);
59
+ });
60
+ (0, vitest_1.it)('should process multiple jobs across queues in one dispatch call', async () => {
61
+ const queue1 = 'dispatch_multi_q1';
62
+ const queue2 = 'dispatch_multi_q2';
63
+ await connector.addJob(queue1, 'job-a', { q: 1 });
64
+ await connector.addJob(queue2, 'job-b', { q: 2 });
65
+ const processed = [];
66
+ const result = await connector.processIncomingDispatch({
67
+ handleTask: async (name, _data) => {
68
+ processed.push(name);
69
+ return { ok: true };
70
+ },
71
+ timeBudgetMs: 10000,
72
+ validQueueNames: new Set([queue1, queue2]),
73
+ });
74
+ (0, vitest_1.expect)(result.processed).toBe(2);
75
+ (0, vitest_1.expect)(processed).toContain(queue1);
76
+ (0, vitest_1.expect)(processed).toContain(queue2);
77
+ });
78
+ (0, vitest_1.it)('should return 0 processed when no jobs exist', async () => {
79
+ const result = await connector.processIncomingDispatch({
80
+ handleTask: async () => ({ ok: true }),
81
+ timeBudgetMs: 5000,
82
+ validQueueNames: new Set(['empty_queue_test']),
83
+ });
84
+ (0, vitest_1.expect)(result.processed).toBe(0);
85
+ (0, vitest_1.expect)(result.failed).toBe(0);
86
+ });
87
+ (0, vitest_1.it)('should fail fast with bad credentials instead of hanging', async () => {
88
+ const badConnector = new BullMQConnector_js_1.BullMQConnector({
89
+ connection: {
90
+ host: REDIS_HOST,
91
+ port: REDIS_PORT,
92
+ password: 'wrong-password-intentionally',
93
+ maxRetriesPerRequest: 1,
94
+ retryStrategy: () => null,
95
+ },
96
+ prefix: TEST_PREFIX,
97
+ });
98
+ try {
99
+ await (0, vitest_1.expect)(badConnector.processIncomingDispatch({
100
+ handleTask: async () => ({ ok: true }),
101
+ timeBudgetMs: 5000,
102
+ validQueueNames: new Set(['should_not_reach']),
103
+ })).rejects.toThrow();
104
+ }
105
+ finally {
106
+ await badConnector.close().catch(() => { });
107
+ }
108
+ }, 15000);
109
+ });
110
+ //# sourceMappingURL=processIncomingDispatch.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processIncomingDispatch.spec.js","sourceRoot":"","sources":["../src/processIncomingDispatch.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Multi-tenant shared connection tests.
3
+ *
4
+ * Uses a real Redis testcontainer (started by setup.ts globalSetup).
5
+ *
6
+ * Simulates a realistic multi-tenant platform where:
7
+ * - Multiple tenants share a single Redis instance
8
+ * - Each tenant has multiple task queues (email, posts, notifications, etc.)
9
+ * - Jobs are enqueued via tenant-scoped connectors
10
+ * - Jobs are processed via processIncomingDispatch (on-demand, no persistent workers)
11
+ *
12
+ * Verifies O(1) Redis connections regardless of tenant/queue count.
13
+ *
14
+ * Run: npx vitest run ./src/sharedConnection.spec.ts
15
+ */
16
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ /**
3
+ * Multi-tenant shared connection tests.
4
+ *
5
+ * Uses a real Redis testcontainer (started by setup.ts globalSetup).
6
+ *
7
+ * Simulates a realistic multi-tenant platform where:
8
+ * - Multiple tenants share a single Redis instance
9
+ * - Each tenant has multiple task queues (email, posts, notifications, etc.)
10
+ * - Jobs are enqueued via tenant-scoped connectors
11
+ * - Jobs are processed via processIncomingDispatch (on-demand, no persistent workers)
12
+ *
13
+ * Verifies O(1) Redis connections regardless of tenant/queue count.
14
+ *
15
+ * Run: npx vitest run ./src/sharedConnection.spec.ts
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const tslib_1 = require("tslib");
19
+ const ioredis_1 = tslib_1.__importDefault(require("ioredis"));
20
+ const vitest_1 = require("vitest");
21
+ const BullMQConnector_js_1 = require("./BullMQConnector.js");
22
+ const const_js_1 = require("./test/const.js");
23
+ const globalData = (0, const_js_1.getGlobalData)();
24
+ const REDIS_HOST = globalData.host || 'localhost';
25
+ const REDIS_PORT = globalData.port || 6379;
26
+ const TEST_RUN = `test:mt:${Date.now()}`;
27
+ // ---------------------------------------------------------------------------
28
+ // Realistic task queues (simulates what a SaaS platform would register)
29
+ // ---------------------------------------------------------------------------
30
+ const TASK_QUEUES = [
31
+ 'process_post',
32
+ 'send_email',
33
+ 'notify_dispatch',
34
+ 'index_search',
35
+ 'generate_thumbnail',
36
+ 'process_payment',
37
+ 'sync_analytics',
38
+ 'broadcast_config',
39
+ ];
40
+ const TENANT_IDS = [
41
+ 'acme-corp',
42
+ 'globex',
43
+ 'initech',
44
+ 'umbrella',
45
+ 'stark-ind',
46
+ 'wayne-ent',
47
+ 'oscorp',
48
+ 'lexcorp',
49
+ 'daily-planet',
50
+ 'capsule-corp',
51
+ ];
52
+ /** Count connected Redis clients via CLIENT LIST */
53
+ async function countClients(redis) {
54
+ const list = await redis.client('LIST');
55
+ return list.split('\n').filter(l => l.trim()).length;
56
+ }
57
+ (0, vitest_1.describe)('Multi-Tenant Shared Connection', () => {
58
+ let monitor;
59
+ (0, vitest_1.beforeAll)(async () => {
60
+ monitor = new ioredis_1.default({
61
+ host: REDIS_HOST,
62
+ port: REDIS_PORT,
63
+ maxRetriesPerRequest: null,
64
+ });
65
+ await monitor.ping();
66
+ });
67
+ (0, vitest_1.afterAll)(async () => {
68
+ monitor.disconnect();
69
+ });
70
+ (0, vitest_1.it)('10 tenants x 8 queues = 80 Queue instances should use O(1) connections', async () => {
71
+ const clientsBefore = await countClients(monitor);
72
+ const platform = new BullMQConnector_js_1.BullMQConnector({
73
+ connection: {
74
+ host: REDIS_HOST,
75
+ port: REDIS_PORT,
76
+ maxRetriesPerRequest: null,
77
+ },
78
+ prefix: `${TEST_RUN}:platform`,
79
+ });
80
+ const tenantConnectors = [];
81
+ for (const tenantId of TENANT_IDS) {
82
+ const tc = platform.forTenant(tenantId);
83
+ tenantConnectors.push(tc);
84
+ for (const queue of TASK_QUEUES) {
85
+ await tc.addJob(queue, `${queue}-job`, {
86
+ tenantId,
87
+ queue,
88
+ payload: `data for ${tenantId}/${queue}`,
89
+ });
90
+ }
91
+ }
92
+ await new Promise(r => setTimeout(r, 500));
93
+ const clientsAfter = await countClients(monitor);
94
+ const newConns = clientsAfter - clientsBefore;
95
+ console.log(`[O(1) Test] ${TENANT_IDS.length} tenants x ${TASK_QUEUES.length} queues ` +
96
+ `= ${TENANT_IDS.length * TASK_QUEUES.length} Queue instances → ` +
97
+ `${newConns} new Redis connections`);
98
+ // O(1): should be 1-3, NOT 80
99
+ (0, vitest_1.expect)(newConns).toBeLessThanOrEqual(5);
100
+ // Verify jobs were enqueued with correct per-tenant isolation
101
+ for (const tc of tenantConnectors) {
102
+ for (const queue of TASK_QUEUES) {
103
+ const counts = await tc.getJobCounts(queue);
104
+ (0, vitest_1.expect)(counts.waiting).toBe(1);
105
+ }
106
+ }
107
+ for (const tc of tenantConnectors) {
108
+ await tc.close();
109
+ }
110
+ await platform.close();
111
+ }, 30000);
112
+ (0, vitest_1.it)('processIncomingDispatch respects tenant isolation', async () => {
113
+ const platform = new BullMQConnector_js_1.BullMQConnector({
114
+ connection: {
115
+ host: REDIS_HOST,
116
+ port: REDIS_PORT,
117
+ maxRetriesPerRequest: null,
118
+ },
119
+ prefix: `${TEST_RUN}:isolation`,
120
+ });
121
+ const tenants = ['tenant-a', 'tenant-b', 'tenant-c'];
122
+ const connectors = tenants.map(t => platform.forTenant(t));
123
+ // Each tenant enqueues 1 job to process_post
124
+ for (let i = 0; i < tenants.length; i++) {
125
+ await connectors[i].addJob('process_post', 'post-job', {
126
+ content: `Post from ${tenants[i]}`,
127
+ });
128
+ }
129
+ // Process ONLY tenant-b
130
+ const processed = [];
131
+ const result = await connectors[1].processIncomingDispatch({
132
+ handleTask: async (_queue, data) => {
133
+ processed.push(data);
134
+ return { ok: true };
135
+ },
136
+ timeBudgetMs: 5000,
137
+ validQueueNames: new Set(['process_post']),
138
+ });
139
+ (0, vitest_1.expect)(result.processed).toBe(1);
140
+ (0, vitest_1.expect)(processed).toHaveLength(1);
141
+ (0, vitest_1.expect)(processed[0].content).toBe('Post from tenant-b');
142
+ // Other tenants' jobs untouched
143
+ (0, vitest_1.expect)((await connectors[0].getJobCounts('process_post')).waiting).toBe(1);
144
+ (0, vitest_1.expect)((await connectors[2].getJobCounts('process_post')).waiting).toBe(1);
145
+ for (const c of connectors) {
146
+ await c.close();
147
+ }
148
+ await platform.close();
149
+ }, 15000);
150
+ (0, vitest_1.it)('full dispatch cycle: 5 tenants x 3 queues, enqueue + process', async () => {
151
+ const clientsBefore = await countClients(monitor);
152
+ const platform = new BullMQConnector_js_1.BullMQConnector({
153
+ connection: {
154
+ host: REDIS_HOST,
155
+ port: REDIS_PORT,
156
+ maxRetriesPerRequest: null,
157
+ },
158
+ prefix: `${TEST_RUN}:fullcycle`,
159
+ });
160
+ const tenants = ['shop-1', 'shop-2', 'shop-3', 'shop-4', 'shop-5'];
161
+ const queues = ['send_email', 'process_payment', 'sync_analytics'];
162
+ const connectors = tenants.map(t => platform.forTenant(t));
163
+ // Enqueue 3 jobs per tenant
164
+ for (let i = 0; i < tenants.length; i++) {
165
+ for (const q of queues) {
166
+ await connectors[i].addJob(q, `${q}-job`, {
167
+ tenant: tenants[i],
168
+ type: q,
169
+ });
170
+ }
171
+ }
172
+ // Process each tenant independently (simulating dispatch endpoint)
173
+ const allResults = [];
174
+ for (let i = 0; i < tenants.length; i++) {
175
+ const r = await connectors[i].processIncomingDispatch({
176
+ handleTask: async () => ({ done: true }),
177
+ timeBudgetMs: 5000,
178
+ validQueueNames: new Set(queues),
179
+ });
180
+ allResults.push({ tenant: tenants[i], processed: r.processed });
181
+ }
182
+ // Each tenant processed exactly 3 jobs
183
+ for (const r of allResults) {
184
+ (0, vitest_1.expect)(r.processed).toBe(3);
185
+ }
186
+ // Connections still O(1)
187
+ await new Promise(r => setTimeout(r, 300));
188
+ const clientsAfter = await countClients(monitor);
189
+ const newConns = clientsAfter - clientsBefore;
190
+ console.log(`[Full Cycle] 5 tenants x 3 queues, enqueue + dispatch → ` +
191
+ `${newConns} Redis connections`);
192
+ (0, vitest_1.expect)(newConns).toBeLessThanOrEqual(5);
193
+ for (const c of connectors) {
194
+ await c.close();
195
+ }
196
+ await platform.close();
197
+ }, 30000);
198
+ (0, vitest_1.it)('empty dispatch across 8 queues uses shared connection', async () => {
199
+ const clientsBefore = await countClients(monitor);
200
+ const platform = new BullMQConnector_js_1.BullMQConnector({
201
+ connection: {
202
+ host: REDIS_HOST,
203
+ port: REDIS_PORT,
204
+ maxRetriesPerRequest: null,
205
+ },
206
+ prefix: `${TEST_RUN}:empty`,
207
+ });
208
+ const tc = platform.forTenant('ghost-tenant');
209
+ const result = await tc.processIncomingDispatch({
210
+ handleTask: async () => ({ ok: true }),
211
+ timeBudgetMs: 3000,
212
+ validQueueNames: new Set(TASK_QUEUES),
213
+ });
214
+ (0, vitest_1.expect)(result.processed).toBe(0);
215
+ (0, vitest_1.expect)(result.failed).toBe(0);
216
+ await new Promise(r => setTimeout(r, 200));
217
+ const clientsAfter = await countClients(monitor);
218
+ const newConns = clientsAfter - clientsBefore;
219
+ console.log(`[Empty Dispatch] 8 queues scanned → ${newConns} connections`);
220
+ (0, vitest_1.expect)(newConns).toBeLessThanOrEqual(3);
221
+ await tc.close();
222
+ await platform.close();
223
+ }, 15000);
224
+ });
225
+ //# sourceMappingURL=sharedConnection.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharedConnection.spec.js","sourceRoot":"","sources":["../src/sharedConnection.spec.ts"],"names":[],"mappings":"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"}