@venturekit/core 0.0.0-dev.20260307234057
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/LICENSE +191 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +45 -0
- package/dist/presets.d.ts +67 -0
- package/dist/presets.js +345 -0
- package/dist/resolve.d.ts +28 -0
- package/dist/resolve.js +188 -0
- package/dist/types/api.d.ts +54 -0
- package/dist/types/api.js +9 -0
- package/dist/types/base.d.ts +21 -0
- package/dist/types/base.js +9 -0
- package/dist/types/env.d.ts +74 -0
- package/dist/types/env.js +14 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.js +8 -0
- package/dist/types/intents.d.ts +192 -0
- package/dist/types/intents.js +14 -0
- package/dist/types/lambda.d.ts +68 -0
- package/dist/types/lambda.js +9 -0
- package/dist/types/observability.d.ts +82 -0
- package/dist/types/observability.js +9 -0
- package/dist/types/resolved.d.ts +47 -0
- package/dist/types/resolved.js +9 -0
- package/dist/types/security.d.ts +54 -0
- package/dist/types/security.js +9 -0
- package/dist/types/vpc.d.ts +65 -0
- package/dist/types/vpc.js +9 -0
- package/dist/types/websocket.d.ts +24 -0
- package/dist/types/websocket.js +8 -0
- package/dist/validate.d.ts +41 -0
- package/dist/validate.js +162 -0
- package/package.json +33 -0
package/dist/presets.js
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VentureKit Presets
|
|
4
|
+
*
|
|
5
|
+
* AWS-like preset sizes that expand to explicit configuration values.
|
|
6
|
+
* Users can use these as shortcuts and override specific fields.
|
|
7
|
+
*
|
|
8
|
+
* Merge order: PRESET ← USER_OVERRIDES
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DATA_SAFETY_CONFIG = exports.DEFAULT_DATA_SAFETY = exports.PRESET_LARGE = exports.PRESET_MEDIUM = exports.PRESET_MICRO = exports.PRESET_NANO = void 0;
|
|
12
|
+
exports.getPreset = getPreset;
|
|
13
|
+
/**
|
|
14
|
+
* Default IAM config (empty - VentureKit handles basic permissions)
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_IAM = {
|
|
17
|
+
managedPolicyArns: [],
|
|
18
|
+
inlineStatements: [],
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Default subnet config
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_SUBNETS = {
|
|
24
|
+
publicSubnets: { cidrMask: 24 },
|
|
25
|
+
privateSubnets: { cidrMask: 24 },
|
|
26
|
+
isolatedSubnets: undefined,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Default security group rules (allow all outbound)
|
|
30
|
+
*/
|
|
31
|
+
const DEFAULT_SECURITY_GROUP = {
|
|
32
|
+
lambdaSecurityGroupIngress: [],
|
|
33
|
+
lambdaSecurityGroupEgress: [
|
|
34
|
+
{ protocol: '-1', fromPort: 0, toPort: 0, cidrBlocks: ['0.0.0.0/0'], description: 'Allow all outbound' },
|
|
35
|
+
],
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* NANO preset - Minimal resources for development/testing
|
|
39
|
+
*
|
|
40
|
+
* Use case: Local development, CI/CD testing, proof of concepts
|
|
41
|
+
* Cost: ~$5-15/month
|
|
42
|
+
*/
|
|
43
|
+
exports.PRESET_NANO = {
|
|
44
|
+
lambda: {
|
|
45
|
+
memoryMb: 128,
|
|
46
|
+
timeoutSec: 10,
|
|
47
|
+
logRetentionDays: 7,
|
|
48
|
+
reservedConcurrency: undefined,
|
|
49
|
+
provisionedConcurrency: undefined,
|
|
50
|
+
tracingEnabled: false,
|
|
51
|
+
vpcEnabled: false,
|
|
52
|
+
runtime: 'nodejs20.x',
|
|
53
|
+
architecture: 'arm64',
|
|
54
|
+
iam: DEFAULT_IAM,
|
|
55
|
+
environmentVariables: {},
|
|
56
|
+
layers: [],
|
|
57
|
+
},
|
|
58
|
+
api: {
|
|
59
|
+
throttleRateLimit: 10,
|
|
60
|
+
throttleBurstLimit: 20,
|
|
61
|
+
detailedMetricsEnabled: false,
|
|
62
|
+
},
|
|
63
|
+
vpc: {
|
|
64
|
+
maxAzs: 2,
|
|
65
|
+
natGateways: 0,
|
|
66
|
+
cidr: '10.0.0.0/16',
|
|
67
|
+
flowLogsEnabled: false,
|
|
68
|
+
flowLogsRetentionDays: 7,
|
|
69
|
+
...DEFAULT_SUBNETS,
|
|
70
|
+
enableVpcEndpoints: false,
|
|
71
|
+
...DEFAULT_SECURITY_GROUP,
|
|
72
|
+
},
|
|
73
|
+
observability: {
|
|
74
|
+
logs: {
|
|
75
|
+
namePattern: '/venturekit/{name}/{env}/{function}',
|
|
76
|
+
streamNamePattern: '{instance}/{timestamp}',
|
|
77
|
+
retentionDays: 7,
|
|
78
|
+
},
|
|
79
|
+
metrics: {
|
|
80
|
+
namespace: 'VentureKit',
|
|
81
|
+
detailedMetricsEnabled: false,
|
|
82
|
+
defaultDimensions: {},
|
|
83
|
+
},
|
|
84
|
+
alarms: {
|
|
85
|
+
enabled: false,
|
|
86
|
+
topicArn: undefined,
|
|
87
|
+
evaluationPeriods: 3,
|
|
88
|
+
periodSec: 60,
|
|
89
|
+
},
|
|
90
|
+
tracing: {
|
|
91
|
+
enabled: false,
|
|
92
|
+
samplingRate: 0.05,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
websocket: {
|
|
96
|
+
enabled: false,
|
|
97
|
+
routeSelectionExpression: '$request.body.action',
|
|
98
|
+
idleTimeoutSec: 600,
|
|
99
|
+
throttleRateLimit: 10,
|
|
100
|
+
throttleBurstLimit: 20,
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* MICRO preset - Small production workloads
|
|
105
|
+
*
|
|
106
|
+
* Use case: Early-stage startups, low-traffic APIs, internal tools
|
|
107
|
+
* Cost: ~$30-80/month
|
|
108
|
+
*/
|
|
109
|
+
exports.PRESET_MICRO = {
|
|
110
|
+
lambda: {
|
|
111
|
+
memoryMb: 256,
|
|
112
|
+
timeoutSec: 10,
|
|
113
|
+
logRetentionDays: 14,
|
|
114
|
+
reservedConcurrency: undefined,
|
|
115
|
+
provisionedConcurrency: undefined,
|
|
116
|
+
tracingEnabled: false,
|
|
117
|
+
vpcEnabled: true,
|
|
118
|
+
runtime: 'nodejs20.x',
|
|
119
|
+
architecture: 'arm64',
|
|
120
|
+
iam: DEFAULT_IAM,
|
|
121
|
+
environmentVariables: {},
|
|
122
|
+
layers: [],
|
|
123
|
+
},
|
|
124
|
+
api: {
|
|
125
|
+
throttleRateLimit: 50,
|
|
126
|
+
throttleBurstLimit: 100,
|
|
127
|
+
detailedMetricsEnabled: false,
|
|
128
|
+
},
|
|
129
|
+
vpc: {
|
|
130
|
+
maxAzs: 2,
|
|
131
|
+
natGateways: 1,
|
|
132
|
+
cidr: '10.0.0.0/16',
|
|
133
|
+
flowLogsEnabled: false,
|
|
134
|
+
flowLogsRetentionDays: 14,
|
|
135
|
+
...DEFAULT_SUBNETS,
|
|
136
|
+
enableVpcEndpoints: true,
|
|
137
|
+
...DEFAULT_SECURITY_GROUP,
|
|
138
|
+
},
|
|
139
|
+
observability: {
|
|
140
|
+
logs: {
|
|
141
|
+
namePattern: '/venturekit/{name}/{env}/{function}',
|
|
142
|
+
streamNamePattern: '{instance}/{timestamp}',
|
|
143
|
+
retentionDays: 14,
|
|
144
|
+
},
|
|
145
|
+
metrics: {
|
|
146
|
+
namespace: 'VentureKit',
|
|
147
|
+
detailedMetricsEnabled: false,
|
|
148
|
+
defaultDimensions: {},
|
|
149
|
+
},
|
|
150
|
+
alarms: {
|
|
151
|
+
enabled: false,
|
|
152
|
+
topicArn: undefined,
|
|
153
|
+
evaluationPeriods: 3,
|
|
154
|
+
periodSec: 60,
|
|
155
|
+
},
|
|
156
|
+
tracing: {
|
|
157
|
+
enabled: false,
|
|
158
|
+
samplingRate: 0.1,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
websocket: {
|
|
162
|
+
enabled: false,
|
|
163
|
+
routeSelectionExpression: '$request.body.action',
|
|
164
|
+
idleTimeoutSec: 600,
|
|
165
|
+
throttleRateLimit: 50,
|
|
166
|
+
throttleBurstLimit: 100,
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* MEDIUM preset - Standard production workloads
|
|
171
|
+
*
|
|
172
|
+
* Use case: Growing startups, moderate traffic, customer-facing APIs
|
|
173
|
+
* Cost: ~$100-300/month
|
|
174
|
+
*/
|
|
175
|
+
exports.PRESET_MEDIUM = {
|
|
176
|
+
lambda: {
|
|
177
|
+
memoryMb: 512,
|
|
178
|
+
timeoutSec: 15,
|
|
179
|
+
logRetentionDays: 30,
|
|
180
|
+
reservedConcurrency: undefined,
|
|
181
|
+
provisionedConcurrency: undefined,
|
|
182
|
+
tracingEnabled: true,
|
|
183
|
+
vpcEnabled: true,
|
|
184
|
+
runtime: 'nodejs20.x',
|
|
185
|
+
architecture: 'arm64',
|
|
186
|
+
iam: DEFAULT_IAM,
|
|
187
|
+
environmentVariables: {},
|
|
188
|
+
layers: [],
|
|
189
|
+
},
|
|
190
|
+
api: {
|
|
191
|
+
throttleRateLimit: 100,
|
|
192
|
+
throttleBurstLimit: 200,
|
|
193
|
+
detailedMetricsEnabled: true,
|
|
194
|
+
},
|
|
195
|
+
vpc: {
|
|
196
|
+
maxAzs: 2,
|
|
197
|
+
natGateways: 1,
|
|
198
|
+
cidr: '10.0.0.0/16',
|
|
199
|
+
flowLogsEnabled: true,
|
|
200
|
+
flowLogsRetentionDays: 30,
|
|
201
|
+
...DEFAULT_SUBNETS,
|
|
202
|
+
isolatedSubnets: { cidrMask: 24 },
|
|
203
|
+
enableVpcEndpoints: true,
|
|
204
|
+
...DEFAULT_SECURITY_GROUP,
|
|
205
|
+
},
|
|
206
|
+
observability: {
|
|
207
|
+
logs: {
|
|
208
|
+
namePattern: '/venturekit/{name}/{env}/{function}',
|
|
209
|
+
streamNamePattern: '{instance}/{timestamp}',
|
|
210
|
+
retentionDays: 30,
|
|
211
|
+
},
|
|
212
|
+
metrics: {
|
|
213
|
+
namespace: 'VentureKit',
|
|
214
|
+
detailedMetricsEnabled: true,
|
|
215
|
+
defaultDimensions: {},
|
|
216
|
+
},
|
|
217
|
+
alarms: {
|
|
218
|
+
enabled: true,
|
|
219
|
+
topicArn: undefined,
|
|
220
|
+
evaluationPeriods: 3,
|
|
221
|
+
periodSec: 60,
|
|
222
|
+
},
|
|
223
|
+
tracing: {
|
|
224
|
+
enabled: true,
|
|
225
|
+
samplingRate: 0.25,
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
websocket: {
|
|
229
|
+
enabled: false,
|
|
230
|
+
routeSelectionExpression: '$request.body.action',
|
|
231
|
+
idleTimeoutSec: 600,
|
|
232
|
+
throttleRateLimit: 100,
|
|
233
|
+
throttleBurstLimit: 200,
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* LARGE preset - High-traffic production workloads
|
|
238
|
+
*
|
|
239
|
+
* Use case: Scaled startups, high traffic, mission-critical APIs
|
|
240
|
+
* Cost: ~$500+/month
|
|
241
|
+
*/
|
|
242
|
+
exports.PRESET_LARGE = {
|
|
243
|
+
lambda: {
|
|
244
|
+
memoryMb: 1024,
|
|
245
|
+
timeoutSec: 30,
|
|
246
|
+
logRetentionDays: 90,
|
|
247
|
+
reservedConcurrency: undefined,
|
|
248
|
+
provisionedConcurrency: undefined,
|
|
249
|
+
tracingEnabled: true,
|
|
250
|
+
vpcEnabled: true,
|
|
251
|
+
runtime: 'nodejs20.x',
|
|
252
|
+
architecture: 'arm64',
|
|
253
|
+
iam: DEFAULT_IAM,
|
|
254
|
+
environmentVariables: {},
|
|
255
|
+
layers: [],
|
|
256
|
+
},
|
|
257
|
+
api: {
|
|
258
|
+
throttleRateLimit: 500,
|
|
259
|
+
throttleBurstLimit: 1000,
|
|
260
|
+
detailedMetricsEnabled: true,
|
|
261
|
+
},
|
|
262
|
+
vpc: {
|
|
263
|
+
maxAzs: 3,
|
|
264
|
+
natGateways: 2,
|
|
265
|
+
cidr: '10.0.0.0/16',
|
|
266
|
+
flowLogsEnabled: true,
|
|
267
|
+
flowLogsRetentionDays: 90,
|
|
268
|
+
...DEFAULT_SUBNETS,
|
|
269
|
+
isolatedSubnets: { cidrMask: 24 },
|
|
270
|
+
enableVpcEndpoints: true,
|
|
271
|
+
...DEFAULT_SECURITY_GROUP,
|
|
272
|
+
},
|
|
273
|
+
observability: {
|
|
274
|
+
logs: {
|
|
275
|
+
namePattern: '/venturekit/{name}/{env}/{function}',
|
|
276
|
+
streamNamePattern: '{instance}/{timestamp}',
|
|
277
|
+
retentionDays: 90,
|
|
278
|
+
},
|
|
279
|
+
metrics: {
|
|
280
|
+
namespace: 'VentureKit',
|
|
281
|
+
detailedMetricsEnabled: true,
|
|
282
|
+
defaultDimensions: {},
|
|
283
|
+
},
|
|
284
|
+
alarms: {
|
|
285
|
+
enabled: true,
|
|
286
|
+
topicArn: undefined,
|
|
287
|
+
evaluationPeriods: 3,
|
|
288
|
+
periodSec: 60,
|
|
289
|
+
},
|
|
290
|
+
tracing: {
|
|
291
|
+
enabled: true,
|
|
292
|
+
samplingRate: 0.5,
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
websocket: {
|
|
296
|
+
enabled: false,
|
|
297
|
+
routeSelectionExpression: '$request.body.action',
|
|
298
|
+
idleTimeoutSec: 600,
|
|
299
|
+
throttleRateLimit: 500,
|
|
300
|
+
throttleBurstLimit: 1000,
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* Get preset configuration by name
|
|
305
|
+
*/
|
|
306
|
+
function getPreset(preset) {
|
|
307
|
+
switch (preset) {
|
|
308
|
+
case 'nano':
|
|
309
|
+
return exports.PRESET_NANO;
|
|
310
|
+
case 'micro':
|
|
311
|
+
return exports.PRESET_MICRO;
|
|
312
|
+
case 'medium':
|
|
313
|
+
return exports.PRESET_MEDIUM;
|
|
314
|
+
case 'large':
|
|
315
|
+
return exports.PRESET_LARGE;
|
|
316
|
+
default:
|
|
317
|
+
throw new Error(`Unknown preset: ${preset}`);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Default data safety per environment
|
|
322
|
+
*/
|
|
323
|
+
exports.DEFAULT_DATA_SAFETY = {
|
|
324
|
+
dev: 'relaxed',
|
|
325
|
+
stage: 'standard',
|
|
326
|
+
prod: 'strict',
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* Data safety configurations
|
|
330
|
+
*/
|
|
331
|
+
exports.DATA_SAFETY_CONFIG = {
|
|
332
|
+
strict: {
|
|
333
|
+
removalPolicy: 'retain',
|
|
334
|
+
deletionProtection: true,
|
|
335
|
+
},
|
|
336
|
+
standard: {
|
|
337
|
+
removalPolicy: 'retain',
|
|
338
|
+
deletionProtection: true,
|
|
339
|
+
},
|
|
340
|
+
relaxed: {
|
|
341
|
+
removalPolicy: 'destroy',
|
|
342
|
+
deletionProtection: false,
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOzs7QUFnVUgsOEJBYUM7QUF6VEQ7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRztJQUNsQixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLGdCQUFnQixFQUFFLEVBQUU7Q0FDckIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxlQUFlLEdBQUc7SUFDdEIsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtJQUMvQixjQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO0lBQ2hDLGVBQWUsRUFBRSxTQUFTO0NBQzNCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsMEJBQTBCLEVBQUUsRUFBRTtJQUM5Qix5QkFBeUIsRUFBRTtRQUN6QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRTtLQUN6RztDQUNGLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNVLFFBQUEsV0FBVyxHQUFpQjtJQUN2QyxNQUFNLEVBQUU7UUFDTixRQUFRLEVBQUUsR0FBRztRQUNiLFVBQVUsRUFBRSxFQUFFO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQztRQUNuQixtQkFBbUIsRUFBRSxTQUFTO1FBQzlCLHNCQUFzQixFQUFFLFNBQVM7UUFDakMsY0FBYyxFQUFFLEtBQUs7UUFDckIsVUFBVSxFQUFFLEtBQUs7UUFDakIsT0FBTyxFQUFFLFlBQVk7UUFDckIsWUFBWSxFQUFFLE9BQU87UUFDckIsR0FBRyxFQUFFLFdBQVc7UUFDaEIsb0JBQW9CLEVBQUUsRUFBRTtRQUN4QixNQUFNLEVBQUUsRUFBRTtLQUNYO0lBQ0Qs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ZixDQUFDO0FBRUY7O0dBRUc7QUFDVSxRQUFBLGtCQUFrQixHQUcxQjtJQUNILE1BQU0sRUFBRTtRQUNOLGFBQWEsRUFBRSxRQUFRO1FBQ3ZCLGtCQUFrQixFQUFFLElBQUk7S0FDekI7SUFDRCxRQUFRLEVBQUU7UUFDUixhQUFhLEVBQUUsUUFBUTtRQUN2QixrQkFBa0IsRUFBRSxJQUFJO0tBQ3pCO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsYUFBYSxFQUFFLFNBQVM7UUFDeEIsa0JBQWtCLEVBQUUsS0FBSztLQUMxQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlbnR1cmVLaXQgUHJlc2V0c1xuICogXG4gKiBBV1MtbGlrZSBwcmVzZXQgc2l6ZXMgdGhhdCBleHBhbmQgdG8gZXhwbGljaXQgY29uZmlndXJhdGlvbiB2YWx1ZXMuXG4gKiBVc2VycyBjYW4gdXNlIHRoZXNlIGFzIHNob3J0Y3V0cyBhbmQgb3ZlcnJpZGUgc3BlY2lmaWMgZmllbGRzLlxuICogXG4gKiBNZXJnZSBvcmRlcjogUFJFU0VUIOKGkCBVU0VSX09WRVJSSURFU1xuICovXG5cbmltcG9ydCB7IExhbWJkYUVudkNvbmZpZyB9IGZyb20gJy4vdHlwZXMvbGFtYmRhJztcbmltcG9ydCB7IEFwaUVudkNvbmZpZyB9IGZyb20gJy4vdHlwZXMvYXBpJztcbmltcG9ydCB7IFZwY0VudkNvbmZpZyB9IGZyb20gJy4vdHlwZXMvdnBjJztcbmltcG9ydCB7IE9ic2VydmFiaWxpdHlFbnZDb25maWcgfSBmcm9tICcuL3R5cGVzL29ic2VydmFiaWxpdHknO1xuaW1wb3J0IHsgV2ViU29ja2V0RW52Q29uZmlnIH0gZnJvbSAnLi90eXBlcy93ZWJzb2NrZXQnO1xuaW1wb3J0IHsgUHJlc2V0LCBEYXRhU2FmZXR5IH0gZnJvbSAnLi90eXBlcy9lbnYnO1xuXG4vKipcbiAqIFByZXNldCBjb25maWd1cmF0aW9uIChmdWxseSBzcGVjaWZpZWQsIG5vIG9wdGlvbmFscylcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzZXRDb25maWcge1xuICBsYW1iZGE6IExhbWJkYUVudkNvbmZpZztcbiAgYXBpOiBPbWl0PEFwaUVudkNvbmZpZywgJ2NvcnMnIHwgJ2N1c3RvbURvbWFpbic+O1xuICB2cGM6IFZwY0VudkNvbmZpZztcbiAgb2JzZXJ2YWJpbGl0eTogT2JzZXJ2YWJpbGl0eUVudkNvbmZpZztcbiAgd2Vic29ja2V0OiBXZWJTb2NrZXRFbnZDb25maWc7XG59XG5cbi8qKlxuICogRGVmYXVsdCBJQU0gY29uZmlnIChlbXB0eSAtIFZlbnR1cmVLaXQgaGFuZGxlcyBiYXNpYyBwZXJtaXNzaW9ucylcbiAqL1xuY29uc3QgREVGQVVMVF9JQU0gPSB7XG4gIG1hbmFnZWRQb2xpY3lBcm5zOiBbXSxcbiAgaW5saW5lU3RhdGVtZW50czogW10sXG59O1xuXG4vKipcbiAqIERlZmF1bHQgc3VibmV0IGNvbmZpZ1xuICovXG5jb25zdCBERUZBVUxUX1NVQk5FVFMgPSB7XG4gIHB1YmxpY1N1Ym5ldHM6IHsgY2lkck1hc2s6IDI0IH0sXG4gIHByaXZhdGVTdWJuZXRzOiB7IGNpZHJNYXNrOiAyNCB9LFxuICBpc29sYXRlZFN1Ym5ldHM6IHVuZGVmaW5lZCxcbn07XG5cbi8qKlxuICogRGVmYXVsdCBzZWN1cml0eSBncm91cCBydWxlcyAoYWxsb3cgYWxsIG91dGJvdW5kKVxuICovXG5jb25zdCBERUZBVUxUX1NFQ1VSSVRZX0dST1VQID0ge1xuICBsYW1iZGFTZWN1cml0eUdyb3VwSW5ncmVzczogW10sXG4gIGxhbWJkYVNlY3VyaXR5R3JvdXBFZ3Jlc3M6IFtcbiAgICB7IHByb3RvY29sOiAnLTEnLCBmcm9tUG9ydDogMCwgdG9Qb3J0OiAwLCBjaWRyQmxvY2tzOiBbJzAuMC4wLjAvMCddLCBkZXNjcmlwdGlvbjogJ0FsbG93IGFsbCBvdXRib3VuZCcgfSxcbiAgXSxcbn07XG5cbi8qKlxuICogTkFOTyBwcmVzZXQgLSBNaW5pbWFsIHJlc291cmNlcyBmb3IgZGV2ZWxvcG1lbnQvdGVzdGluZ1xuICogXG4gKiBVc2UgY2FzZTogTG9jYWwgZGV2ZWxvcG1lbnQsIENJL0NEIHRlc3RpbmcsIHByb29mIG9mIGNvbmNlcHRzXG4gKiBDb3N0OiB+JDUtMTUvbW9udGhcbiAqL1xuZXhwb3J0IGNvbnN0IFBSRVNFVF9OQU5POiBQcmVzZXRDb25maWcgPSB7XG4gIGxhbWJkYToge1xuICAgIG1lbW9yeU1iOiAxMjgsXG4gICAgdGltZW91dFNlYzogMTAsXG4gICAgbG9nUmV0ZW50aW9uRGF5czogNyxcbiAgICByZXNlcnZlZENvbmN1cnJlbmN5OiB1bmRlZmluZWQsXG4gICAgcHJvdmlzaW9uZWRDb25jdXJyZW5jeTogdW5kZWZpbmVkLFxuICAgIHRyYWNpbmdFbmFibGVkOiBmYWxzZSxcbiAgICB2cGNFbmFibGVkOiBmYWxzZSxcbiAgICBydW50aW1lOiAnbm9kZWpzMjAueCcsXG4gICAgYXJjaGl0ZWN0dXJlOiAnYXJtNjQnLFxuICAgIGlhbTogREVGQVVMVF9JQU0sXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHt9LFxuICAgIGxheWVyczogW10sXG4gIH0sXG4gIGFwaToge1xuICAgIHRocm90dGxlUmF0ZUxpbWl0OiAxMCxcbiAgICB0aHJvdHRsZUJ1cnN0TGltaXQ6IDIwLFxuICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IGZhbHNlLFxuICB9LFxuICB2cGM6IHtcbiAgICBtYXhBenM6IDIsXG4gICAgbmF0R2F0ZXdheXM6IDAsXG4gICAgY2lkcjogJzEwLjAuMC4wLzE2JyxcbiAgICBmbG93TG9nc0VuYWJsZWQ6IGZhbHNlLFxuICAgIGZsb3dMb2dzUmV0ZW50aW9uRGF5czogNyxcbiAgICAuLi5ERUZBVUxUX1NVQk5FVFMsXG4gICAgZW5hYmxlVnBjRW5kcG9pbnRzOiBmYWxzZSxcbiAgICAuLi5ERUZBVUxUX1NFQ1VSSVRZX0dST1VQLFxuICB9LFxuICBvYnNlcnZhYmlsaXR5OiB7XG4gICAgbG9nczoge1xuICAgICAgbmFtZVBhdHRlcm46ICcvdmVudHVyZWtpdC97bmFtZX0ve2Vudn0ve2Z1bmN0aW9ufScsXG4gICAgICBzdHJlYW1OYW1lUGF0dGVybjogJ3tpbnN0YW5jZX0ve3RpbWVzdGFtcH0nLFxuICAgICAgcmV0ZW50aW9uRGF5czogNyxcbiAgICB9LFxuICAgIG1ldHJpY3M6IHtcbiAgICAgIG5hbWVzcGFjZTogJ1ZlbnR1cmVLaXQnLFxuICAgICAgZGV0YWlsZWRNZXRyaWNzRW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0RGltZW5zaW9uczoge30sXG4gICAgfSxcbiAgICBhbGFybXM6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgdG9waWNBcm46IHVuZGVmaW5lZCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAzLFxuICAgICAgcGVyaW9kU2VjOiA2MCxcbiAgICB9LFxuICAgIHRyYWNpbmc6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgc2FtcGxpbmdSYXRlOiAwLjA1LFxuICAgIH0sXG4gIH0sXG4gIHdlYnNvY2tldDoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbjogJyRyZXF1ZXN0LmJvZHkuYWN0aW9uJyxcbiAgICBpZGxlVGltZW91dFNlYzogNjAwLFxuICAgIHRocm90dGxlUmF0ZUxpbWl0OiAxMCxcbiAgICB0aHJvdHRsZUJ1cnN0TGltaXQ6IDIwLFxuICB9LFxufTtcblxuLyoqXG4gKiBNSUNSTyBwcmVzZXQgLSBTbWFsbCBwcm9kdWN0aW9uIHdvcmtsb2Fkc1xuICogXG4gKiBVc2UgY2FzZTogRWFybHktc3RhZ2Ugc3RhcnR1cHMsIGxvdy10cmFmZmljIEFQSXMsIGludGVybmFsIHRvb2xzXG4gKiBDb3N0OiB+JDMwLTgwL21vbnRoXG4gKi9cbmV4cG9ydCBjb25zdCBQUkVTRVRfTUlDUk86IFByZXNldENvbmZpZyA9IHtcbiAgbGFtYmRhOiB7XG4gICAgbWVtb3J5TWI6IDI1NixcbiAgICB0aW1lb3V0U2VjOiAxMCxcbiAgICBsb2dSZXRlbnRpb25EYXlzOiAxNCxcbiAgICByZXNlcnZlZENvbmN1cnJlbmN5OiB1bmRlZmluZWQsXG4gICAgcHJvdmlzaW9uZWRDb25jdXJyZW5jeTogdW5kZWZpbmVkLFxuICAgIHRyYWNpbmdFbmFibGVkOiBmYWxzZSxcbiAgICB2cGNFbmFibGVkOiB0cnVlLFxuICAgIHJ1bnRpbWU6ICdub2RlanMyMC54JyxcbiAgICBhcmNoaXRlY3R1cmU6ICdhcm02NCcsXG4gICAgaWFtOiBERUZBVUxUX0lBTSxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge30sXG4gICAgbGF5ZXJzOiBbXSxcbiAgfSxcbiAgYXBpOiB7XG4gICAgdGhyb3R0bGVSYXRlTGltaXQ6IDUwLFxuICAgIHRocm90dGxlQnVyc3RMaW1pdDogMTAwLFxuICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IGZhbHNlLFxuICB9LFxuICB2cGM6IHtcbiAgICBtYXhBenM6IDIsXG4gICAgbmF0R2F0ZXdheXM6IDEsXG4gICAgY2lkcjogJzEwLjAuMC4wLzE2JyxcbiAgICBmbG93TG9nc0VuYWJsZWQ6IGZhbHNlLFxuICAgIGZsb3dMb2dzUmV0ZW50aW9uRGF5czogMTQsXG4gICAgLi4uREVGQVVMVF9TVUJORVRTLFxuICAgIGVuYWJsZVZwY0VuZHBvaW50czogdHJ1ZSxcbiAgICAuLi5ERUZBVUxUX1NFQ1VSSVRZX0dST1VQLFxuICB9LFxuICBvYnNlcnZhYmlsaXR5OiB7XG4gICAgbG9nczoge1xuICAgICAgbmFtZVBhdHRlcm46ICcvdmVudHVyZWtpdC97bmFtZX0ve2Vudn0ve2Z1bmN0aW9ufScsXG4gICAgICBzdHJlYW1OYW1lUGF0dGVybjogJ3tpbnN0YW5jZX0ve3RpbWVzdGFtcH0nLFxuICAgICAgcmV0ZW50aW9uRGF5czogMTQsXG4gICAgfSxcbiAgICBtZXRyaWNzOiB7XG4gICAgICBuYW1lc3BhY2U6ICdWZW50dXJlS2l0JyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdERpbWVuc2lvbnM6IHt9LFxuICAgIH0sXG4gICAgYWxhcm1zOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHRvcGljQXJuOiB1bmRlZmluZWQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICAgIHBlcmlvZFNlYzogNjAsXG4gICAgfSxcbiAgICB0cmFjaW5nOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHNhbXBsaW5nUmF0ZTogMC4xLFxuICAgIH0sXG4gIH0sXG4gIHdlYnNvY2tldDoge1xuICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgIHJvdXRlU2VsZWN0aW9uRXhwcmVzc2lvbjogJyRyZXF1ZXN0LmJvZHkuYWN0aW9uJyxcbiAgICBpZGxlVGltZW91dFNlYzogNjAwLFxuICAgIHRocm90dGxlUmF0ZUxpbWl0OiA1MCxcbiAgICB0aHJvdHRsZUJ1cnN0TGltaXQ6IDEwMCxcbiAgfSxcbn07XG5cbi8qKlxuICogTUVESVVNIHByZXNldCAtIFN0YW5kYXJkIHByb2R1Y3Rpb24gd29ya2xvYWRzXG4gKiBcbiAqIFVzZSBjYXNlOiBHcm93aW5nIHN0YXJ0dXBzLCBtb2RlcmF0ZSB0cmFmZmljLCBjdXN0b21lci1mYWNpbmcgQVBJc1xuICogQ29zdDogfiQxMDAtMzAwL21vbnRoXG4gKi9cbmV4cG9ydCBjb25zdCBQUkVTRVRfTUVESVVNOiBQcmVzZXRDb25maWcgPSB7XG4gIGxhbWJkYToge1xuICAgIG1lbW9yeU1iOiA1MTIsXG4gICAgdGltZW91dFNlYzogMTUsXG4gICAgbG9nUmV0ZW50aW9uRGF5czogMzAsXG4gICAgcmVzZXJ2ZWRDb25jdXJyZW5jeTogdW5kZWZpbmVkLFxuICAgIHByb3Zpc2lvbmVkQ29uY3VycmVuY3k6IHVuZGVmaW5lZCxcbiAgICB0cmFjaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICB2cGNFbmFibGVkOiB0cnVlLFxuICAgIHJ1bnRpbWU6ICdub2RlanMyMC54JyxcbiAgICBhcmNoaXRlY3R1cmU6ICdhcm02NCcsXG4gICAgaWFtOiBERUZBVUxUX0lBTSxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlczoge30sXG4gICAgbGF5ZXJzOiBbXSxcbiAgfSxcbiAgYXBpOiB7XG4gICAgdGhyb3R0bGVSYXRlTGltaXQ6IDEwMCxcbiAgICB0aHJvdHRsZUJ1cnN0TGltaXQ6IDIwMCxcbiAgICBkZXRhaWxlZE1ldHJpY3NFbmFibGVkOiB0cnVlLFxuICB9LFxuICB2cGM6IHtcbiAgICBtYXhBenM6IDIsXG4gICAgbmF0R2F0ZXdheXM6IDEsXG4gICAgY2lkcjogJzEwLjAuMC4wLzE2JyxcbiAgICBmbG93TG9nc0VuYWJsZWQ6IHRydWUsXG4gICAgZmxvd0xvZ3NSZXRlbnRpb25EYXlzOiAzMCxcbiAgICAuLi5ERUZBVUxUX1NVQk5FVFMsXG4gICAgaXNvbGF0ZWRTdWJuZXRzOiB7IGNpZHJNYXNrOiAyNCB9LFxuICAgIGVuYWJsZVZwY0VuZHBvaW50czogdHJ1ZSxcbiAgICAuLi5ERUZBVUxUX1NFQ1VSSVRZX0dST1VQLFxuICB9LFxuICBvYnNlcnZhYmlsaXR5OiB7XG4gICAgbG9nczoge1xuICAgICAgbmFtZVBhdHRlcm46ICcvdmVudHVyZWtpdC97bmFtZX0ve2Vudn0ve2Z1bmN0aW9ufScsXG4gICAgICBzdHJlYW1OYW1lUGF0dGVybjogJ3tpbnN0YW5jZX0ve3RpbWVzdGFtcH0nLFxuICAgICAgcmV0ZW50aW9uRGF5czogMzAsXG4gICAgfSxcbiAgICBtZXRyaWNzOiB7XG4gICAgICBuYW1lc3BhY2U6ICdWZW50dXJlS2l0JyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gICAgICBkZWZhdWx0RGltZW5zaW9uczoge30sXG4gICAgfSxcbiAgICBhbGFybXM6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICB0b3BpY0FybjogdW5kZWZpbmVkLFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDMsXG4gICAgICBwZXJpb2RTZWM6IDYwLFxuICAgIH0sXG4gICAgdHJhY2luZzoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHNhbXBsaW5nUmF0ZTogMC4yNSxcbiAgICB9LFxuICB9LFxuICB3ZWJzb2NrZXQ6IHtcbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICByb3V0ZVNlbGVjdGlvbkV4cHJlc3Npb246ICckcmVxdWVzdC5ib2R5LmFjdGlvbicsXG4gICAgaWRsZVRpbWVvdXRTZWM6IDYwMCxcbiAgICB0aHJvdHRsZVJhdGVMaW1pdDogMTAwLFxuICAgIHRocm90dGxlQnVyc3RMaW1pdDogMjAwLFxuICB9LFxufTtcblxuLyoqXG4gKiBMQVJHRSBwcmVzZXQgLSBIaWdoLXRyYWZmaWMgcHJvZHVjdGlvbiB3b3JrbG9hZHNcbiAqIFxuICogVXNlIGNhc2U6IFNjYWxlZCBzdGFydHVwcywgaGlnaCB0cmFmZmljLCBtaXNzaW9uLWNyaXRpY2FsIEFQSXNcbiAqIENvc3Q6IH4kNTAwKy9tb250aFxuICovXG5leHBvcnQgY29uc3QgUFJFU0VUX0xBUkdFOiBQcmVzZXRDb25maWcgPSB7XG4gIGxhbWJkYToge1xuICAgIG1lbW9yeU1iOiAxMDI0LFxuICAgIHRpbWVvdXRTZWM6IDMwLFxuICAgIGxvZ1JldGVudGlvbkRheXM6IDkwLFxuICAgIHJlc2VydmVkQ29uY3VycmVuY3k6IHVuZGVmaW5lZCxcbiAgICBwcm92aXNpb25lZENvbmN1cnJlbmN5OiB1bmRlZmluZWQsXG4gICAgdHJhY2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgdnBjRW5hYmxlZDogdHJ1ZSxcbiAgICBydW50aW1lOiAnbm9kZWpzMjAueCcsXG4gICAgYXJjaGl0ZWN0dXJlOiAnYXJtNjQnLFxuICAgIGlhbTogREVGQVVMVF9JQU0sXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZXM6IHt9LFxuICAgIGxheWVyczogW10sXG4gIH0sXG4gIGFwaToge1xuICAgIHRocm90dGxlUmF0ZUxpbWl0OiA1MDAsXG4gICAgdGhyb3R0bGVCdXJzdExpbWl0OiAxMDAwLFxuICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHRydWUsXG4gIH0sXG4gIHZwYzoge1xuICAgIG1heEF6czogMyxcbiAgICBuYXRHYXRld2F5czogMixcbiAgICBjaWRyOiAnMTAuMC4wLjAvMTYnLFxuICAgIGZsb3dMb2dzRW5hYmxlZDogdHJ1ZSxcbiAgICBmbG93TG9nc1JldGVudGlvbkRheXM6IDkwLFxuICAgIC4uLkRFRkFVTFRfU1VCTkVUUyxcbiAgICBpc29sYXRlZFN1Ym5ldHM6IHsgY2lkck1hc2s6IDI0IH0sXG4gICAgZW5hYmxlVnBjRW5kcG9pbnRzOiB0cnVlLFxuICAgIC4uLkRFRkFVTFRfU0VDVVJJVFlfR1JPVVAsXG4gIH0sXG4gIG9ic2VydmFiaWxpdHk6IHtcbiAgICBsb2dzOiB7XG4gICAgICBuYW1lUGF0dGVybjogJy92ZW50dXJla2l0L3tuYW1lfS97ZW52fS97ZnVuY3Rpb259JyxcbiAgICAgIHN0cmVhbU5hbWVQYXR0ZXJuOiAne2luc3RhbmNlfS97dGltZXN0YW1wfScsXG4gICAgICByZXRlbnRpb25EYXlzOiA5MCxcbiAgICB9LFxuICAgIG1ldHJpY3M6IHtcbiAgICAgIG5hbWVzcGFjZTogJ1ZlbnR1cmVLaXQnLFxuICAgICAgZGV0YWlsZWRNZXRyaWNzRW5hYmxlZDogdHJ1ZSxcbiAgICAgIGRlZmF1bHREaW1lbnNpb25zOiB7fSxcbiAgICB9LFxuICAgIGFsYXJtczoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIHRvcGljQXJuOiB1bmRlZmluZWQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMyxcbiAgICAgIHBlcmlvZFNlYzogNjAsXG4gICAgfSxcbiAgICB0cmFjaW5nOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgc2FtcGxpbmdSYXRlOiAwLjUsXG4gICAgfSxcbiAgfSxcbiAgd2Vic29ja2V0OiB7XG4gICAgZW5hYmxlZDogZmFsc2UsXG4gICAgcm91dGVTZWxlY3Rpb25FeHByZXNzaW9uOiAnJHJlcXVlc3QuYm9keS5hY3Rpb24nLFxuICAgIGlkbGVUaW1lb3V0U2VjOiA2MDAsXG4gICAgdGhyb3R0bGVSYXRlTGltaXQ6IDUwMCxcbiAgICB0aHJvdHRsZUJ1cnN0TGltaXQ6IDEwMDAsXG4gIH0sXG59O1xuXG4vKipcbiAqIEdldCBwcmVzZXQgY29uZmlndXJhdGlvbiBieSBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcmVzZXQocHJlc2V0OiBQcmVzZXQpOiBQcmVzZXRDb25maWcge1xuICBzd2l0Y2ggKHByZXNldCkge1xuICAgIGNhc2UgJ25hbm8nOlxuICAgICAgcmV0dXJuIFBSRVNFVF9OQU5PO1xuICAgIGNhc2UgJ21pY3JvJzpcbiAgICAgIHJldHVybiBQUkVTRVRfTUlDUk87XG4gICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgIHJldHVybiBQUkVTRVRfTUVESVVNO1xuICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgIHJldHVybiBQUkVTRVRfTEFSR0U7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwcmVzZXQ6ICR7cHJlc2V0fWApO1xuICB9XG59XG5cbi8qKlxuICogRGVmYXVsdCBkYXRhIHNhZmV0eSBwZXIgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfREFUQV9TQUZFVFk6IFJlY29yZDxzdHJpbmcsIERhdGFTYWZldHk+ID0ge1xuICBkZXY6ICdyZWxheGVkJyxcbiAgc3RhZ2U6ICdzdGFuZGFyZCcsXG4gIHByb2Q6ICdzdHJpY3QnLFxufTtcblxuLyoqXG4gKiBEYXRhIHNhZmV0eSBjb25maWd1cmF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgREFUQV9TQUZFVFlfQ09ORklHOiBSZWNvcmQ8RGF0YVNhZmV0eSwgeyBcbiAgcmVtb3ZhbFBvbGljeTogJ3JldGFpbicgfCAnZGVzdHJveSc7XG4gIGRlbGV0aW9uUHJvdGVjdGlvbjogYm9vbGVhbjtcbn0+ID0ge1xuICBzdHJpY3Q6IHtcbiAgICByZW1vdmFsUG9saWN5OiAncmV0YWluJyxcbiAgICBkZWxldGlvblByb3RlY3Rpb246IHRydWUsXG4gIH0sXG4gIHN0YW5kYXJkOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogJ3JldGFpbicsXG4gICAgZGVsZXRpb25Qcm90ZWN0aW9uOiB0cnVlLFxuICB9LFxuICByZWxheGVkOiB7XG4gICAgcmVtb3ZhbFBvbGljeTogJ2Rlc3Ryb3knLFxuICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Configuration Resolution
|
|
3
|
+
*
|
|
4
|
+
* Merges base config + env config input into a fully resolved configuration.
|
|
5
|
+
*
|
|
6
|
+
* Merge order: PRESET ← USER_OVERRIDES
|
|
7
|
+
*
|
|
8
|
+
* This ensures:
|
|
9
|
+
* - Presets provide sensible defaults
|
|
10
|
+
* - Users can override any specific field
|
|
11
|
+
* - Final config has no undefined values (except where explicitly typed)
|
|
12
|
+
*/
|
|
13
|
+
import { BaseConfig } from './types/base';
|
|
14
|
+
import { SecurityConfig } from './types/security';
|
|
15
|
+
import { EnvConfig, EnvConfigInput, Environment } from './types/env';
|
|
16
|
+
import { ResolvedConfig } from './types/resolved';
|
|
17
|
+
/**
|
|
18
|
+
* Resolve environment configuration
|
|
19
|
+
*
|
|
20
|
+
* Takes user input and produces a fully resolved EnvConfig.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveEnvConfig(env: Environment, input: EnvConfigInput): EnvConfig;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve full configuration
|
|
25
|
+
*
|
|
26
|
+
* Merges base config + security config + env config into a complete ResolvedConfig.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveConfig(base: BaseConfig, security: SecurityConfig, env: Environment, envInput: EnvConfigInput): ResolvedConfig;
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VentureKit Configuration Resolution
|
|
4
|
+
*
|
|
5
|
+
* Merges base config + env config input into a fully resolved configuration.
|
|
6
|
+
*
|
|
7
|
+
* Merge order: PRESET ← USER_OVERRIDES
|
|
8
|
+
*
|
|
9
|
+
* This ensures:
|
|
10
|
+
* - Presets provide sensible defaults
|
|
11
|
+
* - Users can override any specific field
|
|
12
|
+
* - Final config has no undefined values (except where explicitly typed)
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.resolveEnvConfig = resolveEnvConfig;
|
|
16
|
+
exports.resolveConfig = resolveConfig;
|
|
17
|
+
const presets_1 = require("./presets");
|
|
18
|
+
/**
|
|
19
|
+
* Resolve Lambda configuration
|
|
20
|
+
*/
|
|
21
|
+
function resolveLambda(preset, input) {
|
|
22
|
+
if (!input)
|
|
23
|
+
return preset.lambda;
|
|
24
|
+
const { iam, ...rest } = input;
|
|
25
|
+
return {
|
|
26
|
+
...preset.lambda,
|
|
27
|
+
...rest,
|
|
28
|
+
iam: iam ? {
|
|
29
|
+
managedPolicyArns: iam.managedPolicyArns ?? preset.lambda.iam.managedPolicyArns,
|
|
30
|
+
inlineStatements: iam.inlineStatements ?? preset.lambda.iam.inlineStatements,
|
|
31
|
+
} : preset.lambda.iam,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Resolve API configuration
|
|
36
|
+
*/
|
|
37
|
+
function resolveApi(preset, input) {
|
|
38
|
+
const base = {
|
|
39
|
+
...preset.api,
|
|
40
|
+
cors: undefined,
|
|
41
|
+
customDomain: undefined,
|
|
42
|
+
};
|
|
43
|
+
if (!input)
|
|
44
|
+
return base;
|
|
45
|
+
const { cors, customDomain, ...rest } = input;
|
|
46
|
+
const result = { ...base, ...rest };
|
|
47
|
+
// Handle CORS separately (partial merge)
|
|
48
|
+
if (cors) {
|
|
49
|
+
const defaultCors = {
|
|
50
|
+
allowOrigins: ['*'],
|
|
51
|
+
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
52
|
+
allowHeaders: ['Content-Type', 'Authorization'],
|
|
53
|
+
allowCredentials: false,
|
|
54
|
+
maxAgeSec: 86400,
|
|
55
|
+
};
|
|
56
|
+
result.cors = { ...defaultCors, ...cors };
|
|
57
|
+
}
|
|
58
|
+
// Custom domain is all-or-nothing
|
|
59
|
+
if (customDomain) {
|
|
60
|
+
result.customDomain = customDomain;
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve VPC configuration
|
|
66
|
+
*/
|
|
67
|
+
function resolveVpc(preset, input) {
|
|
68
|
+
if (!input)
|
|
69
|
+
return preset.vpc;
|
|
70
|
+
const { publicSubnets, privateSubnets, isolatedSubnets, ...rest } = input;
|
|
71
|
+
const result = { ...preset.vpc, ...rest };
|
|
72
|
+
if (publicSubnets) {
|
|
73
|
+
result.publicSubnets = { ...preset.vpc.publicSubnets, ...publicSubnets };
|
|
74
|
+
}
|
|
75
|
+
if (privateSubnets) {
|
|
76
|
+
result.privateSubnets = { ...preset.vpc.privateSubnets, ...privateSubnets };
|
|
77
|
+
}
|
|
78
|
+
if (isolatedSubnets !== undefined) {
|
|
79
|
+
if (isolatedSubnets && preset.vpc.isolatedSubnets) {
|
|
80
|
+
result.isolatedSubnets = { ...preset.vpc.isolatedSubnets, ...isolatedSubnets };
|
|
81
|
+
}
|
|
82
|
+
else if (isolatedSubnets) {
|
|
83
|
+
result.isolatedSubnets = { cidrMask: isolatedSubnets.cidrMask ?? 24 };
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
result.isolatedSubnets = undefined;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolve Observability configuration
|
|
93
|
+
*/
|
|
94
|
+
function resolveObservability(preset, input) {
|
|
95
|
+
if (!input)
|
|
96
|
+
return preset.observability;
|
|
97
|
+
const { logs, metrics, alarms, tracing, ...shorthands } = input;
|
|
98
|
+
// Start with preset
|
|
99
|
+
const result = { ...preset.observability };
|
|
100
|
+
// Apply nested configs
|
|
101
|
+
if (logs) {
|
|
102
|
+
result.logs = { ...result.logs, ...logs };
|
|
103
|
+
}
|
|
104
|
+
if (metrics) {
|
|
105
|
+
result.metrics = { ...result.metrics, ...metrics };
|
|
106
|
+
}
|
|
107
|
+
if (alarms) {
|
|
108
|
+
result.alarms = { ...result.alarms, ...alarms };
|
|
109
|
+
}
|
|
110
|
+
if (tracing) {
|
|
111
|
+
result.tracing = { ...result.tracing, ...tracing };
|
|
112
|
+
}
|
|
113
|
+
// Apply shorthands
|
|
114
|
+
if (shorthands.alarmsEnabled !== undefined) {
|
|
115
|
+
result.alarms.enabled = shorthands.alarmsEnabled;
|
|
116
|
+
}
|
|
117
|
+
if (shorthands.tracingEnabled !== undefined) {
|
|
118
|
+
result.tracing.enabled = shorthands.tracingEnabled;
|
|
119
|
+
}
|
|
120
|
+
if (shorthands.logRetentionDays !== undefined) {
|
|
121
|
+
result.logs.retentionDays = shorthands.logRetentionDays;
|
|
122
|
+
}
|
|
123
|
+
if (shorthands.detailedMetricsEnabled !== undefined) {
|
|
124
|
+
result.metrics.detailedMetricsEnabled = shorthands.detailedMetricsEnabled;
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolve WebSocket configuration
|
|
130
|
+
*/
|
|
131
|
+
function resolveWebSocket(preset, input) {
|
|
132
|
+
if (!input)
|
|
133
|
+
return preset.websocket;
|
|
134
|
+
return { ...preset.websocket, ...input };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Resolve environment configuration
|
|
138
|
+
*
|
|
139
|
+
* Takes user input and produces a fully resolved EnvConfig.
|
|
140
|
+
*/
|
|
141
|
+
function resolveEnvConfig(env, input) {
|
|
142
|
+
// Determine preset (default to 'micro' if not specified)
|
|
143
|
+
const presetName = input.preset ?? 'micro';
|
|
144
|
+
const preset = (0, presets_1.getPreset)(presetName);
|
|
145
|
+
// Determine data safety (default based on environment)
|
|
146
|
+
const dataSafety = input.dataSafety ?? presets_1.DEFAULT_DATA_SAFETY[env];
|
|
147
|
+
return {
|
|
148
|
+
env,
|
|
149
|
+
dataSafety,
|
|
150
|
+
lambda: resolveLambda(preset, input.lambda),
|
|
151
|
+
api: resolveApi(preset, input.api),
|
|
152
|
+
vpc: resolveVpc(preset, input.vpc),
|
|
153
|
+
observability: resolveObservability(preset, input.observability),
|
|
154
|
+
websocket: resolveWebSocket(preset, input.websocket),
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Resolve full configuration
|
|
159
|
+
*
|
|
160
|
+
* Merges base config + security config + env config into a complete ResolvedConfig.
|
|
161
|
+
*/
|
|
162
|
+
function resolveConfig(base, security, env, envInput) {
|
|
163
|
+
const envConfig = resolveEnvConfig(env, envInput);
|
|
164
|
+
return {
|
|
165
|
+
// From base
|
|
166
|
+
name: base.name,
|
|
167
|
+
displayName: base.displayName,
|
|
168
|
+
region: base.region,
|
|
169
|
+
// From security
|
|
170
|
+
scopes: security.scopes,
|
|
171
|
+
appClients: security.appClients,
|
|
172
|
+
// From env
|
|
173
|
+
env: envConfig.env,
|
|
174
|
+
dataSafety: envConfig.dataSafety,
|
|
175
|
+
lambda: envConfig.lambda,
|
|
176
|
+
api: envConfig.api,
|
|
177
|
+
vpc: envConfig.vpc,
|
|
178
|
+
observability: envConfig.observability,
|
|
179
|
+
websocket: envConfig.websocket,
|
|
180
|
+
// Auto-generated
|
|
181
|
+
tags: {
|
|
182
|
+
Project: base.name,
|
|
183
|
+
Environment: env,
|
|
184
|
+
ManagedBy: 'venturekit',
|
|
185
|
+
},
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFzS0gsNENBb0JDO0FBT0Qsc0NBa0NDO0FBeE5ELHVDQUF5RTtBQUV6RTs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUNwQixNQUFvQixFQUNwQixLQUErQjtJQUUvQixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUVqQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRS9CLE9BQU87UUFDTCxHQUFHLE1BQU0sQ0FBQyxNQUFNO1FBQ2hCLEdBQUcsSUFBSTtRQUNQLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1QsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtZQUMvRSxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1NBQzdFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxVQUFVLENBQ2pCLE1BQW9CLEVBQ3BCLEtBQTRCO0lBRTVCLE1BQU0sSUFBSSxHQUFpQjtRQUN6QixHQUFHLE1BQU0sQ0FBQyxHQUFHO1FBQ2IsSUFBSSxFQUFFLFNBQVM7UUFDZixZQUFZLEVBQUUsU0FBUztLQUN4QixDQUFDO0lBRUYsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4QixNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztJQUU5QyxNQUFNLE1BQU0s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QUksQ0FBQyxNQUFNO1FBRW5CLGdCQUFnQjtRQUNoQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1FBRS9CLFdBQVc7UUFDWCxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDbEIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO1FBQ2hDLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtRQUN4QixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDbEIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1FBQ2xCLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtRQUN0QyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7UUFFOUIsaUJBQWlCO1FBQ2pCLElBQUksRUFBRTtZQUNKLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixXQUFXLEVBQUUsR0FBRztZQUNoQixTQUFTLEVBQUUsWUFBWTtTQUN4QjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZW50dXJlS2l0IENvbmZpZ3VyYXRpb24gUmVzb2x1dGlvblxuICogXG4gKiBNZXJnZXMgYmFzZSBjb25maWcgKyBlbnYgY29uZmlnIGlucHV0IGludG8gYSBmdWxseSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICogXG4gKiBNZXJnZSBvcmRlcjogUFJFU0VUIOKGkCBVU0VSX09WRVJSSURFU1xuICogXG4gKiBUaGlzIGVuc3VyZXM6XG4gKiAtIFByZXNldHMgcHJvdmlkZSBzZW5zaWJsZSBkZWZhdWx0c1xuICogLSBVc2VycyBjYW4gb3ZlcnJpZGUgYW55IHNwZWNpZmljIGZpZWxkXG4gKiAtIEZpbmFsIGNvbmZpZyBoYXMgbm8gdW5kZWZpbmVkIHZhbHVlcyAoZXhjZXB0IHdoZXJlIGV4cGxpY2l0bHkgdHlwZWQpXG4gKi9cblxuaW1wb3J0IHsgQmFzZUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvYmFzZSc7XG5pbXBvcnQgeyBTZWN1cml0eUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvc2VjdXJpdHknO1xuaW1wb3J0IHsgRW52Q29uZmlnLCBFbnZDb25maWdJbnB1dCwgRW52aXJvbm1lbnQsIERhdGFTYWZldHkgfSBmcm9tICcuL3R5cGVzL2Vudic7XG5pbXBvcnQgeyBMYW1iZGFFbnZDb25maWcgfSBmcm9tICcuL3R5cGVzL2xhbWJkYSc7XG5pbXBvcnQgeyBBcGlFbnZDb25maWcsIENvcnNDb25maWcgfSBmcm9tICcuL3R5cGVzL2FwaSc7XG5pbXBvcnQgeyBWcGNFbnZDb25maWcgfSBmcm9tICcuL3R5cGVzL3ZwYyc7XG5pbXBvcnQgeyBPYnNlcnZhYmlsaXR5RW52Q29uZmlnIH0gZnJvbSAnLi90eXBlcy9vYnNlcnZhYmlsaXR5JztcbmltcG9ydCB7IFdlYlNvY2tldEVudkNvbmZpZyB9IGZyb20gJy4vdHlwZXMvd2Vic29ja2V0JztcbmltcG9ydCB7IFJlc29sdmVkQ29uZmlnIH0gZnJvbSAnLi90eXBlcy9yZXNvbHZlZCc7XG5pbXBvcnQgeyBnZXRQcmVzZXQsIERFRkFVTFRfREFUQV9TQUZFVFksIFByZXNldENvbmZpZyB9IGZyb20gJy4vcHJlc2V0cyc7XG5cbi8qKlxuICogUmVzb2x2ZSBMYW1iZGEgY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhKFxuICBwcmVzZXQ6IFByZXNldENvbmZpZyxcbiAgaW5wdXQ6IEVudkNvbmZpZ0lucHV0WydsYW1iZGEnXVxuKTogTGFtYmRhRW52Q29uZmlnIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIHByZXNldC5sYW1iZGE7XG4gIFxuICBjb25zdCB7IGlhbSwgLi4ucmVzdCB9ID0gaW5wdXQ7XG4gIFxuICByZXR1cm4ge1xuICAgIC4uLnByZXNldC5sYW1iZGEsXG4gICAgLi4ucmVzdCxcbiAgICBpYW06IGlhbSA/IHtcbiAgICAgIG1hbmFnZWRQb2xpY3lBcm5zOiBpYW0ubWFuYWdlZFBvbGljeUFybnMgPz8gcHJlc2V0LmxhbWJkYS5pYW0ubWFuYWdlZFBvbGljeUFybnMsXG4gICAgICBpbmxpbmVTdGF0ZW1lbnRzOiBpYW0uaW5saW5lU3RhdGVtZW50cyA/PyBwcmVzZXQubGFtYmRhLmlhbS5pbmxpbmVTdGF0ZW1lbnRzLFxuICAgIH0gOiBwcmVzZXQubGFtYmRhLmlhbSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIEFQSSBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBcGkoXG4gIHByZXNldDogUHJlc2V0Q29uZmlnLFxuICBpbnB1dDogRW52Q29uZmlnSW5wdXRbJ2FwaSddXG4pOiBBcGlFbnZDb25maWcge1xuICBjb25zdCBiYXNlOiBBcGlFbnZDb25maWcgPSB7XG4gICAgLi4ucHJlc2V0LmFwaSxcbiAgICBjb3JzOiB1bmRlZmluZWQsXG4gICAgY3VzdG9tRG9tYWluOiB1bmRlZmluZWQsXG4gIH07XG4gIFxuICBpZiAoIWlucHV0KSByZXR1cm4gYmFzZTtcbiAgXG4gIGNvbnN0IHsgY29ycywgY3VzdG9tRG9tYWluLCAuLi5yZXN0IH0gPSBpbnB1dDtcbiAgXG4gIGNvbnN0IHJlc3VsdDogQXBpRW52Q29uZmlnID0geyAuLi5iYXNlLCAuLi5yZXN0IH07XG4gIFxuICAvLyBIYW5kbGUgQ09SUyBzZXBhcmF0ZWx5IChwYXJ0aWFsIG1lcmdlKVxuICBpZiAoY29ycykge1xuICAgIGNvbnN0IGRlZmF1bHRDb3JzOiBDb3JzQ29uZmlnID0ge1xuICAgICAgYWxsb3dPcmlnaW5zOiBbJyonXSxcbiAgICAgIGFsbG93TWV0aG9kczogWydHRVQnLCAnUE9TVCcsICdQVVQnLCAnREVMRVRFJywgJ09QVElPTlMnXSxcbiAgICAgIGFsbG93SGVhZGVyczogWydDb250ZW50LVR5cGUnLCAnQXV0aG9yaXphdGlvbiddLFxuICAgICAgYWxsb3dDcmVkZW50aWFsczogZmFsc2UsXG4gICAgICBtYXhBZ2VTZWM6IDg2NDAwLFxuICAgIH07XG4gICAgcmVzdWx0LmNvcnMgPSB7IC4uLmRlZmF1bHRDb3JzLCAuLi5jb3JzIH07XG4gIH1cbiAgXG4gIC8vIEN1c3RvbSBkb21haW4gaXMgYWxsLW9yLW5vdGhpbmdcbiAgaWYgKGN1c3RvbURvbWFpbikge1xuICAgIHJlc3VsdC5jdXN0b21Eb21haW4gPSBjdXN0b21Eb21haW47XG4gIH1cbiAgXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBWUEMgY29uZmlndXJhdGlvblxuICovXG5mdW5jdGlvbiByZXNvbHZlVnBjKFxuICBwcmVzZXQ6IFByZXNldENvbmZpZyxcbiAgaW5wdXQ6IEVudkNvbmZpZ0lucHV0Wyd2cGMnXVxuKTogVnBjRW52Q29uZmlnIHtcbiAgaWYgKCFpbnB1dCkgcmV0dXJuIHByZXNldC52cGM7XG4gIFxuICBjb25zdCB7IHB1YmxpY1N1Ym5ldHMsIHByaXZhdGVTdWJuZXRzLCBpc29sYXRlZFN1Ym5ldHMsIC4uLnJlc3QgfSA9IGlucHV0O1xuICBcbiAgY29uc3QgcmVzdWx0OiBWcGNFbnZDb25maWcgPSB7IC4uLnByZXNldC52cGMsIC4uLnJlc3QgfTtcbiAgXG4gIGlmIChwdWJsaWNTdWJuZXRzKSB7XG4gICAgcmVzdWx0LnB1YmxpY1N1Ym5ldHMgPSB7IC4uLnByZXNldC52cGMucHVibGljU3VibmV0cywgLi4ucHVibGljU3VibmV0cyB9O1xuICB9XG4gIGlmIChwcml2YXRlU3VibmV0cykge1xuICAgIHJlc3VsdC5wcml2YXRlU3VibmV0cyA9IHsgLi4ucHJlc2V0LnZwYy5wcml2YXRlU3VibmV0cywgLi4ucHJpdmF0ZVN1Ym5ldHMgfTtcbiAgfVxuICBpZiAoaXNvbGF0ZWRTdWJuZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNvbGF0ZWRTdWJuZXRzICYmIHByZXNldC52cGMuaXNvbGF0ZWRTdWJuZXRzKSB7XG4gICAgICByZXN1bHQuaXNvbGF0ZWRTdWJuZXRzID0geyAuLi5wcmVzZXQudnBjLmlzb2xhdGVkU3VibmV0cywgLi4uaXNvbGF0ZWRTdWJuZXRzIH07XG4gICAgfSBlbHNlIGlmIChpc29sYXRlZFN1Ym5ldHMpIHtcbiAgICAgIHJlc3VsdC5pc29sYXRlZFN1Ym5ldHMgPSB7IGNpZHJNYXNrOiBpc29sYXRlZFN1Ym5ldHMuY2lkck1hc2sgPz8gMjQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0Lmlzb2xhdGVkU3VibmV0cyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBPYnNlcnZhYmlsaXR5IGNvbmZpZ3VyYXRpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU9ic2VydmFiaWxpdHkoXG4gIHByZXNldDogUHJlc2V0Q29uZmlnLFxuICBpbnB1dDogRW52Q29uZmlnSW5wdXRbJ29ic2VydmFiaWxpdHknXVxuKTogT2JzZXJ2YWJpbGl0eUVudkNvbmZpZyB7XG4gIGlmICghaW5wdXQpIHJldHVybiBwcmVzZXQub2JzZXJ2YWJpbGl0eTtcbiAgXG4gIGNvbnN0IHsgbG9ncywgbWV0cmljcywgYWxhcm1zLCB0cmFjaW5nLCAuLi5zaG9ydGhhbmRzIH0gPSBpbnB1dDtcbiAgXG4gIC8vIFN0YXJ0IHdpdGggcHJlc2V0XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ucHJlc2V0Lm9ic2VydmFiaWxpdHkgfTtcbiAgXG4gIC8vIEFwcGx5IG5lc3RlZCBjb25maWdzXG4gIGlmIChsb2dzKSB7XG4gICAgcmVzdWx0LmxvZ3MgPSB7IC4uLnJlc3VsdC5sb2dzLCAuLi5sb2dzIH07XG4gIH1cbiAgaWYgKG1ldHJpY3MpIHtcbiAgICByZXN1bHQubWV0cmljcyA9IHsgLi4ucmVzdWx0Lm1ldHJpY3MsIC4uLm1ldHJpY3MgfTtcbiAgfVxuICBpZiAoYWxhcm1zKSB7XG4gICAgcmVzdWx0LmFsYXJtcyA9IHsgLi4ucmVzdWx0LmFsYXJtcywgLi4uYWxhcm1zIH07XG4gIH1cbiAgaWYgKHRyYWNpbmcpIHtcbiAgICByZXN1bHQudHJhY2luZyA9IHsgLi4ucmVzdWx0LnRyYWNpbmcsIC4uLnRyYWNpbmcgfTtcbiAgfVxuICBcbiAgLy8gQXBwbHkgc2hvcnRoYW5kc1xuICBpZiAoc2hvcnRoYW5kcy5hbGFybXNFbmFibGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXN1bHQuYWxhcm1zLmVuYWJsZWQgPSBzaG9ydGhhbmRzLmFsYXJtc0VuYWJsZWQ7XG4gIH1cbiAgaWYgKHNob3J0aGFuZHMudHJhY2luZ0VuYWJsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3VsdC50cmFjaW5nLmVuYWJsZWQgPSBzaG9ydGhhbmRzLnRyYWNpbmdFbmFibGVkO1xuICB9XG4gIGlmIChzaG9ydGhhbmRzLmxvZ1JldGVudGlvbkRheXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJlc3VsdC5sb2dzLnJldGVudGlvbkRheXMgPSBzaG9ydGhhbmRzLmxvZ1JldGVudGlvbkRheXM7XG4gIH1cbiAgaWYgKHNob3J0aGFuZHMuZGV0YWlsZWRNZXRyaWNzRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmVzdWx0Lm1ldHJpY3MuZGV0YWlsZWRNZXRyaWNzRW5hYmxlZCA9IHNob3J0aGFuZHMuZGV0YWlsZWRNZXRyaWNzRW5hYmxlZDtcbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIFdlYlNvY2tldCBjb25maWd1cmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVXZWJTb2NrZXQoXG4gIHByZXNldDogUHJlc2V0Q29uZmlnLFxuICBpbnB1dDogRW52Q29uZmlnSW5wdXRbJ3dlYnNvY2tldCddXG4pOiBXZWJTb2NrZXRFbnZDb25maWcge1xuICBpZiAoIWlucHV0KSByZXR1cm4gcHJlc2V0LndlYnNvY2tldDtcbiAgcmV0dXJuIHsgLi4ucHJlc2V0LndlYnNvY2tldCwgLi4uaW5wdXQgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25cbiAqIFxuICogVGFrZXMgdXNlciBpbnB1dCBhbmQgcHJvZHVjZXMgYSBmdWxseSByZXNvbHZlZCBFbnZDb25maWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW52Q29uZmlnKFxuICBlbnY6IEVudmlyb25tZW50LFxuICBpbnB1dDogRW52Q29uZmlnSW5wdXRcbik6IEVudkNvbmZpZyB7XG4gIC8vIERldGVybWluZSBwcmVzZXQgKGRlZmF1bHQgdG8gJ21pY3JvJyBpZiBub3Qgc3BlY2lmaWVkKVxuICBjb25zdCBwcmVzZXROYW1lID0gaW5wdXQucHJlc2V0ID8/ICdtaWNybyc7XG4gIGNvbnN0IHByZXNldCA9IGdldFByZXNldChwcmVzZXROYW1lKTtcbiAgXG4gIC8vIERldGVybWluZSBkYXRhIHNhZmV0eSAoZGVmYXVsdCBiYXNlZCBvbiBlbnZpcm9ubWVudClcbiAgY29uc3QgZGF0YVNhZmV0eSA9IGlucHV0LmRhdGFTYWZldHkgPz8gREVGQVVMVF9EQVRBX1NBRkVUWVtlbnZdO1xuICBcbiAgcmV0dXJuIHtcbiAgICBlbnYsXG4gICAgZGF0YVNhZmV0eSxcbiAgICBsYW1iZGE6IHJlc29sdmVMYW1iZGEocHJlc2V0LCBpbnB1dC5sYW1iZGEpLFxuICAgIGFwaTogcmVzb2x2ZUFwaShwcmVzZXQsIGlucHV0LmFwaSksXG4gICAgdnBjOiByZXNvbHZlVnBjKHByZXNldCwgaW5wdXQudnBjKSxcbiAgICBvYnNlcnZhYmlsaXR5OiByZXNvbHZlT2JzZXJ2YWJpbGl0eShwcmVzZXQsIGlucHV0Lm9ic2VydmFiaWxpdHkpLFxuICAgIHdlYnNvY2tldDogcmVzb2x2ZVdlYlNvY2tldChwcmVzZXQsIGlucHV0LndlYnNvY2tldCksXG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBmdWxsIGNvbmZpZ3VyYXRpb25cbiAqIFxuICogTWVyZ2VzIGJhc2UgY29uZmlnICsgc2VjdXJpdHkgY29uZmlnICsgZW52IGNvbmZpZyBpbnRvIGEgY29tcGxldGUgUmVzb2x2ZWRDb25maWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29uZmlnKFxuICBiYXNlOiBCYXNlQ29uZmlnLFxuICBzZWN1cml0eTogU2VjdXJpdHlDb25maWcsXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIGVudklucHV0OiBFbnZDb25maWdJbnB1dFxuKTogUmVzb2x2ZWRDb25maWcge1xuICBjb25zdCBlbnZDb25maWcgPSByZXNvbHZlRW52Q29uZmlnKGVudiwgZW52SW5wdXQpO1xuICBcbiAgcmV0dXJuIHtcbiAgICAvLyBGcm9tIGJhc2VcbiAgICBuYW1lOiBiYXNlLm5hbWUsXG4gICAgZGlzcGxheU5hbWU6IGJhc2UuZGlzcGxheU5hbWUsXG4gICAgcmVnaW9uOiBiYXNlLnJlZ2lvbixcbiAgICBcbiAgICAvLyBGcm9tIHNlY3VyaXR5XG4gICAgc2NvcGVzOiBzZWN1cml0eS5zY29wZXMsXG4gICAgYXBwQ2xpZW50czogc2VjdXJpdHkuYXBwQ2xpZW50cyxcbiAgICBcbiAgICAvLyBGcm9tIGVudlxuICAgIGVudjogZW52Q29uZmlnLmVudixcbiAgICBkYXRhU2FmZXR5OiBlbnZDb25maWcuZGF0YVNhZmV0eSxcbiAgICBsYW1iZGE6IGVudkNvbmZpZy5sYW1iZGEsXG4gICAgYXBpOiBlbnZDb25maWcuYXBpLFxuICAgIHZwYzogZW52Q29uZmlnLnZwYyxcbiAgICBvYnNlcnZhYmlsaXR5OiBlbnZDb25maWcub2JzZXJ2YWJpbGl0eSxcbiAgICB3ZWJzb2NrZXQ6IGVudkNvbmZpZy53ZWJzb2NrZXQsXG4gICAgXG4gICAgLy8gQXV0by1nZW5lcmF0ZWRcbiAgICB0YWdzOiB7XG4gICAgICBQcm9qZWN0OiBiYXNlLm5hbWUsXG4gICAgICBFbnZpcm9ubWVudDogZW52LFxuICAgICAgTWFuYWdlZEJ5OiAndmVudHVyZWtpdCcsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Gateway Environment Configuration
|
|
3
|
+
*
|
|
4
|
+
* Controls rate limiting and API behavior per environment.
|
|
5
|
+
* All fields are REQUIRED - no implicit defaults at the type level.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* CORS configuration
|
|
9
|
+
*/
|
|
10
|
+
export interface CorsConfig {
|
|
11
|
+
/** Allowed origins (e.g., ['https://app.example.com']) */
|
|
12
|
+
allowOrigins: string[];
|
|
13
|
+
/** Allowed HTTP methods */
|
|
14
|
+
allowMethods: string[];
|
|
15
|
+
/** Allowed headers */
|
|
16
|
+
allowHeaders: string[];
|
|
17
|
+
/** Allow credentials */
|
|
18
|
+
allowCredentials: boolean;
|
|
19
|
+
/** Max age in seconds for preflight cache */
|
|
20
|
+
maxAgeSec: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Custom domain configuration
|
|
24
|
+
*/
|
|
25
|
+
export interface CustomDomainConfig {
|
|
26
|
+
/** Domain name (e.g., 'api.example.com') */
|
|
27
|
+
domainName: string;
|
|
28
|
+
/** ACM certificate ARN */
|
|
29
|
+
certificateArn: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* API Gateway configuration
|
|
33
|
+
*
|
|
34
|
+
* All fields required - use presets or explicit values.
|
|
35
|
+
*/
|
|
36
|
+
export interface ApiEnvConfig {
|
|
37
|
+
/** Steady-state request rate limit (requests per second) */
|
|
38
|
+
throttleRateLimit: number;
|
|
39
|
+
/** Burst capacity (concurrent requests) */
|
|
40
|
+
throttleBurstLimit: number;
|
|
41
|
+
/** Enable detailed CloudWatch metrics */
|
|
42
|
+
detailedMetricsEnabled: boolean;
|
|
43
|
+
/** CORS configuration (undefined = no CORS) */
|
|
44
|
+
cors: CorsConfig | undefined;
|
|
45
|
+
/** Custom domain (undefined = use default API Gateway domain) */
|
|
46
|
+
customDomain: CustomDomainConfig | undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* API configuration input (for user overrides)
|
|
50
|
+
*/
|
|
51
|
+
export type ApiEnvConfigInput = Partial<Omit<ApiEnvConfig, 'cors' | 'customDomain'>> & {
|
|
52
|
+
cors?: Partial<CorsConfig>;
|
|
53
|
+
customDomain?: CustomDomainConfig;
|
|
54
|
+
};
|