@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
package/dist/logging/tracing.js
CHANGED
|
@@ -5,16 +5,30 @@
|
|
|
5
5
|
* Integrates with X-Ray trace IDs and custom trace context.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* Trace headers used for propagation
|
|
8
|
+
* Trace headers used for propagation.
|
|
9
|
+
*
|
|
10
|
+
* W3C headers are the canonical modern format; VK_* headers are emitted
|
|
11
|
+
* alongside for the transition period so older services that only look at
|
|
12
|
+
* `x-trace-id` keep correlating.
|
|
9
13
|
*/
|
|
10
14
|
export const TRACE_HEADERS = {
|
|
15
|
+
/** W3C Trace Context primary header. */
|
|
16
|
+
TRACEPARENT: 'traceparent',
|
|
17
|
+
/** W3C Trace Context vendor state. */
|
|
18
|
+
TRACESTATE: 'tracestate',
|
|
19
|
+
/** W3C Baggage header (RFC). */
|
|
20
|
+
W3C_BAGGAGE: 'baggage',
|
|
21
|
+
/** Legacy VentureKit trace ID (kept for backward compat). */
|
|
11
22
|
TRACE_ID: 'x-trace-id',
|
|
23
|
+
/** Legacy VentureKit span ID. */
|
|
12
24
|
SPAN_ID: 'x-span-id',
|
|
25
|
+
/** Legacy VentureKit parent-span ID. */
|
|
13
26
|
PARENT_SPAN_ID: 'x-parent-span-id',
|
|
27
|
+
/** Legacy VentureKit baggage (JSON-encoded). */
|
|
14
28
|
BAGGAGE: 'x-trace-baggage',
|
|
15
29
|
};
|
|
16
30
|
/**
|
|
17
|
-
* Generate a random ID (
|
|
31
|
+
* Generate a random 16-hex-char span ID (8 bytes) — matches W3C `parent_id`.
|
|
18
32
|
*/
|
|
19
33
|
export function generateId() {
|
|
20
34
|
const bytes = new Uint8Array(8);
|
|
@@ -22,29 +36,177 @@ export function generateId() {
|
|
|
22
36
|
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
23
37
|
}
|
|
24
38
|
/**
|
|
25
|
-
*
|
|
39
|
+
* Generate a random 32-hex-char trace ID (16 bytes) — matches W3C `trace_id`.
|
|
40
|
+
*
|
|
41
|
+
* Kept separate from {@link generateId} because traceparent requires 128 bits
|
|
42
|
+
* of entropy, while span IDs only need 64 bits.
|
|
26
43
|
*/
|
|
27
|
-
export function
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
44
|
+
export function generateTraceId() {
|
|
45
|
+
const bytes = new Uint8Array(16);
|
|
46
|
+
crypto.getRandomValues(bytes);
|
|
47
|
+
return Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Valid trace/span ID pattern: alphanumeric, hyphen, underscore, 1–128 chars.
|
|
51
|
+
* Accepts typical hex IDs (W3C 16/32 hex), opaque ULID/UUID formats, and the
|
|
52
|
+
* `req-*` style IDs API Gateway emits. Rejects control characters, newlines,
|
|
53
|
+
* and oversized values so clients cannot inject log payload via these headers.
|
|
54
|
+
*/
|
|
55
|
+
const TRACE_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
|
|
56
|
+
/**
|
|
57
|
+
* W3C traceparent pattern: `version-traceId-spanId-flags`, all lowercase hex.
|
|
58
|
+
* - version: 2 hex chars (current spec only defines `00`)
|
|
59
|
+
* - traceId: 32 hex chars, at least one non-zero
|
|
60
|
+
* - parentId (span): 16 hex chars, at least one non-zero
|
|
61
|
+
* - flags: 2 hex chars
|
|
62
|
+
*
|
|
63
|
+
* We accept version `00` and `01`+ (forward-compat): per spec, future
|
|
64
|
+
* versions must remain parseable by `00` implementations.
|
|
65
|
+
*/
|
|
66
|
+
const TRACEPARENT_PATTERN = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
67
|
+
/**
|
|
68
|
+
* W3C tracestate pattern: comma-separated `key=value` pairs. We don't parse
|
|
69
|
+
* semantics (it's vendor-defined), we just validate the shape and length so
|
|
70
|
+
* we don't propagate garbage / injection payloads.
|
|
71
|
+
*/
|
|
72
|
+
const TRACESTATE_PATTERN = /^[\x20-\x7e]{0,512}$/;
|
|
73
|
+
/**
|
|
74
|
+
* Maximum serialized baggage size (4 KB). Protects against memory blowup
|
|
75
|
+
* from unbounded client-supplied baggage headers.
|
|
76
|
+
*/
|
|
77
|
+
const MAX_BAGGAGE_BYTES = 4096;
|
|
78
|
+
/** Sanitize an inbound trace/span ID. Returns undefined if invalid. */
|
|
79
|
+
function sanitizeId(raw) {
|
|
80
|
+
if (!raw)
|
|
81
|
+
return undefined;
|
|
82
|
+
return TRACE_ID_PATTERN.test(raw) ? raw : undefined;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse a W3C `traceparent` header. Returns `undefined` for any invalid
|
|
86
|
+
* input, or if the trace/span IDs are all-zero (reserved as "no trace").
|
|
87
|
+
*/
|
|
88
|
+
function parseTraceparent(raw) {
|
|
89
|
+
if (!raw)
|
|
90
|
+
return undefined;
|
|
91
|
+
const m = raw.trim().match(TRACEPARENT_PATTERN);
|
|
92
|
+
if (!m)
|
|
93
|
+
return undefined;
|
|
94
|
+
const [, version, traceId, spanId, flags] = m;
|
|
95
|
+
// Reject all-zero IDs per spec.
|
|
96
|
+
if (/^0+$/.test(traceId) || /^0+$/.test(spanId))
|
|
97
|
+
return undefined;
|
|
98
|
+
return { version, traceId, spanId, flags };
|
|
99
|
+
}
|
|
100
|
+
/** Parse an RFC 7230 comma-separated `baggage` header into a key→value map. */
|
|
101
|
+
function parseW3cBaggage(raw) {
|
|
102
|
+
if (!raw || raw.length > MAX_BAGGAGE_BYTES)
|
|
103
|
+
return {};
|
|
104
|
+
const out = {};
|
|
105
|
+
for (const pair of raw.split(',')) {
|
|
106
|
+
const eq = pair.indexOf('=');
|
|
107
|
+
if (eq < 1)
|
|
108
|
+
continue;
|
|
109
|
+
const key = pair.slice(0, eq).trim();
|
|
110
|
+
// Drop metadata after ';' (RFC permits `key=value;meta`) — we don't use it.
|
|
111
|
+
const value = pair.slice(eq + 1).split(';')[0].trim();
|
|
112
|
+
if (!key || !value)
|
|
113
|
+
continue;
|
|
34
114
|
try {
|
|
35
|
-
|
|
115
|
+
out[key] = decodeURIComponent(value);
|
|
36
116
|
}
|
|
37
117
|
catch {
|
|
38
|
-
//
|
|
118
|
+
// invalid percent-encoding — ignore the entry rather than throw
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
/** Serialize a key→value baggage map back into an RFC 7230 `baggage` header. */
|
|
124
|
+
function serializeW3cBaggage(baggage) {
|
|
125
|
+
const parts = [];
|
|
126
|
+
for (const [k, v] of Object.entries(baggage)) {
|
|
127
|
+
if (!k)
|
|
128
|
+
continue;
|
|
129
|
+
parts.push(`${encodeURIComponent(k)}=${encodeURIComponent(v)}`);
|
|
130
|
+
}
|
|
131
|
+
return parts.join(',');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Extract trace context from request headers.
|
|
135
|
+
*
|
|
136
|
+
* Priority order (highest → lowest) when multiple headers are present:
|
|
137
|
+
* 1. W3C `traceparent` / `tracestate` / `baggage`
|
|
138
|
+
* 2. Legacy `x-trace-id` / `x-span-id` / `x-trace-baggage`
|
|
139
|
+
* 3. Freshly generated (new root trace)
|
|
140
|
+
*
|
|
141
|
+
* All IDs are validated against a safe regex; baggage is capped at 4 KB so
|
|
142
|
+
* untrusted headers cannot cause log injection or memory blowup.
|
|
143
|
+
*/
|
|
144
|
+
export function extractTraceContext(headers) {
|
|
145
|
+
const parsedTraceparent = parseTraceparent(headers[TRACE_HEADERS.TRACEPARENT]);
|
|
146
|
+
// Preserve tracestate verbatim when valid — it's vendor-defined, we
|
|
147
|
+
// shouldn't reinterpret it.
|
|
148
|
+
const rawTraceState = headers[TRACE_HEADERS.TRACESTATE];
|
|
149
|
+
const traceState = rawTraceState && TRACESTATE_PATTERN.test(rawTraceState)
|
|
150
|
+
? rawTraceState
|
|
151
|
+
: undefined;
|
|
152
|
+
// Merge baggage: W3C `baggage` wins over our legacy JSON header, so a
|
|
153
|
+
// W3C-aware client has a predictable upgrade path.
|
|
154
|
+
let baggage = parseW3cBaggage(headers[TRACE_HEADERS.W3C_BAGGAGE]);
|
|
155
|
+
if (Object.keys(baggage).length === 0) {
|
|
156
|
+
const legacy = headers[TRACE_HEADERS.BAGGAGE];
|
|
157
|
+
if (legacy && legacy.length <= MAX_BAGGAGE_BYTES) {
|
|
158
|
+
try {
|
|
159
|
+
const parsed = JSON.parse(legacy);
|
|
160
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
161
|
+
for (const [k, v] of Object.entries(parsed)) {
|
|
162
|
+
if (typeof k === 'string'
|
|
163
|
+
&& (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {
|
|
164
|
+
baggage[k] = String(v);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// invalid legacy baggage — ignore
|
|
171
|
+
}
|
|
39
172
|
}
|
|
40
173
|
}
|
|
41
|
-
|
|
174
|
+
if (parsedTraceparent) {
|
|
175
|
+
// W3C wins — always mint a fresh span for this hop and record the
|
|
176
|
+
// caller's span as our parent, per the OTel spec.
|
|
177
|
+
return {
|
|
178
|
+
traceId: parsedTraceparent.traceId,
|
|
179
|
+
spanId: generateId(),
|
|
180
|
+
parentSpanId: parsedTraceparent.spanId,
|
|
181
|
+
traceFlags: parsedTraceparent.flags,
|
|
182
|
+
traceState,
|
|
183
|
+
baggage,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
// Legacy path: VK_* headers, with a freshly generated trace ID if none
|
|
187
|
+
// was supplied. Trace flags default to `01` (sampled).
|
|
188
|
+
const traceId = sanitizeId(headers[TRACE_HEADERS.TRACE_ID]) || generateTraceId();
|
|
189
|
+
const parentSpanId = sanitizeId(headers[TRACE_HEADERS.SPAN_ID]); // caller's span becomes our parent
|
|
190
|
+
const spanId = generateId(); // always freshly generated for the new hop
|
|
191
|
+
return {
|
|
192
|
+
traceId,
|
|
193
|
+
spanId,
|
|
194
|
+
parentSpanId,
|
|
195
|
+
traceFlags: '01',
|
|
196
|
+
traceState,
|
|
197
|
+
baggage,
|
|
198
|
+
};
|
|
42
199
|
}
|
|
43
200
|
/**
|
|
44
|
-
* Serialize trace context into headers for outbound requests
|
|
201
|
+
* Serialize trace context into headers for outbound requests.
|
|
202
|
+
*
|
|
203
|
+
* Emits both the W3C headers (`traceparent` / `tracestate` / `baggage`)
|
|
204
|
+
* and the legacy `x-trace-*` headers, so callers speaking either dialect
|
|
205
|
+
* stay correlated with us.
|
|
45
206
|
*/
|
|
46
207
|
export function injectTraceHeaders(trace) {
|
|
47
208
|
const headers = {
|
|
209
|
+
// Legacy headers — kept for backward compat.
|
|
48
210
|
[TRACE_HEADERS.TRACE_ID]: trace.traceId,
|
|
49
211
|
[TRACE_HEADERS.SPAN_ID]: trace.spanId,
|
|
50
212
|
};
|
|
@@ -53,17 +215,37 @@ export function injectTraceHeaders(trace) {
|
|
|
53
215
|
}
|
|
54
216
|
if (Object.keys(trace.baggage).length > 0) {
|
|
55
217
|
headers[TRACE_HEADERS.BAGGAGE] = JSON.stringify(trace.baggage);
|
|
218
|
+
headers[TRACE_HEADERS.W3C_BAGGAGE] = serializeW3cBaggage(trace.baggage);
|
|
219
|
+
}
|
|
220
|
+
// W3C traceparent — only emit when the trace ID looks like a valid
|
|
221
|
+
// 32-hex-char trace ID. Opaque / legacy IDs can't be re-serialized
|
|
222
|
+
// as a traceparent without violating the spec.
|
|
223
|
+
const traceIdLooksW3c = /^[0-9a-f]{32}$/.test(trace.traceId);
|
|
224
|
+
const spanIdLooksW3c = /^[0-9a-f]{16}$/.test(trace.spanId);
|
|
225
|
+
if (traceIdLooksW3c && spanIdLooksW3c) {
|
|
226
|
+
const flags = trace.traceFlags && /^[0-9a-f]{2}$/.test(trace.traceFlags)
|
|
227
|
+
? trace.traceFlags
|
|
228
|
+
: '01';
|
|
229
|
+
headers[TRACE_HEADERS.TRACEPARENT] = `00-${trace.traceId}-${trace.spanId}-${flags}`;
|
|
230
|
+
if (trace.traceState) {
|
|
231
|
+
headers[TRACE_HEADERS.TRACESTATE] = trace.traceState;
|
|
232
|
+
}
|
|
56
233
|
}
|
|
57
234
|
return headers;
|
|
58
235
|
}
|
|
59
236
|
/**
|
|
60
|
-
* Create a child trace context (for outbound calls)
|
|
237
|
+
* Create a child trace context (for outbound calls).
|
|
238
|
+
*
|
|
239
|
+
* Preserves trace ID + flags + state + baggage, mints a fresh span, records
|
|
240
|
+
* the caller as parent — standard W3C / OTel parent-child semantics.
|
|
61
241
|
*/
|
|
62
242
|
export function createChildTrace(parent) {
|
|
63
243
|
return {
|
|
64
244
|
traceId: parent.traceId,
|
|
65
245
|
spanId: generateId(),
|
|
66
246
|
parentSpanId: parent.spanId,
|
|
247
|
+
traceFlags: parent.traceFlags,
|
|
248
|
+
traceState: parent.traceState,
|
|
67
249
|
baggage: { ...parent.baggage },
|
|
68
250
|
};
|
|
69
251
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/logging/tracing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/logging/tracing.ts"],"names":[],"mappings":"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"}
|
|
@@ -95,6 +95,9 @@ export declare function rateLimitMiddleware(options: RateLimitOptions): Middlewa
|
|
|
95
95
|
* Ensures every response includes an X-Request-Id header.
|
|
96
96
|
* Uses the existing requestId from context (from API Gateway)
|
|
97
97
|
* or an incoming X-Request-Id header for distributed tracing.
|
|
98
|
+
*
|
|
99
|
+
* The incoming header is validated against a safe regex before adoption,
|
|
100
|
+
* so clients cannot inject newlines/control characters into logs.
|
|
98
101
|
*/
|
|
99
102
|
export declare function requestIdMiddleware(): Middleware<RequestContext>;
|
|
100
103
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA0B,uBAAuB,EAAqC,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,IAAI,CACjE,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,UAAU,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,CAoB/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAsC5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,UAAU,CAAC,cAAc,CAAC,CA2C7B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAa/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,KAAK,uBAAuB,GAC7E,UAAU,CAAC,cAAc,CAAC,CAW5B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,EAAE,cAAc,CAAC;IACtB,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,cAAc,CAAC,CAwCzF;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAA0B,uBAAuB,EAAqC,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,IAAI,CACjE,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,KACrB,OAAO,CAAC,GAAG,CAAC,CAAC;AAElB;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,UAAU,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,GAAG,YAAY,CAAC,cAAc,CAAC,CAoB/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAsC5E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,UAAU,CAAC,cAAc,CAAC,CA2C7B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAa/E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,cAAc,KAAK,uBAAuB,GAC7E,UAAU,CAAC,cAAc,CAAC,CAW5B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,KAAK,EAAE,cAAc,CAAC;IACtB,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,MAAM,CAAC;CAChD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,UAAU,CAAC,cAAc,CAAC,CAwCzF;AAQD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CAAC,cAAc,CAAC,CAyBhE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpF,GAAG,UAAU,CAAC,cAAc,CAAC,CAsB7B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAC1D,GAAG,UAAU,CAAC,cAAc,CAAC,CA+B7B"}
|
|
@@ -179,20 +179,29 @@ export function rateLimitMiddleware(options) {
|
|
|
179
179
|
},
|
|
180
180
|
};
|
|
181
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Valid request ID pattern: alphanumeric, hyphen, underscore, 1–128 chars.
|
|
184
|
+
* Rejects control characters (prevents log injection), newlines, and oversized values.
|
|
185
|
+
*/
|
|
186
|
+
const REQUEST_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/;
|
|
182
187
|
/**
|
|
183
188
|
* Request ID propagation middleware
|
|
184
189
|
*
|
|
185
190
|
* Ensures every response includes an X-Request-Id header.
|
|
186
191
|
* Uses the existing requestId from context (from API Gateway)
|
|
187
192
|
* or an incoming X-Request-Id header for distributed tracing.
|
|
193
|
+
*
|
|
194
|
+
* The incoming header is validated against a safe regex before adoption,
|
|
195
|
+
* so clients cannot inject newlines/control characters into logs.
|
|
188
196
|
*/
|
|
189
197
|
export function requestIdMiddleware() {
|
|
190
198
|
return {
|
|
191
199
|
name: 'requestId',
|
|
192
200
|
fn: async (ctx, next) => {
|
|
193
|
-
// Prefer incoming header for distributed tracing, fall back to API Gateway request ID
|
|
201
|
+
// Prefer incoming header for distributed tracing, fall back to API Gateway request ID.
|
|
202
|
+
// Validate the client-supplied value to prevent log injection.
|
|
194
203
|
const incomingId = ctx.rawEvent.headers?.['x-request-id'];
|
|
195
|
-
if (incomingId) {
|
|
204
|
+
if (incomingId && REQUEST_ID_PATTERN.test(incomingId)) {
|
|
196
205
|
ctx.requestId = incomingId;
|
|
197
206
|
}
|
|
198
207
|
const response = await next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuCH;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,WAAyC;IAC/D,OAAO,KAAK,EAAE,GAAmB,EAAE,YAAoD,EAAE,EAAE;QACzF,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QAEf,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAS,EAAoC,EAAE;YACrE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,KAAK,GAAG,CAAC,CAAC;YAEV,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,YAAY,EAAE,CAAC;YACxB,CAAC;YAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;QAEF,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEzB,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBAC7B,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;aACvB,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAEpC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;oBACnF,QAAQ;iBACT,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAEpC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;oBAC7B,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,QAAQ;oBACR,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAM9B;IACC,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;YAClD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACtD,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACrC,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,EAAE,CAAC;YAET,mBAAmB;YACnB,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE;wBACP,6BAA6B,EAAE,aAAa;wBAC5C,8BAA8B,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC/D,8BAA8B,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC/D,kCAAkC,EAAE,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC;wBACpE,wBAAwB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;qBACjD;oBACD,IAAI,EAAE,EAAE;iBACT,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC;YAE9B,+BAA+B;YAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtD,OAAO,QAAQ,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,QAA6C,CAAC;YAC3D,MAAM,WAAW,GAA2B;gBAC1C,6BAA6B,EAAE,aAAa;aAC7C,CAAC;YACF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,WAAW,CAAC,kCAAkC,CAAC,GAAG,MAAM,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACtD,UAAU,CAAC,GAAG,EAAE;oBACd,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,SAAS,IAAI,CAAC,CAAC,CAAC;gBAC5D,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAA8E;IAE9E,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAyBD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAyB;IAC3D,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEhE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;YAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,UAAU,EAAE,GAAG;oBACf,OAAO,EAAE;wBACP,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;wBACtE,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;wBACzC,uBAAuB,EAAE,GAAG;wBAC5B,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;qBAC5C;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE;qBAC9D,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,EAAE,CAAC;YAE9B,qCAAqC;YACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtD,MAAM,IAAI,GAAG,QAA6C,CAAC;gBAC3D,IAAI,CAAC,OAAO,GAAG;oBACb,GAAG,IAAI,CAAC,OAAO;oBACf,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACzC,uBAAuB,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;oBACjD,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;iBAC5C,CAAC;YACJ,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,19 @@ export interface DynamoDBRateLimitStoreOptions {
|
|
|
63
63
|
preset?: RateLimitPreset;
|
|
64
64
|
/** AWS region (default: process.env.AWS_REGION) */
|
|
65
65
|
region?: string;
|
|
66
|
+
/**
|
|
67
|
+
* What to do when the DynamoDB store throws — network blip, permission
|
|
68
|
+
* error, table missing, etc.
|
|
69
|
+
*
|
|
70
|
+
* - `'closed'` (default) — deny the request. Safer for auth / sensitive
|
|
71
|
+
* endpoints: an outage of the rate limiter shouldn't open the gate.
|
|
72
|
+
* - `'open'` — allow the request. Safer for best-effort public APIs where
|
|
73
|
+
* a total rate-limit outage shouldn't DoS your own users.
|
|
74
|
+
*
|
|
75
|
+
* Emits a single warn-level log line with a stable code so dashboards can
|
|
76
|
+
* alert on repeated failures.
|
|
77
|
+
*/
|
|
78
|
+
onError?: 'open' | 'closed';
|
|
66
79
|
}
|
|
67
80
|
/**
|
|
68
81
|
* Create a DynamoDB-backed rate limit check function.
|
|
@@ -124,6 +137,11 @@ export interface DefaultRateLimiterOptions {
|
|
|
124
137
|
tableName?: string;
|
|
125
138
|
/** Force in-memory store even in production (NOT recommended) */
|
|
126
139
|
forceMemory?: boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Behavior when the DynamoDB store errors out. Defaults to `'closed'`
|
|
142
|
+
* (deny on error). See {@link DynamoDBRateLimitStoreOptions.onError}.
|
|
143
|
+
*/
|
|
144
|
+
onError?: 'open' | 'closed';
|
|
127
145
|
}
|
|
128
146
|
/**
|
|
129
147
|
* Create a rate limit check function with sensible defaults.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit-store.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMtD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAK7E,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,GAAG,cAAc,CAwBjB;AAMD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limit-store.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMtD;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAK7E,CAAC;AAMF;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,CAAC,EAAE;IACnD,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,GAAG,cAAc,CAwBjB;AAMD;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,cAAc,CAAC,CAyEzB;AAMD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,yBAAyB;IACxC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,cAAc,CAAC,CAkBzB"}
|
|
@@ -99,6 +99,12 @@ export async function createDynamoDBRateLimitStore(options = {}) {
|
|
|
99
99
|
const limit = options.limit ?? presetConfig?.limit ?? 100;
|
|
100
100
|
const windowMs = options.windowMs ?? presetConfig?.windowMs ?? 60_000;
|
|
101
101
|
const region = options.region || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
|
|
102
|
+
// Default: fail closed. Rate-limit-store outages shouldn't open the gate
|
|
103
|
+
// on auth endpoints. Opt in to fail-open with `{ onError: 'open' }` if you
|
|
104
|
+
// prefer availability over throttling for non-sensitive endpoints, or set
|
|
105
|
+
// the env var VENTURE_RATE_LIMIT_ON_ERROR=open.
|
|
106
|
+
const onError = options.onError
|
|
107
|
+
?? (process.env.VENTURE_RATE_LIMIT_ON_ERROR === 'open' ? 'open' : 'closed');
|
|
102
108
|
// Lazy-load AWS SDK
|
|
103
109
|
const { DynamoDBClient, UpdateItemCommand } = await import('@aws-sdk/client-dynamodb');
|
|
104
110
|
const client = new DynamoDBClient({ region });
|
|
@@ -132,10 +138,23 @@ export async function createDynamoDBRateLimitStore(options = {}) {
|
|
|
132
138
|
return { allowed, remaining, limit, resetAt };
|
|
133
139
|
}
|
|
134
140
|
catch (err) {
|
|
135
|
-
//
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
141
|
+
// Structured failure log with a stable code so dashboards / alarms
|
|
142
|
+
// can filter on it without parsing free-text.
|
|
143
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
144
|
+
console.warn(JSON.stringify({
|
|
145
|
+
level: 'warn',
|
|
146
|
+
code: 'rate_limit_store_error',
|
|
147
|
+
component: 'rate-limit',
|
|
148
|
+
onError,
|
|
149
|
+
tableName,
|
|
150
|
+
error: message,
|
|
151
|
+
}));
|
|
152
|
+
if (onError === 'open') {
|
|
153
|
+
return { allowed: true, remaining: limit, limit, resetAt: now + windowMs };
|
|
154
|
+
}
|
|
155
|
+
// fail-closed: deny the request, signal 0 remaining, so the caller
|
|
156
|
+
// middleware returns a 429 and upstream clients back off.
|
|
157
|
+
return { allowed: false, remaining: 0, limit, resetAt: now + windowMs };
|
|
139
158
|
}
|
|
140
159
|
};
|
|
141
160
|
}
|
|
@@ -177,6 +196,7 @@ export async function createDefaultRateLimiter(options = {}) {
|
|
|
177
196
|
limit: options.limit,
|
|
178
197
|
windowMs: options.windowMs,
|
|
179
198
|
tableName: options.tableName,
|
|
199
|
+
onError: options.onError,
|
|
180
200
|
});
|
|
181
201
|
}
|
|
182
202
|
//# sourceMappingURL=rate-limit-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit-store.js","sourceRoot":"","sources":["../../src/middleware/rate-limit-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAuBH;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAmD;IAChF,OAAO,EAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC1C,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC1C,MAAM,EAAI,EAAE,KAAK,EAAE,EAAE,EAAG,QAAQ,EAAE,MAAM,EAAE;IAC1C,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE;CAC7C,CAAC;AAEF,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAO1C;IACC,MAAM,YAAY,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,EAAE,KAAK,IAAI,GAAG,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,QAAQ,IAAI,MAAM,CAAC;IAEvE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8C,CAAC;IAEvE,OAAO,KAAK,EAAE,GAAW,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE9B,uBAAuB;QACvB,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC;YAC9C,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limit-store.js","sourceRoot":"","sources":["../../src/middleware/rate-limit-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,17 @@ export interface CircuitBreakerOptions {
|
|
|
44
44
|
* @default 30000 (30 seconds)
|
|
45
45
|
*/
|
|
46
46
|
resetTimeoutMs?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Maximum number of distinct target keys to retain in the per-container
|
|
49
|
+
* breaker state. When the cap is reached, the least-recently-used target
|
|
50
|
+
* is evicted to bound memory.
|
|
51
|
+
*
|
|
52
|
+
* The default (1 024) is large enough to cover every Lambda a single
|
|
53
|
+
* container is likely to invoke across its warm lifetime while keeping
|
|
54
|
+
* worst-case memory on the order of tens of KB.
|
|
55
|
+
* @default 1024
|
|
56
|
+
*/
|
|
57
|
+
maxTargets?: number;
|
|
47
58
|
/**
|
|
48
59
|
* Optional callback fired when the circuit state changes.
|
|
49
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/patterns/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvE,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAEvC,yCAAyC;IACzC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,yBAAyB;IACzB,QAAQ,IAAI,IAAI,CAAC;CAClB;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../src/patterns/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAEvE,0CAA0C;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;IAEvC,yCAAyC;IACzC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,yBAAyB;IACzB,QAAQ,IAAI,IAAI,CAAC;CAClB;AAkBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CA0GxF"}
|
|
@@ -44,13 +44,37 @@
|
|
|
44
44
|
* while other containers may still be healthy.
|
|
45
45
|
*/
|
|
46
46
|
export function createCircuitBreaker(options = {}) {
|
|
47
|
-
const { failureThreshold = 5, resetTimeoutMs = 30_000, onStateChange, } = options;
|
|
47
|
+
const { failureThreshold = 5, resetTimeoutMs = 30_000, maxTargets = 1024, onStateChange, } = options;
|
|
48
|
+
// Monotonic counter used as the LRU clock so we don't depend on Date.now()
|
|
49
|
+
// (which can go backwards on VM clock drift) for eviction ordering.
|
|
50
|
+
let accessTick = 0;
|
|
51
|
+
// Relying on Map's insertion-order iteration to get O(1) LRU eviction: each
|
|
52
|
+
// touch deletes and re-inserts the entry, making it "most recent".
|
|
48
53
|
const targets = new Map();
|
|
54
|
+
function touch(target, ts) {
|
|
55
|
+
ts.lastAccessAt = ++accessTick;
|
|
56
|
+
// Re-insert so Map iteration order surfaces this as most-recent.
|
|
57
|
+
targets.delete(target);
|
|
58
|
+
targets.set(target, ts);
|
|
59
|
+
}
|
|
60
|
+
function pruneIfNeeded() {
|
|
61
|
+
while (targets.size > maxTargets) {
|
|
62
|
+
// First key via iterator = least-recently-inserted/touched.
|
|
63
|
+
const oldestKey = targets.keys().next().value;
|
|
64
|
+
if (oldestKey === undefined)
|
|
65
|
+
break;
|
|
66
|
+
targets.delete(oldestKey);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
49
69
|
function getOrCreate(target) {
|
|
50
70
|
let ts = targets.get(target);
|
|
51
71
|
if (!ts) {
|
|
52
|
-
ts = { state: 'closed', failures: 0, lastFailureAt: 0 };
|
|
72
|
+
ts = { state: 'closed', failures: 0, lastFailureAt: 0, lastAccessAt: ++accessTick };
|
|
53
73
|
targets.set(target, ts);
|
|
74
|
+
pruneIfNeeded();
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
touch(target, ts);
|
|
54
78
|
}
|
|
55
79
|
return ts;
|
|
56
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/patterns/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;
|
|
1
|
+
{"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/patterns/circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/patterns/invoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"invoke.d.ts","sourceRoot":"","sources":["../../src/patterns/invoke.ts"],"names":[],"mappings":"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"}
|