@venturekit/infra 0.0.0-dev.20260514025106 → 0.0.0-dev.20260515021849

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.
Files changed (49) hide show
  1. package/dist/cdk/app-stack.d.ts +330 -0
  2. package/dist/cdk/app-stack.d.ts.map +1 -0
  3. package/dist/cdk/app-stack.js +875 -0
  4. package/dist/cdk/app-stack.js.map +1 -0
  5. package/dist/cdk/config-stack.d.ts +104 -0
  6. package/dist/cdk/config-stack.d.ts.map +1 -0
  7. package/dist/cdk/config-stack.js +161 -0
  8. package/dist/cdk/config-stack.js.map +1 -0
  9. package/dist/cdk/data-stack.d.ts +198 -0
  10. package/dist/cdk/data-stack.d.ts.map +1 -0
  11. package/dist/cdk/data-stack.js +511 -0
  12. package/dist/cdk/data-stack.js.map +1 -0
  13. package/dist/cdk/edge-stack.d.ts +91 -0
  14. package/dist/cdk/edge-stack.d.ts.map +1 -0
  15. package/dist/cdk/edge-stack.js +364 -0
  16. package/dist/cdk/edge-stack.js.map +1 -0
  17. package/dist/cdk/identity-stack.d.ts +98 -0
  18. package/dist/cdk/identity-stack.d.ts.map +1 -0
  19. package/dist/cdk/identity-stack.js +254 -0
  20. package/dist/cdk/identity-stack.js.map +1 -0
  21. package/dist/cdk/index.d.ts +16 -0
  22. package/dist/cdk/index.d.ts.map +1 -1
  23. package/dist/cdk/index.js +17 -0
  24. package/dist/cdk/index.js.map +1 -1
  25. package/dist/cdk/messaging-stack.d.ts +109 -0
  26. package/dist/cdk/messaging-stack.d.ts.map +1 -0
  27. package/dist/cdk/messaging-stack.js +320 -0
  28. package/dist/cdk/messaging-stack.js.map +1 -0
  29. package/dist/cdk/network-stack.d.ts +87 -0
  30. package/dist/cdk/network-stack.d.ts.map +1 -0
  31. package/dist/cdk/network-stack.js +265 -0
  32. package/dist/cdk/network-stack.js.map +1 -0
  33. package/dist/cdk/shared/cross-stack-refs.d.ts +278 -0
  34. package/dist/cdk/shared/cross-stack-refs.d.ts.map +1 -0
  35. package/dist/cdk/shared/cross-stack-refs.js +326 -0
  36. package/dist/cdk/shared/cross-stack-refs.js.map +1 -0
  37. package/dist/cdk/shared/lambda-helpers.d.ts +82 -0
  38. package/dist/cdk/shared/lambda-helpers.d.ts.map +1 -0
  39. package/dist/cdk/shared/lambda-helpers.js +201 -0
  40. package/dist/cdk/shared/lambda-helpers.js.map +1 -0
  41. package/dist/cdk/shared/ssm-keys.d.ts +460 -0
  42. package/dist/cdk/shared/ssm-keys.d.ts.map +1 -0
  43. package/dist/cdk/shared/ssm-keys.js +291 -0
  44. package/dist/cdk/shared/ssm-keys.js.map +1 -0
  45. package/dist/cdk/stack.d.ts +3 -11
  46. package/dist/cdk/stack.d.ts.map +1 -1
  47. package/dist/cdk/stack.js +184 -41
  48. package/dist/cdk/stack.js.map +1 -1
  49. package/package.json +2 -2
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Tier 6 — App stack (the "fast" tier).
3
+ *
4
+ * Owns every resource that turns over on a normal `vk deploy`:
5
+ *
6
+ * - Lambda functions: route handlers, queue consumers, scheduled
7
+ * handlers, notify dispatcher, bounce handler, migration runner.
8
+ * - HttpApi route/integration registrations on the imported API.
9
+ * - SQS event-source mappings binding consumer Lambdas to
10
+ * queues imported from the messaging stack.
11
+ * - EventBridge rules + Lambda targets for `schedules[]` intents
12
+ * and the notify dispatcher cron.
13
+ * - Per-Lambda CloudWatch LogGroups (so retention is enforced
14
+ * even on cold-start failures, before the runtime can write
15
+ * its first line).
16
+ * - Shared Lambda execution role + shared SG (in VPC) — the
17
+ * common identity through which every grant is plumbed.
18
+ * - Internal HMAC secret for Lambda-to-Lambda `invoke()` signing.
19
+ * - All IAM grants: Cognito admin, S3 R/W, Secrets Manager
20
+ * reads, SES send, SQS consume/produce, SNS publish.
21
+ *
22
+ * # Lifecycle position
23
+ *
24
+ * Updated on every code change (~daily on active projects). Every
25
+ * resource here is DESTROY-on-delete: re-creating a Lambda or an
26
+ * ESM from a saved CFN template is cheap and safe (the durable
27
+ * state — DB rows, queue messages, S3 objects — lives in
28
+ * lower-tier stacks). Logs are an exception: under strict
29
+ * dataSafety we RETAIN log groups so post-mortem debugging
30
+ * survives a redeploy.
31
+ *
32
+ * # What the constructor does (in order)
33
+ *
34
+ * 1. Resolve cross-stack refs from imported props or via SSM.
35
+ * 2. Create shared Lambda execution role + (if VPC) shared SG.
36
+ * 3. Generate / import the internal HMAC secret.
37
+ * 4. Assemble `baseEnvVars` from cross-tier SSM-resolved values:
38
+ * DB connection, primary storage, primary notify, Cognito,
39
+ * federated provider secrets.
40
+ * 5. Wire each Lambda intent (delegated to step-9b/c/d helpers
41
+ * that follow this scaffold).
42
+ *
43
+ * # Why the role + SG live in this stack
44
+ *
45
+ * They're scoped to "the Lambdas in this app deployment" — every
46
+ * grant attached to them is therefore lifecycle-aligned with the
47
+ * Lambdas. A redeploy that adds a new managed policy or a new
48
+ * `addPermission` call only churns the app stack; the lower-tier
49
+ * resources stay untouched.
50
+ *
51
+ * # What this stack does NOT do
52
+ *
53
+ * - **No durable state.** Every resource here is replaceable.
54
+ * If you need RETAIN-class durability, the resource belongs in
55
+ * data / messaging / identity / config / edge.
56
+ *
57
+ * - **No HttpApi creation.** Imported via
58
+ * `HttpApi.fromHttpApiAttributes` from the edge stack's published
59
+ * `apiId` SSM key.
60
+ *
61
+ * - **No SSM publication.** App-stack outputs (Lambda ARNs, log
62
+ * group names) are operational details that no other VentureKit
63
+ * stack consumes. Operators inspecting them go through the AWS
64
+ * console / CLI, not SSM.
65
+ */
66
+ import * as cdk from 'aws-cdk-lib';
67
+ import * as iam from 'aws-cdk-lib/aws-iam';
68
+ import * as ec2 from 'aws-cdk-lib/aws-ec2';
69
+ import * as lambda from 'aws-cdk-lib/aws-lambda';
70
+ import * as apigatewayv2 from 'aws-cdk-lib/aws-apigatewayv2';
71
+ import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
72
+ import { Construct } from 'constructs';
73
+ import { type EnvConfig, type VentureIntent } from '@venturekit/core';
74
+ /**
75
+ * Imported cross-stack refs the CLI generator passes in. Every field
76
+ * is optional because not every project declares every tier — a free-
77
+ * tier project with no auth + no notify + no VPC needs none of these.
78
+ */
79
+ export interface AppStackImports {
80
+ /**
81
+ * Imported VPC, when the lower-tier stacks created one. Resolved
82
+ * from `networkKeys.vpcId` SSM or constructed via
83
+ * `Vpc.fromVpcAttributes` by the generator. App stack uses it to
84
+ * re-attach the shared Lambda SG and to issue VPC-bound Lambda
85
+ * functions.
86
+ */
87
+ vpc?: ec2.IVpc;
88
+ /**
89
+ * HttpApi imported from the edge stack via
90
+ * `HttpApi.fromHttpApiAttributes({ httpApiId, apiEndpoint })`.
91
+ * The app stack registers routes on this API.
92
+ */
93
+ api?: apigatewayv2.IHttpApi;
94
+ /**
95
+ * Cognito User Pool ARN per declared `auth` intent — for
96
+ * `cognito-idp:Admin*` grant scoping. Resolved by the generator
97
+ * from `identityKeys.userPoolArn` SSM.
98
+ */
99
+ userPoolArnsByAuthId?: Map<string, string>;
100
+ /** Federated-provider Secret ARNs per auth intent. */
101
+ federatedSecretArnsByAuthId?: Map<string, Record<string, string>>;
102
+ /** S3 bucket names per `storage` intent — for env-var injection + grant. */
103
+ storageBucketNamesById?: Map<string, string>;
104
+ /** SQS queue ARNs per `queues` intent — for grant + ESM source. */
105
+ queueArnsById?: Map<string, string>;
106
+ /** SNS notify events topic ARNs per `notify` intent. */
107
+ notifyEventsTopicArnsById?: Map<string, string>;
108
+ /** CloudFront CDN domain per storage intent that has `cdn:true`. */
109
+ storageCdnDomainsById?: Map<string, string>;
110
+ /** SES configuration set names per `notify` intent. */
111
+ notifyConfigurationSetNamesById?: Map<string, string>;
112
+ /** WhatsApp token Secret ARNs per `notify` intent (when channel enabled). */
113
+ whatsappTokenSecretArnsById?: Map<string, string>;
114
+ /**
115
+ * Dispatcher on-failure DLQ ARN per `notify` intent. Created
116
+ * by the messaging stack (RETAIN-class). The dispatcher Lambda
117
+ * uses this as its async-invoke `deadLetterQueue` so a broken
118
+ * dispatcher's failures accumulate across redeploys.
119
+ */
120
+ notifyDispatcherDlqArnsById?: Map<string, string>;
121
+ /** Same idea for the bounce-handler Lambda. */
122
+ notifyBounceDlqArnsById?: Map<string, string>;
123
+ /**
124
+ * DB connection params per `database` intent. The generator
125
+ * resolves these from `dataKeys.rdsEndpoint*` SSM lookups so
126
+ * env-var injection happens at app-stack synth, not Lambda
127
+ * runtime.
128
+ */
129
+ databaseEndpointsById?: Map<string, {
130
+ host: string;
131
+ port: string;
132
+ name: string;
133
+ secretArn?: string;
134
+ }>;
135
+ }
136
+ export interface VentureAppStackProps extends cdk.StackProps {
137
+ projectName: string;
138
+ stage: string;
139
+ envConfig: EnvConfig;
140
+ /** Full intent surface — Lambda discovery walks `routes`, `queues`, etc. */
141
+ infrastructure: VentureIntent;
142
+ /** Cross-stack imports (network/data/identity/config/messaging/edge). */
143
+ imports: AppStackImports;
144
+ /**
145
+ * Project root directory — the dir containing `package.json` +
146
+ * `node_modules`. Used as the bundling asset root so esbuild
147
+ * resolves handler imports against installed dependencies.
148
+ * Required when any Lambda intent is declared; ignored otherwise.
149
+ */
150
+ projectDir?: string;
151
+ /**
152
+ * Routes directory relative to `projectDir`. Defaults to `src/routes`
153
+ * matching the local-dev server convention. Walked by
154
+ * `discoverRouteFiles` to produce one Lambda per file. Pass an
155
+ * empty string or non-existent path to skip route discovery
156
+ * entirely.
157
+ */
158
+ routesDir?: string;
159
+ /**
160
+ * Queue handlers directory. Defaults to `src/queues`. Each file
161
+ * becomes one consumer Lambda; the corresponding queue (by id ===
162
+ * file-derived name) MUST be present in `imports.queueArnsById`,
163
+ * otherwise the consumer has nothing to consume and we throw at
164
+ * synth time.
165
+ */
166
+ queuesDir?: string;
167
+ /**
168
+ * Cron handlers directory. Defaults to `src/crons`. Each file
169
+ * becomes one Lambda; the corresponding `schedules[]` intent (by
170
+ * id) provides the schedule expression. Files without a matching
171
+ * intent are created as Lambdas WITHOUT an EventBridge rule —
172
+ * the operator can wire the schedule manually post-deploy.
173
+ */
174
+ cronsDir?: string;
175
+ /**
176
+ * @internal Test-only flag: when true, every Lambda uses an inline
177
+ * stub instead of Docker bundling. Cuts test runtimes from minutes
178
+ * to seconds and avoids requiring Docker on CI.
179
+ */
180
+ skipBundling?: boolean;
181
+ }
182
+ /**
183
+ * App stack — see file header for the full lifecycle rationale.
184
+ *
185
+ * **Step 9a scaffold.** This skeleton covers:
186
+ * - shared Lambda role + (if VPC) shared SG
187
+ * - imported HttpApi + VPC handles exposed for sub-step helpers
188
+ * - internal HMAC secret
189
+ * - `baseEnvVars` assembled from cross-stack imports
190
+ *
191
+ * Lambda creation lives in subsequent sub-steps (9b: routes;
192
+ * 9c: queue ESMs + schedules + migration; 9d: notify + grants).
193
+ * Calling the constructor with no Lambda-bearing intents produces
194
+ * a stack with the role / SG / secret only — no Lambdas, no
195
+ * routes — which is the correct no-op behavior for projects that
196
+ * declare only data + messaging.
197
+ */
198
+ export declare class VentureAppStack extends cdk.Stack {
199
+ /** Shared execution role for every Lambda in this stack. */
200
+ readonly lambdaRole: iam.Role;
201
+ /** Shared SG when a VPC is imported; undefined for VPC-less projects. */
202
+ readonly lambdaSecurityGroup?: ec2.SecurityGroup;
203
+ /** Internal HMAC signing secret for Lambda-to-Lambda `invoke()`. */
204
+ readonly internalHmacSecret: secretsmanager.Secret;
205
+ /**
206
+ * Base environment variables applied to every Lambda this stack
207
+ * creates. Subsequent helpers (9b/c/d) read this when constructing
208
+ * each Lambda's `environment` block. Mutable during construction
209
+ * — per-intent helpers append `STORAGE_<ID>_*`, `NOTIFY_<ID>_*`,
210
+ * etc. — frozen at the end of the constructor.
211
+ */
212
+ readonly baseEnvVars: Record<string, string>;
213
+ /** The imported HttpApi — sub-step 9b registers routes on this. */
214
+ readonly api?: apigatewayv2.IHttpApi;
215
+ /** Imported VPC, when present. */
216
+ readonly vpc?: ec2.IVpc;
217
+ /**
218
+ * Route Lambdas keyed by slug. Sub-step 9c reads this when wiring
219
+ * cross-cutting grants (e.g. Cognito admin auth) onto every
220
+ * Lambda — though the shared role makes most grants role-level
221
+ * not function-level, this map lets per-function grants happen
222
+ * when needed.
223
+ */
224
+ readonly routeLambdas: Map<string, lambda.Function>;
225
+ /** Queue consumer Lambdas keyed by handler name. */
226
+ readonly queueLambdas: Map<string, lambda.Function>;
227
+ /** Scheduled / cron Lambdas keyed by handler name. */
228
+ readonly scheduleLambdas: Map<string, lambda.Function>;
229
+ /** Notify dispatcher Lambdas keyed by notify intent id. */
230
+ readonly notifyDispatcherLambdas: Map<string, lambda.Function>;
231
+ /** Notify bounce-handler Lambdas keyed by notify intent id. */
232
+ readonly notifyBounceLambdas: Map<string, lambda.Function>;
233
+ private readonly isStrictRetain;
234
+ private readonly projectName;
235
+ private readonly stage;
236
+ private readonly envConfig;
237
+ private readonly skipBundling;
238
+ private readonly projectDir;
239
+ constructor(scope: Construct, id: string, props: VentureAppStackProps);
240
+ /**
241
+ * Build the Lambda code asset for a handler file. Production path:
242
+ * esbuild in-process, sub-second per handler. Test path: inline
243
+ * stub that satisfies API Gateway's contract without invoking
244
+ * esbuild.
245
+ */
246
+ private bundleHandlerCode;
247
+ /**
248
+ * Materialise one route handler: a Lambda function + an
249
+ * `HttpRoute` on the imported API + an `HttpLambdaIntegration`
250
+ * binding them together. CDK's `HttpLambdaIntegration` adds the
251
+ * `lambda:InvokeFunction` resource policy automatically so the
252
+ * cross-stack pattern works the same as in-stack.
253
+ */
254
+ private createRouteFunction;
255
+ /**
256
+ * Build a Lambda function with the standard app-stack properties
257
+ * (shared role, VPC attachment, base env vars, log retention).
258
+ * Used by `createRouteFunction` (now refactored), `createQueueConsumer`,
259
+ * and `createScheduleHandler` to keep the per-Lambda invariants in
260
+ * one place.
261
+ */
262
+ private buildLambda;
263
+ /**
264
+ * Materialise one queue consumer: a Lambda + an `SqsEventSource`
265
+ * binding it to the queue ARN imported from the messaging stack.
266
+ * The DLQ already lives in the messaging tier (RETAIN-class
267
+ * durability); we don't recreate it here.
268
+ *
269
+ * Throws if no matching queue ARN is in `imports.queueArnsById` —
270
+ * a consumer with no queue is dead infrastructure.
271
+ */
272
+ private createQueueConsumer;
273
+ /**
274
+ * Materialise one scheduled handler: a Lambda + (optional)
275
+ * EventBridge `Rule` that targets it. When no schedule intent is
276
+ * declared for the handler, the Lambda is created without a Rule
277
+ * — the operator can wire the trigger manually post-deploy.
278
+ *
279
+ * Each scheduled Lambda gets its own DLQ for async-invoke
280
+ * failures. Without it, a broken cron silently stops working
281
+ * after Lambda's 2-retry budget. The DLQ is app-tier (DESTROY-on-
282
+ * delete): EventBridge-delivery failures don't accumulate
283
+ * meaningfully across redeploys, and the messaging-tier DLQs are
284
+ * specific to the notify dispatcher / bounce paths.
285
+ */
286
+ private createScheduleHandler;
287
+ /**
288
+ * Attach IAM grants to the shared Lambda role for every imported
289
+ * resource. Called once during construction, before any Lambda is
290
+ * created — CDK collects role policies eagerly at synth, so the
291
+ * order doesn't matter, but co-locating all grants in one helper
292
+ * makes the policy surface auditable.
293
+ *
294
+ * Grant inventory:
295
+ * - DB master credential secret read (one per database)
296
+ * - Federated provider Secret reads (one per provider per auth intent)
297
+ * - WhatsApp token Secret reads (one per notify intent with channel)
298
+ * - S3 bucket read+write (one per storage intent)
299
+ * - Cognito admin actions (one per auth intent's user pool)
300
+ * - SES send (account-level, scoped via configuration set)
301
+ *
302
+ * SQS receive grants come from `SqsEventSource` per consumer
303
+ * Lambda, NOT here, because they need the role+function pair and
304
+ * are added at consumer-creation time. Same for HttpApi invoke
305
+ * (added by `HttpLambdaIntegration`) and EventBridge invoke
306
+ * (added by `LambdaFunction` target).
307
+ */
308
+ private applyImportedGrants;
309
+ /**
310
+ * Provision dispatcher + bounce-handler Lambdas per declared
311
+ * `notify[]` intent. The Lambdas bundle stub modules shipped
312
+ * by `@venturekit/notify` from the consumer's `node_modules`;
313
+ * the stubs delegate to the operator's notify client module at
314
+ * runtime. Each Lambda gets its on-failure DLQ from the
315
+ * messaging tier (RETAIN-class) — losing those DLQs across
316
+ * redeploys would discard the canonical record of failed
317
+ * deliveries.
318
+ *
319
+ * # Why both Lambdas live HERE not in messaging stack
320
+ *
321
+ * The Lambdas are throwaway app-tier code; their schedule
322
+ * (EventBridge rule) and DLQs (messaging-tier RETAIN) are
323
+ * separate concerns. Co-locating the handler with the rule + DLQ
324
+ * would force the messaging stack to depend on the handler
325
+ * code's bundled hash, which churns every code change and
326
+ * defeats the lifecycle split.
327
+ */
328
+ private provisionNotifyHandlers;
329
+ }
330
+ //# sourceMappingURL=app-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-stack.d.ts","sourceRoot":"","sources":["../../src/cdk/app-stack.ts"],"names":[],"mappings":"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"}