@venturekit/runtime 0.0.0-dev.20260312012510 → 0.0.0-dev.20260329093916
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/README.md +1 -1
- package/dist/config/env.d.ts +62 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +98 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/secrets.d.ts +67 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +132 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/handler/adapter.d.ts.map +1 -0
- package/dist/{adapter.js → handler/adapter.js} +5 -44
- package/dist/handler/adapter.js.map +1 -0
- package/dist/{context.d.ts → handler/context.d.ts} +44 -3
- package/dist/handler/context.d.ts.map +1 -0
- package/dist/{context.js → handler/context.js} +9 -9
- package/dist/handler/context.js.map +1 -0
- package/dist/handler/errors.d.ts.map +1 -0
- package/dist/{errors.js → handler/errors.js} +11 -25
- package/dist/handler/errors.js.map +1 -0
- package/dist/{handler.d.ts → handler/handler.d.ts} +36 -3
- package/dist/handler/handler.d.ts.map +1 -0
- package/dist/{handler.js → handler/handler.js} +59 -23
- package/dist/handler/handler.js.map +1 -0
- package/dist/handler/response.d.ts.map +1 -0
- package/dist/{response.js → handler/response.js} +9 -17
- package/dist/handler/response.js.map +1 -0
- package/dist/handler/task-handler.d.ts +192 -0
- package/dist/handler/task-handler.d.ts.map +1 -0
- package/dist/handler/task-handler.js +262 -0
- package/dist/handler/task-handler.js.map +1 -0
- package/dist/index.d.ts +33 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -48
- package/dist/index.js.map +1 -1
- package/dist/{logger.d.ts → logging/logger.d.ts} +1 -1
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/{logger.js → logging/logger.js} +8 -16
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/tracing.d.ts +51 -0
- package/dist/logging/tracing.d.ts.map +1 -0
- package/dist/logging/tracing.js +77 -0
- package/dist/logging/tracing.js.map +1 -0
- package/dist/middleware/middleware.d.ts +120 -0
- package/dist/middleware/middleware.d.ts.map +1 -0
- package/dist/middleware/middleware.js +270 -0
- package/dist/middleware/middleware.js.map +1 -0
- package/dist/middleware/rate-limit-store.d.ts +153 -0
- package/dist/middleware/rate-limit-store.d.ts.map +1 -0
- package/dist/middleware/rate-limit-store.js +182 -0
- package/dist/middleware/rate-limit-store.js.map +1 -0
- package/dist/openapi/openapi.d.ts +147 -0
- package/dist/openapi/openapi.d.ts.map +1 -0
- package/dist/openapi/openapi.js +235 -0
- package/dist/openapi/openapi.js.map +1 -0
- package/dist/openapi.d.ts +10 -0
- package/dist/openapi.d.ts.map +1 -0
- package/dist/openapi.js +9 -0
- package/dist/openapi.js.map +1 -0
- package/dist/patterns/circuit-breaker.d.ts +78 -0
- package/dist/patterns/circuit-breaker.d.ts.map +1 -0
- package/dist/patterns/circuit-breaker.js +113 -0
- package/dist/patterns/circuit-breaker.js.map +1 -0
- package/dist/patterns/idempotency.d.ts +175 -0
- package/dist/patterns/idempotency.d.ts.map +1 -0
- package/dist/patterns/idempotency.js +305 -0
- package/dist/patterns/idempotency.js.map +1 -0
- package/dist/patterns/invoke.d.ts +279 -0
- package/dist/patterns/invoke.d.ts.map +1 -0
- package/dist/patterns/invoke.js +581 -0
- package/dist/patterns/invoke.js.map +1 -0
- package/dist/patterns/saga.d.ts +391 -0
- package/dist/patterns/saga.d.ts.map +1 -0
- package/dist/patterns/saga.js +556 -0
- package/dist/patterns/saga.js.map +1 -0
- package/dist/patterns.d.ts +17 -0
- package/dist/patterns.d.ts.map +1 -0
- package/dist/patterns.js +17 -0
- package/dist/patterns.js.map +1 -0
- package/dist/rate-limit.d.ts +16 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +15 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/secrets.d.ts +11 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +10 -0
- package/dist/secrets.js.map +1 -0
- package/dist/testing/test-utils.d.ts +99 -0
- package/dist/testing/test-utils.d.ts.map +1 -0
- package/dist/testing/test-utils.js +153 -0
- package/dist/testing/test-utils.js.map +1 -0
- package/dist/testing.d.ts +10 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +9 -0
- package/dist/testing.js.map +1 -0
- package/dist/ws/ws.d.ts +139 -0
- package/dist/ws/ws.d.ts.map +1 -0
- package/dist/ws/ws.js +294 -0
- package/dist/ws/ws.js.map +1 -0
- package/dist/ws.d.ts +5 -133
- package/dist/ws.d.ts.map +1 -1
- package/dist/ws.js +4 -291
- package/dist/ws.js.map +1 -1
- package/package.json +47 -5
- package/dist/adapter.d.ts.map +0 -1
- package/dist/adapter.js.map +0 -1
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/handler.d.ts.map +0 -1
- package/dist/handler.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/middleware.d.ts +0 -47
- package/dist/middleware.d.ts.map +0 -1
- package/dist/middleware.js +0 -147
- package/dist/middleware.js.map +0 -1
- package/dist/response.d.ts.map +0 -1
- package/dist/response.js.map +0 -1
- /package/dist/{adapter.d.ts → handler/adapter.d.ts} +0 -0
- /package/dist/{errors.d.ts → handler/errors.d.ts} +0 -0
- /package/dist/{response.d.ts → handler/response.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -74,7 +74,7 @@ interface RequestContext {
|
|
|
74
74
|
sourceIp: string;
|
|
75
75
|
userAgent: string;
|
|
76
76
|
user: UserContext | null; // Populated for authenticated requests
|
|
77
|
-
tenant: TenantContext | null; // Populated when @venturekit/tenancy is enabled
|
|
77
|
+
tenant: TenantContext | null; // Populated when @venturekit-pro/tenancy is enabled
|
|
78
78
|
locale: string;
|
|
79
79
|
queryParams?: Record<string, string | undefined>;
|
|
80
80
|
tx?: unknown; // Database transaction (transactional handlers)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Environment Variables
|
|
3
|
+
*
|
|
4
|
+
* Runtime utility for type-safe access to environment variables.
|
|
5
|
+
* Provides get/require with defaults, coercion, and validation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Options for getting an environment variable
|
|
9
|
+
*/
|
|
10
|
+
export interface EnvGetOptions<T = string> {
|
|
11
|
+
/** Default value if not set */
|
|
12
|
+
default?: T;
|
|
13
|
+
/** Coerce to type */
|
|
14
|
+
as?: 'string' | 'number' | 'boolean' | 'json';
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Environment variable client
|
|
18
|
+
*/
|
|
19
|
+
export interface EnvClient {
|
|
20
|
+
/** Get an env var. Returns undefined if not set (unless default provided). */
|
|
21
|
+
get(name: string): string | undefined;
|
|
22
|
+
get(name: string, defaultValue: string): string;
|
|
23
|
+
/** Get an env var as a number */
|
|
24
|
+
getNumber(name: string, defaultValue?: number): number | undefined;
|
|
25
|
+
/** Get an env var as a boolean (truthy: "true", "1", "yes") */
|
|
26
|
+
getBool(name: string, defaultValue?: boolean): boolean;
|
|
27
|
+
/** Get and parse as JSON */
|
|
28
|
+
getJson<T = unknown>(name: string): T | undefined;
|
|
29
|
+
/** Get env var, throw if missing */
|
|
30
|
+
require(name: string): string;
|
|
31
|
+
/** Get env var as number, throw if missing */
|
|
32
|
+
requireNumber(name: string): number;
|
|
33
|
+
/** Get and parse as JSON, throw if missing */
|
|
34
|
+
requireJson<T = unknown>(name: string): T;
|
|
35
|
+
/** Check if an env var is set */
|
|
36
|
+
has(name: string): boolean;
|
|
37
|
+
/** Get the current stage (from VENTURE_STAGE) */
|
|
38
|
+
stage(): string;
|
|
39
|
+
/** Check if running in production */
|
|
40
|
+
isProd(): boolean;
|
|
41
|
+
/** Check if running in development */
|
|
42
|
+
isDev(): boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Create an environment variable client.
|
|
46
|
+
*
|
|
47
|
+
* @param source — env source (defaults to process.env). Override for testing.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const env = createEnvClient();
|
|
52
|
+
* const port = env.getNumber('PORT', 3000);
|
|
53
|
+
* const dbUrl = env.require('DATABASE_URL');
|
|
54
|
+
* const debug = env.getBool('DEBUG', false);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare function createEnvClient(source?: Record<string, string | undefined>): EnvClient;
|
|
58
|
+
/**
|
|
59
|
+
* Default env client instance (uses process.env)
|
|
60
|
+
*/
|
|
61
|
+
export declare const env: EnvClient;
|
|
62
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,MAAM;IACvC,+BAA+B;IAC/B,OAAO,CAAC,EAAE,CAAC,CAAC;IACZ,qBAAqB;IACrB,EAAE,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;IAChD,iCAAiC;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnE,+DAA+D;IAC/D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACvD,4BAA4B;IAC5B,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;IAClD,oCAAoC;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,8CAA8C;IAC9C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,8CAA8C;IAC9C,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC;IAC1C,iCAAiC;IACjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,iDAAiD;IACjD,KAAK,IAAI,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,IAAI,OAAO,CAAC;IAClB,sCAAsC;IACtC,KAAK,IAAI,OAAO,CAAC;CAClB;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAgFtF;AAED;;GAEG;AACH,eAAO,MAAM,GAAG,WAAoB,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Environment Variables
|
|
3
|
+
*
|
|
4
|
+
* Runtime utility for type-safe access to environment variables.
|
|
5
|
+
* Provides get/require with defaults, coercion, and validation.
|
|
6
|
+
*/
|
|
7
|
+
const TRUTHY = new Set(['true', '1', 'yes', 'on']);
|
|
8
|
+
/**
|
|
9
|
+
* Create an environment variable client.
|
|
10
|
+
*
|
|
11
|
+
* @param source — env source (defaults to process.env). Override for testing.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const env = createEnvClient();
|
|
16
|
+
* const port = env.getNumber('PORT', 3000);
|
|
17
|
+
* const dbUrl = env.require('DATABASE_URL');
|
|
18
|
+
* const debug = env.getBool('DEBUG', false);
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function createEnvClient(source) {
|
|
22
|
+
const src = source ?? process.env;
|
|
23
|
+
function get(name, defaultValue) {
|
|
24
|
+
return src[name] ?? defaultValue;
|
|
25
|
+
}
|
|
26
|
+
function getNumber(name, defaultValue) {
|
|
27
|
+
const raw = src[name];
|
|
28
|
+
if (raw === undefined || raw === '')
|
|
29
|
+
return defaultValue;
|
|
30
|
+
const num = Number(raw);
|
|
31
|
+
if (Number.isNaN(num))
|
|
32
|
+
return defaultValue;
|
|
33
|
+
return num;
|
|
34
|
+
}
|
|
35
|
+
function getBool(name, defaultValue = false) {
|
|
36
|
+
const raw = src[name];
|
|
37
|
+
if (raw === undefined || raw === '')
|
|
38
|
+
return defaultValue;
|
|
39
|
+
return TRUTHY.has(raw.toLowerCase());
|
|
40
|
+
}
|
|
41
|
+
function getJson(name) {
|
|
42
|
+
const raw = src[name];
|
|
43
|
+
if (raw === undefined || raw === '')
|
|
44
|
+
return undefined;
|
|
45
|
+
return JSON.parse(raw);
|
|
46
|
+
}
|
|
47
|
+
function require(name) {
|
|
48
|
+
const value = src[name];
|
|
49
|
+
if (value === undefined || value === '') {
|
|
50
|
+
throw new Error(`Required environment variable not set: ${name}`);
|
|
51
|
+
}
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
function requireNumber(name) {
|
|
55
|
+
const raw = require(name);
|
|
56
|
+
const num = Number(raw);
|
|
57
|
+
if (Number.isNaN(num)) {
|
|
58
|
+
throw new Error(`Environment variable ${name} is not a valid number: ${raw}`);
|
|
59
|
+
}
|
|
60
|
+
return num;
|
|
61
|
+
}
|
|
62
|
+
function requireJson(name) {
|
|
63
|
+
const raw = require(name);
|
|
64
|
+
return JSON.parse(raw);
|
|
65
|
+
}
|
|
66
|
+
function has(name) {
|
|
67
|
+
return src[name] !== undefined && src[name] !== '';
|
|
68
|
+
}
|
|
69
|
+
function stage() {
|
|
70
|
+
return src['VENTURE_STAGE'] || 'dev';
|
|
71
|
+
}
|
|
72
|
+
function isProd() {
|
|
73
|
+
const s = stage();
|
|
74
|
+
return s === 'prod' || s === 'production';
|
|
75
|
+
}
|
|
76
|
+
function isDev() {
|
|
77
|
+
const s = stage();
|
|
78
|
+
return s === 'dev' || s === 'development';
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
get: get,
|
|
82
|
+
getNumber,
|
|
83
|
+
getBool,
|
|
84
|
+
getJson,
|
|
85
|
+
require,
|
|
86
|
+
requireNumber,
|
|
87
|
+
requireJson,
|
|
88
|
+
has,
|
|
89
|
+
stage,
|
|
90
|
+
isProd,
|
|
91
|
+
isDev,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Default env client instance (uses process.env)
|
|
96
|
+
*/
|
|
97
|
+
export const env = createEnvClient();
|
|
98
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Runtime utility for accessing secrets from AWS SSM Parameter Store
|
|
5
|
+
* and AWS Secrets Manager. Includes caching to avoid repeated API calls.
|
|
6
|
+
*
|
|
7
|
+
* AWS SDK clients are lazily imported so the module loads without
|
|
8
|
+
* optional peer dependencies installed.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Secret store type
|
|
12
|
+
*/
|
|
13
|
+
export type SecretStore = 'ssm' | 'secretsmanager';
|
|
14
|
+
/**
|
|
15
|
+
* Secret provider interface — abstracts the underlying AWS SDK calls.
|
|
16
|
+
* Consumers can provide a custom implementation for testing.
|
|
17
|
+
*/
|
|
18
|
+
export interface SecretProvider {
|
|
19
|
+
getSecret(name: string): Promise<string | undefined>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for creating a secrets client
|
|
23
|
+
*/
|
|
24
|
+
export interface SecretsClientOptions {
|
|
25
|
+
/** Default store to use when not specified per-secret */
|
|
26
|
+
defaultStore?: SecretStore;
|
|
27
|
+
/** Cache TTL in milliseconds (default: 300_000 = 5 minutes) */
|
|
28
|
+
cacheTtlMs?: number;
|
|
29
|
+
/** Custom provider (overrides AWS SDK calls — useful for testing) */
|
|
30
|
+
provider?: SecretProvider;
|
|
31
|
+
/** AWS region (default: process.env.AWS_REGION) */
|
|
32
|
+
region?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Secrets client for fetching secrets at runtime
|
|
36
|
+
*/
|
|
37
|
+
export interface SecretsClient {
|
|
38
|
+
/** Get a secret value by name. Returns undefined if not found. */
|
|
39
|
+
get(name: string): Promise<string | undefined>;
|
|
40
|
+
/** Get a secret value, throw if not found */
|
|
41
|
+
require(name: string): Promise<string>;
|
|
42
|
+
/** Get a secret value parsed as JSON */
|
|
43
|
+
getJson<T = unknown>(name: string): Promise<T | undefined>;
|
|
44
|
+
/** Get a secret value parsed as JSON, throw if not found */
|
|
45
|
+
requireJson<T = unknown>(name: string): Promise<T>;
|
|
46
|
+
/** Clear the cache (or a single entry) */
|
|
47
|
+
invalidate(name?: string): void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create an in-memory secret provider (for testing / local dev)
|
|
51
|
+
*/
|
|
52
|
+
export declare function createMemorySecretProvider(initial?: Record<string, string>): SecretProvider & {
|
|
53
|
+
set(name: string, value: string): void;
|
|
54
|
+
delete(name: string): void;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Create a secrets client
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const secrets = createSecretsClient({ defaultStore: 'ssm' });
|
|
62
|
+
* const dbUrl = await secrets.require('DATABASE_URL');
|
|
63
|
+
* const config = await secrets.requireJson<{ apiKey: string }>('APP_CONFIG');
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function createSecretsClient(options?: SecretsClientOptions): SecretsClient;
|
|
67
|
+
//# sourceMappingURL=secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/config/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,gBAAgB,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yDAAyD;IACzD,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAUD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,6CAA6C;IAC7C,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,wCAAwC;IACxC,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3D,4DAA4D;IAC5D,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,0CAA0C;IAC1C,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAoDD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,cAAc,GAAG;IAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAazF;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAyDrF"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Secrets Manager
|
|
3
|
+
*
|
|
4
|
+
* Runtime utility for accessing secrets from AWS SSM Parameter Store
|
|
5
|
+
* and AWS Secrets Manager. Includes caching to avoid repeated API calls.
|
|
6
|
+
*
|
|
7
|
+
* AWS SDK clients are lazily imported so the module loads without
|
|
8
|
+
* optional peer dependencies installed.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Create an SSM Parameter Store provider (lazy AWS SDK import)
|
|
12
|
+
*/
|
|
13
|
+
function createSsmProvider(region) {
|
|
14
|
+
let client = null;
|
|
15
|
+
return {
|
|
16
|
+
async getSecret(name) {
|
|
17
|
+
if (!client) {
|
|
18
|
+
const ssm = await import('@aws-sdk/client-ssm');
|
|
19
|
+
client = new ssm.SSMClient({ region: region || process.env.AWS_REGION });
|
|
20
|
+
}
|
|
21
|
+
const { SSMClient: _, GetParameterCommand } = await import('@aws-sdk/client-ssm');
|
|
22
|
+
try {
|
|
23
|
+
const result = await client.send(new GetParameterCommand({ Name: name, WithDecryption: true }));
|
|
24
|
+
return result.Parameter?.Value;
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
if (err.name === 'ParameterNotFound')
|
|
28
|
+
return undefined;
|
|
29
|
+
throw err;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a Secrets Manager provider (lazy AWS SDK import)
|
|
36
|
+
*/
|
|
37
|
+
function createSecretsManagerProvider(region) {
|
|
38
|
+
let client = null;
|
|
39
|
+
return {
|
|
40
|
+
async getSecret(name) {
|
|
41
|
+
if (!client) {
|
|
42
|
+
const sm = await import('@aws-sdk/client-secrets-manager');
|
|
43
|
+
client = new sm.SecretsManagerClient({ region: region || process.env.AWS_REGION });
|
|
44
|
+
}
|
|
45
|
+
const { SecretsManagerClient: _, GetSecretValueCommand } = await import('@aws-sdk/client-secrets-manager');
|
|
46
|
+
try {
|
|
47
|
+
const result = await client.send(new GetSecretValueCommand({ SecretId: name }));
|
|
48
|
+
return result.SecretString;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err.name === 'ResourceNotFoundException')
|
|
52
|
+
return undefined;
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create an in-memory secret provider (for testing / local dev)
|
|
60
|
+
*/
|
|
61
|
+
export function createMemorySecretProvider(initial) {
|
|
62
|
+
const store = new Map(Object.entries(initial || {}));
|
|
63
|
+
return {
|
|
64
|
+
async getSecret(name) {
|
|
65
|
+
return store.get(name);
|
|
66
|
+
},
|
|
67
|
+
set(name, value) {
|
|
68
|
+
store.set(name, value);
|
|
69
|
+
},
|
|
70
|
+
delete(name) {
|
|
71
|
+
store.delete(name);
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a secrets client
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const secrets = createSecretsClient({ defaultStore: 'ssm' });
|
|
81
|
+
* const dbUrl = await secrets.require('DATABASE_URL');
|
|
82
|
+
* const config = await secrets.requireJson<{ apiKey: string }>('APP_CONFIG');
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export function createSecretsClient(options = {}) {
|
|
86
|
+
const { defaultStore = 'ssm', cacheTtlMs = 300_000, region, } = options;
|
|
87
|
+
const cache = new Map();
|
|
88
|
+
// Use custom provider or create default based on store type
|
|
89
|
+
const provider = options.provider
|
|
90
|
+
?? (defaultStore === 'secretsmanager'
|
|
91
|
+
? createSecretsManagerProvider(region)
|
|
92
|
+
: createSsmProvider(region));
|
|
93
|
+
async function get(name) {
|
|
94
|
+
// Check cache
|
|
95
|
+
const cached = cache.get(name);
|
|
96
|
+
if (cached && cached.expiresAt > Date.now()) {
|
|
97
|
+
return cached.value;
|
|
98
|
+
}
|
|
99
|
+
const value = await provider.getSecret(name);
|
|
100
|
+
if (value !== undefined) {
|
|
101
|
+
cache.set(name, { value, expiresAt: Date.now() + cacheTtlMs });
|
|
102
|
+
}
|
|
103
|
+
return value;
|
|
104
|
+
}
|
|
105
|
+
async function require(name) {
|
|
106
|
+
const value = await get(name);
|
|
107
|
+
if (value === undefined) {
|
|
108
|
+
throw new Error(`Secret not found: ${name}`);
|
|
109
|
+
}
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
async function getJson(name) {
|
|
113
|
+
const raw = await get(name);
|
|
114
|
+
if (raw === undefined)
|
|
115
|
+
return undefined;
|
|
116
|
+
return JSON.parse(raw);
|
|
117
|
+
}
|
|
118
|
+
async function requireJson(name) {
|
|
119
|
+
const raw = await require(name);
|
|
120
|
+
return JSON.parse(raw);
|
|
121
|
+
}
|
|
122
|
+
function invalidate(name) {
|
|
123
|
+
if (name) {
|
|
124
|
+
cache.delete(name);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
cache.clear();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return { get, require, getJson, requireJson, invalidate };
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/config/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/handler/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAe3F;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAoDjC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAgB5C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,cAAc,GAClB,IAAI,CAoCN;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,CAAC,KAAK,EAAE,sBAAsB,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,uBAAuB,CAAC,GAC/F,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAkBnG"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* VentureKit Runtime Adapter
|
|
4
3
|
*
|
|
@@ -9,45 +8,7 @@
|
|
|
9
8
|
* - Local dev (Node.js HTTP server via `vk dev`)
|
|
10
9
|
* - Production (AWS Lambda via API Gateway)
|
|
11
10
|
*/
|
|
12
|
-
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
-
}
|
|
18
|
-
Object.defineProperty(o, k2, desc);
|
|
19
|
-
}) : (function(o, m, k, k2) {
|
|
20
|
-
if (k2 === undefined) k2 = k;
|
|
21
|
-
o[k2] = m[k];
|
|
22
|
-
}));
|
|
23
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
-
}) : function(o, v) {
|
|
26
|
-
o["default"] = v;
|
|
27
|
-
});
|
|
28
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
-
var ownKeys = function(o) {
|
|
30
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
-
var ar = [];
|
|
32
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
-
return ar;
|
|
34
|
-
};
|
|
35
|
-
return ownKeys(o);
|
|
36
|
-
};
|
|
37
|
-
return function (mod) {
|
|
38
|
-
if (mod && mod.__esModule) return mod;
|
|
39
|
-
var result = {};
|
|
40
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
-
__setModuleDefault(result, mod);
|
|
42
|
-
return result;
|
|
43
|
-
};
|
|
44
|
-
})();
|
|
45
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
-
exports.httpToLambdaEvent = httpToLambdaEvent;
|
|
47
|
-
exports.createLocalContext = createLocalContext;
|
|
48
|
-
exports.lambdaResultToHttp = lambdaResultToHttp;
|
|
49
|
-
exports.adaptHandler = adaptHandler;
|
|
50
|
-
const crypto = __importStar(require("crypto"));
|
|
11
|
+
import * as crypto from 'crypto';
|
|
51
12
|
/**
|
|
52
13
|
* Read the full body from an IncomingMessage as a string.
|
|
53
14
|
*/
|
|
@@ -65,7 +26,7 @@ function readBody(req) {
|
|
|
65
26
|
* This allows existing VentureKit handler() functions to work locally
|
|
66
27
|
* without modification.
|
|
67
28
|
*/
|
|
68
|
-
async function httpToLambdaEvent(req, pathParams) {
|
|
29
|
+
export async function httpToLambdaEvent(req, pathParams) {
|
|
69
30
|
const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
|
|
70
31
|
const body = await readBody(req);
|
|
71
32
|
const method = (req.method || 'GET').toUpperCase();
|
|
@@ -119,7 +80,7 @@ async function httpToLambdaEvent(req, pathParams) {
|
|
|
119
80
|
/**
|
|
120
81
|
* Create a minimal Lambda Context for local dev.
|
|
121
82
|
*/
|
|
122
|
-
function createLocalContext() {
|
|
83
|
+
export function createLocalContext() {
|
|
123
84
|
const requestId = crypto.randomUUID();
|
|
124
85
|
return {
|
|
125
86
|
callbackWaitsForEmptyEventLoop: true,
|
|
@@ -139,7 +100,7 @@ function createLocalContext() {
|
|
|
139
100
|
/**
|
|
140
101
|
* Write an APIGatewayProxyResultV2 to a Node.js ServerResponse.
|
|
141
102
|
*/
|
|
142
|
-
function lambdaResultToHttp(result, res) {
|
|
103
|
+
export function lambdaResultToHttp(result, res) {
|
|
143
104
|
// Handle string result (API Gateway allows plain string responses)
|
|
144
105
|
if (typeof result === 'string') {
|
|
145
106
|
res.writeHead(200, { 'Content-Type': 'text/plain' });
|
|
@@ -179,7 +140,7 @@ function lambdaResultToHttp(result, res) {
|
|
|
179
140
|
* @param handlerFn - A VentureKit handler (event, context) => result
|
|
180
141
|
* @returns A function that takes (req, res, pathParams?) and serves HTTP
|
|
181
142
|
*/
|
|
182
|
-
function adaptHandler(handlerFn) {
|
|
143
|
+
export function adaptHandler(handlerFn) {
|
|
183
144
|
return async (req, res, pathParams) => {
|
|
184
145
|
try {
|
|
185
146
|
const event = await httpToLambdaEvent(req, pathParams);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/handler/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
* Extensible for future auth/tenancy modules.
|
|
6
6
|
*/
|
|
7
7
|
import type { APIGatewayProxyEventV2 } from 'aws-lambda';
|
|
8
|
+
/**
|
|
9
|
+
* Transaction handle for database operations.
|
|
10
|
+
* Mirrors the Transaction interface from @venturekit/data
|
|
11
|
+
* to avoid a hard dependency.
|
|
12
|
+
*/
|
|
13
|
+
export interface Transaction {
|
|
14
|
+
/** Execute a query within the transaction */
|
|
15
|
+
query<T = Record<string, unknown>[]>(sql: string, params?: unknown[]): Promise<T>;
|
|
16
|
+
/** Commit the transaction */
|
|
17
|
+
commit(): Promise<void>;
|
|
18
|
+
/** Roll back the transaction */
|
|
19
|
+
rollback(): Promise<void>;
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* User information extracted from JWT claims
|
|
10
23
|
*/
|
|
@@ -20,7 +33,7 @@ export interface UserContext {
|
|
|
20
33
|
}
|
|
21
34
|
/**
|
|
22
35
|
* Tenant context for multi-tenant applications
|
|
23
|
-
* (Populated by @venturekit/tenancy when enabled)
|
|
36
|
+
* (Populated by @venturekit-pro/tenancy when enabled)
|
|
24
37
|
*/
|
|
25
38
|
export interface TenantContext {
|
|
26
39
|
/** Tenant ID */
|
|
@@ -30,10 +43,26 @@ export interface TenantContext {
|
|
|
30
43
|
/** Tenant-specific metadata */
|
|
31
44
|
metadata: Record<string, unknown>;
|
|
32
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Base context shared by all handler types (HTTP routes, tasks, queues, crons).
|
|
48
|
+
* Middleware written against BaseContext works in both `handler()` and `taskHandler()`.
|
|
49
|
+
*/
|
|
50
|
+
export interface BaseContext {
|
|
51
|
+
/** Unique request / invocation ID */
|
|
52
|
+
requestId: string;
|
|
53
|
+
/** Invocation timestamp */
|
|
54
|
+
timestamp: Date;
|
|
55
|
+
/** Database transaction (populated when transactional: true) */
|
|
56
|
+
tx?: Transaction;
|
|
57
|
+
/** Infrastructure intent outputs */
|
|
58
|
+
intentOutputs?: Record<string, unknown>;
|
|
59
|
+
/** Trace ID for distributed tracing */
|
|
60
|
+
traceId?: string;
|
|
61
|
+
}
|
|
33
62
|
/**
|
|
34
63
|
* Request context passed to all handlers
|
|
35
64
|
*/
|
|
36
|
-
export interface RequestContext {
|
|
65
|
+
export interface RequestContext extends BaseContext {
|
|
37
66
|
/** Unique request ID for tracing */
|
|
38
67
|
requestId: string;
|
|
39
68
|
/** Request timestamp */
|
|
@@ -61,13 +90,25 @@ export interface RequestContext {
|
|
|
61
90
|
* Use tx.query() to run all queries within the same transaction.
|
|
62
91
|
* The transaction is auto-committed on success, rolled back on error.
|
|
63
92
|
*/
|
|
64
|
-
tx?:
|
|
93
|
+
tx?: Transaction;
|
|
65
94
|
/**
|
|
66
95
|
* Infrastructure intent outputs (populated after infra provisioning).
|
|
67
96
|
* Provides access to provisioned resource endpoints, ARNs, etc.
|
|
68
97
|
* Hydrated from the VENTURE_INTENT_OUTPUTS environment variable.
|
|
69
98
|
*/
|
|
70
99
|
intentOutputs?: Record<string, unknown>;
|
|
100
|
+
/**
|
|
101
|
+
* Whether this request was invoked internally by another VentureKit function
|
|
102
|
+
* (via `invoke()`) rather than from an external client through API Gateway.
|
|
103
|
+
*
|
|
104
|
+
* Use this to skip rate limiting, auth, or other external-only logic.
|
|
105
|
+
*/
|
|
106
|
+
isInternal: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* The invoke ID if this is an internal invocation.
|
|
109
|
+
* Useful for tracing and debugging function-to-function calls.
|
|
110
|
+
*/
|
|
111
|
+
invokeId?: string;
|
|
71
112
|
}
|
|
72
113
|
/**
|
|
73
114
|
* Extract user context from JWT claims in API Gateway event
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* VentureKit Request Context
|
|
4
3
|
*
|
|
5
4
|
* Provides typed access to request metadata, user info, and tenant context.
|
|
6
5
|
* Extensible for future auth/tenancy modules.
|
|
7
6
|
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.extractUserContext = extractUserContext;
|
|
10
|
-
exports.extractLocale = extractLocale;
|
|
11
|
-
exports.buildContext = buildContext;
|
|
12
7
|
/**
|
|
13
8
|
* Extract user context from JWT claims in API Gateway event
|
|
14
9
|
*/
|
|
15
|
-
function extractUserContext(event) {
|
|
10
|
+
export function extractUserContext(event) {
|
|
16
11
|
const claims = event.requestContext?.authorizer?.jwt?.claims;
|
|
17
12
|
if (!claims) {
|
|
18
13
|
return null;
|
|
@@ -34,7 +29,7 @@ function extractUserContext(event) {
|
|
|
34
29
|
/**
|
|
35
30
|
* Extract locale from Accept-Language header
|
|
36
31
|
*/
|
|
37
|
-
function extractLocale(event, supportedLocales, defaultLocale) {
|
|
32
|
+
export function extractLocale(event, supportedLocales, defaultLocale) {
|
|
38
33
|
const acceptLanguage = event.headers?.['accept-language'] || '';
|
|
39
34
|
// Parse Accept-Language header (simplified)
|
|
40
35
|
const requested = acceptLanguage.split(',')[0]?.split('-')[0]?.toLowerCase();
|
|
@@ -46,7 +41,7 @@ function extractLocale(event, supportedLocales, defaultLocale) {
|
|
|
46
41
|
/**
|
|
47
42
|
* Build request context from API Gateway event
|
|
48
43
|
*/
|
|
49
|
-
function buildContext(event, options) {
|
|
44
|
+
export function buildContext(event, options) {
|
|
50
45
|
// Hydrate intent outputs from env var (set by infra layer after provisioning)
|
|
51
46
|
let intentOutputs;
|
|
52
47
|
try {
|
|
@@ -58,6 +53,9 @@ function buildContext(event, options) {
|
|
|
58
53
|
catch {
|
|
59
54
|
// Ignore parse errors — intentOutputs stays undefined
|
|
60
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;
|
|
61
59
|
return {
|
|
62
60
|
requestId: event.requestContext?.requestId || crypto.randomUUID(),
|
|
63
61
|
timestamp: new Date(),
|
|
@@ -66,11 +64,13 @@ function buildContext(event, options) {
|
|
|
66
64
|
sourceIp: event.requestContext?.http?.sourceIp || 'unknown',
|
|
67
65
|
userAgent: event.headers?.['user-agent'] || 'unknown',
|
|
68
66
|
user: extractUserContext(event),
|
|
69
|
-
tenant: null, // Populated by @venturekit/tenancy
|
|
67
|
+
tenant: null, // Populated by @venturekit-pro/tenancy
|
|
70
68
|
locale: extractLocale(event, options.supportedLocales, options.defaultLocale),
|
|
71
69
|
rawEvent: event,
|
|
72
70
|
queryParams: event.queryStringParameters,
|
|
73
71
|
intentOutputs,
|
|
72
|
+
isInternal,
|
|
73
|
+
invokeId,
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/handler/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|