@venturekit/runtime 0.0.0-dev.20260522121000 → 0.0.0-dev.20260525024212

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 (40) hide show
  1. package/dist/handler/context.d.ts +29 -0
  2. package/dist/handler/context.d.ts.map +1 -1
  3. package/dist/handler/context.js +16 -0
  4. package/dist/handler/context.js.map +1 -1
  5. package/dist/handler/handler.d.ts +17 -2
  6. package/dist/handler/handler.d.ts.map +1 -1
  7. package/dist/handler/handler.js +35 -19
  8. package/dist/handler/handler.js.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +1 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/patterns/queue.d.ts +11 -17
  14. package/dist/patterns/queue.d.ts.map +1 -1
  15. package/dist/patterns/queue.js +57 -31
  16. package/dist/patterns/queue.js.map +1 -1
  17. package/dist/patterns.d.ts +4 -2
  18. package/dist/patterns.d.ts.map +1 -1
  19. package/dist/patterns.js +4 -1
  20. package/dist/patterns.js.map +1 -1
  21. package/dist/queue/drivers/redis.d.ts +47 -0
  22. package/dist/queue/drivers/redis.d.ts.map +1 -0
  23. package/dist/queue/drivers/redis.js +315 -0
  24. package/dist/queue/drivers/redis.js.map +1 -0
  25. package/dist/queue/index.d.ts +10 -0
  26. package/dist/queue/index.d.ts.map +1 -0
  27. package/dist/queue/index.js +10 -0
  28. package/dist/queue/index.js.map +1 -0
  29. package/dist/queue/types.d.ts +91 -0
  30. package/dist/queue/types.d.ts.map +1 -0
  31. package/dist/queue/types.js +12 -0
  32. package/dist/queue/types.js.map +1 -0
  33. package/dist/testing/test-utils.d.ts.map +1 -1
  34. package/dist/testing/test-utils.js +1 -0
  35. package/dist/testing/test-utils.js.map +1 -1
  36. package/dist/ws/ws.d.ts +42 -0
  37. package/dist/ws/ws.d.ts.map +1 -1
  38. package/dist/ws/ws.js +49 -0
  39. package/dist/ws/ws.js.map +1 -1
  40. package/package.json +13 -4
@@ -0,0 +1,315 @@
1
+ /**
2
+ * Redis Queue Driver
3
+ *
4
+ * Implements SQS-compatible semantics on Redis for local development:
5
+ *
6
+ * - **Visible queue** (`<prefix>:<queueId>:visible`) — ZSET keyed by the time a
7
+ * message became eligible for delivery.
8
+ * - **Inflight queue** (`<prefix>:<queueId>:inflight`) — ZSET keyed by the
9
+ * visibility deadline. Reclaimed back to `:visible` once expired.
10
+ * - **Delayed queue** (`<prefix>:<queueId>:delayed`) — ZSET keyed by the
11
+ * absolute time the message should become visible.
12
+ * - **DLQ** (`<prefix>:<queueId>:dlq`) — LIST. Populated by the driver
13
+ * *only* via `moveToDeadLetter()`; callers must invoke this explicitly.
14
+ * - **Message hash** (`<prefix>:<queueId>:msg:<msgId>`) — body + counters.
15
+ *
16
+ * Concurrency:
17
+ * - `receiveMessage` uses a Lua script to atomically move N messages from
18
+ * `:visible` to `:inflight`, eliminating the classic "two consumers see the
19
+ * same `ZRANGE` and both think they won" race.
20
+ * - `changeMessageVisibility` also uses a Lua script so callers can pass
21
+ * `{ visibilityTimeout: 0 }` to *immediately* release a message back to the
22
+ * visible queue (matching SQS `ChangeMessageVisibility` semantics).
23
+ *
24
+ * Trace propagation:
25
+ * - The driver is trace-agnostic. Callers bake the trace context into the
26
+ * message body before calling `sendMessage`.
27
+ */
28
+ import * as crypto from 'crypto';
29
+ import { Redis } from 'ioredis';
30
+ // ---------------------------------------------------------------------------
31
+ // Lua scripts
32
+ // ---------------------------------------------------------------------------
33
+ /**
34
+ * Atomically claim up to `maxMessages` from `:visible` and place them in
35
+ * `:inflight` with the given visibility deadline. Returns the list of claimed
36
+ * message IDs (possibly empty).
37
+ *
38
+ * KEYS[1] = visibleKey, KEYS[2] = inflightKey
39
+ * ARGV[1] = visibleUntil (ms epoch), ARGV[2] = maxMessages
40
+ */
41
+ const CLAIM_SCRIPT = `
42
+ local msgIds = redis.call('ZRANGE', KEYS[1], 0, tonumber(ARGV[2]) - 1)
43
+ if #msgIds == 0 then return {} end
44
+ redis.call('ZREM', KEYS[1], unpack(msgIds))
45
+ local addArgs = {}
46
+ for _, msgId in ipairs(msgIds) do
47
+ table.insert(addArgs, ARGV[1])
48
+ table.insert(addArgs, msgId)
49
+ end
50
+ redis.call('ZADD', KEYS[2], unpack(addArgs))
51
+ return msgIds
52
+ `;
53
+ /**
54
+ * Atomically change a message's visibility. If `visibilityTimeout = 0`, move
55
+ * the message from `:inflight` back to `:visible` so the next `receiveMessage`
56
+ * picks it up. Otherwise, update its visibility deadline in `:inflight`.
57
+ *
58
+ * KEYS[1] = inflightKey, KEYS[2] = visibleKey
59
+ * ARGV[1] = msgId, ARGV[2] = now (ms epoch), ARGV[3] = newVisibleUntil (ms epoch)
60
+ * ARGV[4] = '1' to move back to visible, '0' to keep in inflight
61
+ */
62
+ const CHANGE_VISIBILITY_SCRIPT = `
63
+ local exists = redis.call('ZSCORE', KEYS[1], ARGV[1])
64
+ if not exists then return 0 end
65
+ redis.call('ZREM', KEYS[1], ARGV[1])
66
+ if ARGV[4] == '1' then
67
+ redis.call('ZADD', KEYS[2], ARGV[2], ARGV[1])
68
+ else
69
+ redis.call('ZADD', KEYS[1], ARGV[3], ARGV[1])
70
+ end
71
+ return 1
72
+ `;
73
+ // ---------------------------------------------------------------------------
74
+ // Factory
75
+ // ---------------------------------------------------------------------------
76
+ /**
77
+ * Resolve the Redis connection URL. Priority:
78
+ * 1. `options.url`
79
+ * 2. `VENTURE_REDIS_URL`
80
+ * 3. `VENTURE_QUEUE_REDIS_HOST` + `VENTURE_QUEUE_REDIS_PORT` (set by the
81
+ * CLI's `docker-compose` wiring when at least one queue intent is
82
+ * declared).
83
+ * 4. `redis://localhost:6379`
84
+ */
85
+ function resolveRedisUrl(explicit) {
86
+ if (explicit)
87
+ return explicit;
88
+ if (process.env.VENTURE_REDIS_URL)
89
+ return process.env.VENTURE_REDIS_URL;
90
+ const host = process.env.VENTURE_QUEUE_REDIS_HOST;
91
+ const port = process.env.VENTURE_QUEUE_REDIS_PORT;
92
+ if (host)
93
+ return `redis://${host}:${port || '6379'}`;
94
+ return 'redis://localhost:6379';
95
+ }
96
+ export function createRedisDriver(options = {}) {
97
+ const url = resolveRedisUrl(options.url);
98
+ const keyPrefix = options.keyPrefix || 'vk:q';
99
+ const queues = options.queues || {};
100
+ const reclaimIntervalMs = options.reclaimIntervalMs ?? 1000;
101
+ const redis = options.client ?? new Redis(url, {
102
+ // Avoid noisy `MaxRetriesPerRequestError` spam when Redis is briefly
103
+ // unavailable during `docker compose up`. ioredis still reconnects in the
104
+ // background.
105
+ maxRetriesPerRequest: 3,
106
+ enableReadyCheck: false,
107
+ lazyConnect: false,
108
+ });
109
+ // Connection-error logging — without this, a missing Redis container fails
110
+ // silently and the dev server just sits there with empty queues.
111
+ redis.on('error', (err) => {
112
+ if (process.env.NODE_ENV !== 'test') {
113
+ console.error(`[redis-queue] ${err.message}`);
114
+ }
115
+ });
116
+ function keyVisible(queueId) { return `${keyPrefix}:${queueId}:visible`; }
117
+ function keyInflight(queueId) { return `${keyPrefix}:${queueId}:inflight`; }
118
+ function keyDelayed(queueId) { return `${keyPrefix}:${queueId}:delayed`; }
119
+ function keyDlq(queueId) { return `${keyPrefix}:${queueId}:dlq`; }
120
+ function keyMsg(queueId, msgId) { return `${keyPrefix}:${queueId}:msg:${msgId}`; }
121
+ // ─────────────────────────────────────────────────────────────────────────
122
+ // Reclaim sweep: expired-inflight → visible
123
+ // The driver never DLQs autonomously. DLQ decisions are owned by the
124
+ // consumer (see `moveToDeadLetter` via `purgeQueue` cleanup, or the CLI's
125
+ // explicit failure path). This keeps the model simple and matches SQS.
126
+ // ─────────────────────────────────────────────────────────────────────────
127
+ let reclaimTimer = null;
128
+ let closed = false;
129
+ async function reclaimExpiredMessages() {
130
+ if (closed)
131
+ return;
132
+ const now = Date.now();
133
+ for (const queueId of Object.keys(queues)) {
134
+ const inflightKey = keyInflight(queueId);
135
+ const visibleKey = keyVisible(queueId);
136
+ // Atomic in-Redis: move every member with score <= now from inflight to visible.
137
+ // Using a single MULTI block instead of N round-trips per msg.
138
+ const expired = await redis.zrangebyscore(inflightKey, 0, now);
139
+ if (expired.length === 0)
140
+ continue;
141
+ const pipeline = redis.multi();
142
+ pipeline.zrem(inflightKey, ...expired);
143
+ for (const msgId of expired) {
144
+ pipeline.zadd(visibleKey, now, msgId);
145
+ }
146
+ await pipeline.exec();
147
+ }
148
+ }
149
+ function startReclaim() {
150
+ if (reclaimTimer || closed)
151
+ return;
152
+ reclaimTimer = setInterval(() => {
153
+ reclaimExpiredMessages().catch((err) => {
154
+ if (process.env.NODE_ENV !== 'test') {
155
+ console.error('[redis-queue] reclaim sweep failed:', err);
156
+ }
157
+ });
158
+ }, reclaimIntervalMs);
159
+ // Don't keep the Node process alive solely for this timer.
160
+ if (typeof reclaimTimer.unref === 'function') {
161
+ reclaimTimer.unref();
162
+ }
163
+ }
164
+ startReclaim();
165
+ // ─────────────────────────────────────────────────────────────────────────
166
+ // Driver implementation
167
+ // ─────────────────────────────────────────────────────────────────────────
168
+ const driver = {
169
+ name: 'redis',
170
+ async sendMessage(queueId, body, sendOptions) {
171
+ const messageId = crypto.randomUUID();
172
+ const delaySeconds = sendOptions?.delaySeconds ?? 0;
173
+ const now = Date.now();
174
+ const visibleAt = now + delaySeconds * 1000;
175
+ const msgKey = keyMsg(queueId, messageId);
176
+ const pipeline = redis.multi();
177
+ pipeline.hset(msgKey, {
178
+ body: JSON.stringify(body),
179
+ receiveCount: '0',
180
+ sentTimestamp: String(now),
181
+ firstReceiveTimestamp: '0',
182
+ });
183
+ if (delaySeconds > 0) {
184
+ pipeline.zadd(keyDelayed(queueId), visibleAt, messageId);
185
+ }
186
+ else {
187
+ pipeline.zadd(keyVisible(queueId), now, messageId);
188
+ }
189
+ await pipeline.exec();
190
+ return { messageId };
191
+ },
192
+ async sendMessages(queueId, bodies, sendOptions) {
193
+ const results = [];
194
+ for (const body of bodies) {
195
+ results.push(await driver.sendMessage(queueId, body, sendOptions));
196
+ }
197
+ return results;
198
+ },
199
+ async receiveMessage(queueId, receiveOptions) {
200
+ const maxMessages = receiveOptions?.maxMessages ?? 1;
201
+ const visibilityTimeout = receiveOptions?.visibilityTimeout ?? 30;
202
+ const now = Date.now();
203
+ // Promote any delayed messages whose time has come.
204
+ const delayedKey = keyDelayed(queueId);
205
+ const visibleKey = keyVisible(queueId);
206
+ const readyDelayed = await redis.zrangebyscore(delayedKey, 0, now);
207
+ if (readyDelayed.length > 0) {
208
+ const promote = redis.multi();
209
+ promote.zrem(delayedKey, ...readyDelayed);
210
+ for (const msgId of readyDelayed) {
211
+ promote.zadd(visibleKey, now, msgId);
212
+ }
213
+ await promote.exec();
214
+ }
215
+ // Atomically claim up to `maxMessages` from visible → inflight.
216
+ const visibleUntil = now + visibilityTimeout * 1000;
217
+ const claimed = (await redis.eval(CLAIM_SCRIPT, 2, visibleKey, keyInflight(queueId), String(visibleUntil), String(maxMessages)));
218
+ if (!claimed || claimed.length === 0)
219
+ return [];
220
+ const messages = [];
221
+ for (const msgId of claimed) {
222
+ const msgKey = keyMsg(queueId, msgId);
223
+ const data = await redis.hgetall(msgKey);
224
+ if (!data || !data.body) {
225
+ // Orphaned: in inflight but no body. Drop from inflight; nothing else to do.
226
+ await redis.zrem(keyInflight(queueId), msgId);
227
+ continue;
228
+ }
229
+ const receiveCount = parseInt(data.receiveCount || '0', 10) + 1;
230
+ const firstReceive = data.firstReceiveTimestamp === '0' ? now : parseInt(data.firstReceiveTimestamp, 10);
231
+ await redis.hset(msgKey, {
232
+ receiveCount: String(receiveCount),
233
+ firstReceiveTimestamp: String(firstReceive),
234
+ });
235
+ let parsedBody;
236
+ try {
237
+ parsedBody = JSON.parse(data.body);
238
+ }
239
+ catch {
240
+ parsedBody = data.body;
241
+ }
242
+ messages.push({
243
+ messageId: msgId,
244
+ receiptHandle: `${msgId}:${visibleUntil}`,
245
+ body: parsedBody,
246
+ approximateReceiveCount: receiveCount,
247
+ sentTimestamp: parseInt(data.sentTimestamp || String(now), 10),
248
+ approximateFirstReceiveTimestamp: firstReceive,
249
+ });
250
+ }
251
+ return messages;
252
+ },
253
+ async deleteMessage(queueId, receiptHandle) {
254
+ const [msgId] = receiptHandle.split(':');
255
+ if (!msgId)
256
+ return;
257
+ const pipeline = redis.multi();
258
+ pipeline.zrem(keyInflight(queueId), msgId);
259
+ pipeline.del(keyMsg(queueId, msgId));
260
+ await pipeline.exec();
261
+ },
262
+ async changeMessageVisibility(queueId, receiptHandle, visibilityOptions) {
263
+ if (!visibilityOptions || typeof visibilityOptions.visibilityTimeout !== 'number') {
264
+ throw new TypeError('changeMessageVisibility requires { visibilityTimeout: number }; got ' + JSON.stringify(visibilityOptions));
265
+ }
266
+ const [msgId] = receiptHandle.split(':');
267
+ if (!msgId)
268
+ return;
269
+ const now = Date.now();
270
+ const newVisibleUntil = now + visibilityOptions.visibilityTimeout * 1000;
271
+ const moveToVisible = visibilityOptions.visibilityTimeout === 0 ? '1' : '0';
272
+ await redis.eval(CHANGE_VISIBILITY_SCRIPT, 2, keyInflight(queueId), keyVisible(queueId), msgId, String(now), String(newVisibleUntil), moveToVisible);
273
+ },
274
+ async purgeQueue(queueId) {
275
+ const msgKeys = await redis.keys(`${keyPrefix}:${queueId}:msg:*`);
276
+ const pipeline = redis.multi();
277
+ if (msgKeys.length > 0)
278
+ pipeline.del(...msgKeys);
279
+ pipeline.del(keyVisible(queueId));
280
+ pipeline.del(keyInflight(queueId));
281
+ pipeline.del(keyDelayed(queueId));
282
+ pipeline.del(keyDlq(queueId));
283
+ await pipeline.exec();
284
+ },
285
+ async getQueueStats(queueId) {
286
+ const [pending, inflight, delayed] = await Promise.all([
287
+ redis.zcard(keyVisible(queueId)),
288
+ redis.zcard(keyInflight(queueId)),
289
+ redis.zcard(keyDelayed(queueId)),
290
+ ]);
291
+ return {
292
+ approximateMessageCount: pending,
293
+ approximateInflightCount: inflight,
294
+ approximateDelayedCount: delayed,
295
+ };
296
+ },
297
+ async close() {
298
+ if (closed)
299
+ return;
300
+ closed = true;
301
+ if (reclaimTimer) {
302
+ clearInterval(reclaimTimer);
303
+ reclaimTimer = null;
304
+ }
305
+ try {
306
+ await redis.quit();
307
+ }
308
+ catch {
309
+ // ioredis throws if the connection was already dropped — ignore.
310
+ }
311
+ },
312
+ };
313
+ return driver;
314
+ }
315
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/queue/drivers/redis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Queue Module Barrel Export
3
+ *
4
+ * Public surface for `@venturekit/runtime/queue`. The Redis driver is the only
5
+ * concrete driver shipped today — SQS lives behind `patterns/queue.ts`'s
6
+ * lazily-loaded `@aws-sdk/client-sqs` path.
7
+ */
8
+ export * from './types.js';
9
+ export { createRedisDriver } from './drivers/redis.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Queue Module Barrel Export
3
+ *
4
+ * Public surface for `@venturekit/runtime/queue`. The Redis driver is the only
5
+ * concrete driver shipped today — SQS lives behind `patterns/queue.ts`'s
6
+ * lazily-loaded `@aws-sdk/client-sqs` path.
7
+ */
8
+ export * from './types.js';
9
+ export { createRedisDriver } from './drivers/redis.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Queue Driver Types
3
+ *
4
+ * Unified interface for queue implementations (SQS and Redis-backed local dev).
5
+ * The public `SendMessageOptions.trace` keeps the existing `TraceContext` shape
6
+ * so this refactor is non-breaking for consumers of
7
+ * `@venturekit/runtime/patterns`. Trace metadata is baked into the message body
8
+ * by the caller (`buildTracePayload` in `patterns/queue.ts`); the driver layer
9
+ * itself is trace-agnostic.
10
+ */
11
+ import type { TraceContext } from '../logging/tracing.js';
12
+ export interface SendMessageOptions {
13
+ /** Delay delivery in seconds (0–900). Default: 0 */
14
+ delaySeconds?: number;
15
+ /** Message group ID (required for FIFO queues) */
16
+ messageGroupId?: string;
17
+ /** Message deduplication ID (FIFO queues — auto-generated if omitted) */
18
+ deduplicationId?: string;
19
+ /** Trace context to propagate (auto-detected if omitted) */
20
+ trace?: TraceContext;
21
+ }
22
+ export interface SendMessageResult {
23
+ /** Message ID */
24
+ messageId: string;
25
+ }
26
+ export interface ReceiveMessageOptions {
27
+ /** Maximum number of messages to return (1–10). Default: 1 */
28
+ maxMessages?: number;
29
+ /** Visibility timeout in seconds. Default: 30 */
30
+ visibilityTimeout?: number;
31
+ /** Long polling wait time in seconds (0–20). Default: 0 */
32
+ waitTimeSeconds?: number;
33
+ }
34
+ export interface ChangeVisibilityOptions {
35
+ /** New visibility timeout in seconds. `0` makes the message visible immediately. */
36
+ visibilityTimeout: number;
37
+ }
38
+ export interface QueueMessage {
39
+ /** Message ID */
40
+ messageId: string;
41
+ /** Receipt handle for delete/change-visibility operations */
42
+ receiptHandle: string;
43
+ /** Message body (parsed JSON if stored as JSON, otherwise raw) */
44
+ body: unknown;
45
+ /** Number of times this message has been received */
46
+ approximateReceiveCount: number;
47
+ /** Timestamp when message was sent */
48
+ sentTimestamp: number;
49
+ /** Timestamp of first receive */
50
+ approximateFirstReceiveTimestamp: number;
51
+ }
52
+ export interface QueueStats {
53
+ /** Approximate number of messages pending delivery */
54
+ approximateMessageCount: number;
55
+ /** Approximate number of messages currently in-flight (hidden by visibility timeout) */
56
+ approximateInflightCount: number;
57
+ /** Approximate number of delayed messages (waiting for delaySeconds to expire) */
58
+ approximateDelayedCount: number;
59
+ }
60
+ export interface QueueConfig {
61
+ /** Queue ID */
62
+ id: string;
63
+ /** Visibility timeout in seconds */
64
+ visibilityTimeout: number;
65
+ /** Maximum receive count before DLQ */
66
+ maxReceiveCount: number;
67
+ }
68
+ export interface QueueDriver {
69
+ /** Driver name */
70
+ name: string;
71
+ /** Send a single message */
72
+ sendMessage(queueId: string, body: unknown, options?: SendMessageOptions): Promise<SendMessageResult>;
73
+ /** Send multiple messages (up to 10) */
74
+ sendMessages(queueId: string, bodies: unknown[], options?: SendMessageOptions): Promise<SendMessageResult[]>;
75
+ /** Receive messages */
76
+ receiveMessage(queueId: string, options?: ReceiveMessageOptions): Promise<QueueMessage[]>;
77
+ /** Delete a message (acknowledge) */
78
+ deleteMessage(queueId: string, receiptHandle: string): Promise<void>;
79
+ /**
80
+ * Change message visibility timeout. Passing `{ visibilityTimeout: 0 }`
81
+ * returns the message to the visible queue immediately (SQS semantics).
82
+ */
83
+ changeMessageVisibility(queueId: string, receiptHandle: string, options: ChangeVisibilityOptions): Promise<void>;
84
+ /** Purge all messages from a queue */
85
+ purgeQueue(queueId: string): Promise<void>;
86
+ /** Get queue statistics */
87
+ getQueueStats(queueId: string): Promise<QueueStats>;
88
+ /** Close driver connections */
89
+ close(): Promise<void>;
90
+ }
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,oFAAoF;IACpF,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,IAAI,EAAE,OAAO,CAAC;IACd,qDAAqD;IACrD,uBAAuB,EAAE,MAAM,CAAC;IAChC,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,iCAAiC;IACjC,gCAAgC,EAAE,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,uBAAuB,EAAE,MAAM,CAAC;IAChC,wFAAwF;IACxF,wBAAwB,EAAE,MAAM,CAAC;IACjC,kFAAkF;IAClF,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IACX,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACtG,wCAAwC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC7G,uBAAuB;IACvB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC1F,qCAAqC;IACrC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjH,sCAAsC;IACtC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,2BAA2B;IAC3B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,+BAA+B;IAC/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Queue Driver Types
3
+ *
4
+ * Unified interface for queue implementations (SQS and Redis-backed local dev).
5
+ * The public `SendMessageOptions.trace` keeps the existing `TraceContext` shape
6
+ * so this refactor is non-breaking for consumers of
7
+ * `@venturekit/runtime/patterns`. Trace metadata is baked into the message body
8
+ * by the caller (`buildTracePayload` in `patterns/queue.ts`); the driver layer
9
+ * itself is trace-agnostic.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"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"}
@@ -103,6 +103,7 @@ export function mockContext(options = {}) {
103
103
  queryParams: options.queryParams,
104
104
  isInternal: options.isInternal ?? false,
105
105
  invokeId: options.invokeId,
106
+ cookies: [],
106
107
  };
107
108
  }
108
109
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAkB9C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,UAA4B,EAAE;IACtD,MAAM,EACJ,MAAM,GAAG,KAAK,EACd,IAAI,GAAG,OAAO,EACd,IAAI,EACJ,OAAO,GAAG,EAAE,EACZ,qBAAqB,EACrB,cAAc,EACd,QAAQ,GAAG,WAAW,EACtB,SAAS,GAAG,QAAQ,EACpB,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,MAAM,KAAK,GAA2B;QACpC,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE;QAC7B,OAAO,EAAE,IAAI;QACb,cAAc,EAAE,qBAAqB;YACnC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC9E,CAAC,CAAC,EAAE;QACN,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,YAAY,EAAE,SAAS;YACvB,GAAG,OAAO;SACX;QACD,cAAc,EAAE;YACd,SAAS,EAAE,cAAc;YACzB,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE;gBACJ,MAAM;gBACN,IAAI;gBACJ,QAAQ,EAAE,UAAU;gBACpB,QAAQ;gBACR,SAAS;aACV;YACD,SAAS,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;YAC/B,QAAQ,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE;YAC7B,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACX,UAAU,EAAE;oBACV,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;iBAC5B;aACF,CAAC,CAAC,CAAC,EAAE,CAAC;SACD;QACR,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAC3D,eAAe,EAAE,KAAK;KACvB,CAAC;IAEF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,KAAK,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACtD,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;IACxC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,8BAA8B,EAAE,IAAI;QACpC,YAAY,EAAE,eAAe;QAC7B,eAAe,EAAE,SAAS;QAC1B,kBAAkB,EAAE,8DAA8D;QAClF,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;QAClC,YAAY,EAAE,2BAA2B;QACzC,aAAa,EAAE,0BAA0B;QACzC,wBAAwB,EAAE,GAAG,EAAE,CAAC,KAAK;QACrC,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAmBD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,UAA8B,EAAE;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,WAAW;QAClC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;QACzB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;QACjC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE;KAClC,CAAC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,aAAa;QACtC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI;QACzB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE;KACxC,CAAC,CAAC,CAAC,IAAI,CAAC;IAET,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;QACpD,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;QAC7B,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,WAAW;QACzC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,QAAQ;QACxC,IAAI;QACJ,MAAM;QACN,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC9B,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QACnE,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAWD;;;GAGG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAEzD,4CAA4C;IAC5C,MAAM,OAAO,GAAG,CAAC,KAA2B,EAAE,EAAE,CAAC,CAAC,OAAe,EAAE,IAA8B,EAAE,EAAE;QACnG,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxC,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAExC,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;QACnC,IAAI;QACJ,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KAClC,CAAC,CAAC;AACL,CAAC;AAeD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAC/B,aAAoG;IAEpG,OAAO,KAAK,EAAE,UAA6B,EAAE,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"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"}
package/dist/ws/ws.d.ts CHANGED
@@ -35,6 +35,19 @@
35
35
  * TTL attribute: ttl
36
36
  * GSI: userId-index (partition key: userId)
37
37
  * GSI: tenantId-index (partition key: tenantId) — only if multi-tenancy enabled
38
+ *
39
+ * Local-dev delegation:
40
+ * When `globalThis.__VK_LOCAL_WS_HUB__` is set (the `vk dev` server
41
+ * installs it before invoking user handlers), every method on
42
+ * `connectionStore` delegates to the hub instead of touching
43
+ * DynamoDB / API Gateway. The hub keeps an in-memory registry plus
44
+ * live `WebSocket` references in the dev-server process, so a
45
+ * `postToConnection` call resolves to a direct `ws.send` with no
46
+ * network hop — matching the production behavior with zero AWS
47
+ * dependencies. See `@venturekit/cli`'s `local-ws.ts` for the hub
48
+ * implementation. The check is per-method (vs at module init) so
49
+ * the hub can be installed AFTER this module has been imported by
50
+ * user code via jiti, which is what actually happens in `vk dev`.
38
51
  */
39
52
  export interface ConnectionRecord {
40
53
  connectionId: string;
@@ -53,6 +66,34 @@ export interface ConnectionMetadata {
53
66
  email?: string;
54
67
  [key: string]: unknown;
55
68
  }
69
+ /**
70
+ * Process-local WebSocket hub interface — installed by `@venturekit/cli`'s
71
+ * `vk dev` server on `globalThis.__VK_LOCAL_WS_HUB__`. Every method on
72
+ * the public `connectionStore` checks for the hub and delegates to it
73
+ * when present, bypassing DynamoDB + API Gateway entirely.
74
+ *
75
+ * Why a global (vs an env var + module init swap): jiti imports this
76
+ * module from inside user handler code, so the swap has to be live
77
+ * AFTER imports resolve. A per-method check keeps the existing
78
+ * DynamoDB path identical when the hub is absent (production / tests
79
+ * that don't install the hub).
80
+ */
81
+ interface LocalWsHub {
82
+ save(connectionId: string): Promise<void>;
83
+ authenticate(connectionId: string, metadata: ConnectionMetadata): Promise<void>;
84
+ remove(connectionId: string): Promise<void>;
85
+ get(connectionId: string): Promise<ConnectionRecord | null>;
86
+ getAll(): Promise<ConnectionRecord[]>;
87
+ getByUser(userId: string): Promise<ConnectionRecord[]>;
88
+ getByTenant(tenantId: string): Promise<ConnectionRecord[]>;
89
+ postToConnection(domainName: string, stage: string, connectionId: string, data: unknown): Promise<boolean>;
90
+ sendToUser(domainName: string, stage: string, userId: string, data: unknown): Promise<number>;
91
+ sendToTenant(domainName: string, stage: string, tenantId: string, data: unknown): Promise<number>;
92
+ broadcast(domainName: string, stage: string, data: unknown): Promise<number>;
93
+ }
94
+ declare global {
95
+ var __VK_LOCAL_WS_HUB__: LocalWsHub | undefined;
96
+ }
56
97
  /**
57
98
  * WebSocket connection store backed by DynamoDB.
58
99
  *
@@ -136,4 +177,5 @@ export declare const connectionStore: {
136
177
  */
137
178
  broadcast(domainName: string, stage: string, data: unknown): Promise<number>;
138
179
  };
180
+ export {};
139
181
  //# sourceMappingURL=ws.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/ws/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA4DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe;IAC1B;;;;OAIG;uBACsB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C;;;;;;OAMG;+BAC8B,MAAM,YAAY,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDrF;;OAEG;yBACwB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD;;OAEG;sBACqB,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAUjE;;;OAGG;cACa,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAW3C;;;;OAIG;sBACqB,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAY5D;;;OAGG;0BACyB,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAYhE;;;;OAIG;iCAEW,MAAM,SACX,MAAM,gBACC,MAAM,QACd,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC;IAqBnB;;;OAGG;2BAEW,MAAM,SACX,MAAM,UACL,MAAM,QACR,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;6BAEW,MAAM,SACX,MAAM,YACH,MAAM,QACV,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC;IAKlB;;;OAGG;0BACyB,MAAM,SAAS,MAAM,QAAQ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAInF,CAAC"}
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/ws/ws.ts"],"names":[],"mappings":"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"}