@venturekit/infra 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/constructs/api.d.ts +76 -0
- package/dist/constructs/api.js +101 -0
- package/dist/constructs/index.d.ts +6 -0
- package/dist/constructs/index.js +23 -0
- package/dist/constructs/lambda.d.ts +47 -0
- package/dist/constructs/lambda.js +50 -0
- package/dist/constructs/vpc.d.ts +37 -0
- package/dist/constructs/vpc.js +35 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +15 -0
- package/dist/translators/auth.d.ts +20 -0
- package/dist/translators/auth.js +72 -0
- package/dist/translators/cache.d.ts +21 -0
- package/dist/translators/cache.js +38 -0
- package/dist/translators/database.d.ts +32 -0
- package/dist/translators/database.js +88 -0
- package/dist/translators/index.d.ts +15 -0
- package/dist/translators/index.js +26 -0
- package/dist/translators/orchestrator.d.ts +18 -0
- package/dist/translators/orchestrator.js +127 -0
- package/dist/translators/queue.d.ts +19 -0
- package/dist/translators/queue.js +39 -0
- package/dist/translators/schedule.d.ts +18 -0
- package/dist/translators/schedule.js +44 -0
- package/dist/translators/storage.d.ts +19 -0
- package/dist/translators/storage.js +48 -0
- package/dist/venture.d.ts +89 -0
- package/dist/venture.js +229 -0
- package/package.json +40 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Storage Intent Translator
|
|
4
|
+
*
|
|
5
|
+
* Translates StorageIntent to SST S3/CDN resources.
|
|
6
|
+
* This file isolates all SST/S3-specific logic.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.translateStorage = translateStorage;
|
|
10
|
+
/**
|
|
11
|
+
* Translate StorageIntent to SST Bucket
|
|
12
|
+
*/
|
|
13
|
+
async function translateStorage(intent, sst, projectName) {
|
|
14
|
+
const resourceName = `${projectName}-${intent.id}`;
|
|
15
|
+
// Build bucket configuration based on intent
|
|
16
|
+
const bucketConfig = {};
|
|
17
|
+
// Versioning based on purpose or explicit setting
|
|
18
|
+
if (intent.versioned ?? intent.purpose === 'backups') {
|
|
19
|
+
bucketConfig.versioning = true;
|
|
20
|
+
}
|
|
21
|
+
// CORS configuration
|
|
22
|
+
if (intent.corsOrigins && intent.corsOrigins.length > 0) {
|
|
23
|
+
bucketConfig.cors = {
|
|
24
|
+
allowOrigins: intent.corsOrigins,
|
|
25
|
+
allowMethods: ['GET', 'PUT', 'POST', 'DELETE'],
|
|
26
|
+
allowHeaders: ['*'],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// Create bucket
|
|
30
|
+
const bucket = new sst.Bucket(resourceName, bucketConfig);
|
|
31
|
+
const output = {
|
|
32
|
+
bucketName: bucket.name,
|
|
33
|
+
bucketArn: bucket.arn,
|
|
34
|
+
};
|
|
35
|
+
// Create CDN if requested
|
|
36
|
+
if (intent.cdn) {
|
|
37
|
+
const cdnConfig = {
|
|
38
|
+
origins: [{ bucket }],
|
|
39
|
+
};
|
|
40
|
+
if (intent.cdnDomain) {
|
|
41
|
+
cdnConfig.domain = intent.cdnDomain;
|
|
42
|
+
}
|
|
43
|
+
const cdn = new sst.Cdn(`${resourceName}-cdn`, cdnConfig);
|
|
44
|
+
output.cdnUrl = cdn.url;
|
|
45
|
+
}
|
|
46
|
+
return output;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2xhdG9ycy9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7QUFnQkgsNENBK0NDO0FBbEREOztHQUVHO0FBQ0ksS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxNQUFxQixFQUNyQixHQUFRLEVBQ1IsV0FBbUI7SUFFbkIsTUFBTSxZQUFZLEdBQUcsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBRW5ELDZDQUE2QztJQUM3QyxNQUFNLFlBQVksR0FBNEIsRUFBRSxDQUFDO0lBRWpELGtEQUFrRDtJQUNsRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUNyRCxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO0lBRUQscUJBQXFCO0lBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxZQUFZLENBQUMsSUFBSSxHQUFHO1lBQ2xCLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVztZQUNoQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUM7WUFDOUMsWUFBWSxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCO0lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFMUQsTUFBTSxNQUFNLEdBQWtCO1FBQzVCLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSTtRQUN2QixTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUc7S0FDdEIsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNmLE1BQU0sU0FBUyxHQUE0QjtZQUN6QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1NBQ3RCLENBQUM7UUFFRixJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDdEMsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RvcmFnZSBJbnRlbnQgVHJhbnNsYXRvclxuICogXG4gKiBUcmFuc2xhdGVzIFN0b3JhZ2VJbnRlbnQgdG8gU1NUIFMzL0NETiByZXNvdXJjZXMuXG4gKiBUaGlzIGZpbGUgaXNvbGF0ZXMgYWxsIFNTVC9TMy1zcGVjaWZpYyBsb2dpYy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2VJbnRlbnQgfSBmcm9tICdAdmVudHVyZWtpdC9jb3JlJztcblxuLyoqXG4gKiBTdG9yYWdlIG91dHB1dCBhZnRlciBjcmVhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VPdXRwdXQge1xuICBidWNrZXROYW1lOiBzdHJpbmc7XG4gIGJ1Y2tldEFybjogc3RyaW5nO1xuICBjZG5Vcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlIFN0b3JhZ2VJbnRlbnQgdG8gU1NUIEJ1Y2tldFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlU3RvcmFnZShcbiAgaW50ZW50OiBTdG9yYWdlSW50ZW50LFxuICBzc3Q6IGFueSxcbiAgcHJvamVjdE5hbWU6IHN0cmluZ1xuKTogUHJvbWlzZTxTdG9yYWdlT3V0cHV0PiB7XG4gIGNvbnN0IHJlc291cmNlTmFtZSA9IGAke3Byb2plY3ROYW1lfS0ke2ludGVudC5pZH1gO1xuICBcbiAgLy8gQnVpbGQgYnVja2V0IGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gaW50ZW50XG4gIGNvbnN0IGJ1Y2tldENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgXG4gIC8vIFZlcnNpb25pbmcgYmFzZWQgb24gcHVycG9zZSBvciBleHBsaWNpdCBzZXR0aW5nXG4gIGlmIChpbnRlbnQudmVyc2lvbmVkID8/IGludGVudC5wdXJwb3NlID09PSAnYmFja3VwcycpIHtcbiAgICBidWNrZXRDb25maWcudmVyc2lvbmluZyA9IHRydWU7XG4gIH1cbiAgXG4gIC8vIENPUlMgY29uZmlndXJhdGlvblxuICBpZiAoaW50ZW50LmNvcnNPcmlnaW5zICYmIGludGVudC5jb3JzT3JpZ2lucy5sZW5ndGggPiAwKSB7XG4gICAgYnVja2V0Q29uZmlnLmNvcnMgPSB7XG4gICAgICBhbGxvd09yaWdpbnM6IGludGVudC5jb3JzT3JpZ2lucyxcbiAgICAgIGFsbG93TWV0aG9kczogWydHRVQnLCAnUFVUJywgJ1BPU1QnLCAnREVMRVRFJ10sXG4gICAgICBhbGxvd0hlYWRlcnM6IFsnKiddLFxuICAgIH07XG4gIH1cbiAgXG4gIC8vIENyZWF0ZSBidWNrZXRcbiAgY29uc3QgYnVja2V0ID0gbmV3IHNzdC5CdWNrZXQocmVzb3VyY2VOYW1lLCBidWNrZXRDb25maWcpO1xuICBcbiAgY29uc3Qgb3V0cHV0OiBTdG9yYWdlT3V0cHV0ID0ge1xuICAgIGJ1Y2tldE5hbWU6IGJ1Y2tldC5uYW1lLFxuICAgIGJ1Y2tldEFybjogYnVja2V0LmFybixcbiAgfTtcbiAgXG4gIC8vIENyZWF0ZSBDRE4gaWYgcmVxdWVzdGVkXG4gIGlmIChpbnRlbnQuY2RuKSB7XG4gICAgY29uc3QgY2RuQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIG9yaWdpbnM6IFt7IGJ1Y2tldCB9XSxcbiAgICB9O1xuICAgIFxuICAgIGlmIChpbnRlbnQuY2RuRG9tYWluKSB7XG4gICAgICBjZG5Db25maWcuZG9tYWluID0gaW50ZW50LmNkbkRvbWFpbjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY2RuID0gbmV3IHNzdC5DZG4oYCR7cmVzb3VyY2VOYW1lfS1jZG5gLCBjZG5Db25maWcpO1xuICAgIG91dHB1dC5jZG5VcmwgPSBjZG4udXJsO1xuICB9XG4gIFxuICByZXR1cm4gb3V0cHV0O1xufVxuIl19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VentureKit Main Entry Point
|
|
3
|
+
*
|
|
4
|
+
* defineVenture() is the primary API for creating VentureKit applications.
|
|
5
|
+
* Consumers never see the underlying infrastructure tooling.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseConfig, SecurityConfig, EnvConfigInput, ResolvedConfig, VentureIntent } from '@venturekit/core';
|
|
8
|
+
/**
|
|
9
|
+
* VentureKit application definition
|
|
10
|
+
*/
|
|
11
|
+
export interface VentureDefinition {
|
|
12
|
+
/** Base configuration (project identity) */
|
|
13
|
+
base: BaseConfig;
|
|
14
|
+
/** Security configuration (scopes, clients) */
|
|
15
|
+
security: SecurityConfig;
|
|
16
|
+
/** Environment-specific configurations */
|
|
17
|
+
envs: {
|
|
18
|
+
dev?: EnvConfigInput;
|
|
19
|
+
stage?: EnvConfigInput;
|
|
20
|
+
prod?: EnvConfigInput;
|
|
21
|
+
};
|
|
22
|
+
/** Path to routes directory (relative to project root) - REQUIRED */
|
|
23
|
+
routesDir: string;
|
|
24
|
+
/**
|
|
25
|
+
* Infrastructure intents
|
|
26
|
+
*
|
|
27
|
+
* Declare WHAT infrastructure you need, not HOW to build it.
|
|
28
|
+
* VentureKit translates intents to provider-specific resources.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* infrastructure: {
|
|
33
|
+
* databases: [{ id: 'main', type: 'postgres', size: 'small', name: 'mydb' }],
|
|
34
|
+
* storage: [{ id: 'uploads', purpose: 'uploads', cdn: true }],
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
infrastructure?: VentureIntent;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* VentureKit app configuration
|
|
42
|
+
*/
|
|
43
|
+
export interface VentureAppConfig {
|
|
44
|
+
name: string;
|
|
45
|
+
home: 'aws';
|
|
46
|
+
providers: {
|
|
47
|
+
aws: {
|
|
48
|
+
region: string;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Define a VentureKit application
|
|
54
|
+
*
|
|
55
|
+
* This is the main entry point for VentureKit projects.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* // venturekit.config.ts
|
|
60
|
+
* import { defineVenture } from '@venturekit/infra';
|
|
61
|
+
* import { base } from './config/base';
|
|
62
|
+
* import { security } from './config/security';
|
|
63
|
+
* import { dev } from './config/dev';
|
|
64
|
+
* import { prod } from './config/prod';
|
|
65
|
+
*
|
|
66
|
+
* export default defineVenture({
|
|
67
|
+
* base,
|
|
68
|
+
* security,
|
|
69
|
+
* envs: { dev, prod },
|
|
70
|
+
* routesDir: 'src/routes',
|
|
71
|
+
* });
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function defineVenture(definition: VentureDefinition): {
|
|
75
|
+
name: string;
|
|
76
|
+
home: "aws";
|
|
77
|
+
providers: {
|
|
78
|
+
aws: {
|
|
79
|
+
region: string;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
run(): Promise<Record<string, unknown>>;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Get resolved configuration for current environment
|
|
86
|
+
*
|
|
87
|
+
* Useful for accessing config values in handlers or other code.
|
|
88
|
+
*/
|
|
89
|
+
export declare function getResolvedConfig(base: BaseConfig, security: SecurityConfig, envInput: EnvConfigInput): ResolvedConfig;
|
package/dist/venture.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VentureKit Main Entry Point
|
|
4
|
+
*
|
|
5
|
+
* defineVenture() is the primary API for creating VentureKit applications.
|
|
6
|
+
* Consumers never see the underlying infrastructure tooling.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.defineVenture = defineVenture;
|
|
43
|
+
exports.getResolvedConfig = getResolvedConfig;
|
|
44
|
+
const core_1 = require("@venturekit/core");
|
|
45
|
+
const translators_1 = require("./translators");
|
|
46
|
+
const lambda_1 = require("./constructs/lambda");
|
|
47
|
+
const api_1 = require("./constructs/api");
|
|
48
|
+
const vpc_1 = require("./constructs/vpc");
|
|
49
|
+
const fs = __importStar(require("fs"));
|
|
50
|
+
const path = __importStar(require("path"));
|
|
51
|
+
/**
|
|
52
|
+
* Discover routes from file system
|
|
53
|
+
*
|
|
54
|
+
* Convention:
|
|
55
|
+
* - src/routes/health/get.ts -> GET /health
|
|
56
|
+
* - src/routes/projects/post.ts -> POST /projects
|
|
57
|
+
* - src/routes/projects/[id]/get.ts -> GET /projects/{id}
|
|
58
|
+
* - src/routes/projects/[id]/delete.ts -> DELETE /projects/{id}
|
|
59
|
+
*/
|
|
60
|
+
function discoverRoutes(routesDir) {
|
|
61
|
+
const routes = [];
|
|
62
|
+
function scanDir(dir, routePath = '') {
|
|
63
|
+
if (!fs.existsSync(dir))
|
|
64
|
+
return;
|
|
65
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
66
|
+
for (const entry of entries) {
|
|
67
|
+
const fullPath = path.join(dir, entry.name);
|
|
68
|
+
if (entry.isDirectory()) {
|
|
69
|
+
// Convert [param] to {param} for API Gateway
|
|
70
|
+
const segment = entry.name.startsWith('[') && entry.name.endsWith(']')
|
|
71
|
+
? `{${entry.name.slice(1, -1)}}`
|
|
72
|
+
: entry.name;
|
|
73
|
+
scanDir(fullPath, `${routePath}/${segment}`);
|
|
74
|
+
}
|
|
75
|
+
else if (entry.isFile() && (entry.name.endsWith('.ts') || entry.name.endsWith('.js'))) {
|
|
76
|
+
const method = (0, api_1.fileNameToMethod)(entry.name);
|
|
77
|
+
if (method) {
|
|
78
|
+
const apiPath = routePath || '/';
|
|
79
|
+
const handlerPath = fullPath.replace(/\.(ts|js)$/, '.handler');
|
|
80
|
+
routes.push({ method, path: apiPath, handler: handlerPath });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
scanDir(routesDir);
|
|
86
|
+
return routes;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Define a VentureKit application
|
|
90
|
+
*
|
|
91
|
+
* This is the main entry point for VentureKit projects.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // venturekit.config.ts
|
|
96
|
+
* import { defineVenture } from '@venturekit/infra';
|
|
97
|
+
* import { base } from './config/base';
|
|
98
|
+
* import { security } from './config/security';
|
|
99
|
+
* import { dev } from './config/dev';
|
|
100
|
+
* import { prod } from './config/prod';
|
|
101
|
+
*
|
|
102
|
+
* export default defineVenture({
|
|
103
|
+
* base,
|
|
104
|
+
* security,
|
|
105
|
+
* envs: { dev, prod },
|
|
106
|
+
* routesDir: 'src/routes',
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
function defineVenture(definition) {
|
|
111
|
+
// Validate configs
|
|
112
|
+
const baseValidation = (0, core_1.validateBaseConfig)(definition.base);
|
|
113
|
+
(0, core_1.assertValid)(baseValidation);
|
|
114
|
+
const securityValidation = (0, core_1.validateSecurityConfig)(definition.security);
|
|
115
|
+
(0, core_1.assertValid)(securityValidation);
|
|
116
|
+
return {
|
|
117
|
+
name: definition.base.name,
|
|
118
|
+
home: 'aws',
|
|
119
|
+
providers: {
|
|
120
|
+
aws: {
|
|
121
|
+
region: definition.base.region,
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
async run() {
|
|
125
|
+
// Determine current environment from VENTURE_STAGE (not SST)
|
|
126
|
+
const stage = process.env.VENTURE_STAGE || 'dev';
|
|
127
|
+
const env = (stage === 'prod' ? 'prod' : stage === 'stage' ? 'stage' : 'dev');
|
|
128
|
+
// Get env config (default to empty if not specified)
|
|
129
|
+
const envInput = definition.envs[env] || {};
|
|
130
|
+
// Validate env config
|
|
131
|
+
const envValidation = (0, core_1.validateEnvConfigInput)(env, envInput);
|
|
132
|
+
(0, core_1.assertValid)(envValidation);
|
|
133
|
+
// Resolve full configuration
|
|
134
|
+
const config = (0, core_1.resolveConfig)(definition.base, definition.security, env, envInput);
|
|
135
|
+
// Discover routes from file system
|
|
136
|
+
const routes = discoverRoutes(definition.routesDir);
|
|
137
|
+
// Translate infrastructure intents if provided
|
|
138
|
+
let intentOutputs;
|
|
139
|
+
if (definition.infrastructure) {
|
|
140
|
+
intentOutputs = await (0, translators_1.translateAllIntents)(definition.infrastructure, config.name);
|
|
141
|
+
}
|
|
142
|
+
// Create infrastructure (passes intent outputs to Lambda env)
|
|
143
|
+
const resources = await createInfrastructure(config, routes, intentOutputs);
|
|
144
|
+
if (intentOutputs) {
|
|
145
|
+
resources.infrastructure = intentOutputs;
|
|
146
|
+
}
|
|
147
|
+
return resources;
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create infrastructure resources
|
|
153
|
+
*/
|
|
154
|
+
async function createInfrastructure(config, routes, intentOutputs) {
|
|
155
|
+
// Dynamic import of infrastructure tooling (hidden from consumers)
|
|
156
|
+
const infra = await Promise.resolve().then(() => __importStar(require('sst')));
|
|
157
|
+
const outputs = {};
|
|
158
|
+
// Create VPC if needed
|
|
159
|
+
let vpc = undefined;
|
|
160
|
+
if ((0, vpc_1.isVpcRequired)(config.lambda.vpcEnabled)) {
|
|
161
|
+
vpc = new infra.Vpc(`${config.name}-vpc`, (0, vpc_1.createVpcConfig)(config.name, config.vpc));
|
|
162
|
+
outputs.vpcId = vpc.id;
|
|
163
|
+
}
|
|
164
|
+
// Build route configuration
|
|
165
|
+
const routeConfig = {};
|
|
166
|
+
for (const route of routes) {
|
|
167
|
+
const key = `${route.method} ${route.path}`;
|
|
168
|
+
const routeEntry = {
|
|
169
|
+
handler: route.handler,
|
|
170
|
+
...(0, lambda_1.createLambdaConfig)(config.lambda),
|
|
171
|
+
environment: (0, lambda_1.createLambdaEnvironment)({
|
|
172
|
+
VENTURE_ENV: config.env,
|
|
173
|
+
VENTURE_NAME: config.name,
|
|
174
|
+
...(intentOutputs ? { VENTURE_INTENT_OUTPUTS: JSON.stringify(intentOutputs) } : {}),
|
|
175
|
+
}),
|
|
176
|
+
};
|
|
177
|
+
if (vpc && config.lambda.vpcEnabled) {
|
|
178
|
+
routeEntry.vpc = vpc;
|
|
179
|
+
}
|
|
180
|
+
routeConfig[key] = routeEntry;
|
|
181
|
+
}
|
|
182
|
+
// Create API Gateway
|
|
183
|
+
const corsConfig = (0, api_1.createCorsConfig)(config.api.cors);
|
|
184
|
+
const apiConfig = {
|
|
185
|
+
routes: routeConfig,
|
|
186
|
+
};
|
|
187
|
+
if (corsConfig) {
|
|
188
|
+
apiConfig.cors = corsConfig;
|
|
189
|
+
}
|
|
190
|
+
// Add custom domain if configured
|
|
191
|
+
if (config.api.customDomain) {
|
|
192
|
+
apiConfig.domain = {
|
|
193
|
+
name: config.api.customDomain.domainName,
|
|
194
|
+
cert: config.api.customDomain.certificateArn,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const api = new infra.ApiGatewayV2(`${config.name}-api`, apiConfig);
|
|
198
|
+
outputs.apiUrl = api.url;
|
|
199
|
+
// Create WebSocket API if enabled
|
|
200
|
+
if (config.websocket.enabled) {
|
|
201
|
+
const wsApi = new infra.ApiGatewayWebSocket(`${config.name}-ws`, {
|
|
202
|
+
routes: {
|
|
203
|
+
$connect: `${config.name}/ws/connect.handler`,
|
|
204
|
+
$disconnect: `${config.name}/ws/disconnect.handler`,
|
|
205
|
+
$default: `${config.name}/ws/default.handler`,
|
|
206
|
+
},
|
|
207
|
+
});
|
|
208
|
+
outputs.wsUrl = wsApi.url;
|
|
209
|
+
}
|
|
210
|
+
// Output resolved config for debugging
|
|
211
|
+
outputs.config = {
|
|
212
|
+
name: config.name,
|
|
213
|
+
env: config.env,
|
|
214
|
+
dataSafety: config.dataSafety,
|
|
215
|
+
routeCount: routes.length,
|
|
216
|
+
};
|
|
217
|
+
return outputs;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get resolved configuration for current environment
|
|
221
|
+
*
|
|
222
|
+
* Useful for accessing config values in handlers or other code.
|
|
223
|
+
*/
|
|
224
|
+
function getResolvedConfig(base, security, envInput) {
|
|
225
|
+
const stage = process.env.VENTURE_STAGE || 'dev';
|
|
226
|
+
const env = (stage === 'prod' ? 'prod' : stage === 'stage' ? 'stage' : 'dev');
|
|
227
|
+
return (0, core_1.resolveConfig)(base, security, env, envInput);
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVudHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZW50dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF1Skgsc0NBcURDO0FBNkZELDhDQVFDO0FBL1NELDJDQWEwQjtBQUUxQiwrQ0FBb0Q7QUFFcEQsZ0RBRzZCO0FBRTdCLDBDQUkwQjtBQUUxQiwwQ0FHMEI7QUFFMUIsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQW9EN0I7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGNBQWMsQ0FBQyxTQUFpQjtJQUN2QyxNQUFNLE1BQU0sR0FBNkQsRUFBRSxDQUFDO0lBRTVFLFNBQVMsT0FBTyxDQUFDLEdBQVcsRUFBRSxZQUFvQixFQUFFO1FBQ2xELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFaEMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1QyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN4Qiw2Q0FBNkM7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDcEUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7b0JBQ2hDLENB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Q0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFnQixDQUFDO0lBQzdGLE9BQU8sSUFBQSxvQkFBYSxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlbnR1cmVLaXQgTWFpbiBFbnRyeSBQb2ludFxuICogXG4gKiBkZWZpbmVWZW50dXJlKCkgaXMgdGhlIHByaW1hcnkgQVBJIGZvciBjcmVhdGluZyBWZW50dXJlS2l0IGFwcGxpY2F0aW9ucy5cbiAqIENvbnN1bWVycyBuZXZlciBzZWUgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgdG9vbGluZy5cbiAqL1xuXG5pbXBvcnQge1xuICBCYXNlQ29uZmlnLFxuICBTZWN1cml0eUNvbmZpZyxcbiAgRW52Q29uZmlnSW5wdXQsXG4gIEVudmlyb25tZW50LFxuICBSZXNvbHZlZENvbmZpZyxcbiAgVmVudHVyZUludGVudCxcbiAgSW50ZW50T3V0cHV0cyxcbiAgcmVzb2x2ZUNvbmZpZyxcbiAgdmFsaWRhdGVCYXNlQ29uZmlnLFxuICB2YWxpZGF0ZVNlY3VyaXR5Q29uZmlnLFxuICB2YWxpZGF0ZUVudkNvbmZpZ0lucHV0LFxuICBhc3NlcnRWYWxpZCxcbn0gZnJvbSAnQHZlbnR1cmVraXQvY29yZSc7XG5cbmltcG9ydCB7IHRyYW5zbGF0ZUFsbEludGVudHMgfSBmcm9tICcuL3RyYW5zbGF0b3JzJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlTGFtYmRhQ29uZmlnLFxuICBjcmVhdGVMYW1iZGFFbnZpcm9ubWVudCxcbn0gZnJvbSAnLi9jb25zdHJ1Y3RzL2xhbWJkYSc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZUNvcnNDb25maWcsXG4gIGRpclBhdGhUb1JvdXRlUGF0aCxcbiAgZmlsZU5hbWVUb01ldGhvZCxcbn0gZnJvbSAnLi9jb25zdHJ1Y3RzL2FwaSc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZVZwY0NvbmZpZyxcbiAgaXNWcGNSZXF1aXJlZCxcbn0gZnJvbSAnLi9jb25zdHJ1Y3RzL3ZwYyc7XG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogVmVudHVyZUtpdCBhcHBsaWNhdGlvbiBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVudHVyZURlZmluaXRpb24ge1xuICAvKiogQmFzZSBjb25maWd1cmF0aW9uIChwcm9qZWN0IGlkZW50aXR5KSAqL1xuICBiYXNlOiBCYXNlQ29uZmlnO1xuICBcbiAgLyoqIFNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gKHNjb3BlcywgY2xpZW50cykgKi9cbiAgc2VjdXJpdHk6IFNlY3VyaXR5Q29uZmlnO1xuICBcbiAgLyoqIEVudmlyb25tZW50LXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zICovXG4gIGVudnM6IHtcbiAgICBkZXY/OiBFbnZDb25maWdJbnB1dDtcbiAgICBzdGFnZT86IEVudkNvbmZpZ0lucHV0O1xuICAgIHByb2Q/OiBFbnZDb25maWdJbnB1dDtcbiAgfTtcbiAgXG4gIC8qKiBQYXRoIHRvIHJvdXRlcyBkaXJlY3RvcnkgKHJlbGF0aXZlIHRvIHByb2plY3Qgcm9vdCkgLSBSRVFVSVJFRCAqL1xuICByb3V0ZXNEaXI6IHN0cmluZztcbiAgXG4gIC8qKlxuICAgKiBJbmZyYXN0cnVjdHVyZSBpbnRlbnRzXG4gICAqIFxuICAgKiBEZWNsYXJlIFdIQVQgaW5mcmFzdHJ1Y3R1cmUgeW91IG5lZWQsIG5vdCBIT1cgdG8gYnVpbGQgaXQuXG4gICAqIFZlbnR1cmVLaXQgdHJhbnNsYXRlcyBpbnRlbnRzIHRvIHByb3ZpZGVyLXNwZWNpZmljIHJlc291cmNlcy5cbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW5mcmFzdHJ1Y3R1cmU6IHtcbiAgICogICBkYXRhYmFzZXM6IFt7IGlkOiAnbWFpbicsIHR5cGU6ICdwb3N0Z3JlcycsIHNpemU6ICdzbWFsbCcsIG5hbWU6ICdteWRiJyB9XSxcbiAgICogICBzdG9yYWdlOiBbeyBpZDogJ3VwbG9hZHMnLCBwdXJwb3NlOiAndXBsb2FkcycsIGNkbjogdHJ1ZSB9XSxcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGluZnJhc3RydWN0dXJlPzogVmVudHVyZUludGVudDtcbn1cblxuLyoqXG4gKiBWZW50dXJlS2l0IGFwcCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVudHVyZUFwcENvbmZpZyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaG9tZTogJ2F3cyc7XG4gIHByb3ZpZGVyczoge1xuICAgIGF3czoge1xuICAgICAgcmVnaW9uOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNjb3ZlciByb3V0ZXMgZnJvbSBmaWxlIHN5c3RlbVxuICogXG4gKiBDb252ZW50aW9uOlxuICogLSBzcmMvcm91dGVzL2hlYWx0aC9nZXQudHMgLT4gR0VUIC9oZWFsdGhcbiAqIC0gc3JjL3JvdXRlcy9wcm9qZWN0cy9wb3N0LnRzIC0+IFBPU1QgL3Byb2plY3RzXG4gKiAtIHNyYy9yb3V0ZXMvcHJvamVjdHMvW2lkXS9nZXQudHMgLT4gR0VUIC9wcm9qZWN0cy97aWR9XG4gKiAtIHNyYy9yb3V0ZXMvcHJvamVjdHMvW2lkXS9kZWxldGUudHMgLT4gREVMRVRFIC9wcm9qZWN0cy97aWR9XG4gKi9cbmZ1bmN0aW9uIGRpc2NvdmVyUm91dGVzKHJvdXRlc0Rpcjogc3RyaW5nKTogQXJyYXk8eyBtZXRob2Q6IHN0cmluZzsgcGF0aDogc3RyaW5nOyBoYW5kbGVyOiBzdHJpbmcgfT4ge1xuICBjb25zdCByb3V0ZXM6IEFycmF5PHsgbWV0aG9kOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgaGFuZGxlcjogc3RyaW5nIH0+ID0gW107XG4gIFxuICBmdW5jdGlvbiBzY2FuRGlyKGRpcjogc3RyaW5nLCByb3V0ZVBhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGRpcikpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMoZGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gICAgXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGVudHJ5Lm5hbWUpO1xuICAgICAgXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAvLyBDb252ZXJ0IFtwYXJhbV0gdG8ge3BhcmFtfSBmb3IgQVBJIEdhdGV3YXlcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IGVudHJ5Lm5hbWUuc3RhcnRzV2l0aCgnWycpICYmIGVudHJ5Lm5hbWUuZW5kc1dpdGgoJ10nKVxuICAgICAgICAgID8gYHske2VudHJ5Lm5hbWUuc2xpY2UoMSwgLTEpfX1gXG4gICAgICAgICAgOiBlbnRyeS5uYW1lO1xuICAgICAgICBzY2FuRGlyKGZ1bGxQYXRoLCBgJHtyb3V0ZVBhdGh9LyR7c2VnbWVudH1gKTtcbiAgICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkgJiYgKGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy50cycpIHx8IGVudHJ5Lm5hbWUuZW5kc1dpdGgoJy5qcycpKSkge1xuICAgICAgICBjb25zdCBtZXRob2QgPSBmaWxlTmFtZVRvTWV0aG9kKGVudHJ5Lm5hbWUpO1xuICAgICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgICAgY29uc3QgYXBpUGF0aCA9IHJvdXRlUGF0aCB8fCAnLyc7XG4gICAgICAgICAgY29uc3QgaGFuZGxlclBhdGggPSBmdWxsUGF0aC5yZXBsYWNlKC9cXC4odHN8anMpJC8sICcuaGFuZGxlcicpO1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHsgbWV0aG9kLCBwYXRoOiBhcGlQYXRoLCBoYW5kbGVyOiBoYW5kbGVyUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgc2NhbkRpcihyb3V0ZXNEaXIpO1xuICByZXR1cm4gcm91dGVzO1xufVxuXG4vKipcbiAqIERlZmluZSBhIFZlbnR1cmVLaXQgYXBwbGljYXRpb25cbiAqIFxuICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgVmVudHVyZUtpdCBwcm9qZWN0cy5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIHZlbnR1cmVraXQuY29uZmlnLnRzXG4gKiBpbXBvcnQgeyBkZWZpbmVWZW50dXJlIH0gZnJvbSAnQHZlbnR1cmVraXQvaW5mcmEnO1xuICogaW1wb3J0IHsgYmFzZSB9IGZyb20gJy4vY29uZmlnL2Jhc2UnO1xuICogaW1wb3J0IHsgc2VjdXJpdHkgfSBmcm9tICcuL2NvbmZpZy9zZWN1cml0eSc7XG4gKiBpbXBvcnQgeyBkZXYgfSBmcm9tICcuL2NvbmZpZy9kZXYnO1xuICogaW1wb3J0IHsgcHJvZCB9IGZyb20gJy4vY29uZmlnL3Byb2QnO1xuICogXG4gKiBleHBvcnQgZGVmYXVsdCBkZWZpbmVWZW50dXJlKHtcbiAqICAgYmFzZSxcbiAqICAgc2VjdXJpdHksXG4gKiAgIGVudnM6IHsgZGV2LCBwcm9kIH0sXG4gKiAgIHJvdXRlc0RpcjogJ3NyYy9yb3V0ZXMnLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVZlbnR1cmUoZGVmaW5pdGlvbjogVmVudHVyZURlZmluaXRpb24pIHtcbiAgLy8gVmFsaWRhdGUgY29uZmlnc1xuICBjb25zdCBiYXNlVmFsaWRhdGlvbiA9IHZhbGlkYXRlQmFzZUNvbmZpZyhkZWZpbml0aW9uLmJhc2UpO1xuICBhc3NlcnRWYWxpZChiYXNlVmFsaWRhdGlvbik7XG4gIFxuICBjb25zdCBzZWN1cml0eVZhbGlkYXRpb24gPSB2YWxpZGF0ZVNlY3VyaXR5Q29uZmlnKGRlZmluaXRpb24uc2VjdXJpdHkpO1xuICBhc3NlcnRWYWxpZChzZWN1cml0eVZhbGlkYXRpb24pO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogZGVmaW5pdGlvbi5iYXNlLm5hbWUsXG4gICAgaG9tZTogJ2F3cycgYXMgY29uc3QsXG4gICAgcHJvdmlkZXJzOiB7XG4gICAgICBhd3M6IHtcbiAgICAgICAgcmVnaW9uOiBkZWZpbml0aW9uLmJhc2UucmVnaW9uLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGFzeW5jIHJ1bigpIHtcbiAgICAgIC8vIERldGVybWluZSBjdXJyZW50IGVudmlyb25tZW50IGZyb20gVkVOVFVSRV9TVEFHRSAobm90IFNTVClcbiAgICAgIGNvbnN0IHN0YWdlID0gcHJvY2Vzcy5lbnYuVkVOVFVSRV9TVEFHRSB8fCAnZGV2JztcbiAgICAgIGNvbnN0IGVudiA9IChzdGFnZSA9PT0gJ3Byb2QnID8gJ3Byb2QnIDogc3RhZ2UgPT09ICdzdGFnZScgPyAnc3RhZ2UnIDogJ2RldicpIGFzIEVudmlyb25tZW50O1xuICAgICAgXG4gICAgICAvLyBHZXQgZW52IGNvbmZpZyAoZGVmYXVsdCB0byBlbXB0eSBpZiBub3Qgc3BlY2lmaWVkKVxuICAgICAgY29uc3QgZW52SW5wdXQgPSBkZWZpbml0aW9uLmVudnNbZW52XSB8fCB7fTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgZW52IGNvbmZpZ1xuICAgICAgY29uc3QgZW52VmFsaWRhdGlvbiA9IHZhbGlkYXRlRW52Q29uZmlnSW5wdXQoZW52LCBlbnZJbnB1dCk7XG4gICAgICBhc3NlcnRWYWxpZChlbnZWYWxpZGF0aW9uKTtcbiAgICAgIFxuICAgICAgLy8gUmVzb2x2ZSBmdWxsIGNvbmZpZ3VyYXRpb25cbiAgICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVDb25maWcoZGVmaW5pdGlvbi5iYXNlLCBkZWZpbml0aW9uLnNlY3VyaXR5LCBlbnYsIGVudklucHV0KTtcbiAgICAgIFxuICAgICAgLy8gRGlzY292ZXIgcm91dGVzIGZyb20gZmlsZSBzeXN0ZW1cbiAgICAgIGNvbnN0IHJvdXRlcyA9IGRpc2NvdmVyUm91dGVzKGRlZmluaXRpb24ucm91dGVzRGlyKTtcbiAgICAgIFxuICAgICAgLy8gVHJhbnNsYXRlIGluZnJhc3RydWN0dXJlIGludGVudHMgaWYgcHJvdmlkZWRcbiAgICAgIGxldCBpbnRlbnRPdXRwdXRzOiBJbnRlbnRPdXRwdXRzIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKGRlZmluaXRpb24uaW5mcmFzdHJ1Y3R1cmUpIHtcbiAgICAgICAgaW50ZW50T3V0cHV0cyA9IGF3YWl0IHRyYW5zbGF0ZUFsbEludGVudHMoXG4gICAgICAgICAgZGVmaW5pdGlvbi5pbmZyYXN0cnVjdHVyZSxcbiAgICAgICAgICBjb25maWcubmFtZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgaW5mcmFzdHJ1Y3R1cmUgKHBhc3NlcyBpbnRlbnQgb3V0cHV0cyB0byBMYW1iZGEgZW52KVxuICAgICAgY29uc3QgcmVzb3VyY2VzID0gYXdhaXQgY3JlYXRlSW5mcmFzdHJ1Y3R1cmUoY29uZmlnLCByb3V0ZXMsIGludGVudE91dHB1dHMpO1xuXG4gICAgICBpZiAoaW50ZW50T3V0cHV0cykge1xuICAgICAgICByZXNvdXJjZXMuaW5mcmFzdHJ1Y3R1cmUgPSBpbnRlbnRPdXRwdXRzO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGluZnJhc3RydWN0dXJlIHJlc291cmNlc1xuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVJbmZyYXN0cnVjdHVyZShcbiAgY29uZmlnOiBSZXNvbHZlZENvbmZpZyxcbiAgcm91dGVzOiBBcnJheTx7IG1ldGhvZDogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IGhhbmRsZXI6IHN0cmluZyB9PixcbiAgaW50ZW50T3V0cHV0cz86IEludGVudE91dHB1dHMsXG4pIHtcbiAgLy8gRHluYW1pYyBpbXBvcnQgb2YgaW5mcmFzdHJ1Y3R1cmUgdG9vbGluZyAoaGlkZGVuIGZyb20gY29uc3VtZXJzKVxuICBjb25zdCBpbmZyYSA9IGF3YWl0IGltcG9ydCgnc3N0JykgYXMgYW55O1xuICBcbiAgY29uc3Qgb3V0cHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgXG4gIC8vIENyZWF0ZSBWUEMgaWYgbmVlZGVkXG4gIGxldCB2cGM6IHVua25vd24gPSB1bmRlZmluZWQ7XG4gIGlmIChpc1ZwY1JlcXVpcmVkKGNvbmZpZy5sYW1iZGEudnBjRW5hYmxlZCkpIHtcbiAgICB2cGMgPSBuZXcgaW5mcmEuVnBjKGAke2NvbmZpZy5uYW1lfS12cGNgLCBjcmVhdGVWcGNDb25maWcoY29uZmlnLm5hbWUsIGNvbmZpZy52cGMpKTtcbiAgICBvdXRwdXRzLnZwY0lkID0gKHZwYyBhcyB7IGlkOiBzdHJpbmcgfSkuaWQ7XG4gIH1cbiAgXG4gIC8vIEJ1aWxkIHJvdXRlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3Qgcm91dGVDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIFxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IGtleSA9IGAke3JvdXRlLm1ldGhvZH0gJHtyb3V0ZS5wYXRofWA7XG4gICAgY29uc3Qgcm91dGVFbnRyeTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBoYW5kbGVyOiByb3V0ZS5oYW5kbGVyLFxuICAgICAgLi4uY3JlYXRlTGFtYmRhQ29uZmlnKGNvbmZpZy5sYW1iZGEpLFxuICAgICAgZW52aXJvbm1lbnQ6IGNyZWF0ZUxhbWJkYUVudmlyb25tZW50KHtcbiAgICAgICAgVkVOVFVSRV9FTlY6IGNvbmZpZy5lbnYsXG4gICAgICAgIFZFTlRVUkVfTkFNRTogY29uZmlnLm5hbWUsXG4gICAgICAgIC4uLihpbnRlbnRPdXRwdXRzID8geyBWRU5UVVJFX0lOVEVOVF9PVVRQVVRTOiBKU09OLnN0cmluZ2lmeShpbnRlbnRPdXRwdXRzKSB9IDoge30pLFxuICAgICAgfSksXG4gICAgfTtcbiAgICBpZiAodnBjICYmIGNvbmZpZy5sYW1iZGEudnBjRW5hYmxlZCkge1xuICAgICAgcm91dGVFbnRyeS52cGMgPSB2cGM7XG4gICAgfVxuICAgIHJvdXRlQ29uZmlnW2tleV0gPSByb3V0ZUVudHJ5O1xuICB9XG4gIFxuICAvLyBDcmVhdGUgQVBJIEdhdGV3YXlcbiAgY29uc3QgY29yc0NvbmZpZyA9IGNyZWF0ZUNvcnNDb25maWcoY29uZmlnLmFwaS5jb3JzKTtcbiAgXG4gIGNvbnN0IGFwaUNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgcm91dGVzOiByb3V0ZUNvbmZpZyxcbiAgfTtcbiAgXG4gIGlmIChjb3JzQ29uZmlnKSB7XG4gICAgYXBpQ29uZmlnLmNvcnMgPSBjb3JzQ29uZmlnO1xuICB9XG4gIFxuICAvLyBBZGQgY3VzdG9tIGRvbWFpbiBpZiBjb25maWd1cmVkXG4gIGlmIChjb25maWcuYXBpLmN1c3RvbURvbWFpbikge1xuICAgIGFwaUNvbmZpZy5kb21haW4gPSB7XG4gICAgICBuYW1lOiBjb25maWcuYXBpLmN1c3RvbURvbWFpbi5kb21haW5OYW1lLFxuICAgICAgY2VydDogY29uZmlnLmFwaS5jdXN0b21Eb21haW4uY2VydGlmaWNhdGVBcm4sXG4gICAgfTtcbiAgfVxuICBcbiAgY29uc3QgYXBpID0gbmV3IGluZnJhLkFwaUdhdGV3YXlWMihgJHtjb25maWcubmFtZX0tYXBpYCwgYXBpQ29uZmlnKTtcbiAgXG4gIG91dHB1dHMuYXBpVXJsID0gKGFwaSBhcyB7IHVybDogc3RyaW5nIH0pLnVybDtcbiAgXG4gIC8vIENyZWF0ZSBXZWJTb2NrZXQgQVBJIGlmIGVuYWJsZWRcbiAgaWYgKGNvbmZpZy53ZWJzb2NrZXQuZW5hYmxlZCkge1xuICAgIGNvbnN0IHdzQXBpID0gbmV3IGluZnJhLkFwaUdhdGV3YXlXZWJTb2NrZXQoYCR7Y29uZmlnLm5hbWV9LXdzYCwge1xuICAgICAgcm91dGVzOiB7XG4gICAgICAgICRjb25uZWN0OiBgJHtjb25maWcubmFtZX0vd3MvY29ubmVjdC5oYW5kbGVyYCxcbiAgICAgICAgJGRpc2Nvbm5lY3Q6IGAke2NvbmZpZy5uYW1lfS93cy9kaXNjb25uZWN0LmhhbmRsZXJgLFxuICAgICAgICAkZGVmYXVsdDogYCR7Y29uZmlnLm5hbWV9L3dzL2RlZmF1bHQuaGFuZGxlcmAsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIG91dHB1dHMud3NVcmwgPSAod3NBcGkgYXMgeyB1cmw6IHN0cmluZyB9KS51cmw7XG4gIH1cbiAgXG4gIC8vIE91dHB1dCByZXNvbHZlZCBjb25maWcgZm9yIGRlYnVnZ2luZ1xuICBvdXRwdXRzLmNvbmZpZyA9IHtcbiAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICBlbnY6IGNvbmZpZy5lbnYsXG4gICAgZGF0YVNhZmV0eTogY29uZmlnLmRhdGFTYWZldHksXG4gICAgcm91dGVDb3VudDogcm91dGVzLmxlbmd0aCxcbiAgfTtcbiAgXG4gIHJldHVybiBvdXRwdXRzO1xufVxuXG4vKipcbiAqIEdldCByZXNvbHZlZCBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGVudmlyb25tZW50XG4gKiBcbiAqIFVzZWZ1bCBmb3IgYWNjZXNzaW5nIGNvbmZpZyB2YWx1ZXMgaW4gaGFuZGxlcnMgb3Igb3RoZXIgY29kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc29sdmVkQ29uZmlnKFxuICBiYXNlOiBCYXNlQ29uZmlnLFxuICBzZWN1cml0eTogU2VjdXJpdHlDb25maWcsXG4gIGVudklucHV0OiBFbnZDb25maWdJbnB1dFxuKTogUmVzb2x2ZWRDb25maWcge1xuICBjb25zdCBzdGFnZSA9IHByb2Nlc3MuZW52LlZFTlRVUkVfU1RBR0UgfHwgJ2Rldic7XG4gIGNvbnN0IGVudiA9IChzdGFnZSA9PT0gJ3Byb2QnID8gJ3Byb2QnIDogc3RhZ2UgPT09ICdzdGFnZScgPyAnc3RhZ2UnIDogJ2RldicpIGFzIEVudmlyb25tZW50O1xuICByZXR1cm4gcmVzb2x2ZUNvbmZpZyhiYXNlLCBzZWN1cml0eSwgZW52LCBlbnZJbnB1dCk7XG59XG4iXX0=
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@venturekit/infra",
|
|
3
|
+
"version": "0.0.0-dev.20260307234057",
|
|
4
|
+
"description": "VentureKit infrastructure - SST constructs for AWS",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/venturekit-dev/venturekit.private.git",
|
|
13
|
+
"directory": "packages/infra"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"registry": "https://registry.npmjs.org",
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"venturekit",
|
|
21
|
+
"saas",
|
|
22
|
+
"sst",
|
|
23
|
+
"aws",
|
|
24
|
+
"infrastructure"
|
|
25
|
+
],
|
|
26
|
+
"license": "Apache-2.0",
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@venturekit/core": "0.0.0-dev.20260307234057",
|
|
29
|
+
"sst": "^3.0.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^20.10.0",
|
|
33
|
+
"typescript": "^5.3.0"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"dev": "tsc --watch",
|
|
38
|
+
"clean": "rm -rf dist"
|
|
39
|
+
}
|
|
40
|
+
}
|