@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,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Env Memo
|
|
3
|
+
*
|
|
4
|
+
* Memoize the expensive-to-parse env vars that are read on every request:
|
|
5
|
+
* - `VENTURE_INTENT_OUTPUTS` — JSON-encoded map of provisioned resource IDs
|
|
6
|
+
* → endpoints / ARNs. Parsed by `buildContext` and the task handler.
|
|
7
|
+
* - `VENTURE_LOCAL_URLS` — comma-separated `project=url` pairs used by
|
|
8
|
+
* `invoke()` to route local-dev cross-project calls.
|
|
9
|
+
*
|
|
10
|
+
* In Lambda the env is set once at cold-start and never mutated after, so
|
|
11
|
+
* memoizing a single JSON.parse / string split per warm container is both
|
|
12
|
+
* correct and meaningful perf savings under load. We key the cache by the
|
|
13
|
+
* raw string value so that the handful of tests which *do* mutate env vars
|
|
14
|
+
* still observe fresh parses — changing the underlying env string
|
|
15
|
+
* transparently busts the cache.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Parse `VENTURE_INTENT_OUTPUTS` with per-string memoization.
|
|
19
|
+
*
|
|
20
|
+
* Returns `undefined` when the env var is unset or malformed, matching the
|
|
21
|
+
* existing callers' expectations. Malformed JSON intentionally fails silently
|
|
22
|
+
* so a misconfigured infra layer doesn't crash every request — the fallback
|
|
23
|
+
* is simply "no intent outputs available".
|
|
24
|
+
*/
|
|
25
|
+
export declare function getIntentOutputs(): Record<string, unknown> | undefined;
|
|
26
|
+
/**
|
|
27
|
+
* Parse `VENTURE_LOCAL_URLS` (`project=url,project2=url2`) with per-string
|
|
28
|
+
* memoization. Returns an empty object when unset, so callers can safely
|
|
29
|
+
* iterate without a nullcheck.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getLocalProjectUrls(): Record<string, string>;
|
|
32
|
+
/**
|
|
33
|
+
* Reset both caches. Only exposed for tests that want to assert specific
|
|
34
|
+
* parse-miss behavior. Production code never calls this.
|
|
35
|
+
*
|
|
36
|
+
* @internal
|
|
37
|
+
*/
|
|
38
|
+
export declare function __resetEnvMemoForTests(): void;
|
|
39
|
+
//# sourceMappingURL=memo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../src/env/memo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkBtE;AAKD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkB5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAK7C"}
|
package/dist/env/memo.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Env Memo
|
|
3
|
+
*
|
|
4
|
+
* Memoize the expensive-to-parse env vars that are read on every request:
|
|
5
|
+
* - `VENTURE_INTENT_OUTPUTS` — JSON-encoded map of provisioned resource IDs
|
|
6
|
+
* → endpoints / ARNs. Parsed by `buildContext` and the task handler.
|
|
7
|
+
* - `VENTURE_LOCAL_URLS` — comma-separated `project=url` pairs used by
|
|
8
|
+
* `invoke()` to route local-dev cross-project calls.
|
|
9
|
+
*
|
|
10
|
+
* In Lambda the env is set once at cold-start and never mutated after, so
|
|
11
|
+
* memoizing a single JSON.parse / string split per warm container is both
|
|
12
|
+
* correct and meaningful perf savings under load. We key the cache by the
|
|
13
|
+
* raw string value so that the handful of tests which *do* mutate env vars
|
|
14
|
+
* still observe fresh parses — changing the underlying env string
|
|
15
|
+
* transparently busts the cache.
|
|
16
|
+
*/
|
|
17
|
+
let cachedIntentRaw;
|
|
18
|
+
let cachedIntentValue;
|
|
19
|
+
/**
|
|
20
|
+
* Parse `VENTURE_INTENT_OUTPUTS` with per-string memoization.
|
|
21
|
+
*
|
|
22
|
+
* Returns `undefined` when the env var is unset or malformed, matching the
|
|
23
|
+
* existing callers' expectations. Malformed JSON intentionally fails silently
|
|
24
|
+
* so a misconfigured infra layer doesn't crash every request — the fallback
|
|
25
|
+
* is simply "no intent outputs available".
|
|
26
|
+
*/
|
|
27
|
+
export function getIntentOutputs() {
|
|
28
|
+
const raw = process.env.VENTURE_INTENT_OUTPUTS;
|
|
29
|
+
if (raw === cachedIntentRaw)
|
|
30
|
+
return cachedIntentValue;
|
|
31
|
+
cachedIntentRaw = raw;
|
|
32
|
+
if (!raw) {
|
|
33
|
+
cachedIntentValue = undefined;
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(raw);
|
|
38
|
+
cachedIntentValue = parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
39
|
+
? parsed
|
|
40
|
+
: undefined;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
cachedIntentValue = undefined;
|
|
44
|
+
}
|
|
45
|
+
return cachedIntentValue;
|
|
46
|
+
}
|
|
47
|
+
let cachedLocalUrlsRaw;
|
|
48
|
+
let cachedLocalUrlsValue = {};
|
|
49
|
+
/**
|
|
50
|
+
* Parse `VENTURE_LOCAL_URLS` (`project=url,project2=url2`) with per-string
|
|
51
|
+
* memoization. Returns an empty object when unset, so callers can safely
|
|
52
|
+
* iterate without a nullcheck.
|
|
53
|
+
*/
|
|
54
|
+
export function getLocalProjectUrls() {
|
|
55
|
+
const raw = process.env.VENTURE_LOCAL_URLS;
|
|
56
|
+
if (raw === cachedLocalUrlsRaw)
|
|
57
|
+
return cachedLocalUrlsValue;
|
|
58
|
+
cachedLocalUrlsRaw = raw;
|
|
59
|
+
const out = {};
|
|
60
|
+
if (raw) {
|
|
61
|
+
for (const entry of raw.split(',')) {
|
|
62
|
+
const [project, url] = entry.split('=', 2);
|
|
63
|
+
const trimmedProject = project?.trim();
|
|
64
|
+
const trimmedUrl = url?.trim();
|
|
65
|
+
if (trimmedProject && trimmedUrl) {
|
|
66
|
+
out[trimmedProject] = trimmedUrl;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
cachedLocalUrlsValue = out;
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Reset both caches. Only exposed for tests that want to assert specific
|
|
75
|
+
* parse-miss behavior. Production code never calls this.
|
|
76
|
+
*
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
export function __resetEnvMemoForTests() {
|
|
80
|
+
cachedIntentRaw = undefined;
|
|
81
|
+
cachedIntentValue = undefined;
|
|
82
|
+
cachedLocalUrlsRaw = undefined;
|
|
83
|
+
cachedLocalUrlsValue = {};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/env/memo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,IAAI,eAAmC,CAAC;AACxC,IAAI,iBAAsD,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAC/C,IAAI,GAAG,KAAK,eAAe;QAAE,OAAO,iBAAiB,CAAC;IAEtD,eAAe,GAAG,GAAG,CAAC;IACtB,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,iBAAiB,GAAG,SAAS,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,iBAAiB,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAChF,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB,GAAG,SAAS,CAAC;IAChC,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,IAAI,kBAAsC,CAAC;AAC3C,IAAI,oBAAoB,GAA2B,EAAE,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC3C,IAAI,GAAG,KAAK,kBAAkB;QAAE,OAAO,oBAAoB,CAAC;IAE5D,kBAAkB,GAAG,GAAG,CAAC;IACzB,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC3C,MAAM,cAAc,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,MAAM,UAAU,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC;YAC/B,IAAI,cAAc,IAAI,UAAU,EAAE,CAAC;gBACjC,GAAG,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IACD,oBAAoB,GAAG,GAAG,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB;IACpC,eAAe,GAAG,SAAS,CAAC;IAC5B,iBAAiB,GAAG,SAAS,CAAC;IAC9B,kBAAkB,GAAG,SAAS,CAAC;IAC/B,oBAAoB,GAAG,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
|
package/dist/handler/context.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Provides typed access to request metadata, user info, and tenant context.
|
|
5
5
|
* Extensible for future auth/tenancy modules.
|
|
6
6
|
*/
|
|
7
|
+
import { verifyInternalCall, INTERNAL_HMAC_HEADERS } from '../security/internal-hmac.js';
|
|
8
|
+
import { getIntentOutputs } from '../env/memo.js';
|
|
7
9
|
/**
|
|
8
10
|
* Extract user context from JWT claims in API Gateway event
|
|
9
11
|
*/
|
|
@@ -42,20 +44,16 @@ export function extractLocale(event, supportedLocales, defaultLocale) {
|
|
|
42
44
|
* Build request context from API Gateway event
|
|
43
45
|
*/
|
|
44
46
|
export function buildContext(event, options) {
|
|
45
|
-
// Hydrate intent outputs from env var (set by infra layer after
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
// Detect internal invocation from x-venturekit-source header
|
|
57
|
-
const isInternal = event.headers?.['x-venturekit-source'] === 'internal';
|
|
58
|
-
const invokeId = event.headers?.['x-venturekit-invoke-id'] || undefined;
|
|
47
|
+
// Hydrate intent outputs from env var (set by infra layer after
|
|
48
|
+
// provisioning). Memoized across warm invocations so the JSON.parse only
|
|
49
|
+
// runs on cold start or when the env actually changes.
|
|
50
|
+
const intentOutputs = getIntentOutputs();
|
|
51
|
+
// Detect internal invocation by verifying the HMAC signature, NOT just the
|
|
52
|
+
// `x-venturekit-source` header — a forged header from an external client
|
|
53
|
+
// would otherwise grant it `isInternal: true` and bypass checks that trust
|
|
54
|
+
// that flag. `verifyInternalCall` checks signature + timestamp freshness.
|
|
55
|
+
const isInternal = verifyInternalCall(event.headers, process.env.AWS_LAMBDA_FUNCTION_NAME).valid;
|
|
56
|
+
const invokeId = event.headers?.[INTERNAL_HMAC_HEADERS.INVOKE_ID] || undefined;
|
|
59
57
|
// Extract trace ID from incoming headers (propagated by invoke())
|
|
60
58
|
const traceId = event.headers?.['x-trace-id'] || undefined;
|
|
61
59
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic loader for the optional `@venturekit/data` peer dependency.
|
|
3
|
+
*
|
|
4
|
+
* The runtime itself does not depend on `@venturekit/data` — it's only
|
|
5
|
+
* needed for `transactional: true` handlers. Leaving it as a dynamic
|
|
6
|
+
* import keeps the cold-start bundle small for handlers that don't use
|
|
7
|
+
* transactions. When a handler *does* need it and the package isn't
|
|
8
|
+
* installed, the bare `await import()` surfaces a raw Node module-not-
|
|
9
|
+
* found error that doesn't tell the user what to do about it. This
|
|
10
|
+
* helper catches that and re-throws a clearly actionable error instead.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Shape of the subset of `@venturekit/data` we use at call sites —
|
|
14
|
+
* declared locally so we don't have to declare a peer import at type
|
|
15
|
+
* level (which would make the dependency non-optional for TS consumers).
|
|
16
|
+
*/
|
|
17
|
+
export interface DataModule {
|
|
18
|
+
beginTransaction: (options?: unknown) => Promise<{
|
|
19
|
+
query: (sql: string, params?: unknown[]) => Promise<unknown>;
|
|
20
|
+
commit: () => Promise<void>;
|
|
21
|
+
rollback: () => Promise<void>;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Classify a dynamic-import failure as "package not installed" vs "package
|
|
26
|
+
* failed to load for some other reason".
|
|
27
|
+
*
|
|
28
|
+
* Exported for direct unit testing — the underlying `import()` call is hard
|
|
29
|
+
* to simulate reliably in a test harness (vitest's `vi.doMock` wraps any
|
|
30
|
+
* thrown error in its own message, which loses the MODULE_NOT_FOUND shape),
|
|
31
|
+
* so tests exercise this classifier in isolation.
|
|
32
|
+
*
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
export declare function isModuleNotFoundError(err: unknown): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Build the install-hint error shown when `@venturekit/data` is missing.
|
|
38
|
+
* Exported for unit testing; callers should use {@link loadDataModule}.
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildMissingPackageError(feature: string): Error;
|
|
43
|
+
/**
|
|
44
|
+
* Lazy-load `@venturekit/data`, surfacing a clear, actionable error when
|
|
45
|
+
* the optional peer isn't installed. The dynamic import is cached by
|
|
46
|
+
* Node's module system, so repeat callers (transactional handlers in a
|
|
47
|
+
* warm Lambda) only pay the resolution cost on first use.
|
|
48
|
+
*/
|
|
49
|
+
export declare function loadDataModule(feature: string): Promise<DataModule>;
|
|
50
|
+
//# sourceMappingURL=data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-loader.d.ts","sourceRoot":"","sources":["../../src/handler/data-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;QAC/C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAC,CAAC;CACJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAK3D;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAQ/D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBzE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic loader for the optional `@venturekit/data` peer dependency.
|
|
3
|
+
*
|
|
4
|
+
* The runtime itself does not depend on `@venturekit/data` — it's only
|
|
5
|
+
* needed for `transactional: true` handlers. Leaving it as a dynamic
|
|
6
|
+
* import keeps the cold-start bundle small for handlers that don't use
|
|
7
|
+
* transactions. When a handler *does* need it and the package isn't
|
|
8
|
+
* installed, the bare `await import()` surfaces a raw Node module-not-
|
|
9
|
+
* found error that doesn't tell the user what to do about it. This
|
|
10
|
+
* helper catches that and re-throws a clearly actionable error instead.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Classify a dynamic-import failure as "package not installed" vs "package
|
|
14
|
+
* failed to load for some other reason".
|
|
15
|
+
*
|
|
16
|
+
* Exported for direct unit testing — the underlying `import()` call is hard
|
|
17
|
+
* to simulate reliably in a test harness (vitest's `vi.doMock` wraps any
|
|
18
|
+
* thrown error in its own message, which loses the MODULE_NOT_FOUND shape),
|
|
19
|
+
* so tests exercise this classifier in isolation.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export function isModuleNotFoundError(err) {
|
|
24
|
+
const code = err?.code;
|
|
25
|
+
if (code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND')
|
|
26
|
+
return true;
|
|
27
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28
|
+
return /Cannot find (package|module)|MODULE_NOT_FOUND|ERR_MODULE_NOT_FOUND/i.test(message);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Build the install-hint error shown when `@venturekit/data` is missing.
|
|
32
|
+
* Exported for unit testing; callers should use {@link loadDataModule}.
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export function buildMissingPackageError(feature) {
|
|
37
|
+
return new Error(`${feature} requires the optional peer dependency "@venturekit/data", ` +
|
|
38
|
+
`which is not installed. Install it with:\n\n` +
|
|
39
|
+
` pnpm add @venturekit/data\n\n` +
|
|
40
|
+
`If you do not need database transactions, remove \`transactional: true\` ` +
|
|
41
|
+
`from your handler config.`);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Lazy-load `@venturekit/data`, surfacing a clear, actionable error when
|
|
45
|
+
* the optional peer isn't installed. The dynamic import is cached by
|
|
46
|
+
* Node's module system, so repeat callers (transactional handlers in a
|
|
47
|
+
* warm Lambda) only pay the resolution cost on first use.
|
|
48
|
+
*/
|
|
49
|
+
export async function loadDataModule(feature) {
|
|
50
|
+
try {
|
|
51
|
+
// `@venturekit/data` is an optional peer dependency. We intentionally
|
|
52
|
+
// don't declare it as a hard import so handlers that don't need
|
|
53
|
+
// transactions can skip the extra load cost entirely.
|
|
54
|
+
return (await import('@venturekit/data'));
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
// Distinguish "package missing" from "package errored during its own
|
|
58
|
+
// load" — both throw on import(), but the mitigation is different.
|
|
59
|
+
if (isModuleNotFoundError(err)) {
|
|
60
|
+
throw buildMissingPackageError(feature);
|
|
61
|
+
}
|
|
62
|
+
// Some other failure loading the module — surface it verbatim with a
|
|
63
|
+
// leading hint so the user knows where the error originated.
|
|
64
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
65
|
+
throw new Error(`${feature} failed to load "@venturekit/data": ${message}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-loader.js","sourceRoot":"","sources":["../../src/handler/data-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAeH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,IAAI,GAAI,GAAgC,EAAE,IAAI,CAAC;IACrD,IAAI,IAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO,qEAAqE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,OAAO,IAAI,KAAK,CACd,GAAG,OAAO,6DAA6D;QACvE,8CAA8C;QAC9C,mCAAmC;QACnC,2EAA2E;QAC3E,2BAA2B,CAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,IAAI,CAAC;QACH,sEAAsE;QACtE,gEAAgE;QAChE,sDAAsD;QACtD,OAAO,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAA0B,CAAC;IACrE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qEAAqE;QACrE,mEAAmE;QACnE,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QAED,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,GAAG,OAAO,uCAAuC,OAAO,EAAE,CAC3D,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/handler/errors.d.ts
CHANGED
|
@@ -49,6 +49,16 @@ export declare class NotFoundError extends VentureError {
|
|
|
49
49
|
export declare class ConflictError extends VentureError {
|
|
50
50
|
constructor(message: string, details?: Record<string, unknown>);
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* 413 Payload Too Large - Request body exceeds the configured size cap.
|
|
54
|
+
*
|
|
55
|
+
* Thrown by the handler pipeline when `maxBodyBytes` is exceeded; surfaces
|
|
56
|
+
* as a 413 response so clients can distinguish from generic 400s and retry
|
|
57
|
+
* with a smaller payload or switch to S3 presigned uploads.
|
|
58
|
+
*/
|
|
59
|
+
export declare class PayloadTooLargeError extends VentureError {
|
|
60
|
+
constructor(message?: string, details?: Record<string, unknown>);
|
|
61
|
+
}
|
|
52
62
|
/**
|
|
53
63
|
* 422 Unprocessable Entity - Validation failed
|
|
54
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/handler/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAEnB,IAAI,EAAE,MAAM;aAEZ,UAAU,EAAE,MAAM;aAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAMnD,MAAM;;;;;;;CASP;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,GAAE,MAAkC;CAIxD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,GAAE,MAAwB;CAI9C;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;CAK1C;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;aAG7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBADrD,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAKxD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,aAAa,CAAC,EAAE,MAAM;CAMnC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,GAAE,MAAgC;CAItD;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/handler/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAEnB,IAAI,EAAE,MAAM;aAEZ,UAAU,EAAE,MAAM;aAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjC,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;IAMnD,MAAM;;;;;;;CASP;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;gBACrC,OAAO,GAAE,MAAkC;CAIxD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,GAAE,MAAwB;CAI9C;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM;CAK1C;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED;;;;;;GAMG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,GAAE,MAAiC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI1F;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;aAG7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBADrD,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAKxD;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,aAAa,CAAC,EAAE,MAAM;CAMnC;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,GAAE,MAAgC;CAItD;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;gBAC3C,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}
|
package/dist/handler/errors.js
CHANGED
|
@@ -73,6 +73,19 @@ export class ConflictError extends VentureError {
|
|
|
73
73
|
this.name = 'ConflictError';
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* 413 Payload Too Large - Request body exceeds the configured size cap.
|
|
78
|
+
*
|
|
79
|
+
* Thrown by the handler pipeline when `maxBodyBytes` is exceeded; surfaces
|
|
80
|
+
* as a 413 response so clients can distinguish from generic 400s and retry
|
|
81
|
+
* with a smaller payload or switch to S3 presigned uploads.
|
|
82
|
+
*/
|
|
83
|
+
export class PayloadTooLargeError extends VentureError {
|
|
84
|
+
constructor(message = 'Request body too large', details) {
|
|
85
|
+
super('PAYLOAD_TOO_LARGE', message, 413, details);
|
|
86
|
+
this.name = 'PayloadTooLargeError';
|
|
87
|
+
}
|
|
88
|
+
}
|
|
76
89
|
/**
|
|
77
90
|
* 422 Unprocessable Entity - Validation failed
|
|
78
91
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/handler/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAEnB;IAEA;IACA;IAJlB,YACkB,IAAY,EAC5B,OAAe,EACC,aAAqB,GAAG,EACxB,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QALC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,eAAU,GAAV,UAAU,CAAc;QACxB,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;aAC/C;SACF,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACjD,YAAY,UAAkB,yBAAyB;QACrD,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC9C,YAAY,UAAkB,eAAe;QAC3C,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7C,YAAY,QAAgB,EAAE,EAAW;QACvC,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,YAAY,CAAC;QAC/E,KAAK,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7C,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAG7B;IAFlB,YACE,OAAe,EACC,WAAqC;QAErD,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;QAFjD,gBAAW,GAAX,WAAW,CAA0B;QAGrD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,YAAY;IAC9C,YAAY,aAAsB;QAChC,KAAK,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,EAC5C,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9C,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC7C,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,YAAY;IACvD,YAAY,OAAe;QACzB,KAAK,CAAC,qBAAqB,EAAE,GAAG,OAAO,2BAA2B,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,YAAY,CAAC;AACvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/handler/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -79,7 +79,25 @@ export interface HandlerConfig<TBody = unknown, TQuery = unknown, TParams = unkn
|
|
|
79
79
|
* Path params are extracted from the event and validated.
|
|
80
80
|
*/
|
|
81
81
|
params?: ZodLikeSchema<TParams>;
|
|
82
|
+
/**
|
|
83
|
+
* Maximum accepted request body size, in bytes. Bodies larger than this
|
|
84
|
+
* throw a 413 PayloadTooLarge before any JSON parsing runs, bounding memory
|
|
85
|
+
* and CPU usage per request.
|
|
86
|
+
*
|
|
87
|
+
* Defaults to 1 MiB (1_048_576 bytes), which covers typical JSON APIs.
|
|
88
|
+
* Increase only when you intentionally accept large payloads (uploads
|
|
89
|
+
* should go through S3 presigned URLs, not through Lambda).
|
|
90
|
+
*/
|
|
91
|
+
maxBodyBytes?: number;
|
|
82
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Default max request body size (1 MiB).
|
|
95
|
+
*
|
|
96
|
+
* Lambda's hard limit for API Gateway payloads is 10 MiB (HTTP) / 6 MiB
|
|
97
|
+
* (REST), so capping lower than that keeps us well inside the platform
|
|
98
|
+
* envelope and bounds per-request memory/CPU.
|
|
99
|
+
*/
|
|
100
|
+
export declare const DEFAULT_MAX_BODY_BYTES = 1048576;
|
|
83
101
|
/**
|
|
84
102
|
* VentureKit unified handler
|
|
85
103
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC3F,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,MAAM,EAAgB,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAW,UAAU,EAA8C,MAAM,6BAA6B,CAAC;AAI9G;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,CAC1D,IAAI,EAAE,KAAK,EACX,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,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,aAAa,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IACjF;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB;;;;OAIG;IACH,MAAM,CAAC,EAAE,UAAU,CAAC;IAEpB,iCAAiC;IACjC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAE1B,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAE/C;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAE5B;;;OAGG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE9B;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAEhC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,UAAY,CAAC;AA0FhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACxD,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAC7B,MAAM,GAAE,aAAkB,GACzB,CAAC,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAmHvF"}
|
package/dist/handler/handler.js
CHANGED
|
@@ -10,21 +10,63 @@ import { buildContext } from './context.js';
|
|
|
10
10
|
import { createLogger } from '../logging/logger.js';
|
|
11
11
|
import { success, created, noContent, errorResponse } from './response.js';
|
|
12
12
|
import { compose, loggingMiddleware, errorBoundaryMiddleware } from '../middleware/middleware.js';
|
|
13
|
-
import { UnauthorizedError, ForbiddenError, ValidationError } from './errors.js';
|
|
13
|
+
import { BadRequestError, UnauthorizedError, ForbiddenError, PayloadTooLargeError, ValidationError } from './errors.js';
|
|
14
|
+
import { loadDataModule } from './data-loader.js';
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
+
* Default max request body size (1 MiB).
|
|
17
|
+
*
|
|
18
|
+
* Lambda's hard limit for API Gateway payloads is 10 MiB (HTTP) / 6 MiB
|
|
19
|
+
* (REST), so capping lower than that keeps us well inside the platform
|
|
20
|
+
* envelope and bounds per-request memory/CPU.
|
|
16
21
|
*/
|
|
17
|
-
|
|
22
|
+
export const DEFAULT_MAX_BODY_BYTES = 1_048_576;
|
|
23
|
+
/**
|
|
24
|
+
* Parse request body.
|
|
25
|
+
*
|
|
26
|
+
* - Empty or missing body → null
|
|
27
|
+
* - Body larger than `maxBytes` → throws PayloadTooLargeError (413)
|
|
28
|
+
* - Valid JSON → parsed value
|
|
29
|
+
* - Malformed JSON → throws BadRequestError (400)
|
|
30
|
+
*
|
|
31
|
+
* Silently returning null for malformed JSON masks client bugs and can
|
|
32
|
+
* lead handlers without a schema to process phantom-null requests.
|
|
33
|
+
*
|
|
34
|
+
* The size cap is applied on the *decoded* bytes, so base64-encoded
|
|
35
|
+
* binaries can't bypass it.
|
|
36
|
+
*/
|
|
37
|
+
function parseBody(event, maxBytes = DEFAULT_MAX_BODY_BYTES) {
|
|
18
38
|
if (!event.body)
|
|
19
39
|
return null;
|
|
40
|
+
let raw;
|
|
41
|
+
let decodedBytes;
|
|
42
|
+
try {
|
|
43
|
+
if (event.isBase64Encoded) {
|
|
44
|
+
const buf = Buffer.from(event.body, 'base64');
|
|
45
|
+
decodedBytes = buf.byteLength;
|
|
46
|
+
if (decodedBytes > maxBytes) {
|
|
47
|
+
throw new PayloadTooLargeError(`Request body is ${decodedBytes} bytes; limit is ${maxBytes} bytes`);
|
|
48
|
+
}
|
|
49
|
+
raw = buf.toString('utf-8');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
decodedBytes = Buffer.byteLength(event.body, 'utf-8');
|
|
53
|
+
if (decodedBytes > maxBytes) {
|
|
54
|
+
throw new PayloadTooLargeError(`Request body is ${decodedBytes} bytes; limit is ${maxBytes} bytes`);
|
|
55
|
+
}
|
|
56
|
+
raw = event.body;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
// Re-throw our own errors; wrap anything else as a bad-request-encoding.
|
|
61
|
+
if (err instanceof PayloadTooLargeError)
|
|
62
|
+
throw err;
|
|
63
|
+
throw new BadRequestError('Malformed request body encoding');
|
|
64
|
+
}
|
|
20
65
|
try {
|
|
21
|
-
|
|
22
|
-
? Buffer.from(event.body, 'base64').toString('utf-8')
|
|
23
|
-
: event.body;
|
|
24
|
-
return JSON.parse(body);
|
|
66
|
+
return JSON.parse(raw);
|
|
25
67
|
}
|
|
26
68
|
catch {
|
|
27
|
-
|
|
69
|
+
throw new BadRequestError('Malformed JSON body');
|
|
28
70
|
}
|
|
29
71
|
}
|
|
30
72
|
/**
|
|
@@ -108,8 +150,8 @@ export function handler(fn, config = {}) {
|
|
|
108
150
|
throw new ForbiddenError('Insufficient permissions');
|
|
109
151
|
}
|
|
110
152
|
}
|
|
111
|
-
// Parse body
|
|
112
|
-
let body = parseBody(event);
|
|
153
|
+
// Parse body (enforces config.maxBodyBytes, default 1 MiB)
|
|
154
|
+
let body = parseBody(event, config.maxBodyBytes);
|
|
113
155
|
// Validate body with Zod schema if provided
|
|
114
156
|
if (config.body) {
|
|
115
157
|
const result = config.body.safeParse(body);
|
|
@@ -137,7 +179,10 @@ export function handler(fn, config = {}) {
|
|
|
137
179
|
}
|
|
138
180
|
// Transaction support
|
|
139
181
|
if (config.transactional) {
|
|
140
|
-
|
|
182
|
+
// `loadDataModule` rethrows with a clear install-instructions error
|
|
183
|
+
// when @venturekit/data isn't present, instead of the raw
|
|
184
|
+
// MODULE_NOT_FOUND that bare `import()` would surface.
|
|
185
|
+
const data = await loadDataModule('handler({ transactional: true })');
|
|
141
186
|
const tx = await data.beginTransaction();
|
|
142
187
|
ctx.tx = tx;
|
|
143
188
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"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"}
|