@venturekit/runtime 0.0.0-dev.20260329102450 → 0.0.0-dev.20260414153924

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.
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
@@ -56,6 +56,8 @@ export function buildContext(event, options) {
56
56
  // Detect internal invocation from x-venturekit-source header
57
57
  const isInternal = event.headers?.['x-venturekit-source'] === 'internal';
58
58
  const invokeId = event.headers?.['x-venturekit-invoke-id'] || undefined;
59
+ // Extract trace ID from incoming headers (propagated by invoke())
60
+ const traceId = event.headers?.['x-trace-id'] || undefined;
59
61
  return {
60
62
  requestId: event.requestContext?.requestId || crypto.randomUUID(),
61
63
  timestamp: new Date(),
@@ -68,6 +70,7 @@ export function buildContext(event, options) {
68
70
  locale: extractLocale(event, options.supportedLocales, options.defaultLocale),
69
71
  rawEvent: event,
70
72
  queryParams: event.queryStringParameters,
73
+ traceId,
71
74
  intentOutputs,
72
75
  isInternal,
73
76
  invokeId,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Storage backend is pluggable (DynamoDB, Postgres, in-memory, etc.).
9
9
  */
10
- import type { RequestContext } from '../handler/context.js';
10
+ import type { BaseContext, RequestContext } from '../handler/context.js';
11
11
  import type { Middleware } from '../middleware/middleware.js';
12
12
  /**
13
13
  * Stored idempotency record
@@ -147,6 +147,71 @@ export declare class MissingIdempotencyKeyError extends Error {
147
147
  readonly code = "MISSING_IDEMPOTENCY_KEY";
148
148
  constructor();
149
149
  }
150
+ /**
151
+ * Key extractor for task events (queue consumers, standalone functions).
152
+ */
153
+ export type TaskIdempotencyKeyExtractor<TEvent = unknown> = (event: TEvent) => string | null;
154
+ /**
155
+ * Extract idempotency key from an SQS message ID.
156
+ *
157
+ * SQS guarantees unique messageId per delivery. When a message is retried
158
+ * (returned to the queue after visibility timeout), it gets the **same**
159
+ * messageId, making it a natural idempotency key.
160
+ *
161
+ * Works with both single-message and batch invocations (uses first record).
162
+ */
163
+ export declare function sqsMessageIdExtractor(): TaskIdempotencyKeyExtractor;
164
+ /**
165
+ * Extract idempotency key from a specific field in the event payload.
166
+ */
167
+ export declare function eventFieldKeyExtractor<TEvent = unknown>(fieldName: string): TaskIdempotencyKeyExtractor<TEvent>;
168
+ /**
169
+ * Task idempotency middleware options.
170
+ */
171
+ export interface TaskIdempotencyOptions<TEvent = unknown> {
172
+ /** Storage backend for idempotency records */
173
+ store: IdempotencyStore;
174
+ /**
175
+ * Extract the idempotency key from the event.
176
+ * Default: `sqsMessageIdExtractor()` — reads SQS messageId.
177
+ */
178
+ keyExtractor?: TaskIdempotencyKeyExtractor<TEvent>;
179
+ /** TTL in seconds for idempotency records (default: 86400 = 24h) */
180
+ ttlSeconds?: number;
181
+ }
182
+ /**
183
+ * Idempotency middleware for task handlers (queue consumers, functions).
184
+ *
185
+ * Ensures that duplicate invocations (e.g., SQS re-deliveries) are
186
+ * handled exactly once. On duplicate, the cached result is returned
187
+ * without re-executing the handler.
188
+ *
189
+ * ## How it works with queue retries
190
+ *
191
+ * When SQS re-delivers a message (after visibility timeout), the messageId
192
+ * stays the same. This middleware detects the duplicate and returns the
193
+ * cached result, preventing side effects from running twice.
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * import { taskHandler } from '@venturekit/runtime';
198
+ * import { taskIdempotencyMiddleware, createDefaultIdempotencyStore } from '@venturekit/runtime/patterns';
199
+ *
200
+ * const store = await createDefaultIdempotencyStore();
201
+ *
202
+ * export const main = taskHandler(
203
+ * async (event, ctx, logger) => {
204
+ * // This only runs once per unique messageId
205
+ * await chargeCustomer(event.orderId, event.amount);
206
+ * return { charged: true };
207
+ * },
208
+ * {
209
+ * middleware: [taskIdempotencyMiddleware({ store })],
210
+ * },
211
+ * );
212
+ * ```
213
+ */
214
+ export declare function taskIdempotencyMiddleware<TEvent = unknown>(options: TaskIdempotencyOptions<TEvent>): Middleware<BaseContext>;
150
215
  /**
151
216
  * Options for the default idempotency store.
152
217
  */
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/patterns/idempotency.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,MAAM,EAAE,SAAS,GAAG,WAAW,CAAC;IAChC,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAEpD;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC;AAE7E;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,uBAAuB,CAK9E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB,CAShF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,KAAK,EAAE,gBAAgB,CAAC;IAExB;;;OAGG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;IAEvC,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAAC,cAAc,CAAC,CA0E7F;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,gBAAgB,CAiC/D;AAMD;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,gBAAgB,CAAC,CAwG3B;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAgB,IAAI,0BAA0B;gBAClC,GAAG,EAAE,MAAM;CAIxB;AAED;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAgB,IAAI,6BAA6B;;CAKlD;AAMD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/patterns/idempotency.ts"],"names":[],"mappings":"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"}
@@ -278,6 +278,126 @@ export class MissingIdempotencyKeyError extends Error {
278
278
  this.name = 'MissingIdempotencyKeyError';
279
279
  }
280
280
  }
281
+ /**
282
+ * Extract idempotency key from an SQS message ID.
283
+ *
284
+ * SQS guarantees unique messageId per delivery. When a message is retried
285
+ * (returned to the queue after visibility timeout), it gets the **same**
286
+ * messageId, making it a natural idempotency key.
287
+ *
288
+ * Works with both single-message and batch invocations (uses first record).
289
+ */
290
+ export function sqsMessageIdExtractor() {
291
+ return (event) => {
292
+ // SQS batch event: { Records: [{ messageId, body, ... }] }
293
+ if (event?.Records?.[0]?.messageId) {
294
+ return event.Records[0].messageId;
295
+ }
296
+ // Single message forwarded by VentureKit dev server (has __messageId)
297
+ if (event?.__messageId) {
298
+ return event.__messageId;
299
+ }
300
+ return null;
301
+ };
302
+ }
303
+ /**
304
+ * Extract idempotency key from a specific field in the event payload.
305
+ */
306
+ export function eventFieldKeyExtractor(fieldName) {
307
+ return (event) => {
308
+ if (typeof event === 'object' && event !== null && fieldName in event) {
309
+ const value = event[fieldName];
310
+ return typeof value === 'string' ? value : String(value);
311
+ }
312
+ return null;
313
+ };
314
+ }
315
+ /**
316
+ * Idempotency middleware for task handlers (queue consumers, functions).
317
+ *
318
+ * Ensures that duplicate invocations (e.g., SQS re-deliveries) are
319
+ * handled exactly once. On duplicate, the cached result is returned
320
+ * without re-executing the handler.
321
+ *
322
+ * ## How it works with queue retries
323
+ *
324
+ * When SQS re-delivers a message (after visibility timeout), the messageId
325
+ * stays the same. This middleware detects the duplicate and returns the
326
+ * cached result, preventing side effects from running twice.
327
+ *
328
+ * @example
329
+ * ```typescript
330
+ * import { taskHandler } from '@venturekit/runtime';
331
+ * import { taskIdempotencyMiddleware, createDefaultIdempotencyStore } from '@venturekit/runtime/patterns';
332
+ *
333
+ * const store = await createDefaultIdempotencyStore();
334
+ *
335
+ * export const main = taskHandler(
336
+ * async (event, ctx, logger) => {
337
+ * // This only runs once per unique messageId
338
+ * await chargeCustomer(event.orderId, event.amount);
339
+ * return { charged: true };
340
+ * },
341
+ * {
342
+ * middleware: [taskIdempotencyMiddleware({ store })],
343
+ * },
344
+ * );
345
+ * ```
346
+ */
347
+ export function taskIdempotencyMiddleware(options) {
348
+ const { store, keyExtractor = sqsMessageIdExtractor(), ttlSeconds = 86400, } = options;
349
+ return {
350
+ name: 'task-idempotency',
351
+ fn: async (ctx, next) => {
352
+ const event = ctx.event;
353
+ const key = keyExtractor(event);
354
+ if (!key) {
355
+ // No idempotency key — pass through
356
+ return next();
357
+ }
358
+ // Check for existing record
359
+ const existing = await store.get(key);
360
+ if (existing) {
361
+ if (existing.status === 'completed') {
362
+ // Return cached result — skip handler execution
363
+ try {
364
+ return JSON.parse(existing.response);
365
+ }
366
+ catch {
367
+ return existing.response;
368
+ }
369
+ }
370
+ if (existing.status === 'pending') {
371
+ // Concurrent execution — this shouldn't happen with SQS
372
+ // but could with async Lambda invocations
373
+ throw new IdempotencyConflictError(key);
374
+ }
375
+ }
376
+ // Save pending record
377
+ const record = {
378
+ key,
379
+ response: '',
380
+ status: 'pending',
381
+ expiresAt: Date.now() + (ttlSeconds * 1000),
382
+ };
383
+ await store.save(record);
384
+ try {
385
+ const result = await next();
386
+ // Store completed result
387
+ await store.update(key, {
388
+ status: 'completed',
389
+ response: JSON.stringify(result),
390
+ });
391
+ return result;
392
+ }
393
+ catch (error) {
394
+ // Delete record so the message can be retried
395
+ await store.delete(key);
396
+ throw error;
397
+ }
398
+ },
399
+ };
400
+ }
281
401
  /**
282
402
  * Create an idempotency store with sensible defaults.
283
403
  *
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/patterns/idempotency.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/patterns/idempotency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * VentureKit Queue Client
3
+ *
4
+ * Type-safe client for sending messages to SQS queues.
5
+ * Auto-detects local dev (Redis-backed) vs production (AWS SQS).
6
+ * Automatically propagates trace context for end-to-end observability.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { sendMessage, sendMessages } from '@venturekit/runtime/patterns';
11
+ *
12
+ * // Send a single message
13
+ * await sendMessage('notifications', {
14
+ * type: 'welcome',
15
+ * userId: 'user-123',
16
+ * message: 'Welcome!',
17
+ * });
18
+ *
19
+ * // Send a batch of messages
20
+ * await sendMessages('notifications', [
21
+ * { type: 'welcome', userId: 'user-1', message: 'Hi!' },
22
+ * { type: 'welcome', userId: 'user-2', message: 'Hi!' },
23
+ * ]);
24
+ *
25
+ * // Fire-and-forget with delay
26
+ * await sendMessage('notifications', payload, { delaySeconds: 60 });
27
+ * ```
28
+ */
29
+ import type { TraceContext } from '../logging/tracing.js';
30
+ /**
31
+ * Options for sending a queue message.
32
+ */
33
+ export interface SendMessageOptions {
34
+ /** Delay delivery in seconds (0–900). Default: 0 */
35
+ delaySeconds?: number;
36
+ /** Message group ID (required for FIFO queues) */
37
+ messageGroupId?: string;
38
+ /** Message deduplication ID (FIFO queues — auto-generated if omitted) */
39
+ deduplicationId?: string;
40
+ /** Trace context to propagate (auto-detected if omitted) */
41
+ trace?: TraceContext;
42
+ }
43
+ /**
44
+ * Result of a send operation.
45
+ */
46
+ export interface SendMessageResult {
47
+ /** SQS message ID (or local placeholder) */
48
+ messageId: string;
49
+ }
50
+ /**
51
+ * Send a single message to an SQS queue.
52
+ *
53
+ * In local dev, the message is forwarded to the dev server which invokes
54
+ * the queue consumer handler directly.
55
+ *
56
+ * In production, the message is sent to the SQS queue via AWS SDK.
57
+ * Trace context is automatically propagated via the message body.
58
+ *
59
+ * @param queueId - Queue identifier (matches `id` in infrastructure intents)
60
+ * @param body - Message payload (serialized to JSON)
61
+ * @param options - Optional delivery settings
62
+ */
63
+ export declare function sendMessage<T = unknown>(queueId: string, body: T, options?: SendMessageOptions): Promise<SendMessageResult>;
64
+ /**
65
+ * Send a batch of messages to an SQS queue (max 10 per batch).
66
+ *
67
+ * @param queueId - Queue identifier
68
+ * @param messages - Array of message payloads
69
+ * @param options - Shared options applied to all messages
70
+ */
71
+ export declare function sendMessages<T = unknown>(queueId: string, messages: T[], options?: SendMessageOptions): Promise<SendMessageResult[]>;
72
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/patterns/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;GAEG;AACH,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;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAmHD;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,EAAE,EACb,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA2D9B"}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * VentureKit Queue Client
3
+ *
4
+ * Type-safe client for sending messages to SQS queues.
5
+ * Auto-detects local dev (Redis-backed) vs production (AWS SQS).
6
+ * Automatically propagates trace context for end-to-end observability.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { sendMessage, sendMessages } from '@venturekit/runtime/patterns';
11
+ *
12
+ * // Send a single message
13
+ * await sendMessage('notifications', {
14
+ * type: 'welcome',
15
+ * userId: 'user-123',
16
+ * message: 'Welcome!',
17
+ * });
18
+ *
19
+ * // Send a batch of messages
20
+ * await sendMessages('notifications', [
21
+ * { type: 'welcome', userId: 'user-1', message: 'Hi!' },
22
+ * { type: 'welcome', userId: 'user-2', message: 'Hi!' },
23
+ * ]);
24
+ *
25
+ * // Fire-and-forget with delay
26
+ * await sendMessage('notifications', payload, { delaySeconds: 60 });
27
+ * ```
28
+ */
29
+ import { generateId, injectTraceHeaders, createChildTrace } from '../logging/tracing.js';
30
+ /**
31
+ * Resolve the SQS queue URL from a queue ID.
32
+ *
33
+ * Convention: `{project}-{stage}-{queueId}`
34
+ *
35
+ * In production, reads from `VENTURE_QUEUE_{ID}_URL` env var
36
+ * (injected by the CDK stack as a CfnOutput).
37
+ * Falls back to constructing the URL from account/region.
38
+ */
39
+ function resolveQueueUrl(queueId) {
40
+ // Check for explicit env var first
41
+ const envKey = `VENTURE_QUEUE_${queueId.toUpperCase().replace(/-/g, '_')}_URL`;
42
+ if (process.env[envKey]) {
43
+ return process.env[envKey];
44
+ }
45
+ // Construct from convention
46
+ const project = process.env.VENTURE_PROJECT_NAME || process.env.VENTURE_APP_NAME || 'app';
47
+ const stage = process.env.VENTURE_STAGE || 'dev';
48
+ const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
49
+ const accountId = process.env.AWS_ACCOUNT_ID || '000000000000';
50
+ const queueName = `${project}-${stage}-${queueId}`;
51
+ return `https://sqs.${region}.amazonaws.com/${accountId}/${queueName}`;
52
+ }
53
+ /**
54
+ * Build trace metadata to attach to the message body.
55
+ */
56
+ function buildTracePayload(options) {
57
+ let trace;
58
+ if (options?.trace) {
59
+ trace = createChildTrace(options.trace);
60
+ }
61
+ else {
62
+ // Generate a fresh trace context
63
+ trace = {
64
+ traceId: generateId(),
65
+ spanId: generateId(),
66
+ baggage: {},
67
+ };
68
+ }
69
+ return injectTraceHeaders(trace);
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // AWS SQS client (lazy-loaded)
73
+ // ---------------------------------------------------------------------------
74
+ let _sqsClient = null;
75
+ async function getSqsClient() {
76
+ if (!_sqsClient) {
77
+ const { SQSClient } = await import('@aws-sdk/client-sqs');
78
+ const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
79
+ _sqsClient = new SQSClient({ region });
80
+ }
81
+ return _sqsClient;
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Local dev: POST to /_dev/queue/{queueId}
85
+ // ---------------------------------------------------------------------------
86
+ function isLocalDev() {
87
+ return process.env.VENTURE_LOCAL === 'true';
88
+ }
89
+ function getLocalServerUrl() {
90
+ return process.env.VENTURE_LOCAL_URL || `http://localhost:${process.env.VENTURE_LOCAL_PORT || '3000'}`;
91
+ }
92
+ async function sendLocalMessage(queueId, body, _options) {
93
+ const http = await import('http');
94
+ const baseUrl = getLocalServerUrl();
95
+ const url = new URL(`${baseUrl}/_dev/queue/${queueId}`);
96
+ const payload = JSON.stringify(body);
97
+ return new Promise((resolve, reject) => {
98
+ const req = http.request({
99
+ hostname: url.hostname,
100
+ port: url.port,
101
+ path: url.pathname,
102
+ method: 'POST',
103
+ headers: { 'content-type': 'application/json' },
104
+ }, (res) => {
105
+ const chunks = [];
106
+ res.on('data', (chunk) => chunks.push(chunk));
107
+ res.on('end', () => {
108
+ try {
109
+ const data = JSON.parse(Buffer.concat(chunks).toString('utf-8'));
110
+ resolve({ messageId: data.messageId || generateId() });
111
+ }
112
+ catch {
113
+ resolve({ messageId: generateId() });
114
+ }
115
+ });
116
+ });
117
+ req.on('error', (err) => reject(new Error(`Failed to send local queue message: ${err.message}`)));
118
+ req.write(payload);
119
+ req.end();
120
+ });
121
+ }
122
+ // ---------------------------------------------------------------------------
123
+ // Public API
124
+ // ---------------------------------------------------------------------------
125
+ /**
126
+ * Send a single message to an SQS queue.
127
+ *
128
+ * In local dev, the message is forwarded to the dev server which invokes
129
+ * the queue consumer handler directly.
130
+ *
131
+ * In production, the message is sent to the SQS queue via AWS SDK.
132
+ * Trace context is automatically propagated via the message body.
133
+ *
134
+ * @param queueId - Queue identifier (matches `id` in infrastructure intents)
135
+ * @param body - Message payload (serialized to JSON)
136
+ * @param options - Optional delivery settings
137
+ */
138
+ export async function sendMessage(queueId, body, options) {
139
+ // Attach trace context to the payload
140
+ const __trace = buildTracePayload(options);
141
+ const envelope = { ...(typeof body === 'object' && body !== null ? body : { data: body }), __trace };
142
+ if (isLocalDev()) {
143
+ return sendLocalMessage(queueId, envelope, options);
144
+ }
145
+ // Production: AWS SQS
146
+ const client = await getSqsClient();
147
+ const { SendMessageCommand } = await import('@aws-sdk/client-sqs');
148
+ const params = {
149
+ QueueUrl: resolveQueueUrl(queueId),
150
+ MessageBody: JSON.stringify(envelope),
151
+ };
152
+ if (options?.delaySeconds) {
153
+ params.DelaySeconds = options.delaySeconds;
154
+ }
155
+ if (options?.messageGroupId) {
156
+ params.MessageGroupId = options.messageGroupId;
157
+ }
158
+ if (options?.deduplicationId) {
159
+ params.MessageDeduplicationId = options.deduplicationId;
160
+ }
161
+ const result = await client.send(new SendMessageCommand(params));
162
+ return { messageId: result.MessageId ?? generateId() };
163
+ }
164
+ /**
165
+ * Send a batch of messages to an SQS queue (max 10 per batch).
166
+ *
167
+ * @param queueId - Queue identifier
168
+ * @param messages - Array of message payloads
169
+ * @param options - Shared options applied to all messages
170
+ */
171
+ export async function sendMessages(queueId, messages, options) {
172
+ if (messages.length === 0)
173
+ return [];
174
+ // SQS batch limit is 10
175
+ const results = [];
176
+ for (let i = 0; i < messages.length; i += 10) {
177
+ const batch = messages.slice(i, i + 10);
178
+ if (isLocalDev()) {
179
+ // Local: send one-by-one through the dev server
180
+ for (const msg of batch) {
181
+ results.push(await sendMessage(queueId, msg, options));
182
+ }
183
+ continue;
184
+ }
185
+ // Production: use SQS batch API
186
+ const client = await getSqsClient();
187
+ const { SendMessageBatchCommand } = await import('@aws-sdk/client-sqs');
188
+ const entries = batch.map((msg, idx) => {
189
+ const __trace = buildTracePayload(options);
190
+ const envelope = { ...(typeof msg === 'object' && msg !== null ? msg : { data: msg }), __trace };
191
+ const entry = {
192
+ Id: `msg-${i + idx}`,
193
+ MessageBody: JSON.stringify(envelope),
194
+ };
195
+ if (options?.delaySeconds) {
196
+ entry.DelaySeconds = options.delaySeconds;
197
+ }
198
+ if (options?.messageGroupId) {
199
+ entry.MessageGroupId = options.messageGroupId;
200
+ }
201
+ if (options?.deduplicationId) {
202
+ entry.MessageDeduplicationId = `${options.deduplicationId}-${i + idx}`;
203
+ }
204
+ return entry;
205
+ });
206
+ const result = await client.send(new SendMessageBatchCommand({
207
+ QueueUrl: resolveQueueUrl(queueId),
208
+ Entries: entries,
209
+ }));
210
+ for (const success of result.Successful ?? []) {
211
+ results.push({ messageId: success.MessageId ?? generateId() });
212
+ }
213
+ if (result.Failed && result.Failed.length > 0) {
214
+ const ids = result.Failed.map((f) => f.Id).join(', ');
215
+ throw new Error(`Failed to send ${result.Failed.length} messages: ${ids}`);
216
+ }
217
+ }
218
+ return results;
219
+ }
220
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/patterns/queue.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ export { createCircuitBreaker, } from './patterns/circuit-breaker.js';
12
12
  export type { CircuitBreaker, CircuitBreakerOptions, CircuitState, } from './patterns/circuit-breaker.js';
13
13
  export { saga, parallel, createMemorySagaStore, createDynamoDBSagaStore, createDefaultSagaStore, } from './patterns/saga.js';
14
14
  export type { SagaStep, SagaStepEntry, ParallelStepGroup, SagaStatus, SagaRecord, SagaStore, StepResult, SagaResult, SagaOptions, SagaRunOptions, SagaStepEvent, SagaCompensateEvent, SagaFailedEvent, DynamoDBSagaStoreOptions, DefaultSagaStoreOptions, } from './patterns/saga.js';
15
- export { idempotencyMiddleware, IdempotencyConflictError, MissingIdempotencyKeyError, createMemoryIdempotencyStore, createDynamoDBIdempotencyStore, createDefaultIdempotencyStore, headerKeyExtractor, bodyFieldKeyExtractor, } from './patterns/idempotency.js';
16
- export type { IdempotencyRecord, IdempotencyStore, IdempotencyKeyExtractor, IdempotencyOptions, DynamoDBIdempotencyStoreOptions, DefaultIdempotencyStoreOptions, } from './patterns/idempotency.js';
15
+ export { sendMessage, sendMessages, } from './patterns/queue.js';
16
+ export type { SendMessageOptions, SendMessageResult, } from './patterns/queue.js';
17
+ export { idempotencyMiddleware, taskIdempotencyMiddleware, IdempotencyConflictError, MissingIdempotencyKeyError, createMemoryIdempotencyStore, createDynamoDBIdempotencyStore, createDefaultIdempotencyStore, headerKeyExtractor, bodyFieldKeyExtractor, sqsMessageIdExtractor, eventFieldKeyExtractor, } from './patterns/idempotency.js';
18
+ export type { IdempotencyRecord, IdempotencyStore, IdempotencyKeyExtractor, IdempotencyOptions, TaskIdempotencyKeyExtractor, TaskIdempotencyOptions, DynamoDBIdempotencyStoreOptions, DefaultIdempotencyStoreOptions, } from './patterns/idempotency.js';
17
19
  //# sourceMappingURL=patterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC"}
package/dist/patterns.js CHANGED
@@ -12,6 +12,8 @@ export { createInvoker, defaultFunctionNameResolver, createLambdaInvoker, create
12
12
  export { createCircuitBreaker, } from './patterns/circuit-breaker.js';
13
13
  // Saga
14
14
  export { saga, parallel, createMemorySagaStore, createDynamoDBSagaStore, createDefaultSagaStore, } from './patterns/saga.js';
15
+ // Queue Client
16
+ export { sendMessage, sendMessages, } from './patterns/queue.js';
15
17
  // Idempotency
16
- export { idempotencyMiddleware, IdempotencyConflictError, MissingIdempotencyKeyError, createMemoryIdempotencyStore, createDynamoDBIdempotencyStore, createDefaultIdempotencyStore, headerKeyExtractor, bodyFieldKeyExtractor, } from './patterns/idempotency.js';
18
+ export { idempotencyMiddleware, taskIdempotencyMiddleware, IdempotencyConflictError, MissingIdempotencyKeyError, createMemoryIdempotencyStore, createDynamoDBIdempotencyStore, createDefaultIdempotencyStore, headerKeyExtractor, bodyFieldKeyExtractor, sqsMessageIdExtractor, eventFieldKeyExtractor, } from './patterns/idempotency.js';
17
19
  //# sourceMappingURL=patterns.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAa9B,kBAAkB;AAClB,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAOvC,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAmB5B,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAa9B,kBAAkB;AAClB,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAOvC,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAmB5B,eAAe;AACf,OAAO,EACL,WAAW,EACX,YAAY,GACb,MAAM,qBAAqB,CAAC;AAM7B,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venturekit/runtime",
3
- "version": "0.0.0-dev.20260329102450",
3
+ "version": "0.0.0-dev.20260414153924",
4
4
  "description": "VentureKit runtime utilities - handlers, context, middleware, logging",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -55,14 +55,15 @@
55
55
  ],
56
56
  "license": "Apache-2.0",
57
57
  "dependencies": {
58
- "@venturekit/core": "0.0.0-dev.20260329102450",
58
+ "@venturekit/core": "0.0.0-dev.20260414153924",
59
59
  "pino": "^9.0.0"
60
60
  },
61
61
  "peerDependencies": {
62
- "@venturekit/data": "0.0.0-dev.20260329102450",
62
+ "@venturekit/data": "0.0.0-dev.20260414153924",
63
63
  "@aws-sdk/client-dynamodb": "^3.500.0",
64
64
  "@aws-sdk/lib-dynamodb": "^3.500.0",
65
65
  "@aws-sdk/client-lambda": "^3.500.0",
66
+ "@aws-sdk/client-sqs": "^3.500.0",
66
67
  "@aws-sdk/client-apigatewaymanagementapi": "^3.500.0",
67
68
  "zod": "^3.22.0"
68
69
  },
@@ -79,6 +80,9 @@
79
80
  "@aws-sdk/client-lambda": {
80
81
  "optional": true
81
82
  },
83
+ "@aws-sdk/client-sqs": {
84
+ "optional": true
85
+ },
82
86
  "@aws-sdk/client-apigatewaymanagementapi": {
83
87
  "optional": true
84
88
  },
@@ -87,11 +91,12 @@
87
91
  }
88
92
  },
89
93
  "devDependencies": {
90
- "@venturekit/data": "0.0.0-dev.20260329102450",
94
+ "@venturekit/data": "0.0.0-dev.20260414153924",
91
95
  "@types/aws-lambda": "^8.10.131",
92
96
  "@types/node": "^20.10.0",
93
97
  "@aws-sdk/client-lambda": "^3.500.0",
94
98
  "@aws-sdk/client-ssm": "^3.500.0",
99
+ "@aws-sdk/client-sqs": "^3.500.0",
95
100
  "@aws-sdk/client-secrets-manager": "^3.500.0",
96
101
  "typescript": "^5.3.0"
97
102
  },