@quiltdata/benchling-webhook 0.9.9 → 0.10.0-20251225T080117Z
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -132
- package/dist/bin/benchling-webhook.d.ts +29 -5
- package/dist/bin/benchling-webhook.d.ts.map +1 -1
- package/dist/bin/benchling-webhook.js +28 -132
- package/dist/bin/benchling-webhook.js.map +1 -1
- package/dist/bin/commands/deploy.d.ts +7 -1
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +49 -152
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/commands/infer-quilt-config.d.ts +2 -5
- package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
- package/dist/bin/commands/infer-quilt-config.js +12 -31
- package/dist/bin/commands/infer-quilt-config.js.map +1 -1
- package/dist/bin/commands/setup-wizard.d.ts +0 -1
- package/dist/bin/commands/setup-wizard.d.ts.map +1 -1
- package/dist/bin/commands/setup-wizard.js +0 -1
- package/dist/bin/commands/setup-wizard.js.map +1 -1
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +0 -4
- package/dist/bin/commands/status.js.map +1 -1
- package/dist/bin/commands/sync-secrets.d.ts.map +1 -1
- package/dist/bin/commands/sync-secrets.js +0 -4
- package/dist/bin/commands/sync-secrets.js.map +1 -1
- package/dist/bin/xdg-launch.d.ts.map +1 -1
- package/dist/bin/xdg-launch.js +5 -4
- package/dist/bin/xdg-launch.js.map +1 -1
- package/dist/lib/benchling-webhook-stack.d.ts +8 -7
- package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
- package/dist/lib/benchling-webhook-stack.js +9 -33
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/fargate-service.d.ts +6 -7
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +27 -32
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/rest-api-gateway.d.ts +2 -2
- package/dist/lib/rest-api-gateway.d.ts.map +1 -1
- package/dist/lib/rest-api-gateway.js +2 -9
- package/dist/lib/rest-api-gateway.js.map +1 -1
- package/dist/lib/types/config.d.ts +23 -35
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/config.js +2 -3
- package/dist/lib/types/config.js.map +1 -1
- package/dist/lib/types/stack-config.d.ts +181 -0
- package/dist/lib/types/stack-config.d.ts.map +1 -0
- package/dist/lib/types/stack-config.js +17 -0
- package/dist/lib/types/stack-config.js.map +1 -0
- package/dist/lib/utils/config-transform.d.ts +93 -0
- package/dist/lib/utils/config-transform.d.ts.map +1 -0
- package/dist/lib/utils/config-transform.js +270 -0
- package/dist/lib/utils/config-transform.js.map +1 -0
- package/dist/lib/utils/service-resolver.d.ts +1 -15
- package/dist/lib/utils/service-resolver.d.ts.map +1 -1
- package/dist/lib/utils/service-resolver.js +2 -11
- package/dist/lib/utils/service-resolver.js.map +1 -1
- package/dist/lib/utils/stack-inference.d.ts +7 -16
- package/dist/lib/utils/stack-inference.d.ts.map +1 -1
- package/dist/lib/utils/stack-inference.js +9 -25
- package/dist/lib/utils/stack-inference.js.map +1 -1
- package/dist/lib/wizard/phase2-stack-query.d.ts.map +1 -1
- package/dist/lib/wizard/phase2-stack-query.js +11 -24
- package/dist/lib/wizard/phase2-stack-query.js.map +1 -1
- package/dist/lib/wizard/phase3-parameter-collection.d.ts.map +1 -1
- package/dist/lib/wizard/phase3-parameter-collection.js +12 -113
- package/dist/lib/wizard/phase3-parameter-collection.js.map +1 -1
- package/dist/lib/wizard/phase6-integrated-mode.d.ts.map +1 -1
- package/dist/lib/wizard/phase6-integrated-mode.js +6 -15
- package/dist/lib/wizard/phase6-integrated-mode.js.map +1 -1
- package/dist/lib/wizard/phase7-standalone-mode.d.ts.map +1 -1
- package/dist/lib/wizard/phase7-standalone-mode.js +6 -15
- package/dist/lib/wizard/phase7-standalone-mode.js.map +1 -1
- package/dist/lib/wizard/types.d.ts +4 -12
- package/dist/lib/wizard/types.d.ts.map +1 -1
- package/dist/package.json +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal Stack Configuration Interface
|
|
3
|
+
*
|
|
4
|
+
* This interface defines ONLY the fields required by the CDK stack infrastructure.
|
|
5
|
+
* It is deliberately minimal to:
|
|
6
|
+
* - Reduce coupling between setup wizard and CDK stack
|
|
7
|
+
* - Simplify testing (fewer fields to mock)
|
|
8
|
+
* - Make explicit what the stack actually needs
|
|
9
|
+
*
|
|
10
|
+
* Transformation: ProfileConfig → StackConfig happens in config-transform.ts
|
|
11
|
+
*
|
|
12
|
+
* @module types/stack-config
|
|
13
|
+
* @version 0.10.0
|
|
14
|
+
*/
|
|
15
|
+
import type { VpcConfig } from "./config";
|
|
16
|
+
export type { VpcConfig } from "./config";
|
|
17
|
+
/**
|
|
18
|
+
* Minimal Stack Configuration
|
|
19
|
+
*
|
|
20
|
+
* Contains only the fields that the CDK stack actually uses for infrastructure provisioning.
|
|
21
|
+
* Derived from ProfileConfig via profileToStackConfig() transformation.
|
|
22
|
+
*
|
|
23
|
+
* **Design principles:**
|
|
24
|
+
* - Only infrastructure-related fields (no wizard metadata)
|
|
25
|
+
* - Only fields actually referenced in CDK constructs
|
|
26
|
+
* - Optional fields remain optional (preserve deployment flexibility)
|
|
27
|
+
*
|
|
28
|
+
* **What's NOT included:**
|
|
29
|
+
* - Benchling OAuth credentials (stored in secret, referenced by ARN)
|
|
30
|
+
* - Package configuration (passed as env vars to container)
|
|
31
|
+
* - Logging level (passed as env var to container)
|
|
32
|
+
* - Metadata fields (_metadata, _inherits)
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const stackConfig: StackConfig = {
|
|
37
|
+
* benchling: {
|
|
38
|
+
* secretArn: "arn:aws:secretsmanager:us-east-1:123456789012:secret:benchling-..."
|
|
39
|
+
* },
|
|
40
|
+
* quilt: {
|
|
41
|
+
* catalog: "quilt.example.com",
|
|
42
|
+
* database: "quilt_catalog",
|
|
43
|
+
* queueUrl: "https://sqs.us-east-1.amazonaws.com/123456789012/quilt-queue",
|
|
44
|
+
* region: "us-east-1"
|
|
45
|
+
* },
|
|
46
|
+
* deployment: {
|
|
47
|
+
* region: "us-east-1",
|
|
48
|
+
* imageTag: "0.10.0"
|
|
49
|
+
* }
|
|
50
|
+
* };
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export interface StackConfig {
|
|
54
|
+
/**
|
|
55
|
+
* Benchling configuration (secret reference only)
|
|
56
|
+
*/
|
|
57
|
+
benchling: {
|
|
58
|
+
/**
|
|
59
|
+
* AWS Secrets Manager ARN for Benchling OAuth credentials
|
|
60
|
+
*
|
|
61
|
+
* Stack uses this to grant ECS task read access to the secret.
|
|
62
|
+
* FastAPI reads credentials from secret at runtime.
|
|
63
|
+
*
|
|
64
|
+
* @example "arn:aws:secretsmanager:us-east-1:123456789012:secret:benchling-oauth-abc123"
|
|
65
|
+
*/
|
|
66
|
+
secretArn: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Quilt catalog configuration (service endpoints only)
|
|
70
|
+
*/
|
|
71
|
+
quilt: {
|
|
72
|
+
/**
|
|
73
|
+
* Quilt catalog domain (without protocol)
|
|
74
|
+
*
|
|
75
|
+
* Passed to container as QUILT_WEB_HOST environment variable.
|
|
76
|
+
*
|
|
77
|
+
* @example "quilt.example.com"
|
|
78
|
+
*/
|
|
79
|
+
catalog: string;
|
|
80
|
+
/**
|
|
81
|
+
* Athena/Glue database name for catalog metadata
|
|
82
|
+
*
|
|
83
|
+
* Passed to container as ATHENA_USER_DATABASE environment variable.
|
|
84
|
+
*
|
|
85
|
+
* @example "quilt_catalog"
|
|
86
|
+
*/
|
|
87
|
+
database: string;
|
|
88
|
+
/**
|
|
89
|
+
* SQS queue URL for package creation jobs
|
|
90
|
+
*
|
|
91
|
+
* Passed to container as PACKAGER_SQS_URL environment variable.
|
|
92
|
+
* Stack also grants ECS task send message permissions.
|
|
93
|
+
*
|
|
94
|
+
* @example "https://sqs.us-east-1.amazonaws.com/123456789012/quilt-package-queue"
|
|
95
|
+
*/
|
|
96
|
+
queueUrl: string;
|
|
97
|
+
/**
|
|
98
|
+
* AWS region for Quilt resources
|
|
99
|
+
*
|
|
100
|
+
* Used for SQS/S3 client configuration.
|
|
101
|
+
*
|
|
102
|
+
* @example "us-east-1"
|
|
103
|
+
*/
|
|
104
|
+
region: string;
|
|
105
|
+
/**
|
|
106
|
+
* IAM managed policy ARN for S3 bucket write access (optional)
|
|
107
|
+
*
|
|
108
|
+
* This policy grants read-write permissions to all Quilt S3 buckets.
|
|
109
|
+
* Attached directly to the ECS task role, eliminating the need for role assumption.
|
|
110
|
+
*
|
|
111
|
+
* Resolved from BucketWritePolicy stack resource during setup.
|
|
112
|
+
*
|
|
113
|
+
* @example "arn:aws:iam::123456789012:policy/quilt-staging-BucketWritePolicy-XXXXX"
|
|
114
|
+
*/
|
|
115
|
+
bucketWritePolicyArn?: string;
|
|
116
|
+
/**
|
|
117
|
+
* IAM managed policy ARN for Athena query access (optional)
|
|
118
|
+
*
|
|
119
|
+
* This policy grants permissions to execute Athena queries, access Glue catalog,
|
|
120
|
+
* and write query results to the Athena results bucket.
|
|
121
|
+
* Attached directly to the ECS task role.
|
|
122
|
+
*
|
|
123
|
+
* Resolved from UserAthenaNonManagedRolePolicy stack resource during setup.
|
|
124
|
+
*
|
|
125
|
+
* @example "arn:aws:iam::123456789012:policy/quilt-staging-UserAthenaNonManagedRolePolicy-XXXXX"
|
|
126
|
+
*/
|
|
127
|
+
athenaUserPolicyArn?: string;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* AWS deployment configuration
|
|
131
|
+
*/
|
|
132
|
+
deployment: {
|
|
133
|
+
/**
|
|
134
|
+
* AWS region for deployment
|
|
135
|
+
*
|
|
136
|
+
* @example "us-east-1"
|
|
137
|
+
*/
|
|
138
|
+
region: string;
|
|
139
|
+
/**
|
|
140
|
+
* Docker image tag to deploy
|
|
141
|
+
*
|
|
142
|
+
* @example "latest"
|
|
143
|
+
* @example "0.10.0"
|
|
144
|
+
* @default "latest"
|
|
145
|
+
*/
|
|
146
|
+
imageTag?: string;
|
|
147
|
+
/**
|
|
148
|
+
* VPC configuration for ECS deployment (optional)
|
|
149
|
+
*
|
|
150
|
+
* If not specified, a new VPC will be created with private subnets and NAT Gateway.
|
|
151
|
+
*/
|
|
152
|
+
vpc?: VpcConfig;
|
|
153
|
+
/**
|
|
154
|
+
* CloudFormation stack name (optional)
|
|
155
|
+
*
|
|
156
|
+
* If not specified, stack name is auto-generated based on profile:
|
|
157
|
+
* - "default" profile → "BenchlingWebhookStack" (backwards compatible)
|
|
158
|
+
* - Other profiles → "BenchlingWebhookStack-{profile}"
|
|
159
|
+
*
|
|
160
|
+
* @example "BenchlingWebhookStack-sales"
|
|
161
|
+
* @default Auto-generated based on profile name
|
|
162
|
+
*/
|
|
163
|
+
stackName?: string;
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* Security configuration (optional)
|
|
167
|
+
*/
|
|
168
|
+
security?: {
|
|
169
|
+
/**
|
|
170
|
+
* Comma-separated list of allowed IP addresses/CIDR blocks for webhook endpoints
|
|
171
|
+
*
|
|
172
|
+
* Enforced via REST API Gateway resource policy (free).
|
|
173
|
+
* Empty string means no IP filtering (all IPs allowed).
|
|
174
|
+
*
|
|
175
|
+
* @example "192.168.1.0/24,10.0.0.0/8"
|
|
176
|
+
* @default ""
|
|
177
|
+
*/
|
|
178
|
+
webhookAllowList?: string;
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=stack-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-config.d.ts","sourceRoot":"","sources":["../../../lib/types/stack-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,SAAS,EAAE;QACP;;;;;;;WAOG;QACH,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF;;OAEG;IACH,KAAK,EAAE;QACH;;;;;;WAMG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;;;;;WAMG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;;WAOG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;;;;;WAMG;QACH,MAAM,EAAE,MAAM,CAAC;QAEf;;;;;;;;;WASG;QACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAE9B;;;;;;;;;;WAUG;QACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IAEF;;OAEG;IACH,UAAU,EAAE;QACR;;;;WAIG;QACH,MAAM,EAAE,MAAM,CAAC;QAEf;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAElB;;;;WAIG;QACH,GAAG,CAAC,EAAE,SAAS,CAAC;QAEhB;;;;;;;;;WASG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;OAEG;IACH,QAAQ,CAAC,EAAE;QACP;;;;;;;;WAQG;QACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC7B,CAAC;CACL"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal Stack Configuration Interface
|
|
4
|
+
*
|
|
5
|
+
* This interface defines ONLY the fields required by the CDK stack infrastructure.
|
|
6
|
+
* It is deliberately minimal to:
|
|
7
|
+
* - Reduce coupling between setup wizard and CDK stack
|
|
8
|
+
* - Simplify testing (fewer fields to mock)
|
|
9
|
+
* - Make explicit what the stack actually needs
|
|
10
|
+
*
|
|
11
|
+
* Transformation: ProfileConfig → StackConfig happens in config-transform.ts
|
|
12
|
+
*
|
|
13
|
+
* @module types/stack-config
|
|
14
|
+
* @version 0.10.0
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
//# sourceMappingURL=stack-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-config.js","sourceRoot":"","sources":["../../../lib/types/stack-config.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Transformation Utilities
|
|
3
|
+
*
|
|
4
|
+
* Transforms ProfileConfig (XDG user configuration) into StackConfig (minimal CDK interface).
|
|
5
|
+
* This module implements the separation between user-facing configuration and infrastructure needs.
|
|
6
|
+
*
|
|
7
|
+
* **Key principles:**
|
|
8
|
+
* - ProfileConfig contains ALL configuration (wizard, deployment, runtime)
|
|
9
|
+
* - StackConfig contains ONLY infrastructure-related fields
|
|
10
|
+
* - Transformation is one-way: ProfileConfig → StackConfig
|
|
11
|
+
* - Validation ensures required fields are present
|
|
12
|
+
*
|
|
13
|
+
* @module utils/config-transform
|
|
14
|
+
* @version 0.10.0
|
|
15
|
+
*/
|
|
16
|
+
import type { ProfileConfig, ValidationResult } from "../types/config";
|
|
17
|
+
import type { StackConfig } from "../types/stack-config";
|
|
18
|
+
/**
|
|
19
|
+
* Transform ProfileConfig to StackConfig
|
|
20
|
+
*
|
|
21
|
+
* Extracts only the fields required by the CDK stack infrastructure from the full ProfileConfig.
|
|
22
|
+
* This creates a clean separation between user configuration and infrastructure needs.
|
|
23
|
+
*
|
|
24
|
+
* **Transformation logic:**
|
|
25
|
+
* - Benchling: Only secretArn (credentials stored in secret)
|
|
26
|
+
* - Quilt: Service endpoints (catalog, database, queueUrl, region, bucketWritePolicyArn, athenaUserPolicyArn)
|
|
27
|
+
* - Deployment: Infrastructure settings (region, imageTag, vpc, stackName)
|
|
28
|
+
* - Security: Optional IP allowlist
|
|
29
|
+
*
|
|
30
|
+
* **Excluded fields:**
|
|
31
|
+
* - benchling.tenant, clientId, appDefinitionId (read from secret at runtime)
|
|
32
|
+
* - packages.* (passed as environment variables)
|
|
33
|
+
* - logging.* (passed as environment variables)
|
|
34
|
+
* - _metadata, _inherits (wizard metadata)
|
|
35
|
+
*
|
|
36
|
+
* @param profile - Full profile configuration from XDG
|
|
37
|
+
* @returns Minimal stack configuration for CDK
|
|
38
|
+
* @throws Error if required fields are missing
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const profile = XDGConfig.readProfile("default");
|
|
43
|
+
* const stackConfig = profileToStackConfig(profile);
|
|
44
|
+
* createStack(stackConfig); // Pass to CDK stack
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare function profileToStackConfig(profile: ProfileConfig, options?: {
|
|
48
|
+
skipValidation?: boolean;
|
|
49
|
+
}): StackConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Validate ProfileConfig for stack deployment
|
|
52
|
+
*
|
|
53
|
+
* Checks that all required fields for CDK stack creation are present and valid.
|
|
54
|
+
* This validation is run before transformation to provide clear error messages.
|
|
55
|
+
*
|
|
56
|
+
* **Required fields:**
|
|
57
|
+
* - benchling.secretArn (secret must exist in AWS Secrets Manager)
|
|
58
|
+
* - quilt.catalog (catalog domain)
|
|
59
|
+
* - quilt.database (Athena database name)
|
|
60
|
+
* - quilt.queueUrl (SQS queue URL)
|
|
61
|
+
* - quilt.region (AWS region)
|
|
62
|
+
* - deployment.region (deployment region)
|
|
63
|
+
*
|
|
64
|
+
* **Optional fields:**
|
|
65
|
+
* - quilt.bucketWritePolicyArn (IAM managed policy for S3 access)
|
|
66
|
+
* - quilt.athenaUserPolicyArn (IAM managed policy for Athena access)
|
|
67
|
+
* - deployment.imageTag (defaults to "latest")
|
|
68
|
+
* - deployment.vpc (defaults to creating new VPC)
|
|
69
|
+
* - deployment.stackName (auto-generated from profile name)
|
|
70
|
+
* - security.webhookAllowList (defaults to no IP filtering)
|
|
71
|
+
*
|
|
72
|
+
* @param config - Profile configuration to validate
|
|
73
|
+
* @returns Validation result with errors and warnings
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* const profile = XDGConfig.readProfile("default");
|
|
78
|
+
* const result = validateStackConfig(profile);
|
|
79
|
+
*
|
|
80
|
+
* if (!result.isValid) {
|
|
81
|
+
* console.error("Configuration errors:");
|
|
82
|
+
* result.errors.forEach(err => console.error(` - ${err}`));
|
|
83
|
+
* process.exit(1);
|
|
84
|
+
* }
|
|
85
|
+
*
|
|
86
|
+
* if (result.warnings && result.warnings.length > 0) {
|
|
87
|
+
* console.warn("Configuration warnings:");
|
|
88
|
+
* result.warnings.forEach(warn => console.warn(` - ${warn}`));
|
|
89
|
+
* }
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function validateStackConfig(config: ProfileConfig): ValidationResult;
|
|
93
|
+
//# sourceMappingURL=config-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-transform.d.ts","sourceRoot":"","sources":["../../../lib/utils/config-transform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,WAAW,CA2Db;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,CA4F3E"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Transformation Utilities
|
|
4
|
+
*
|
|
5
|
+
* Transforms ProfileConfig (XDG user configuration) into StackConfig (minimal CDK interface).
|
|
6
|
+
* This module implements the separation between user-facing configuration and infrastructure needs.
|
|
7
|
+
*
|
|
8
|
+
* **Key principles:**
|
|
9
|
+
* - ProfileConfig contains ALL configuration (wizard, deployment, runtime)
|
|
10
|
+
* - StackConfig contains ONLY infrastructure-related fields
|
|
11
|
+
* - Transformation is one-way: ProfileConfig → StackConfig
|
|
12
|
+
* - Validation ensures required fields are present
|
|
13
|
+
*
|
|
14
|
+
* @module utils/config-transform
|
|
15
|
+
* @version 0.10.0
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.profileToStackConfig = profileToStackConfig;
|
|
19
|
+
exports.validateStackConfig = validateStackConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Transform ProfileConfig to StackConfig
|
|
22
|
+
*
|
|
23
|
+
* Extracts only the fields required by the CDK stack infrastructure from the full ProfileConfig.
|
|
24
|
+
* This creates a clean separation between user configuration and infrastructure needs.
|
|
25
|
+
*
|
|
26
|
+
* **Transformation logic:**
|
|
27
|
+
* - Benchling: Only secretArn (credentials stored in secret)
|
|
28
|
+
* - Quilt: Service endpoints (catalog, database, queueUrl, region, bucketWritePolicyArn, athenaUserPolicyArn)
|
|
29
|
+
* - Deployment: Infrastructure settings (region, imageTag, vpc, stackName)
|
|
30
|
+
* - Security: Optional IP allowlist
|
|
31
|
+
*
|
|
32
|
+
* **Excluded fields:**
|
|
33
|
+
* - benchling.tenant, clientId, appDefinitionId (read from secret at runtime)
|
|
34
|
+
* - packages.* (passed as environment variables)
|
|
35
|
+
* - logging.* (passed as environment variables)
|
|
36
|
+
* - _metadata, _inherits (wizard metadata)
|
|
37
|
+
*
|
|
38
|
+
* @param profile - Full profile configuration from XDG
|
|
39
|
+
* @returns Minimal stack configuration for CDK
|
|
40
|
+
* @throws Error if required fields are missing
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* const profile = XDGConfig.readProfile("default");
|
|
45
|
+
* const stackConfig = profileToStackConfig(profile);
|
|
46
|
+
* createStack(stackConfig); // Pass to CDK stack
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
function profileToStackConfig(profile, options) {
|
|
50
|
+
// Validate required fields first (unless skipped for testing)
|
|
51
|
+
if (!options?.skipValidation) {
|
|
52
|
+
const validation = validateStackConfig(profile);
|
|
53
|
+
if (!validation.isValid) {
|
|
54
|
+
const errors = validation.errors.join("\n - ");
|
|
55
|
+
throw new Error(`Invalid profile configuration for stack deployment:\n - ${errors}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Build minimal StackConfig with only required fields
|
|
59
|
+
const stackConfig = {
|
|
60
|
+
benchling: {
|
|
61
|
+
secretArn: profile.benchling.secretArn,
|
|
62
|
+
},
|
|
63
|
+
quilt: {
|
|
64
|
+
catalog: profile.quilt.catalog,
|
|
65
|
+
database: profile.quilt.database,
|
|
66
|
+
queueUrl: profile.quilt.queueUrl,
|
|
67
|
+
region: profile.quilt.region,
|
|
68
|
+
},
|
|
69
|
+
deployment: {
|
|
70
|
+
region: profile.deployment.region,
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
// Add optional fields if present
|
|
74
|
+
// Quilt managed policy ARNs (for S3 and Athena access)
|
|
75
|
+
if (profile.quilt.bucketWritePolicyArn) {
|
|
76
|
+
stackConfig.quilt.bucketWritePolicyArn = profile.quilt.bucketWritePolicyArn;
|
|
77
|
+
}
|
|
78
|
+
if (profile.quilt.athenaUserPolicyArn) {
|
|
79
|
+
stackConfig.quilt.athenaUserPolicyArn = profile.quilt.athenaUserPolicyArn;
|
|
80
|
+
}
|
|
81
|
+
// Deployment image tag
|
|
82
|
+
if (profile.deployment.imageTag) {
|
|
83
|
+
stackConfig.deployment.imageTag = profile.deployment.imageTag;
|
|
84
|
+
}
|
|
85
|
+
// VPC configuration
|
|
86
|
+
if (profile.deployment.vpc) {
|
|
87
|
+
stackConfig.deployment.vpc = profile.deployment.vpc;
|
|
88
|
+
}
|
|
89
|
+
// Stack name
|
|
90
|
+
if (profile.deployment.stackName) {
|
|
91
|
+
stackConfig.deployment.stackName = profile.deployment.stackName;
|
|
92
|
+
}
|
|
93
|
+
// Security configuration
|
|
94
|
+
if (profile.security?.webhookAllowList) {
|
|
95
|
+
stackConfig.security = {
|
|
96
|
+
webhookAllowList: profile.security.webhookAllowList,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return stackConfig;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate ProfileConfig for stack deployment
|
|
103
|
+
*
|
|
104
|
+
* Checks that all required fields for CDK stack creation are present and valid.
|
|
105
|
+
* This validation is run before transformation to provide clear error messages.
|
|
106
|
+
*
|
|
107
|
+
* **Required fields:**
|
|
108
|
+
* - benchling.secretArn (secret must exist in AWS Secrets Manager)
|
|
109
|
+
* - quilt.catalog (catalog domain)
|
|
110
|
+
* - quilt.database (Athena database name)
|
|
111
|
+
* - quilt.queueUrl (SQS queue URL)
|
|
112
|
+
* - quilt.region (AWS region)
|
|
113
|
+
* - deployment.region (deployment region)
|
|
114
|
+
*
|
|
115
|
+
* **Optional fields:**
|
|
116
|
+
* - quilt.bucketWritePolicyArn (IAM managed policy for S3 access)
|
|
117
|
+
* - quilt.athenaUserPolicyArn (IAM managed policy for Athena access)
|
|
118
|
+
* - deployment.imageTag (defaults to "latest")
|
|
119
|
+
* - deployment.vpc (defaults to creating new VPC)
|
|
120
|
+
* - deployment.stackName (auto-generated from profile name)
|
|
121
|
+
* - security.webhookAllowList (defaults to no IP filtering)
|
|
122
|
+
*
|
|
123
|
+
* @param config - Profile configuration to validate
|
|
124
|
+
* @returns Validation result with errors and warnings
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const profile = XDGConfig.readProfile("default");
|
|
129
|
+
* const result = validateStackConfig(profile);
|
|
130
|
+
*
|
|
131
|
+
* if (!result.isValid) {
|
|
132
|
+
* console.error("Configuration errors:");
|
|
133
|
+
* result.errors.forEach(err => console.error(` - ${err}`));
|
|
134
|
+
* process.exit(1);
|
|
135
|
+
* }
|
|
136
|
+
*
|
|
137
|
+
* if (result.warnings && result.warnings.length > 0) {
|
|
138
|
+
* console.warn("Configuration warnings:");
|
|
139
|
+
* result.warnings.forEach(warn => console.warn(` - ${warn}`));
|
|
140
|
+
* }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
function validateStackConfig(config) {
|
|
144
|
+
const errors = [];
|
|
145
|
+
const warnings = [];
|
|
146
|
+
// Validate required Benchling fields
|
|
147
|
+
if (!config.benchling) {
|
|
148
|
+
errors.push("Missing 'benchling' configuration section");
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
if (!config.benchling.secretArn) {
|
|
152
|
+
errors.push("Missing 'benchling.secretArn' - run 'npm run setup:sync-secrets' to create secret");
|
|
153
|
+
}
|
|
154
|
+
else if (!config.benchling.secretArn.startsWith("arn:aws:secretsmanager:")) {
|
|
155
|
+
errors.push(`Invalid 'benchling.secretArn' format: ${config.benchling.secretArn}`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Validate required Quilt fields
|
|
159
|
+
if (!config.quilt) {
|
|
160
|
+
errors.push("Missing 'quilt' configuration section");
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if (!config.quilt.catalog) {
|
|
164
|
+
errors.push("Missing 'quilt.catalog' - run 'npm run setup' to configure");
|
|
165
|
+
}
|
|
166
|
+
if (!config.quilt.database) {
|
|
167
|
+
errors.push("Missing 'quilt.database' - run 'npm run setup' to configure");
|
|
168
|
+
}
|
|
169
|
+
if (!config.quilt.queueUrl) {
|
|
170
|
+
errors.push("Missing 'quilt.queueUrl' - run 'npm run setup' to configure");
|
|
171
|
+
}
|
|
172
|
+
else if (!config.quilt.queueUrl.startsWith("https://sqs.")) {
|
|
173
|
+
errors.push(`Invalid 'quilt.queueUrl' format: ${config.quilt.queueUrl}`);
|
|
174
|
+
}
|
|
175
|
+
if (!config.quilt.region) {
|
|
176
|
+
errors.push("Missing 'quilt.region' - run 'npm run setup' to configure");
|
|
177
|
+
}
|
|
178
|
+
// Optional but recommended fields
|
|
179
|
+
if (!config.quilt.bucketWritePolicyArn) {
|
|
180
|
+
warnings.push("Missing 'quilt.bucketWritePolicyArn' - S3 write operations may fail");
|
|
181
|
+
}
|
|
182
|
+
else if (!config.quilt.bucketWritePolicyArn.startsWith("arn:aws:iam::")) {
|
|
183
|
+
errors.push(`Invalid 'quilt.bucketWritePolicyArn' format: ${config.quilt.bucketWritePolicyArn}`);
|
|
184
|
+
}
|
|
185
|
+
if (config.quilt.athenaUserPolicyArn && !config.quilt.athenaUserPolicyArn.startsWith("arn:aws:iam::")) {
|
|
186
|
+
errors.push(`Invalid 'quilt.athenaUserPolicyArn' format: ${config.quilt.athenaUserPolicyArn}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Validate required deployment fields
|
|
190
|
+
if (!config.deployment) {
|
|
191
|
+
errors.push("Missing 'deployment' configuration section");
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
if (!config.deployment.region) {
|
|
195
|
+
errors.push("Missing 'deployment.region' - run 'npm run setup' to configure");
|
|
196
|
+
}
|
|
197
|
+
// Validate VPC configuration if present
|
|
198
|
+
if (config.deployment.vpc) {
|
|
199
|
+
const vpc = config.deployment.vpc;
|
|
200
|
+
if (vpc.vpcId) {
|
|
201
|
+
// If VPC ID is specified, validate required subnet fields
|
|
202
|
+
if (!vpc.privateSubnetIds || vpc.privateSubnetIds.length < 2) {
|
|
203
|
+
errors.push("VPC configuration requires at least 2 private subnets in different AZs");
|
|
204
|
+
}
|
|
205
|
+
if (!vpc.availabilityZones || vpc.availabilityZones.length < 2) {
|
|
206
|
+
errors.push("VPC configuration requires at least 2 availability zones");
|
|
207
|
+
}
|
|
208
|
+
if (!vpc.vpcCidrBlock) {
|
|
209
|
+
warnings.push("Missing 'deployment.vpc.vpcCidrBlock' - CDK synthesis may fail");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Validate security configuration if present
|
|
215
|
+
if (config.security?.webhookAllowList) {
|
|
216
|
+
const allowList = config.security.webhookAllowList.trim();
|
|
217
|
+
if (allowList.length > 0) {
|
|
218
|
+
// Basic validation: check for valid CIDR blocks
|
|
219
|
+
const cidrs = allowList.split(",").map(s => s.trim());
|
|
220
|
+
for (const cidr of cidrs) {
|
|
221
|
+
if (!isValidCidr(cidr)) {
|
|
222
|
+
errors.push(`Invalid CIDR block in webhookAllowList: ${cidr}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
isValid: errors.length === 0,
|
|
229
|
+
errors,
|
|
230
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Validate CIDR block format
|
|
235
|
+
*
|
|
236
|
+
* Checks if a string is a valid IPv4 CIDR block (e.g., "192.168.1.0/24")
|
|
237
|
+
* or a single IP address (e.g., "192.168.1.1")
|
|
238
|
+
*
|
|
239
|
+
* @param cidr - CIDR block string to validate
|
|
240
|
+
* @returns True if valid, false otherwise
|
|
241
|
+
*
|
|
242
|
+
* @internal
|
|
243
|
+
*/
|
|
244
|
+
function isValidCidr(cidr) {
|
|
245
|
+
// Simple regex for IPv4 CIDR validation
|
|
246
|
+
// Format: xxx.xxx.xxx.xxx/yy or xxx.xxx.xxx.xxx
|
|
247
|
+
const cidrPattern = /^(\d{1,3}\.){3}\d{1,3}(\/\d{1,2})?$/;
|
|
248
|
+
if (!cidrPattern.test(cidr)) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
// Validate IP octets (0-255)
|
|
252
|
+
const parts = cidr.split("/");
|
|
253
|
+
const ip = parts[0];
|
|
254
|
+
const octets = ip.split(".");
|
|
255
|
+
for (const octet of octets) {
|
|
256
|
+
const num = parseInt(octet, 10);
|
|
257
|
+
if (num < 0 || num > 255) {
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// Validate CIDR prefix (0-32)
|
|
262
|
+
if (parts.length === 2) {
|
|
263
|
+
const prefix = parseInt(parts[1], 10);
|
|
264
|
+
if (prefix < 0 || prefix > 32) {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=config-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-transform.js","sourceRoot":"","sources":["../../../lib/utils/config-transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,11 +30,6 @@ export interface QuiltServices {
|
|
|
30
30
|
* @example "quilt.example.com"
|
|
31
31
|
*/
|
|
32
32
|
quiltWebHost: string;
|
|
33
|
-
/**
|
|
34
|
-
* Iceberg database name (optional)
|
|
35
|
-
* @example "quilt_iceberg"
|
|
36
|
-
*/
|
|
37
|
-
icebergDatabase?: string;
|
|
38
33
|
/**
|
|
39
34
|
* Athena workgroup for user queries (optional, from Quilt stack discovery)
|
|
40
35
|
* @example "quilt-user-workgroup"
|
|
@@ -45,11 +40,6 @@ export interface QuiltServices {
|
|
|
45
40
|
* @example "aws-athena-query-results-123456789012-us-east-1"
|
|
46
41
|
*/
|
|
47
42
|
athenaResultsBucket?: string;
|
|
48
|
-
/**
|
|
49
|
-
* Iceberg workgroup name (optional, from Quilt stack discovery)
|
|
50
|
-
* @example "quilt-iceberg-workgroup"
|
|
51
|
-
*/
|
|
52
|
-
icebergWorkgroup?: string;
|
|
53
43
|
}
|
|
54
44
|
/**
|
|
55
45
|
* Options for service resolution
|
|
@@ -127,10 +117,8 @@ export declare function validateQueueUrl(url: string): boolean;
|
|
|
127
117
|
* - `QuiltWebHost`: Quilt catalog web host (e.g., catalog.example.com)
|
|
128
118
|
*
|
|
129
119
|
* **Optional Stack Outputs**:
|
|
130
|
-
* - `IcebergDatabase`: Iceberg database name (if available)
|
|
131
120
|
* - `UserAthenaWorkgroupName`: Athena workgroup for user queries
|
|
132
121
|
* - `AthenaResultsBucketName`: S3 bucket for Athena query results
|
|
133
|
-
* - `IcebergWorkgroupName`: Iceberg workgroup name
|
|
134
122
|
*
|
|
135
123
|
* @param options - Service resolver options
|
|
136
124
|
* @returns Resolved service endpoints
|
|
@@ -145,10 +133,8 @@ export declare function validateQueueUrl(url: string): boolean;
|
|
|
145
133
|
* // packagerQueueUrl: 'https://sqs.us-east-1.amazonaws.com/123/quilt-queue',
|
|
146
134
|
* // athenaUserDatabase: 'quilt_catalog',
|
|
147
135
|
* // quiltWebHost: 'quilt.example.com',
|
|
148
|
-
* // icebergDatabase: 'quilt_iceberg' (optional),
|
|
149
136
|
* // athenaUserWorkgroup: 'quilt-user-workgroup' (optional),
|
|
150
|
-
* // athenaResultsBucket: 'aws-athena-query-results-...' (optional)
|
|
151
|
-
* // icebergWorkgroup: 'quilt-iceberg-workgroup' (optional)
|
|
137
|
+
* // athenaResultsBucket: 'aws-athena-query-results-...' (optional)
|
|
152
138
|
* // }
|
|
153
139
|
*/
|
|
154
140
|
export declare function resolveQuiltServices(options: ServiceResolverOptions): Promise<QuiltServices>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-resolver.d.ts","sourceRoot":"","sources":["../../../lib/utils/service-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACH,oBAAoB,EAEvB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"service-resolver.d.ts","sourceRoot":"","sources":["../../../lib/utils/service-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACH,oBAAoB,EAEvB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAGvB,UAAU,CAAC,EAAE,MAAM;aACnB,OAAO,CAAC,EAAE,MAAM;gBAFhC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,MAAM,YAAA;IAUpC,MAAM,IAAI,MAAM;CAanB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAkBzD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAYrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,sBAAsB,GAChC,OAAO,CAAC,aAAa,CAAC,CAsFxB"}
|