@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.
- package/dist/handler/context.d.ts +29 -0
- package/dist/handler/context.d.ts.map +1 -1
- package/dist/handler/context.js +16 -0
- package/dist/handler/context.js.map +1 -1
- package/dist/handler/handler.d.ts +17 -2
- package/dist/handler/handler.d.ts.map +1 -1
- package/dist/handler/handler.js +35 -19
- package/dist/handler/handler.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/patterns/queue.d.ts +11 -17
- package/dist/patterns/queue.d.ts.map +1 -1
- package/dist/patterns/queue.js +57 -31
- package/dist/patterns/queue.js.map +1 -1
- package/dist/patterns.d.ts +4 -2
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +4 -1
- package/dist/patterns.js.map +1 -1
- package/dist/queue/drivers/redis.d.ts +47 -0
- package/dist/queue/drivers/redis.d.ts.map +1 -0
- package/dist/queue/drivers/redis.js +315 -0
- package/dist/queue/drivers/redis.js.map +1 -0
- package/dist/queue/index.d.ts +10 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +10 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/types.d.ts +91 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +12 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/testing/test-utils.d.ts.map +1 -1
- package/dist/testing/test-utils.js +1 -0
- package/dist/testing/test-utils.js.map +1 -1
- package/dist/ws/ws.d.ts +42 -0
- package/dist/ws/ws.d.ts.map +1 -1
- package/dist/ws/ws.js +49 -0
- package/dist/ws/ws.js.map +1 -1
- 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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,sBAAsB,CA6DhF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAe3C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/testing/test-utils.ts"],"names":[],"mappings":"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
|
|
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
|
package/dist/ws/ws.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/ws/ws.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/ws/ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;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;AAKD;;;;;;;;;;;GAWG;AACH,UAAU,UAAU;IAClB,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAC5D,MAAM,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3D,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9E;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,mBAAmB,EAAE,UAAU,GAAG,SAAS,CAAC;CACjD;AA6DD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe;IAC1B;;;;OAIG;uBACsB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C;;;;;;OAMG;+BAC8B,MAAM,YAAY,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsDrF;;OAEG;yBACwB,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD;;OAEG;sBACqB,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAYjE;;;OAGG;cACa,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAa3C;;;;OAIG;sBACqB,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAc5D;;;OAGG;0BACyB,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAchE;;;;OAIG;iCAEW,MAAM,SACX,MAAM,gBACC,MAAM,QACd,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC;IAuBnB;;;OAGG;2BAEW,MAAM,SACX,MAAM,UACL,MAAM,QACR,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC;IAOlB;;;OAGG;6BAEW,MAAM,SACX,MAAM,YACH,MAAM,QACV,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC;IAOlB;;;OAGG;0BACyB,MAAM,SAAS,MAAM,QAAQ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CAMnF,CAAC"}
|