@venturekit/runtime 0.0.0-dev.20260701100017 → 0.0.0-dev.20260704225856
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/handler/context.d.ts +47 -2
- package/dist/handler/context.d.ts.map +1 -1
- package/dist/handler/context.js +60 -0
- package/dist/handler/context.js.map +1 -1
- package/dist/handler/create-handler.d.ts +69 -0
- package/dist/handler/create-handler.d.ts.map +1 -0
- package/dist/handler/create-handler.js +16 -0
- package/dist/handler/create-handler.js.map +1 -0
- package/dist/handler/handler.js +13 -2
- package/dist/handler/handler.js.map +1 -1
- package/dist/handler/response.d.ts +26 -1
- package/dist/handler/response.d.ts.map +1 -1
- package/dist/handler/response.js +39 -1
- package/dist/handler/response.js.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/logging/tracing.js +1 -1
- package/dist/logging/tracing.js.map +1 -1
- package/dist/patterns/events.d.ts +140 -0
- package/dist/patterns/events.d.ts.map +1 -0
- package/dist/patterns/events.js +302 -0
- package/dist/patterns/events.js.map +1 -0
- package/dist/patterns.d.ts +2 -0
- package/dist/patterns.d.ts.map +1 -1
- package/dist/patterns.js +3 -0
- package/dist/patterns.js.map +1 -1
- package/dist/security/internal-hmac.js +0 -1
- package/dist/security/internal-hmac.js.map +1 -1
- package/package.json +14 -5
|
@@ -8,8 +8,14 @@ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
|
8
8
|
import type { IntentOutputs } from '@venturekit/core';
|
|
9
9
|
/**
|
|
10
10
|
* Transaction handle for database operations.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Intentionally MIRRORED from `@venturekit/data`'s `Transaction`
|
|
13
|
+
* rather than re-exported: `@venturekit/data` is an OPTIONAL peer
|
|
14
|
+
* dependency, so the base `@venturekit/runtime` type surface must not
|
|
15
|
+
* hard-depend on it (consumers can use the runtime without the data
|
|
16
|
+
* layer installed). A compile-time conformance test
|
|
17
|
+
* (`transaction-conformance.test.ts`) asserts the two stay
|
|
18
|
+
* structurally compatible, removing the drift risk without coupling.
|
|
13
19
|
*/
|
|
14
20
|
export interface Transaction {
|
|
15
21
|
/** Execute a query within the transaction */
|
|
@@ -91,6 +97,16 @@ export interface RequestContext extends BaseContext {
|
|
|
91
97
|
rawEvent: APIGatewayProxyEventV2;
|
|
92
98
|
/** Query params from the request */
|
|
93
99
|
queryParams?: Record<string, string | undefined>;
|
|
100
|
+
/**
|
|
101
|
+
* Path params from the request, keyed by the route's `[param]` segments
|
|
102
|
+
* (e.g. `{ id: '123' }` for `GET /users/{id}`).
|
|
103
|
+
*
|
|
104
|
+
* Always populated by {@link buildContext} from `event.pathParameters`
|
|
105
|
+
* (defaulting to `{}`), and overwritten with the parsed + validated value
|
|
106
|
+
* when a `params` Zod schema is supplied to `handler()`. Read it as
|
|
107
|
+
* `ctx.pathParams?.['id']`.
|
|
108
|
+
*/
|
|
109
|
+
pathParams?: Record<string, string | undefined>;
|
|
94
110
|
/**
|
|
95
111
|
* Database transaction (populated when handler has transactional: true)
|
|
96
112
|
* Use tx.query() to run all queries within the same transaction.
|
|
@@ -145,6 +161,34 @@ export interface RequestContext extends BaseContext {
|
|
|
145
161
|
* should clear `ctx.cookies` first.
|
|
146
162
|
*/
|
|
147
163
|
export declare function setCookie(ctx: BaseContext, value: string): void;
|
|
164
|
+
/** Anything carrying an HTTP header bag — a raw API Gateway event. */
|
|
165
|
+
interface HeaderCarrier {
|
|
166
|
+
headers?: Record<string, string | undefined>;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The BROWSER-facing host of a request — the host the user's address
|
|
170
|
+
* bar shows, which is what cookie `Domain` decisions and redirect URLs
|
|
171
|
+
* must be based on.
|
|
172
|
+
*
|
|
173
|
+
* Accepts either a {@link RequestContext} (reads `ctx.rawEvent`) or a
|
|
174
|
+
* raw API Gateway event, so it works in route handlers and in code
|
|
175
|
+
* that only has the event (custom route wrappers).
|
|
176
|
+
*
|
|
177
|
+
* Header priority: `origin` → `referer` → `host` → `x-forwarded-host`.
|
|
178
|
+
* `origin`/`referer` deliberately outrank `host`: behind a same-origin
|
|
179
|
+
* SPA proxy (e.g. Next.js rewriting `/api/*` to API Gateway) the
|
|
180
|
+
* `host` header is the API's own domain while `origin`/`referer`
|
|
181
|
+
* carry the host the browser is actually on. For direct requests the
|
|
182
|
+
* two agree, so the order is harmless.
|
|
183
|
+
*
|
|
184
|
+
* Values that are full URLs are reduced to their `host`
|
|
185
|
+
* (`https://app.example.com/login` → `app.example.com`, port kept);
|
|
186
|
+
* bare `host`-header values pass through as-is. Returns `''` when no
|
|
187
|
+
* usable header is present (opaque `Origin: null` is skipped).
|
|
188
|
+
*/
|
|
189
|
+
export declare function getRequestHost(source: HeaderCarrier | {
|
|
190
|
+
rawEvent: HeaderCarrier;
|
|
191
|
+
} | null | undefined): string;
|
|
148
192
|
/**
|
|
149
193
|
* Extract user context from JWT claims in API Gateway event
|
|
150
194
|
*/
|
|
@@ -160,4 +204,5 @@ export declare function buildContext(event: APIGatewayProxyEventV2, options: {
|
|
|
160
204
|
supportedLocales: string[];
|
|
161
205
|
defaultLocale: string;
|
|
162
206
|
}): RequestContext;
|
|
207
|
+
export {};
|
|
163
208
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -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;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAItD
|
|
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
|
@@ -21,6 +21,65 @@ export function setCookie(ctx, value) {
|
|
|
21
21
|
carrier.cookies = [];
|
|
22
22
|
carrier.cookies.push(value);
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* The BROWSER-facing host of a request — the host the user's address
|
|
26
|
+
* bar shows, which is what cookie `Domain` decisions and redirect URLs
|
|
27
|
+
* must be based on.
|
|
28
|
+
*
|
|
29
|
+
* Accepts either a {@link RequestContext} (reads `ctx.rawEvent`) or a
|
|
30
|
+
* raw API Gateway event, so it works in route handlers and in code
|
|
31
|
+
* that only has the event (custom route wrappers).
|
|
32
|
+
*
|
|
33
|
+
* Header priority: `origin` → `referer` → `host` → `x-forwarded-host`.
|
|
34
|
+
* `origin`/`referer` deliberately outrank `host`: behind a same-origin
|
|
35
|
+
* SPA proxy (e.g. Next.js rewriting `/api/*` to API Gateway) the
|
|
36
|
+
* `host` header is the API's own domain while `origin`/`referer`
|
|
37
|
+
* carry the host the browser is actually on. For direct requests the
|
|
38
|
+
* two agree, so the order is harmless.
|
|
39
|
+
*
|
|
40
|
+
* Values that are full URLs are reduced to their `host`
|
|
41
|
+
* (`https://app.example.com/login` → `app.example.com`, port kept);
|
|
42
|
+
* bare `host`-header values pass through as-is. Returns `''` when no
|
|
43
|
+
* usable header is present (opaque `Origin: null` is skipped).
|
|
44
|
+
*/
|
|
45
|
+
export function getRequestHost(source) {
|
|
46
|
+
if (!source)
|
|
47
|
+
return '';
|
|
48
|
+
const carrier = 'rawEvent' in source && source.rawEvent ? source.rawEvent : source;
|
|
49
|
+
const headers = carrier.headers ?? {};
|
|
50
|
+
// API Gateway v2 lower-cases header names; direct invocations and
|
|
51
|
+
// tests may not. Normalize once.
|
|
52
|
+
const lower = {};
|
|
53
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
54
|
+
if (typeof value === 'string')
|
|
55
|
+
lower[key.toLowerCase()] = value;
|
|
56
|
+
}
|
|
57
|
+
for (const name of ['origin', 'referer', 'host', 'x-forwarded-host']) {
|
|
58
|
+
const candidate = lower[name]?.trim();
|
|
59
|
+
// 'null' is the serialized opaque origin (sandboxed iframes,
|
|
60
|
+
// privacy-redacted requests) — useless as a host, try the next.
|
|
61
|
+
if (!candidate || candidate === 'null')
|
|
62
|
+
continue;
|
|
63
|
+
// origin/referer are full URLs (scheme://host/…) — reduce to the host.
|
|
64
|
+
// host/x-forwarded-host are already bare host[:port] values. Guard the
|
|
65
|
+
// URL parse with a '://' check: `new URL('app.example.com:3000')` does
|
|
66
|
+
// NOT throw — it reads 'app.example.com:' as the scheme and yields an
|
|
67
|
+
// empty `.host` — so bare hosts must bypass the parser and pass through.
|
|
68
|
+
if (candidate.includes('://')) {
|
|
69
|
+
try {
|
|
70
|
+
const host = new URL(candidate).host;
|
|
71
|
+
if (host)
|
|
72
|
+
return host;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Malformed URL — fall through to the next candidate header.
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
return candidate;
|
|
80
|
+
}
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
24
83
|
/**
|
|
25
84
|
* Extract user context from JWT claims in API Gateway event
|
|
26
85
|
*/
|
|
@@ -83,6 +142,7 @@ export function buildContext(event, options) {
|
|
|
83
142
|
locale: extractLocale(event, options.supportedLocales, options.defaultLocale),
|
|
84
143
|
rawEvent: event,
|
|
85
144
|
queryParams: event.queryStringParameters,
|
|
145
|
+
pathParams: event.pathParameters ?? {},
|
|
86
146
|
traceId,
|
|
87
147
|
intentOutputs,
|
|
88
148
|
isInternal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `createHandler` — app-wide handler defaults.
|
|
3
|
+
*
|
|
4
|
+
* Real APIs repeat the same middleware stack on nearly every route
|
|
5
|
+
* (tenant resolution, session auth, per-tenant scope grants, …).
|
|
6
|
+
* Declaring it per route is noise and, worse, forgettable — a missed
|
|
7
|
+
* entry silently changes a route's security posture.
|
|
8
|
+
*
|
|
9
|
+
* `createHandler` returns a drop-in replacement for {@link handler}
|
|
10
|
+
* with defaults baked in. Apps define ONE module:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* // src/lib/handler.ts
|
|
14
|
+
* import { createHandler, setDefaultAuthMiddleware } from '@venturekit/runtime';
|
|
15
|
+
* setDefaultAuthMiddleware(cookieAuthMiddleware()); // scoped routes
|
|
16
|
+
* export const apiHandler = createHandler({
|
|
17
|
+
* middleware: [tenancyMiddleware, memberScopesMiddleware()],
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* and routes shrink to their essence:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* export const main = apiHandler(async (_b, ctx) => { … }, {
|
|
25
|
+
* scopes: ['admin.members.read'],
|
|
26
|
+
* params: paramsSchema,
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* Merge semantics:
|
|
31
|
+
* - `middleware` — defaults run FIRST, then the route's own entries
|
|
32
|
+
* (`[...defaults, ...route]`). The runtime's default auth
|
|
33
|
+
* middleware (see `setDefaultAuthMiddleware`) still runs before
|
|
34
|
+
* both, so defaults can rely on `ctx.user` for scoped routes.
|
|
35
|
+
* - `logLevel` — route value wins over the default.
|
|
36
|
+
* - everything else — per-route only, passed through untouched.
|
|
37
|
+
*
|
|
38
|
+
* Routes that must NOT inherit the defaults (health checks,
|
|
39
|
+
* cross-tenant/platform endpoints, webhook receivers) simply keep
|
|
40
|
+
* using the raw {@link handler} — or a second factory with different
|
|
41
|
+
* defaults. Explicit imports beat hidden opt-out flags.
|
|
42
|
+
*/
|
|
43
|
+
import type { APIGatewayProxyEventV2, APIGatewayProxyResultV2, Context } from 'aws-lambda';
|
|
44
|
+
import type { Middleware } from '../middleware/middleware.js';
|
|
45
|
+
import type { RequestContext } from './context.js';
|
|
46
|
+
import { type HandlerConfig, type HandlerFn, type ZodLikeSchema } from './handler.js';
|
|
47
|
+
/** Defaults every route created by the factory inherits. */
|
|
48
|
+
export interface HandlerDefaults {
|
|
49
|
+
/** Prepended to each route's own `middleware` array. */
|
|
50
|
+
middleware?: Middleware<RequestContext>[];
|
|
51
|
+
/** Fallback log level when the route doesn't set one. */
|
|
52
|
+
logLevel?: HandlerConfig['logLevel'];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The factory's return type — same call signatures as {@link handler},
|
|
56
|
+
* including the body-schema overload that infers `TBody`.
|
|
57
|
+
*/
|
|
58
|
+
export interface BoundHandler {
|
|
59
|
+
<TBody, TResult = unknown>(fn: HandlerFn<TBody, TResult>, config: HandlerConfig<TBody> & {
|
|
60
|
+
body: ZodLikeSchema<TBody>;
|
|
61
|
+
}): (event: APIGatewayProxyEventV2, context: Context) => Promise<APIGatewayProxyResultV2>;
|
|
62
|
+
<TBody = unknown, TResult = unknown>(fn: HandlerFn<TBody, TResult>, config?: HandlerConfig<TBody>): (event: APIGatewayProxyEventV2, context: Context) => Promise<APIGatewayProxyResultV2>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Build a {@link handler} clone with `defaults` merged into every
|
|
66
|
+
* route's config. See the module header for merge semantics.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createHandler(defaults: HandlerDefaults): BoundHandler;
|
|
69
|
+
//# sourceMappingURL=create-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-handler.d.ts","sourceRoot":"","sources":["../../src/handler/create-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACvB,OAAO,EACR,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,UAAU,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;IAC1C,yDAAyD;IACzD,QAAQ,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EACvB,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG;QAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAA;KAAE,GAC5D,CACD,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACtC,CAAC,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACjC,EAAE,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,GAC5B,CACD,KAAK,EAAE,sBAAsB,EAC7B,OAAO,EAAE,OAAO,KACb,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,YAAY,CAcrE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { handler, } from './handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build a {@link handler} clone with `defaults` merged into every
|
|
4
|
+
* route's config. See the module header for merge semantics.
|
|
5
|
+
*/
|
|
6
|
+
export function createHandler(defaults) {
|
|
7
|
+
const defaultMiddleware = defaults.middleware ?? [];
|
|
8
|
+
return ((fn, config = {}) => handler(fn, {
|
|
9
|
+
...config,
|
|
10
|
+
middleware: [...defaultMiddleware, ...(config.middleware ?? [])],
|
|
11
|
+
...(config.logLevel ?? defaults.logLevel
|
|
12
|
+
? { logLevel: config.logLevel ?? defaults.logLevel }
|
|
13
|
+
: {}),
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=create-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-handler.js","sourceRoot":"","sources":["../../src/handler/create-handler.ts"],"names":[],"mappings":"AAkDA,OAAO,EACL,OAAO,GAIR,MAAM,cAAc,CAAC;AA+BtB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAyB;IACrD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC;IAEpD,OAAO,CAAC,CACN,EAA6B,EAC7B,SAA+B,EAAE,EACjC,EAAE,CACF,OAAO,CAAiB,EAAE,EAAE;QAC1B,GAAG,MAAM;QACT,UAAU,EAAE,CAAC,GAAG,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;YACtC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACpD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAiB,CAAC;AACxB,CAAC"}
|
package/dist/handler/handler.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { buildContext } from './context.js';
|
|
10
10
|
import { createLogger } from '../logging/logger.js';
|
|
11
|
-
import { success, created, noContent, errorResponse } from './response.js';
|
|
11
|
+
import { success, created, noContent, errorResponse, isRawResult } from './response.js';
|
|
12
12
|
import { compose, loggingMiddleware, errorBoundaryMiddleware, } from '../middleware/middleware.js';
|
|
13
13
|
import { BadRequestError, UnauthorizedError, ForbiddenError, PayloadTooLargeError, ValidationError } from './errors.js';
|
|
14
14
|
import { loadDataModule } from './data-loader.js';
|
|
@@ -260,13 +260,16 @@ export function handler(fn, config = {}) {
|
|
|
260
260
|
}
|
|
261
261
|
ctx.queryParams = result.data;
|
|
262
262
|
}
|
|
263
|
-
// Validate path params with Zod schema if provided
|
|
263
|
+
// Validate path params with Zod schema if provided. The parsed
|
|
264
|
+
// (and coerced) result is written back to `ctx.pathParams` so the
|
|
265
|
+
// handler reads validated values, not the raw event strings.
|
|
264
266
|
if (config.params) {
|
|
265
267
|
const rawParams = event.pathParameters || {};
|
|
266
268
|
const result = config.params.safeParse(rawParams);
|
|
267
269
|
if (!result.success) {
|
|
268
270
|
throw zodToValidationError('params', result.error.issues);
|
|
269
271
|
}
|
|
272
|
+
ctx.pathParams = result.data;
|
|
270
273
|
}
|
|
271
274
|
// Transaction support
|
|
272
275
|
if (config.transactional) {
|
|
@@ -279,6 +282,9 @@ export function handler(fn, config = {}) {
|
|
|
279
282
|
try {
|
|
280
283
|
const result = await fn(body, ctx, logger);
|
|
281
284
|
await tx.commit();
|
|
285
|
+
if (isRawResult(result)) {
|
|
286
|
+
return attachCookies(result.result, ctx);
|
|
287
|
+
}
|
|
282
288
|
const statusCode = getStatusCode(event.requestContext.http.method, status);
|
|
283
289
|
return attachCookies(buildResponse(statusCode, result, ctx.requestId), ctx);
|
|
284
290
|
}
|
|
@@ -289,6 +295,11 @@ export function handler(fn, config = {}) {
|
|
|
289
295
|
}
|
|
290
296
|
// Execute handler (non-transactional)
|
|
291
297
|
const result = await fn(body, ctx, logger);
|
|
298
|
+
// Raw results (redirects, HTML, …) bypass the success envelope —
|
|
299
|
+
// see `rawResult()` in response.ts.
|
|
300
|
+
if (isRawResult(result)) {
|
|
301
|
+
return attachCookies(result.result, ctx);
|
|
302
|
+
}
|
|
292
303
|
// Determine status code
|
|
293
304
|
const statusCode = getStatusCode(event.requestContext.http.method, status);
|
|
294
305
|
return attachCookies(buildResponse(statusCode, result, ctx.requestId), ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAA+B,YAAY,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAU,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,7 +77,32 @@ export declare function errorResponse(err: unknown, options?: {
|
|
|
77
77
|
logger?: Logger;
|
|
78
78
|
}): APIGatewayProxyResultV2;
|
|
79
79
|
/**
|
|
80
|
-
* Create a redirect response
|
|
80
|
+
* Create a redirect response.
|
|
81
|
+
*
|
|
82
|
+
* To return this from a `handler()` route (which normally wraps every
|
|
83
|
+
* return value in the success envelope), pass it through
|
|
84
|
+
* {@link rawResult}: `return rawResult(redirect('/login'))`.
|
|
81
85
|
*/
|
|
82
86
|
export declare function redirect(location: string, permanent?: boolean): APIGatewayProxyResultV2;
|
|
87
|
+
declare const RAW_RESULT_MARKER: unique symbol;
|
|
88
|
+
/** A pre-built response that `handler()` must not envelope-wrap. */
|
|
89
|
+
export interface RawResult {
|
|
90
|
+
[RAW_RESULT_MARKER]: true;
|
|
91
|
+
result: APIGatewayProxyResultV2;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Mark a pre-built API Gateway result for pass-through.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* export const main = handler(async (_body, ctx) => {
|
|
99
|
+
* setCookie(ctx, sessionCookie);
|
|
100
|
+
* return rawResult(redirect('/dashboard'));
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export declare function rawResult(result: APIGatewayProxyResultV2): RawResult;
|
|
105
|
+
/** True when `value` was wrapped by {@link rawResult}. */
|
|
106
|
+
export declare function isRawResult(value: unknown): value is RawResult;
|
|
107
|
+
export {};
|
|
83
108
|
//# sourceMappingURL=response.d.ts.map
|
|
@@ -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;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
|
|
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;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAe,GACzB,uBAAuB,CAQzB;AAgBD,QAAA,MAAM,iBAAiB,eAAqC,CAAC;AAE7D,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC;IAC1B,MAAM,EAAE,uBAAuB,CAAC;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,CAEpE;AAED,0DAA0D;AAC1D,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAM9D"}
|
package/dist/handler/response.js
CHANGED
|
@@ -99,7 +99,11 @@ export function errorResponse(err, options = {}) {
|
|
|
99
99
|
return error(new InternalError(), { requestId });
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
|
-
* Create a redirect response
|
|
102
|
+
* Create a redirect response.
|
|
103
|
+
*
|
|
104
|
+
* To return this from a `handler()` route (which normally wraps every
|
|
105
|
+
* return value in the success envelope), pass it through
|
|
106
|
+
* {@link rawResult}: `return rawResult(redirect('/login'))`.
|
|
103
107
|
*/
|
|
104
108
|
export function redirect(location, permanent = false) {
|
|
105
109
|
return {
|
|
@@ -110,4 +114,38 @@ export function redirect(location, permanent = false) {
|
|
|
110
114
|
body: '',
|
|
111
115
|
};
|
|
112
116
|
}
|
|
117
|
+
// ─── Raw pass-through results ────────────────────────────────────
|
|
118
|
+
//
|
|
119
|
+
// `handler()` wraps whatever the route function returns in the JSON
|
|
120
|
+
// success envelope (`{ data, meta }`). That's right for APIs but wrong
|
|
121
|
+
// for browser-navigation endpoints — OAuth redirects, session handoffs,
|
|
122
|
+
// HTML responses — which need full control of status/headers/body.
|
|
123
|
+
//
|
|
124
|
+
// `rawResult()` is the explicit escape hatch: wrap a pre-built API
|
|
125
|
+
// Gateway result and `handler()` passes it through untouched (cookies
|
|
126
|
+
// stashed via `setCookie(ctx, ...)` are still attached). A symbol
|
|
127
|
+
// marker (registered via `Symbol.for`, so it survives duplicated
|
|
128
|
+
// package instances) keeps detection exact — no structural guessing
|
|
129
|
+
// against user payloads that happen to contain `statusCode`.
|
|
130
|
+
const RAW_RESULT_MARKER = Symbol.for('venturekit.rawResult');
|
|
131
|
+
/**
|
|
132
|
+
* Mark a pre-built API Gateway result for pass-through.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* export const main = handler(async (_body, ctx) => {
|
|
137
|
+
* setCookie(ctx, sessionCookie);
|
|
138
|
+
* return rawResult(redirect('/dashboard'));
|
|
139
|
+
* });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export function rawResult(result) {
|
|
143
|
+
return { [RAW_RESULT_MARKER]: true, result };
|
|
144
|
+
}
|
|
145
|
+
/** True when `value` was wrapped by {@link rawResult}. */
|
|
146
|
+
export function isRawResult(value) {
|
|
147
|
+
return (typeof value === 'object' &&
|
|
148
|
+
value !== null &&
|
|
149
|
+
value[RAW_RESULT_MARKER] === true);
|
|
150
|
+
}
|
|
113
151
|
//# sourceMappingURL=response.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/handler/response.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,14 +18,16 @@
|
|
|
18
18
|
*/
|
|
19
19
|
export { handler, setDefaultAuthMiddleware, _resetDefaultAuthMiddlewareForTesting, } from './handler/handler.js';
|
|
20
20
|
export type { HandlerFn, HandlerConfig, StatusCode, ZodLikeSchema } from './handler/handler.js';
|
|
21
|
+
export { createHandler } from './handler/create-handler.js';
|
|
22
|
+
export type { HandlerDefaults, BoundHandler } from './handler/create-handler.js';
|
|
21
23
|
export { taskHandler, TaskValidationError } from './handler/task-handler.js';
|
|
22
24
|
export { queueBatchHandler } from './handler/queue-batch.js';
|
|
23
25
|
export type { QueueBatchHandlerConfig, QueueMessageContext, QueueMessageHandlerFn, QueueMessageParser, QueueRawMessage, } from './handler/queue-batch.js';
|
|
24
26
|
export type { TaskHandlerFn, TaskContext, TaskHandlerConfig, } from './handler/task-handler.js';
|
|
25
|
-
export { buildContext, extractUserContext, extractLocale, setCookie, } from './handler/context.js';
|
|
27
|
+
export { buildContext, extractUserContext, extractLocale, setCookie, getRequestHost, } from './handler/context.js';
|
|
26
28
|
export type { BaseContext, RequestContext, UserContext, TenantContext, Transaction } from './handler/context.js';
|
|
27
|
-
export { success, created, noContent, error, errorResponse, redirect, } from './handler/response.js';
|
|
28
|
-
export type { SuccessResponse, ErrorResponse } from './handler/response.js';
|
|
29
|
+
export { success, created, noContent, error, errorResponse, redirect, rawResult, isRawResult, } from './handler/response.js';
|
|
30
|
+
export type { SuccessResponse, ErrorResponse, RawResult } from './handler/response.js';
|
|
29
31
|
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, PayloadTooLargeError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
30
32
|
export { Logger, createLogger, logger, } from './logging/logger.js';
|
|
31
33
|
export type { LogLevel, LogEntry, LoggerConfig } from './logging/logger.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,EACL,OAAO,EACP,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGjF,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,EACb,SAAS,EACT,cAAc,GACf,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,EACR,SAAS,EACT,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvF,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
|
@@ -18,13 +18,14 @@
|
|
|
18
18
|
*/
|
|
19
19
|
// Handler (HTTP routes)
|
|
20
20
|
export { handler, setDefaultAuthMiddleware, _resetDefaultAuthMiddlewareForTesting, } from './handler/handler.js';
|
|
21
|
+
export { createHandler } from './handler/create-handler.js';
|
|
21
22
|
// Task Handler (functions, queues, crons)
|
|
22
23
|
export { taskHandler, TaskValidationError } from './handler/task-handler.js';
|
|
23
24
|
export { queueBatchHandler } from './handler/queue-batch.js';
|
|
24
25
|
// Context
|
|
25
|
-
export { buildContext, extractUserContext, extractLocale, setCookie, } from './handler/context.js';
|
|
26
|
+
export { buildContext, extractUserContext, extractLocale, setCookie, getRequestHost, } from './handler/context.js';
|
|
26
27
|
// Response utilities
|
|
27
|
-
export { success, created, noContent, error, errorResponse, redirect, } from './handler/response.js';
|
|
28
|
+
export { success, created, noContent, error, errorResponse, redirect, rawResult, isRawResult, } from './handler/response.js';
|
|
28
29
|
// Errors
|
|
29
30
|
export { VentureError, BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, PayloadTooLargeError, ValidationError, RateLimitError, InternalError, ServiceUnavailableError, isVentureError, } from './handler/errors.js';
|
|
30
31
|
// Logger
|
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,EACL,OAAO,EACP,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,wBAAwB;AACxB,OAAO,EACL,OAAO,EACP,wBAAwB,EACxB,qCAAqC,GACtC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,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,EACb,SAAS,EACT,cAAc,GACf,MAAM,sBAAsB,CAAC;AAG9B,qBAAqB;AACrB,OAAO,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,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/tracing.js
CHANGED
|
@@ -151,7 +151,7 @@ export function extractTraceContext(headers) {
|
|
|
151
151
|
: undefined;
|
|
152
152
|
// Merge baggage: W3C `baggage` wins over our legacy JSON header, so a
|
|
153
153
|
// W3C-aware client has a predictable upgrade path.
|
|
154
|
-
|
|
154
|
+
const baggage = parseW3cBaggage(headers[TRACE_HEADERS.W3C_BAGGAGE]);
|
|
155
155
|
if (Object.keys(baggage).length === 0) {
|
|
156
156
|
const legacy = headers[TRACE_HEADERS.BAGGAGE];
|
|
157
157
|
if (legacy && legacy.length <= MAX_BAGGAGE_BYTES) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/logging/tracing.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/logging/tracing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Events Client
|
|
3
|
+
*
|
|
4
|
+
* Type-safe publisher for domain events on an EventBridge custom bus.
|
|
5
|
+
* Auto-detects local dev (Redis pub/sub fan-out) vs production
|
|
6
|
+
* (AWS EventBridge `PutEvents`). Automatically propagates trace context
|
|
7
|
+
* for end-to-end observability — baked into the event `detail` so
|
|
8
|
+
* subscriber Lambdas read it via `extractTraceContext`, identically to
|
|
9
|
+
* the queue client.
|
|
10
|
+
*
|
|
11
|
+
* This is the publish side of the `events` infrastructure intent
|
|
12
|
+
* (`@venturekit/infra`): the intent provisions the bus + rules +
|
|
13
|
+
* `events:PutEvents` grant + the `EVENT_BUS_<ID>_NAME` env vars this
|
|
14
|
+
* module reads. One published event can fan out to many subscribers,
|
|
15
|
+
* including subscribers in OTHER ventures.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { publishEvent } from '@venturekit/runtime/patterns';
|
|
20
|
+
*
|
|
21
|
+
* // Publish a domain event to the venture's primary bus.
|
|
22
|
+
* await publishEvent('tenant.created', {
|
|
23
|
+
* tenantId: 'tnt_123',
|
|
24
|
+
* slug: 'acme-school',
|
|
25
|
+
* plan: 'pro',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Target a specific bus + override the source.
|
|
29
|
+
* await publishEvent('plan.changed', payload, {
|
|
30
|
+
* busId: 'domain',
|
|
31
|
+
* source: 'msb-admin-api',
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import type { TraceContext } from '../logging/tracing.js';
|
|
36
|
+
export interface PublishEventOptions {
|
|
37
|
+
/**
|
|
38
|
+
* Destination bus id — matches an `events[]` intent id. Resolves the
|
|
39
|
+
* `EVENT_BUS_<ID>_NAME` env var. Defaults to the venture's primary bus
|
|
40
|
+
* (`VENTURE_EVENT_BUS_NAME`, the first declared owned bus).
|
|
41
|
+
*/
|
|
42
|
+
busId?: string;
|
|
43
|
+
/**
|
|
44
|
+
* Event `source`. Defaults to `VENTURE_EVENT_SOURCE` →
|
|
45
|
+
* `VENTURE_PROJECT_NAME` → `'app'`. Subscriber rules match on this, so
|
|
46
|
+
* keep it stable per publishing venture.
|
|
47
|
+
*/
|
|
48
|
+
source?: string;
|
|
49
|
+
/** Optional EventBridge `Resources` (ARNs / identifiers the event concerns). */
|
|
50
|
+
resources?: string[];
|
|
51
|
+
/** Trace context to propagate (auto-generated if omitted). */
|
|
52
|
+
trace?: TraceContext;
|
|
53
|
+
}
|
|
54
|
+
export interface PublishEventResult {
|
|
55
|
+
/** EventBridge event id (or a generated id in local dev). */
|
|
56
|
+
eventId: string;
|
|
57
|
+
}
|
|
58
|
+
/** A single event to publish via {@link publishEvents}. */
|
|
59
|
+
export interface EventInput<T = unknown> {
|
|
60
|
+
/** `detail-type` — the domain-event name, e.g. `'tenant.created'`. */
|
|
61
|
+
detailType: string;
|
|
62
|
+
/** Event payload (serialized to JSON as the EventBridge `Detail`). */
|
|
63
|
+
detail: T;
|
|
64
|
+
/** Per-event overrides (bus / source / resources). */
|
|
65
|
+
options?: Omit<PublishEventOptions, 'trace'>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build one EventBridge `PutEvents` entry from a domain event. Exported
|
|
69
|
+
* for unit testing the (pure) envelope shape without an AWS client.
|
|
70
|
+
*/
|
|
71
|
+
export declare function buildEventEntry(detailType: string, detail: unknown, options?: PublishEventOptions): {
|
|
72
|
+
EventBusName: string;
|
|
73
|
+
Source: string;
|
|
74
|
+
DetailType: string;
|
|
75
|
+
Detail: string;
|
|
76
|
+
Resources?: string[];
|
|
77
|
+
};
|
|
78
|
+
/** Redis pub/sub channel an event is published to in local dev. */
|
|
79
|
+
export declare function localBusChannel(busName: string): string;
|
|
80
|
+
/**
|
|
81
|
+
* Close the singleton local Redis publisher if it exists. Safe to call
|
|
82
|
+
* when none was created. Used by the dev-server SIGINT path and tests.
|
|
83
|
+
*/
|
|
84
|
+
export declare function closeLocalEventPublisher(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Test-only helper: drop the singleton so vitest suites don't leak Redis
|
|
87
|
+
* connections across `describe` blocks.
|
|
88
|
+
* @internal
|
|
89
|
+
*/
|
|
90
|
+
export declare function __resetLocalEventPublisherForTests(): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* Shape of an event as it travels over Redis in local dev — mirrors the
|
|
93
|
+
* EventBridge event structure a `Rule` matches on (`source`,
|
|
94
|
+
* `detail-type`, `detail`).
|
|
95
|
+
*/
|
|
96
|
+
export interface LocalBusEvent {
|
|
97
|
+
id: string;
|
|
98
|
+
source: string;
|
|
99
|
+
'detail-type': string;
|
|
100
|
+
detail: Record<string, unknown>;
|
|
101
|
+
resources: string[];
|
|
102
|
+
time: string;
|
|
103
|
+
}
|
|
104
|
+
/** Handle to a local-bus subscription; `close()` quits the connection. */
|
|
105
|
+
export interface LocalBusSubscription {
|
|
106
|
+
close(): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Subscribe to EVERY local event bus (`PSUBSCRIBE vk:events:*`) and invoke
|
|
110
|
+
* `onEvent(busName, event)` for each published event. This is the receive
|
|
111
|
+
* side the `vk dev` event router uses to emulate EventBridge rule routing
|
|
112
|
+
* locally — the router owns subscription matching + target dispatch; this
|
|
113
|
+
* helper owns only the transport. A DEDICATED connection is used because a
|
|
114
|
+
* Redis client in subscriber mode cannot run other commands (so it must be
|
|
115
|
+
* separate from the publisher singleton).
|
|
116
|
+
*/
|
|
117
|
+
export declare function subscribeLocalBus(onEvent: (busName: string, event: LocalBusEvent) => void): Promise<LocalBusSubscription>;
|
|
118
|
+
/**
|
|
119
|
+
* Publish a single domain event to an EventBridge bus.
|
|
120
|
+
*
|
|
121
|
+
* In production, sent via `PutEvents`. In local dev, fanned out over
|
|
122
|
+
* Redis pub/sub to every subscribing dev server. Trace context is
|
|
123
|
+
* propagated automatically via the event `detail`.
|
|
124
|
+
*
|
|
125
|
+
* @param detailType - Domain-event name (the `detail-type`), e.g. `'tenant.created'`
|
|
126
|
+
* @param detail - Event payload (serialized to JSON)
|
|
127
|
+
* @param options - Optional bus / source / resources / trace overrides
|
|
128
|
+
*/
|
|
129
|
+
export declare function publishEvent<T = unknown>(detailType: string, detail: T, options?: PublishEventOptions): Promise<PublishEventResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Publish a batch of domain events (EventBridge `PutEvents` accepts up
|
|
132
|
+
* to 10 entries per call; larger arrays are chunked automatically).
|
|
133
|
+
*
|
|
134
|
+
* Each event may target a different bus / source via its `options`.
|
|
135
|
+
*
|
|
136
|
+
* @param events - Events to publish
|
|
137
|
+
* @param shared - Options applied to every event unless the event overrides them
|
|
138
|
+
*/
|
|
139
|
+
export declare function publishEvents(events: EventInput[], shared?: PublishEventOptions): Promise<PublishEventResult[]>;
|
|
140
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/patterns/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,2DAA2D;AAC3D,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,MAAM,EAAE,CAAC,CAAC;IACV,sDAAsD;IACtD,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;CAC9C;AAiDD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,mBAAmB,GAC5B;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAoBA;AAyBD,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AA4CD;;;GAGG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED;;;;GAIG;AACH,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,IAAI,CAAC,CAExE;AA4BD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0EAA0E;AAC1E,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,GACvD,OAAO,CAAC,oBAAoB,CAAC,CAgC/B;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,OAAO,EAC5C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,EACT,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAiB7B;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAqC/B"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Events Client
|
|
3
|
+
*
|
|
4
|
+
* Type-safe publisher for domain events on an EventBridge custom bus.
|
|
5
|
+
* Auto-detects local dev (Redis pub/sub fan-out) vs production
|
|
6
|
+
* (AWS EventBridge `PutEvents`). Automatically propagates trace context
|
|
7
|
+
* for end-to-end observability — baked into the event `detail` so
|
|
8
|
+
* subscriber Lambdas read it via `extractTraceContext`, identically to
|
|
9
|
+
* the queue client.
|
|
10
|
+
*
|
|
11
|
+
* This is the publish side of the `events` infrastructure intent
|
|
12
|
+
* (`@venturekit/infra`): the intent provisions the bus + rules +
|
|
13
|
+
* `events:PutEvents` grant + the `EVENT_BUS_<ID>_NAME` env vars this
|
|
14
|
+
* module reads. One published event can fan out to many subscribers,
|
|
15
|
+
* including subscribers in OTHER ventures.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { publishEvent } from '@venturekit/runtime/patterns';
|
|
20
|
+
*
|
|
21
|
+
* // Publish a domain event to the venture's primary bus.
|
|
22
|
+
* await publishEvent('tenant.created', {
|
|
23
|
+
* tenantId: 'tnt_123',
|
|
24
|
+
* slug: 'acme-school',
|
|
25
|
+
* plan: 'pro',
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* // Target a specific bus + override the source.
|
|
29
|
+
* await publishEvent('plan.changed', payload, {
|
|
30
|
+
* busId: 'domain',
|
|
31
|
+
* source: 'msb-admin-api',
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
import { generateId, injectTraceHeaders, createChildTrace } from '../logging/tracing.js';
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Bus + source resolution
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/**
|
|
40
|
+
* Resolve the destination bus name.
|
|
41
|
+
*
|
|
42
|
+
* Priority:
|
|
43
|
+
* 1. `EVENT_BUS_{BUS_ID}_NAME` when `busId` is given (injected by the
|
|
44
|
+
* CDK app stack from the messaging tier).
|
|
45
|
+
* 2. `VENTURE_EVENT_BUS_NAME` — the venture's primary (first) owned bus.
|
|
46
|
+
* 3. Convention `{project}-{stage}-{busId|events}` as a last resort.
|
|
47
|
+
*/
|
|
48
|
+
function resolveBusName(busId) {
|
|
49
|
+
if (busId) {
|
|
50
|
+
const key = `EVENT_BUS_${busId.toUpperCase().replace(/-/g, '_')}_NAME`;
|
|
51
|
+
if (process.env[key])
|
|
52
|
+
return process.env[key];
|
|
53
|
+
}
|
|
54
|
+
if (process.env.VENTURE_EVENT_BUS_NAME)
|
|
55
|
+
return process.env.VENTURE_EVENT_BUS_NAME;
|
|
56
|
+
const project = process.env.VENTURE_PROJECT_NAME || process.env.VENTURE_APP_NAME || 'app';
|
|
57
|
+
const stage = process.env.VENTURE_STAGE || 'dev';
|
|
58
|
+
return `${project}-${stage}-${busId ?? 'events'}`;
|
|
59
|
+
}
|
|
60
|
+
function resolveSource(explicit) {
|
|
61
|
+
return (explicit ||
|
|
62
|
+
process.env.VENTURE_EVENT_SOURCE ||
|
|
63
|
+
process.env.VENTURE_PROJECT_NAME ||
|
|
64
|
+
process.env.VENTURE_APP_NAME ||
|
|
65
|
+
'app');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build the trace metadata baked into the event `detail` under `__trace`.
|
|
69
|
+
* Mirrors the queue client so a consumer's `extractTraceContext` works
|
|
70
|
+
* regardless of whether the message arrived via SQS or EventBridge.
|
|
71
|
+
*/
|
|
72
|
+
function buildTracePayload(trace) {
|
|
73
|
+
const ctx = trace
|
|
74
|
+
? createChildTrace(trace)
|
|
75
|
+
: { traceId: generateId(), spanId: generateId(), baggage: {} };
|
|
76
|
+
return injectTraceHeaders(ctx);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build one EventBridge `PutEvents` entry from a domain event. Exported
|
|
80
|
+
* for unit testing the (pure) envelope shape without an AWS client.
|
|
81
|
+
*/
|
|
82
|
+
export function buildEventEntry(detailType, detail, options) {
|
|
83
|
+
const __trace = buildTracePayload(options?.trace);
|
|
84
|
+
const body = typeof detail === 'object' && detail !== null ? detail : { data: detail };
|
|
85
|
+
const entry = {
|
|
86
|
+
EventBusName: resolveBusName(options?.busId),
|
|
87
|
+
Source: resolveSource(options?.source),
|
|
88
|
+
DetailType: detailType,
|
|
89
|
+
Detail: JSON.stringify({ ...body, __trace }),
|
|
90
|
+
};
|
|
91
|
+
if (options?.resources && options.resources.length > 0) {
|
|
92
|
+
entry.Resources = options.resources;
|
|
93
|
+
}
|
|
94
|
+
return entry;
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// AWS EventBridge client (lazy-loaded)
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
let _ebClient = null;
|
|
100
|
+
async function getEventBridgeClient() {
|
|
101
|
+
if (!_ebClient) {
|
|
102
|
+
const { EventBridgeClient } = await import('@aws-sdk/client-eventbridge');
|
|
103
|
+
const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1';
|
|
104
|
+
_ebClient = new EventBridgeClient({ region });
|
|
105
|
+
}
|
|
106
|
+
return _ebClient;
|
|
107
|
+
}
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Local dev: Redis pub/sub fan-out (mirrors EventBridge routing)
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
function isLocalDev() {
|
|
112
|
+
return process.env.VENTURE_LOCAL === 'true';
|
|
113
|
+
}
|
|
114
|
+
/** Redis pub/sub channel an event is published to in local dev. */
|
|
115
|
+
export function localBusChannel(busName) {
|
|
116
|
+
return `vk:events:${busName}`;
|
|
117
|
+
}
|
|
118
|
+
function resolveRedisUrl() {
|
|
119
|
+
if (process.env.VENTURE_REDIS_URL)
|
|
120
|
+
return process.env.VENTURE_REDIS_URL;
|
|
121
|
+
const host = process.env.VENTURE_QUEUE_REDIS_HOST;
|
|
122
|
+
const port = process.env.VENTURE_QUEUE_REDIS_PORT;
|
|
123
|
+
if (host)
|
|
124
|
+
return `redis://${host}:${port || '6379'}`;
|
|
125
|
+
return 'redis://localhost:6379';
|
|
126
|
+
}
|
|
127
|
+
let _localPublisher = null;
|
|
128
|
+
let _shutdownHookRegistered = false;
|
|
129
|
+
function registerShutdownHook() {
|
|
130
|
+
if (_shutdownHookRegistered)
|
|
131
|
+
return;
|
|
132
|
+
_shutdownHookRegistered = true;
|
|
133
|
+
const shutdown = () => {
|
|
134
|
+
closeLocalEventPublisher().catch(() => {
|
|
135
|
+
/* best-effort */
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
process.once('SIGINT', shutdown);
|
|
139
|
+
process.once('SIGTERM', shutdown);
|
|
140
|
+
process.once('beforeExit', shutdown);
|
|
141
|
+
}
|
|
142
|
+
async function getLocalPublisher() {
|
|
143
|
+
if (!_localPublisher) {
|
|
144
|
+
const { Redis } = await import('ioredis');
|
|
145
|
+
_localPublisher = new Redis(resolveRedisUrl(), {
|
|
146
|
+
maxRetriesPerRequest: 3,
|
|
147
|
+
enableReadyCheck: false,
|
|
148
|
+
lazyConnect: false,
|
|
149
|
+
});
|
|
150
|
+
_localPublisher.on('error', (err) => {
|
|
151
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
152
|
+
console.error(`[local-events] ${err.message}`);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
registerShutdownHook();
|
|
156
|
+
}
|
|
157
|
+
return _localPublisher;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Close the singleton local Redis publisher if it exists. Safe to call
|
|
161
|
+
* when none was created. Used by the dev-server SIGINT path and tests.
|
|
162
|
+
*/
|
|
163
|
+
export async function closeLocalEventPublisher() {
|
|
164
|
+
const client = _localPublisher;
|
|
165
|
+
_localPublisher = null;
|
|
166
|
+
if (client) {
|
|
167
|
+
await client.quit();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Test-only helper: drop the singleton so vitest suites don't leak Redis
|
|
172
|
+
* connections across `describe` blocks.
|
|
173
|
+
* @internal
|
|
174
|
+
*/
|
|
175
|
+
export async function __resetLocalEventPublisherForTests() {
|
|
176
|
+
await closeLocalEventPublisher();
|
|
177
|
+
}
|
|
178
|
+
async function publishLocal(entry) {
|
|
179
|
+
const eventId = generateId();
|
|
180
|
+
const client = await getLocalPublisher();
|
|
181
|
+
// The dev-server event router (`vk dev`) PSUBSCRIBEs `vk:events:*`,
|
|
182
|
+
// filters by each venture's `events[]` subscriptions, and enqueues
|
|
183
|
+
// matches to the target local queue — the same fan-out EventBridge
|
|
184
|
+
// does in production, including cross-venture (both dev servers share
|
|
185
|
+
// one Redis).
|
|
186
|
+
await client.publish(localBusChannel(entry.EventBusName), JSON.stringify({
|
|
187
|
+
id: eventId,
|
|
188
|
+
source: entry.Source,
|
|
189
|
+
'detail-type': entry.DetailType,
|
|
190
|
+
detail: JSON.parse(entry.Detail),
|
|
191
|
+
resources: entry.Resources ?? [],
|
|
192
|
+
time: new Date().toISOString(),
|
|
193
|
+
}));
|
|
194
|
+
return { eventId };
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Subscribe to EVERY local event bus (`PSUBSCRIBE vk:events:*`) and invoke
|
|
198
|
+
* `onEvent(busName, event)` for each published event. This is the receive
|
|
199
|
+
* side the `vk dev` event router uses to emulate EventBridge rule routing
|
|
200
|
+
* locally — the router owns subscription matching + target dispatch; this
|
|
201
|
+
* helper owns only the transport. A DEDICATED connection is used because a
|
|
202
|
+
* Redis client in subscriber mode cannot run other commands (so it must be
|
|
203
|
+
* separate from the publisher singleton).
|
|
204
|
+
*/
|
|
205
|
+
export async function subscribeLocalBus(onEvent) {
|
|
206
|
+
const { Redis } = await import('ioredis');
|
|
207
|
+
const client = new Redis(resolveRedisUrl(), {
|
|
208
|
+
maxRetriesPerRequest: null,
|
|
209
|
+
enableReadyCheck: false,
|
|
210
|
+
lazyConnect: false,
|
|
211
|
+
});
|
|
212
|
+
client.on('error', (err) => {
|
|
213
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
214
|
+
console.error(`[local-events] subscriber: ${err.message}`);
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
const prefix = localBusChannel('');
|
|
218
|
+
client.on('pmessage', (_pattern, channel, message) => {
|
|
219
|
+
if (!channel.startsWith(prefix))
|
|
220
|
+
return;
|
|
221
|
+
const busName = channel.slice(prefix.length);
|
|
222
|
+
let event;
|
|
223
|
+
try {
|
|
224
|
+
event = JSON.parse(message);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return; // ignore malformed payloads
|
|
228
|
+
}
|
|
229
|
+
onEvent(busName, event);
|
|
230
|
+
});
|
|
231
|
+
await client.psubscribe(`${prefix}*`);
|
|
232
|
+
return {
|
|
233
|
+
async close() {
|
|
234
|
+
await client.quit();
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
// ---------------------------------------------------------------------------
|
|
239
|
+
// Public API
|
|
240
|
+
// ---------------------------------------------------------------------------
|
|
241
|
+
/**
|
|
242
|
+
* Publish a single domain event to an EventBridge bus.
|
|
243
|
+
*
|
|
244
|
+
* In production, sent via `PutEvents`. In local dev, fanned out over
|
|
245
|
+
* Redis pub/sub to every subscribing dev server. Trace context is
|
|
246
|
+
* propagated automatically via the event `detail`.
|
|
247
|
+
*
|
|
248
|
+
* @param detailType - Domain-event name (the `detail-type`), e.g. `'tenant.created'`
|
|
249
|
+
* @param detail - Event payload (serialized to JSON)
|
|
250
|
+
* @param options - Optional bus / source / resources / trace overrides
|
|
251
|
+
*/
|
|
252
|
+
export async function publishEvent(detailType, detail, options) {
|
|
253
|
+
const entry = buildEventEntry(detailType, detail, options);
|
|
254
|
+
if (isLocalDev()) {
|
|
255
|
+
return publishLocal(entry);
|
|
256
|
+
}
|
|
257
|
+
const client = await getEventBridgeClient();
|
|
258
|
+
const { PutEventsCommand } = await import('@aws-sdk/client-eventbridge');
|
|
259
|
+
const result = await client.send(new PutEventsCommand({ Entries: [entry] }));
|
|
260
|
+
if (result.FailedEntryCount && result.FailedEntryCount > 0) {
|
|
261
|
+
const reason = result.Entries?.find((e) => e.ErrorCode)?.ErrorMessage ?? 'unknown';
|
|
262
|
+
throw new Error(`Failed to publish event '${detailType}': ${reason}`);
|
|
263
|
+
}
|
|
264
|
+
return { eventId: result.Entries?.[0]?.EventId ?? generateId() };
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Publish a batch of domain events (EventBridge `PutEvents` accepts up
|
|
268
|
+
* to 10 entries per call; larger arrays are chunked automatically).
|
|
269
|
+
*
|
|
270
|
+
* Each event may target a different bus / source via its `options`.
|
|
271
|
+
*
|
|
272
|
+
* @param events - Events to publish
|
|
273
|
+
* @param shared - Options applied to every event unless the event overrides them
|
|
274
|
+
*/
|
|
275
|
+
export async function publishEvents(events, shared) {
|
|
276
|
+
if (events.length === 0)
|
|
277
|
+
return [];
|
|
278
|
+
const results = [];
|
|
279
|
+
if (isLocalDev()) {
|
|
280
|
+
for (const ev of events) {
|
|
281
|
+
const entry = buildEventEntry(ev.detailType, ev.detail, { ...shared, ...ev.options });
|
|
282
|
+
results.push(await publishLocal(entry));
|
|
283
|
+
}
|
|
284
|
+
return results;
|
|
285
|
+
}
|
|
286
|
+
const client = await getEventBridgeClient();
|
|
287
|
+
const { PutEventsCommand } = await import('@aws-sdk/client-eventbridge');
|
|
288
|
+
for (let i = 0; i < events.length; i += 10) {
|
|
289
|
+
const batch = events.slice(i, i + 10);
|
|
290
|
+
const entries = batch.map((ev) => buildEventEntry(ev.detailType, ev.detail, { ...shared, ...ev.options }));
|
|
291
|
+
const result = await client.send(new PutEventsCommand({ Entries: entries }));
|
|
292
|
+
for (const e of result.Entries ?? []) {
|
|
293
|
+
results.push({ eventId: e.EventId ?? generateId() });
|
|
294
|
+
}
|
|
295
|
+
if (result.FailedEntryCount && result.FailedEntryCount > 0) {
|
|
296
|
+
const reason = result.Entries?.find((e) => e.ErrorCode)?.ErrorMessage ?? 'unknown';
|
|
297
|
+
throw new Error(`Failed to publish ${result.FailedEntryCount} of ${batch.length} events: ${reason}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return results;
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/patterns/events.ts"],"names":[],"mappings":"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"}
|
package/dist/patterns.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export { saga, parallel, createMemorySagaStore, createDynamoDBSagaStore, createD
|
|
|
14
14
|
export type { SagaStep, SagaStepEntry, ParallelStepGroup, SagaStatus, SagaRecord, SagaStore, StepResult, SagaResult, SagaOptions, SagaRunOptions, SagaStepEvent, SagaCompensateEvent, SagaFailedEvent, DynamoDBSagaStoreOptions, DefaultSagaStoreOptions, } from './patterns/saga.js';
|
|
15
15
|
export { sendMessage, sendMessages, closeLocalQueueDriver, } from './patterns/queue.js';
|
|
16
16
|
export type { SendMessageOptions, SendMessageResult, } from './queue/types.js';
|
|
17
|
+
export { publishEvent, publishEvents, buildEventEntry, localBusChannel, closeLocalEventPublisher, subscribeLocalBus, } from './patterns/events.js';
|
|
18
|
+
export type { PublishEventOptions, PublishEventResult, EventInput, LocalBusEvent, LocalBusSubscription, } from './patterns/events.js';
|
|
17
19
|
export { createRedisDriver, } from './queue/index.js';
|
|
18
20
|
export type { QueueDriver, QueueMessage, QueueStats, QueueConfig, ReceiveMessageOptions, ChangeVisibilityOptions, } from './queue/types.js';
|
|
19
21
|
export { idempotencyMiddleware, taskIdempotencyMiddleware, IdempotencyConflictError, MissingIdempotencyKeyError, createMemoryIdempotencyStore, createDynamoDBIdempotencyStore, createDefaultIdempotencyStore, headerKeyExtractor, bodyFieldKeyExtractor, sqsMessageIdExtractor, eventFieldKeyExtractor, } from './patterns/idempotency.js';
|
package/dist/patterns.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,YAAY,GACb,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAClB,2BAA2B,EAC3B,sBAAsB,EACtB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,2BAA2B,CAAC"}
|
package/dist/patterns.js
CHANGED
|
@@ -14,6 +14,9 @@ export { createCircuitBreaker, } from './patterns/circuit-breaker.js';
|
|
|
14
14
|
export { saga, parallel, createMemorySagaStore, createDynamoDBSagaStore, createDefaultSagaStore, } from './patterns/saga.js';
|
|
15
15
|
// Queue Client
|
|
16
16
|
export { sendMessage, sendMessages, closeLocalQueueDriver, } from './patterns/queue.js';
|
|
17
|
+
// Events Client (EventBridge publisher — the publish side of the
|
|
18
|
+
// `events` infrastructure intent)
|
|
19
|
+
export { publishEvent, publishEvents, buildEventEntry, localBusChannel, closeLocalEventPublisher, subscribeLocalBus, } from './patterns/events.js';
|
|
17
20
|
// Low-level queue driver API (Redis driver, types) — surfaced so the CLI
|
|
18
21
|
// dev-server can drive the same Redis store the runtime client writes to.
|
|
19
22
|
export { createRedisDriver, } from './queue/index.js';
|
package/dist/patterns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAa9B,kBAAkB;AAClB,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAOvC,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAmB5B,eAAe;AACf,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAM7B,yEAAyE;AACzE,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAU1B,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC"}
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../src/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,MAAM,EACN,YAAY,EACZ,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAa9B,kBAAkB;AAClB,OAAO,EACL,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAOvC,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAmB5B,eAAe;AACf,OAAO,EACL,WAAW,EACX,YAAY,EACZ,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAM7B,iEAAiE;AACjE,kCAAkC;AAClC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAS9B,yEAAyE;AACzE,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAU1B,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,6BAA6B,EAC7B,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC"}
|
|
@@ -38,7 +38,6 @@ function getSecret() {
|
|
|
38
38
|
return secret;
|
|
39
39
|
if (!warnedAboutFallback) {
|
|
40
40
|
warnedAboutFallback = true;
|
|
41
|
-
// eslint-disable-next-line no-console
|
|
42
41
|
console.warn('[venturekit] VENTURE_INTERNAL_HMAC_SECRET not set — using ' +
|
|
43
42
|
'insecure fallback for local development. In production, CDK injects ' +
|
|
44
43
|
'a per-project secret automatically; missing it means the function ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-hmac.js","sourceRoot":"","sources":["../../src/security/internal-hmac.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,8DAA8D;IAC9D,MAAM,EAAE,qBAAqB;IAC7B,gDAAgD;IAChD,SAAS,EAAE,wBAAwB;IACnC,wCAAwC;IACxC,SAAS,EAAE,wBAAwB;IACnC,oDAAoD;IACpD,SAAS,EAAE,wBAAwB;CAC3B,CAAC;AAEX,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAEvD,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAEhC,sEAAsE;AACtE,SAAS,SAAS;IAChB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACxD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IAE/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzB,mBAAmB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"internal-hmac.js","sourceRoot":"","sources":["../../src/security/internal-hmac.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venturekit/runtime",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.20260704225856",
|
|
4
4
|
"description": "VentureKit runtime utilities - handlers, context, middleware, logging",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -44,9 +44,13 @@
|
|
|
44
44
|
],
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
|
47
|
-
"url": "https://github.com/venturekit-dev/venturekit.
|
|
47
|
+
"url": "https://github.com/venturekit-dev/venturekit.git",
|
|
48
48
|
"directory": "packages/runtime"
|
|
49
49
|
},
|
|
50
|
+
"homepage": "https://venturekit.dev",
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/venturekit-dev/venturekit/issues"
|
|
53
|
+
},
|
|
50
54
|
"publishConfig": {
|
|
51
55
|
"registry": "https://registry.npmjs.org",
|
|
52
56
|
"access": "public"
|
|
@@ -61,15 +65,16 @@
|
|
|
61
65
|
"dependencies": {
|
|
62
66
|
"@aws-sdk/client-secrets-manager": "^3.1068.0",
|
|
63
67
|
"@aws-sdk/client-ssm": "^3.1068.0",
|
|
64
|
-
"@venturekit/core": "0.0.0-dev.
|
|
68
|
+
"@venturekit/core": "0.0.0-dev.20260704225856",
|
|
65
69
|
"pino": "^10.3.1"
|
|
66
70
|
},
|
|
67
71
|
"peerDependencies": {
|
|
68
|
-
"@venturekit/data": "0.0.0-dev.
|
|
72
|
+
"@venturekit/data": "0.0.0-dev.20260704225856",
|
|
69
73
|
"@aws-sdk/client-dynamodb": "^3.500.0",
|
|
70
74
|
"@aws-sdk/lib-dynamodb": "^3.500.0",
|
|
71
75
|
"@aws-sdk/client-lambda": "^3.1068.0",
|
|
72
76
|
"@aws-sdk/client-sqs": "^3.1068.0",
|
|
77
|
+
"@aws-sdk/client-eventbridge": "^3.1068.0",
|
|
73
78
|
"@aws-sdk/client-apigatewaymanagementapi": "^3.500.0",
|
|
74
79
|
"ioredis": "^5.0.0",
|
|
75
80
|
"zod": "^3.22.0"
|
|
@@ -90,6 +95,9 @@
|
|
|
90
95
|
"@aws-sdk/client-sqs": {
|
|
91
96
|
"optional": true
|
|
92
97
|
},
|
|
98
|
+
"@aws-sdk/client-eventbridge": {
|
|
99
|
+
"optional": true
|
|
100
|
+
},
|
|
93
101
|
"ioredis": {
|
|
94
102
|
"optional": true
|
|
95
103
|
},
|
|
@@ -101,11 +109,12 @@
|
|
|
101
109
|
}
|
|
102
110
|
},
|
|
103
111
|
"devDependencies": {
|
|
104
|
-
"@venturekit/data": "0.0.0-dev.
|
|
112
|
+
"@venturekit/data": "0.0.0-dev.20260704225856",
|
|
105
113
|
"@types/aws-lambda": "^8.10.131",
|
|
106
114
|
"@types/node": "^25.6.0",
|
|
107
115
|
"@aws-sdk/client-lambda": "^3.1068.0",
|
|
108
116
|
"@aws-sdk/client-sqs": "^3.1068.0",
|
|
117
|
+
"@aws-sdk/client-eventbridge": "^3.1068.0",
|
|
109
118
|
"ioredis": "^5.0.0",
|
|
110
119
|
"typescript": "^5.3.0"
|
|
111
120
|
},
|