@venturekit/runtime 0.0.0-dev.20260415182021 → 0.0.0-dev.20260427220257
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/env/memo.d.ts +39 -0
- package/dist/env/memo.d.ts.map +1 -0
- package/dist/env/memo.js +85 -0
- package/dist/env/memo.js.map +1 -0
- package/dist/handler/context.d.ts.map +1 -1
- package/dist/handler/context.js +12 -14
- package/dist/handler/context.js.map +1 -1
- package/dist/handler/data-loader.d.ts +50 -0
- package/dist/handler/data-loader.d.ts.map +1 -0
- package/dist/handler/data-loader.js +68 -0
- package/dist/handler/data-loader.js.map +1 -0
- package/dist/handler/errors.d.ts +10 -0
- package/dist/handler/errors.d.ts.map +1 -1
- package/dist/handler/errors.js +13 -0
- package/dist/handler/errors.js.map +1 -1
- package/dist/handler/handler.d.ts +18 -0
- package/dist/handler/handler.d.ts.map +1 -1
- package/dist/handler/handler.js +56 -11
- package/dist/handler/handler.js.map +1 -1
- package/dist/handler/queue-batch.d.ts +140 -0
- package/dist/handler/queue-batch.d.ts.map +1 -0
- package/dist/handler/queue-batch.js +180 -0
- package/dist/handler/queue-batch.js.map +1 -0
- package/dist/handler/response.d.ts +8 -1
- package/dist/handler/response.d.ts.map +1 -1
- package/dist/handler/response.js +18 -4
- package/dist/handler/response.js.map +1 -1
- package/dist/handler/task-handler.d.ts.map +1 -1
- package/dist/handler/task-handler.js +8 -12
- package/dist/handler/task-handler.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/logging/logger.d.ts +20 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +66 -23
- package/dist/logging/logger.js.map +1 -1
- package/dist/logging/metrics.d.ts +105 -0
- package/dist/logging/metrics.d.ts.map +1 -0
- package/dist/logging/metrics.js +189 -0
- package/dist/logging/metrics.js.map +1 -0
- package/dist/logging/tracing.d.ts +64 -10
- package/dist/logging/tracing.d.ts.map +1 -1
- package/dist/logging/tracing.js +197 -15
- package/dist/logging/tracing.js.map +1 -1
- package/dist/middleware/middleware.d.ts +3 -0
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +11 -2
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/rate-limit-store.d.ts +18 -0
- package/dist/middleware/rate-limit-store.d.ts.map +1 -1
- package/dist/middleware/rate-limit-store.js +24 -4
- package/dist/middleware/rate-limit-store.js.map +1 -1
- package/dist/patterns/circuit-breaker.d.ts +11 -0
- package/dist/patterns/circuit-breaker.d.ts.map +1 -1
- package/dist/patterns/circuit-breaker.js +26 -2
- package/dist/patterns/circuit-breaker.js.map +1 -1
- package/dist/patterns/invoke.d.ts.map +1 -1
- package/dist/patterns/invoke.js +60 -31
- package/dist/patterns/invoke.js.map +1 -1
- package/dist/patterns/saga.d.ts +42 -1
- package/dist/patterns/saga.d.ts.map +1 -1
- package/dist/patterns/saga.js +78 -20
- package/dist/patterns/saga.js.map +1 -1
- package/dist/security/internal-hmac.d.ts +59 -0
- package/dist/security/internal-hmac.d.ts.map +1 -0
- package/dist/security/internal-hmac.js +117 -0
- package/dist/security/internal-hmac.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Queue Batch Handler
|
|
3
|
+
*
|
|
4
|
+
* Consumer-facing batch handler for queue-driven Lambdas. Your app code only
|
|
5
|
+
* sees a generic `(message, ctx, logger) => Promise<void>` contract — the
|
|
6
|
+
* handler takes care of the AWS-specific partial-batch-failure wire format
|
|
7
|
+
* under the hood. That keeps app code portable (testable without AWS mocks,
|
|
8
|
+
* movable between deployment targets) and keeps the framework's queue
|
|
9
|
+
* semantics in one place.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this exists
|
|
12
|
+
*
|
|
13
|
+
* Under the hood this wraps Lambda's **partial batch response** contract
|
|
14
|
+
* (`reportBatchItemFailures`). Without that contract, a single bad message
|
|
15
|
+
* in a batch causes Lambda to return an error, which causes the broker to
|
|
16
|
+
* redeliver the **entire batch** — including records that already
|
|
17
|
+
* succeeded. Apps end up either double-processing or DLQ-ing messages that
|
|
18
|
+
* would have worked on their own. This handler collects per-message
|
|
19
|
+
* failures and reports only those back to Lambda.
|
|
20
|
+
*
|
|
21
|
+
* ## Prerequisites
|
|
22
|
+
*
|
|
23
|
+
* The underlying event source (SQS on AWS today) must be created with the
|
|
24
|
+
* partial-batch-failure contract enabled. VentureKit's CDK layer wires this
|
|
25
|
+
* automatically for queues discovered via `src/queues/`; app code never
|
|
26
|
+
* has to configure it directly.
|
|
27
|
+
*
|
|
28
|
+
* ## Example
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { queueBatchHandler } from '@venturekit/runtime';
|
|
32
|
+
*
|
|
33
|
+
* interface OrderMessage { orderId: string; amount: number }
|
|
34
|
+
*
|
|
35
|
+
* export const main = queueBatchHandler<OrderMessage>(
|
|
36
|
+
* async (order, ctx, logger) => {
|
|
37
|
+
* await chargeCard(order.orderId, order.amount);
|
|
38
|
+
* },
|
|
39
|
+
* { concurrency: 5 },
|
|
40
|
+
* );
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import type { Context, SQSBatchResponse, SQSEvent } from 'aws-lambda';
|
|
44
|
+
import type { BaseContext } from './context.js';
|
|
45
|
+
import { Logger } from '../logging/logger.js';
|
|
46
|
+
/**
|
|
47
|
+
* Context passed to the per-message handler.
|
|
48
|
+
*
|
|
49
|
+
* Exposes the raw underlying record for callers that genuinely need queue-
|
|
50
|
+
* broker-specific attributes (e.g. delivery count, queue ARN) but hides the
|
|
51
|
+
* typing concern behind a generic name so app code doesn't read as SQS-
|
|
52
|
+
* specific.
|
|
53
|
+
*/
|
|
54
|
+
export interface QueueMessageContext extends BaseContext {
|
|
55
|
+
/** Lambda function name (from the Lambda Context). */
|
|
56
|
+
functionName: string;
|
|
57
|
+
/** Raw Lambda Context. */
|
|
58
|
+
rawContext: Context;
|
|
59
|
+
/**
|
|
60
|
+
* The raw underlying record as delivered by the queue broker. On AWS this
|
|
61
|
+
* is an `SQSRecord`; exposed as `unknown` here so app code doesn't have to
|
|
62
|
+
* import AWS types. Cast when you genuinely need broker-specific fields.
|
|
63
|
+
*/
|
|
64
|
+
record: unknown;
|
|
65
|
+
/** 0-based position of this record within its batch. */
|
|
66
|
+
index: number;
|
|
67
|
+
/** Total number of records in the batch. */
|
|
68
|
+
batchSize: number;
|
|
69
|
+
/** Contextual logger pre-scoped with messageId / queue / traceId. */
|
|
70
|
+
logger: Logger;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Per-message handler signature.
|
|
74
|
+
*
|
|
75
|
+
* - Successful return → message is acknowledged.
|
|
76
|
+
* - Throw / reject → message is reported as a failure in the batch response.
|
|
77
|
+
*/
|
|
78
|
+
export type QueueMessageHandlerFn<TBody = unknown> = (body: TBody, ctx: QueueMessageContext, logger: Logger) => Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Input to a custom message parser. Carries just the fields a parser
|
|
81
|
+
* realistically needs (raw body bytes as a string, plus the broker-level
|
|
82
|
+
* identifier used for partial-batch reporting) so parsers stay decoupled
|
|
83
|
+
* from any specific queue broker's record shape.
|
|
84
|
+
*/
|
|
85
|
+
export interface QueueRawMessage {
|
|
86
|
+
/** The raw message body as delivered by the broker. */
|
|
87
|
+
body: string;
|
|
88
|
+
/** Broker-assigned message identifier, used for partial-batch failures. */
|
|
89
|
+
messageId: string;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Per-message parse result. Return `{ok: true, value}` to pass a typed body
|
|
93
|
+
* to the handler, or `{ok: false, error}` to short-circuit with a failure.
|
|
94
|
+
*/
|
|
95
|
+
export type QueueMessageParser<TBody> = (message: QueueRawMessage) => {
|
|
96
|
+
ok: true;
|
|
97
|
+
value: TBody;
|
|
98
|
+
} | {
|
|
99
|
+
ok: false;
|
|
100
|
+
error: Error;
|
|
101
|
+
};
|
|
102
|
+
export interface QueueBatchHandlerConfig<TBody = unknown> {
|
|
103
|
+
/** Log level (default: 'info'). */
|
|
104
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
105
|
+
/**
|
|
106
|
+
* Concurrency: how many messages to process in parallel (default: 1).
|
|
107
|
+
* Higher values can drain large batches faster but risk overwhelming
|
|
108
|
+
* downstream services. Keep this low (1–10) for queues that hit databases.
|
|
109
|
+
*/
|
|
110
|
+
concurrency?: number;
|
|
111
|
+
/**
|
|
112
|
+
* Optional custom body parser. Defaults to `JSON.parse(message.body)`.
|
|
113
|
+
* Return `{ok: false, error}` to mark the message as failed without
|
|
114
|
+
* invoking the handler.
|
|
115
|
+
*/
|
|
116
|
+
parseBody?: QueueMessageParser<TBody>;
|
|
117
|
+
/**
|
|
118
|
+
* If true, a thrown error from the handler rejects the whole batch
|
|
119
|
+
* (i.e. Lambda returns throws, causing full redelivery). Defaults to
|
|
120
|
+
* `false` — the recommended partial-batch-failure behavior.
|
|
121
|
+
*/
|
|
122
|
+
failEntireBatchOnError?: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create a batch-aware queue Lambda handler.
|
|
126
|
+
*
|
|
127
|
+
* Returns an AWS Lambda handler (so it drops straight into an `exports.main
|
|
128
|
+
* = queueBatchHandler(...)` binding) that:
|
|
129
|
+
* 1. Iterates over the incoming records (optionally in parallel).
|
|
130
|
+
* 2. Parses each body (JSON by default).
|
|
131
|
+
* 3. Calls your per-message handler.
|
|
132
|
+
* 4. Collects failures and returns them as `batchItemFailures` so Lambda
|
|
133
|
+
* only redelivers the failed messages.
|
|
134
|
+
*
|
|
135
|
+
* See the module docstring for the broker-side configuration required
|
|
136
|
+
* (partial-batch-failure must be enabled — VentureKit's CDK does this
|
|
137
|
+
* automatically for queues under `src/queues/`).
|
|
138
|
+
*/
|
|
139
|
+
export declare function queueBatchHandler<TBody = unknown>(fn: QueueMessageHandlerFn<TBody>, config?: QueueBatchHandlerConfig<TBody>): (event: SQSEvent, context: Context) => Promise<SQSBatchResponse>;
|
|
140
|
+
//# sourceMappingURL=queue-batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-batch.d.ts","sourceRoot":"","sources":["../../src/handler/queue-batch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAG5D;;;;;;;GAOG;AACH,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,CAAC,KAAK,GAAG,OAAO,IAAI,CACnD,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,mBAAmB,EACxB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,eAAe,KAC7D;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEhC,MAAM,WAAW,uBAAuB,CAAC,KAAK,GAAG,OAAO;IACtD,mCAAmC;IACnC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACtC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAyBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,GAAG,OAAO,EAC/C,EAAE,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAChC,MAAM,GAAE,uBAAuB,CAAC,KAAK,CAAM,GAC1C,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAoGlE"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Queue Batch Handler
|
|
3
|
+
*
|
|
4
|
+
* Consumer-facing batch handler for queue-driven Lambdas. Your app code only
|
|
5
|
+
* sees a generic `(message, ctx, logger) => Promise<void>` contract — the
|
|
6
|
+
* handler takes care of the AWS-specific partial-batch-failure wire format
|
|
7
|
+
* under the hood. That keeps app code portable (testable without AWS mocks,
|
|
8
|
+
* movable between deployment targets) and keeps the framework's queue
|
|
9
|
+
* semantics in one place.
|
|
10
|
+
*
|
|
11
|
+
* ## Why this exists
|
|
12
|
+
*
|
|
13
|
+
* Under the hood this wraps Lambda's **partial batch response** contract
|
|
14
|
+
* (`reportBatchItemFailures`). Without that contract, a single bad message
|
|
15
|
+
* in a batch causes Lambda to return an error, which causes the broker to
|
|
16
|
+
* redeliver the **entire batch** — including records that already
|
|
17
|
+
* succeeded. Apps end up either double-processing or DLQ-ing messages that
|
|
18
|
+
* would have worked on their own. This handler collects per-message
|
|
19
|
+
* failures and reports only those back to Lambda.
|
|
20
|
+
*
|
|
21
|
+
* ## Prerequisites
|
|
22
|
+
*
|
|
23
|
+
* The underlying event source (SQS on AWS today) must be created with the
|
|
24
|
+
* partial-batch-failure contract enabled. VentureKit's CDK layer wires this
|
|
25
|
+
* automatically for queues discovered via `src/queues/`; app code never
|
|
26
|
+
* has to configure it directly.
|
|
27
|
+
*
|
|
28
|
+
* ## Example
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { queueBatchHandler } from '@venturekit/runtime';
|
|
32
|
+
*
|
|
33
|
+
* interface OrderMessage { orderId: string; amount: number }
|
|
34
|
+
*
|
|
35
|
+
* export const main = queueBatchHandler<OrderMessage>(
|
|
36
|
+
* async (order, ctx, logger) => {
|
|
37
|
+
* await chargeCard(order.orderId, order.amount);
|
|
38
|
+
* },
|
|
39
|
+
* { concurrency: 5 },
|
|
40
|
+
* );
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
import { createLogger } from '../logging/logger.js';
|
|
44
|
+
import { generateId } from '../logging/tracing.js';
|
|
45
|
+
/**
|
|
46
|
+
* Default JSON body parser. Returns a parse error if the message body is
|
|
47
|
+
* missing or not valid JSON — the broker redelivers (and eventually DLQs)
|
|
48
|
+
* via its own retry policy, rather than poisoning the whole batch.
|
|
49
|
+
*/
|
|
50
|
+
function defaultParseJson(message) {
|
|
51
|
+
if (!message.body) {
|
|
52
|
+
return { ok: false, error: new Error('Queue message has empty body') };
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
return { ok: true, value: JSON.parse(message.body) };
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
return {
|
|
59
|
+
ok: false,
|
|
60
|
+
error: new Error(`Queue message body is not valid JSON: ${err instanceof Error ? err.message : String(err)}`),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a batch-aware queue Lambda handler.
|
|
66
|
+
*
|
|
67
|
+
* Returns an AWS Lambda handler (so it drops straight into an `exports.main
|
|
68
|
+
* = queueBatchHandler(...)` binding) that:
|
|
69
|
+
* 1. Iterates over the incoming records (optionally in parallel).
|
|
70
|
+
* 2. Parses each body (JSON by default).
|
|
71
|
+
* 3. Calls your per-message handler.
|
|
72
|
+
* 4. Collects failures and returns them as `batchItemFailures` so Lambda
|
|
73
|
+
* only redelivers the failed messages.
|
|
74
|
+
*
|
|
75
|
+
* See the module docstring for the broker-side configuration required
|
|
76
|
+
* (partial-batch-failure must be enabled — VentureKit's CDK does this
|
|
77
|
+
* automatically for queues under `src/queues/`).
|
|
78
|
+
*/
|
|
79
|
+
export function queueBatchHandler(fn, config = {}) {
|
|
80
|
+
const { logLevel = 'info', concurrency = 1, parseBody = (defaultParseJson), failEntireBatchOnError = false, } = config;
|
|
81
|
+
return async (event, lambdaContext) => {
|
|
82
|
+
const rootLogger = createLogger({ minLevel: logLevel }).child({
|
|
83
|
+
component: 'queue-batch',
|
|
84
|
+
functionName: lambdaContext.functionName,
|
|
85
|
+
requestId: lambdaContext.awsRequestId,
|
|
86
|
+
});
|
|
87
|
+
if (!event.Records || event.Records.length === 0) {
|
|
88
|
+
// Nothing to do — return an empty partial response. (Never happens in
|
|
89
|
+
// practice, but guards against manual invocations with empty payloads.)
|
|
90
|
+
return { batchItemFailures: [] };
|
|
91
|
+
}
|
|
92
|
+
const batchSize = event.Records.length;
|
|
93
|
+
const failures = [];
|
|
94
|
+
const processOne = async (record, index) => {
|
|
95
|
+
const traceId = record.attributes?.AWSTraceHeader
|
|
96
|
+
? extractTraceId(record.attributes.AWSTraceHeader)
|
|
97
|
+
: undefined;
|
|
98
|
+
const messageLogger = rootLogger.child({
|
|
99
|
+
messageId: record.messageId,
|
|
100
|
+
queueArn: record.eventSourceARN,
|
|
101
|
+
index,
|
|
102
|
+
traceId,
|
|
103
|
+
});
|
|
104
|
+
// Project the SQS record onto the broker-neutral QueueRawMessage so
|
|
105
|
+
// custom parsers don't need to import aws-lambda types.
|
|
106
|
+
const parsed = parseBody({ body: record.body, messageId: record.messageId });
|
|
107
|
+
if (!parsed.ok) {
|
|
108
|
+
messageLogger.error('Message parse failed', { error: parsed.error.message });
|
|
109
|
+
failures.push({ itemIdentifier: record.messageId });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const ctx = {
|
|
113
|
+
requestId: lambdaContext.awsRequestId,
|
|
114
|
+
timestamp: new Date(),
|
|
115
|
+
traceId: traceId ?? generateId(),
|
|
116
|
+
functionName: lambdaContext.functionName,
|
|
117
|
+
rawContext: lambdaContext,
|
|
118
|
+
record,
|
|
119
|
+
index,
|
|
120
|
+
batchSize,
|
|
121
|
+
logger: messageLogger,
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
await fn(parsed.value, ctx, messageLogger);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
128
|
+
messageLogger.error('Message handler failed', { error: message });
|
|
129
|
+
if (failEntireBatchOnError) {
|
|
130
|
+
// Re-throw to abort the batch: Lambda will return an error response
|
|
131
|
+
// and the broker will redeliver the whole batch.
|
|
132
|
+
throw err instanceof Error ? err : new Error(message);
|
|
133
|
+
}
|
|
134
|
+
failures.push({ itemIdentifier: record.messageId });
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
// Bounded-concurrency iteration. A tiny hand-rolled pool avoids pulling
|
|
138
|
+
// in p-limit and keeps the framework's dep footprint small.
|
|
139
|
+
if (concurrency <= 1) {
|
|
140
|
+
for (let i = 0; i < event.Records.length; i++) {
|
|
141
|
+
await processOne(event.Records[i], i);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
let cursor = 0;
|
|
146
|
+
const workers = [];
|
|
147
|
+
const run = async () => {
|
|
148
|
+
while (true) {
|
|
149
|
+
const i = cursor++;
|
|
150
|
+
if (i >= event.Records.length)
|
|
151
|
+
return;
|
|
152
|
+
await processOne(event.Records[i], i);
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const poolSize = Math.min(concurrency, event.Records.length);
|
|
156
|
+
for (let w = 0; w < poolSize; w++)
|
|
157
|
+
workers.push(run());
|
|
158
|
+
await Promise.all(workers);
|
|
159
|
+
}
|
|
160
|
+
rootLogger.info('Batch processed', {
|
|
161
|
+
batchSize,
|
|
162
|
+
failures: failures.length,
|
|
163
|
+
succeeded: batchSize - failures.length,
|
|
164
|
+
});
|
|
165
|
+
return { batchItemFailures: failures };
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Extract the root trace ID from an X-Ray `AWSTraceHeader` (e.g.
|
|
170
|
+
* `Root=1-5759e988-bd862e3fe1be46a994272793;Parent=...`). Best-effort; falls
|
|
171
|
+
* back to `undefined` when the header is malformed.
|
|
172
|
+
*/
|
|
173
|
+
function extractTraceId(awsTraceHeader) {
|
|
174
|
+
const root = awsTraceHeader
|
|
175
|
+
.split(';')
|
|
176
|
+
.map((p) => p.trim())
|
|
177
|
+
.find((p) => p.startsWith('Root='));
|
|
178
|
+
return root ? root.slice('Root='.length) : undefined;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=queue-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-batch.js","sourceRoot":"","sources":["../../src/handler/queue-batch.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { APIGatewayProxyResultV2 } from 'aws-lambda';
|
|
7
7
|
import { VentureError } from './errors.js';
|
|
8
|
+
import { Logger } from '../logging/logger.js';
|
|
8
9
|
/**
|
|
9
10
|
* Standard success response
|
|
10
11
|
*/
|
|
@@ -63,11 +64,17 @@ export declare function error(err: VentureError, options?: {
|
|
|
63
64
|
requestId?: string;
|
|
64
65
|
}): APIGatewayProxyResultV2;
|
|
65
66
|
/**
|
|
66
|
-
* Convert any error to an API Gateway response
|
|
67
|
+
* Convert any error to an API Gateway response.
|
|
68
|
+
*
|
|
69
|
+
* Unexpected (non-VentureError) errors are wrapped in `InternalError` for the
|
|
70
|
+
* response body, and logged through the structured `Logger` so trace/request
|
|
71
|
+
* fields are preserved in CloudWatch. Pass an explicit `logger` (typically
|
|
72
|
+
* `ctx.logger` from middleware) to inherit its bound context.
|
|
67
73
|
*/
|
|
68
74
|
export declare function errorResponse(err: unknown, options?: {
|
|
69
75
|
requestId?: string;
|
|
70
76
|
logError?: boolean;
|
|
77
|
+
logger?: Logger;
|
|
71
78
|
}): APIGatewayProxyResultV2;
|
|
72
79
|
/**
|
|
73
80
|
* Create a redirect response
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAiC,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,MAAM,EAA2B,MAAM,sBAAsB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO;IAC1C,IAAI,EAAE,CAAC,CAAC;IACR,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE;YACX,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,IAAI,CAAC,EAAE;QACL,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,EACP,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,uBAAuB,CAqBzB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,EACP,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,uBAAuB,CAEzB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,uBAAuB,CAMvF;AAED;;GAEG;AACH,wBAAgB,KAAK,CACnB,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,uBAAuB,CAwBzB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACxE,uBAAuB,CAsBzB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAe,GACzB,uBAAuB,CAQzB"}
|
package/dist/handler/response.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Standardized response formatting for API Gateway.
|
|
5
5
|
*/
|
|
6
6
|
import { isVentureError, InternalError } from './errors.js';
|
|
7
|
+
import { logger as defaultLogger } from '../logging/logger.js';
|
|
7
8
|
/**
|
|
8
9
|
* Create a success response
|
|
9
10
|
*/
|
|
@@ -70,16 +71,29 @@ export function error(err, options = {}) {
|
|
|
70
71
|
};
|
|
71
72
|
}
|
|
72
73
|
/**
|
|
73
|
-
* Convert any error to an API Gateway response
|
|
74
|
+
* Convert any error to an API Gateway response.
|
|
75
|
+
*
|
|
76
|
+
* Unexpected (non-VentureError) errors are wrapped in `InternalError` for the
|
|
77
|
+
* response body, and logged through the structured `Logger` so trace/request
|
|
78
|
+
* fields are preserved in CloudWatch. Pass an explicit `logger` (typically
|
|
79
|
+
* `ctx.logger` from middleware) to inherit its bound context.
|
|
74
80
|
*/
|
|
75
81
|
export function errorResponse(err, options = {}) {
|
|
76
|
-
const { requestId, logError = true } = options;
|
|
82
|
+
const { requestId, logError = true, logger = defaultLogger } = options;
|
|
77
83
|
if (isVentureError(err)) {
|
|
78
84
|
return error(err, { requestId });
|
|
79
85
|
}
|
|
80
|
-
// Log unexpected errors
|
|
86
|
+
// Log unexpected errors through the structured logger so trace/request
|
|
87
|
+
// context is preserved, not raw console.error (which breaks CloudWatch
|
|
88
|
+
// Logs Insights queries and risks logging unredacted payloads).
|
|
81
89
|
if (logError) {
|
|
82
|
-
|
|
90
|
+
const asError = err instanceof Error ? err : new Error(String(err));
|
|
91
|
+
logger.error('Unexpected error', {
|
|
92
|
+
message: asError.message,
|
|
93
|
+
name: asError.name,
|
|
94
|
+
stack: asError.stack,
|
|
95
|
+
...(requestId ? { requestId } : {}),
|
|
96
|
+
});
|
|
83
97
|
}
|
|
84
98
|
// Wrap in InternalError for consistent response
|
|
85
99
|
return error(new InternalError(), { requestId });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAgB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../../src/handler/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-handler.d.ts","sourceRoot":"","sources":["../../src/handler/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,cAAc,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAK5D;;;GAGG;AACH,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,wBAAwB,EAAE,MAAM,MAAM,CAAC;IACvC,yBAAyB;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,KAAK,EAAE,OAAO,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,CAC/D,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,WAAW,EAChB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,UAAU,aAAa,CAAC,CAAC,GAAG,OAAO;IACjC,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE;YAAE,MAAM,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;CACrJ;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,MAAM,GAAG,OAAO;IACjD,yEAAyE;IACzE,UAAU,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IACvC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,WAAW,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7D,EAAE,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,MAAM,GAAE,iBAAiB,CAAC,MAAM,CAAM,GACrC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAsJvD;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,SAAgB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;gBAG5E,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAMhE"}
|
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
*/
|
|
48
48
|
import { createLogger } from '../logging/logger.js';
|
|
49
49
|
import { generateId } from '../logging/tracing.js';
|
|
50
|
+
import { getIntentOutputs } from '../env/memo.js';
|
|
51
|
+
import { loadDataModule } from './data-loader.js';
|
|
50
52
|
/**
|
|
51
53
|
* Build a TaskContext from a Lambda Context and event.
|
|
52
54
|
*/
|
|
@@ -64,17 +66,8 @@ function buildTaskContext(event, lambdaContext) {
|
|
|
64
66
|
if (!traceId) {
|
|
65
67
|
traceId = generateId();
|
|
66
68
|
}
|
|
67
|
-
// Hydrate intent outputs
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
const raw = process.env.VENTURE_INTENT_OUTPUTS;
|
|
71
|
-
if (raw) {
|
|
72
|
-
intentOutputs = JSON.parse(raw);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// ignore
|
|
77
|
-
}
|
|
69
|
+
// Hydrate intent outputs (memoized across warm invocations).
|
|
70
|
+
const intentOutputs = getIntentOutputs();
|
|
78
71
|
return {
|
|
79
72
|
requestId: lambdaContext.awsRequestId,
|
|
80
73
|
timestamp: new Date(),
|
|
@@ -172,7 +165,10 @@ export function taskHandler(fn, config = {}) {
|
|
|
172
165
|
}
|
|
173
166
|
// Transaction support
|
|
174
167
|
if (transactional) {
|
|
175
|
-
|
|
168
|
+
// Same loader pattern as `handler()` — surfaces a clear install-hint
|
|
169
|
+
// error when @venturekit/data isn't available instead of the raw
|
|
170
|
+
// MODULE_NOT_FOUND.
|
|
171
|
+
const data = await loadDataModule('taskHandler({ transactional: true })');
|
|
176
172
|
const tx = await data.beginTransaction();
|
|
177
173
|
ctx.tx = tx;
|
|
178
174
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../../src/handler/task-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAKH,OAAO,EAAU,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-handler.js","sourceRoot":"","sources":["../../src/handler/task-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,14 +19,18 @@
|
|
|
19
19
|
export { handler } from './handler/handler.js';
|
|
20
20
|
export type { HandlerFn, HandlerConfig, StatusCode, ZodLikeSchema } from './handler/handler.js';
|
|
21
21
|
export { taskHandler, TaskValidationError } from './handler/task-handler.js';
|
|
22
|
+
export { queueBatchHandler } from './handler/queue-batch.js';
|
|
23
|
+
export type { QueueBatchHandlerConfig, QueueMessageContext, QueueMessageHandlerFn, QueueMessageParser, QueueRawMessage, } from './handler/queue-batch.js';
|
|
22
24
|
export type { TaskHandlerFn, TaskContext, TaskHandlerConfig, } from './handler/task-handler.js';
|
|
23
25
|
export { buildContext, extractUserContext, extractLocale, } from './handler/context.js';
|
|
24
26
|
export type { BaseContext, RequestContext, UserContext, TenantContext, Transaction } from './handler/context.js';
|
|
25
27
|
export { success, created, noContent, error, errorResponse, redirect, } from './handler/response.js';
|
|
26
28
|
export type { SuccessResponse, ErrorResponse } from './handler/response.js';
|
|
27
|
-
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
29
|
+
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, PayloadTooLargeError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
28
30
|
export { Logger, createLogger, logger, } from './logging/logger.js';
|
|
29
31
|
export type { LogLevel, LogEntry, LoggerConfig } from './logging/logger.js';
|
|
32
|
+
export { createMetrics } from './logging/metrics.js';
|
|
33
|
+
export type { MetricsClient, MetricsOptions, MetricUnit, StorageResolution, } from './logging/metrics.js';
|
|
30
34
|
export { compose, loggingMiddleware, corsMiddleware, timeoutMiddleware, errorBoundaryMiddleware, rateLimitMiddleware, requestIdMiddleware, timingMiddleware, apiKeyAuthMiddleware, } from './middleware/middleware.js';
|
|
31
35
|
export type { MiddlewareFn, Middleware, RateLimitCheck, RateLimitOptions } from './middleware/middleware.js';
|
|
32
36
|
export { createMemoryRateLimitStore, RATE_LIMIT_PRESETS, } from './middleware/rate-limit-store.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGjH,OAAO,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,MAAM,EACN,YAAY,EACZ,MAAM,GACP,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG5E,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG7G,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,eAAe,EACf,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,eAAe,EACf,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGhG,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EACV,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGjH,OAAO,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,MAAM,EACN,YAAY,EACZ,MAAM,GACP,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAG5E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EACV,aAAa,EACb,cAAc,EACd,UAAU,EACV,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG7G,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACV,eAAe,EACf,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACL,eAAe,EACf,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -20,14 +20,17 @@
|
|
|
20
20
|
export { handler } from './handler/handler.js';
|
|
21
21
|
// Task Handler (functions, queues, crons)
|
|
22
22
|
export { taskHandler, TaskValidationError } from './handler/task-handler.js';
|
|
23
|
+
export { queueBatchHandler } from './handler/queue-batch.js';
|
|
23
24
|
// Context
|
|
24
25
|
export { buildContext, extractUserContext, extractLocale, } from './handler/context.js';
|
|
25
26
|
// Response utilities
|
|
26
27
|
export { success, created, noContent, error, errorResponse, redirect, } from './handler/response.js';
|
|
27
28
|
// Errors
|
|
28
|
-
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
29
|
+
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, PayloadTooLargeError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
29
30
|
// Logger
|
|
30
31
|
export { Logger, createLogger, logger, } from './logging/logger.js';
|
|
32
|
+
// Metrics (CloudWatch EMF)
|
|
33
|
+
export { createMetrics } from './logging/metrics.js';
|
|
31
34
|
// Middleware (core — no heavy deps)
|
|
32
35
|
export { compose, loggingMiddleware, corsMiddleware, timeoutMiddleware, errorBoundaryMiddleware, rateLimitMiddleware, requestIdMiddleware, timingMiddleware, apiKeyAuthMiddleware, } from './middleware/middleware.js';
|
|
33
36
|
// In-memory rate limit store (no AWS deps — safe for core)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAwB;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,0CAA0C;AAC1C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAwB;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,0CAA0C;AAC1C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAc7D,UAAU;AACV,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAG9B,qBAAqB;AACrB,OAAO,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAG/B,SAAS;AACT,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,SAAS;AACT,OAAO,EACL,MAAM,EACN,YAAY,EACZ,MAAM,GACP,MAAM,qBAAqB,CAAC;AAG7B,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQrD,oCAAoC;AACpC,OAAO,EACL,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAGpC,2DAA2D;AAC3D,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,kCAAkC,CAAC;AAM1C,qDAAqD;AACrD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,GACd,MAAM,sBAAsB,CAAC;AAG9B,sCAAsC;AACtC,OAAO,EACL,eAAe,EACf,GAAG,GACJ,MAAM,iBAAiB,CAAC"}
|
package/dist/logging/logger.d.ts
CHANGED
|
@@ -36,12 +36,29 @@ export interface LoggerConfig {
|
|
|
36
36
|
minLevel: LogLevel;
|
|
37
37
|
/** Include request context in all logs */
|
|
38
38
|
includeContext: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Fraction of `info` log lines to actually emit, between 0 and 1. Useful
|
|
41
|
+
* when high-volume Lambdas would otherwise blow the CloudWatch logs
|
|
42
|
+
* budget. `warn`/`error` are never sampled — you always want to see them.
|
|
43
|
+
*
|
|
44
|
+
* Default: resolved from `LOG_SAMPLE_RATE` env var, or `1` (emit all).
|
|
45
|
+
* Set to e.g. `0.1` to keep 10% of info logs.
|
|
46
|
+
*/
|
|
47
|
+
infoSampleRate?: number;
|
|
39
48
|
}
|
|
40
49
|
/**
|
|
41
50
|
* Logger instance — thin wrapper over pino
|
|
42
51
|
*/
|
|
43
52
|
export declare class Logger {
|
|
53
|
+
/** The currently-bound pino logger (may be a child with request fields). */
|
|
44
54
|
private pinoLogger;
|
|
55
|
+
/**
|
|
56
|
+
* Unbound "root" pino logger kept so `clearContext()` can drop request-scoped
|
|
57
|
+
* fields without discarding the caller-supplied config (log level, formatters,
|
|
58
|
+
* etc.). Re-creating via `pino({...})` would silently lose any future tweaks
|
|
59
|
+
* to the constructor-time options.
|
|
60
|
+
*/
|
|
61
|
+
private rootPinoLogger;
|
|
45
62
|
private context;
|
|
46
63
|
private config;
|
|
47
64
|
constructor(config?: Partial<LoggerConfig>);
|
|
@@ -50,7 +67,9 @@ export declare class Logger {
|
|
|
50
67
|
*/
|
|
51
68
|
setContext(context: RequestContext): void;
|
|
52
69
|
/**
|
|
53
|
-
* Clear request context
|
|
70
|
+
* Clear request context. Restores the original unbound logger instead of
|
|
71
|
+
* minting a brand-new pino root — that way log-level / formatter tweaks
|
|
72
|
+
* from construction are preserved and `clearContext()` is cheap.
|
|
54
73
|
*/
|
|
55
74
|
clearContext(): void;
|
|
56
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAwCD;;GAEG;AACH,qBAAa,MAAM;IACjB,4EAA4E;IAC5E,OAAO,CAAC,UAAU,CAAc;IAChC;;;;;OAKG;IACH,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAW9C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAWzC;;;;OAIG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAO9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAU3D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAG7D;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAe,CAAC;AAEnC;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,MAAM,CAEnE"}
|