@quiltdata/benchling-webhook 0.9.7 → 0.10.0-20251224T233317Z
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 +4 -134
- 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 +0 -2
- package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
- package/dist/bin/commands/infer-quilt-config.js +0 -11
- 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 +0 -2
- 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 +7 -32
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/fargate-service.d.ts +4 -6
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +16 -19
- 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 +6 -43
- package/dist/lib/rest-api-gateway.js.map +1 -1
- package/dist/lib/types/config.d.ts +0 -28
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/config.js +0 -2
- package/dist/lib/types/config.js.map +1 -1
- package/dist/lib/types/stack-config.d.ts +170 -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 +92 -0
- package/dist/lib/utils/config-transform.d.ts.map +1 -0
- package/dist/lib/utils/config-transform.js +263 -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 +1 -7
- package/dist/lib/utils/stack-inference.d.ts.map +1 -1
- package/dist/lib/utils/stack-inference.js +1 -5
- 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 +0 -11
- 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 +0 -9
- 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 +0 -9
- package/dist/lib/wizard/phase7-standalone-mode.js.map +1 -1
- package/dist/lib/wizard/types.d.ts +1 -6
- package/dist/lib/wizard/types.d.ts.map +1 -1
- package/dist/package.json +3 -3
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -65,63 +65,6 @@ If the App Canvas is not already part of your standard notebook template, Benchl
|
|
|
65
65
|
|
|
66
66
|

|
|
67
67
|
|
|
68
|
-
## Architecture
|
|
69
|
-
|
|
70
|
-
AWS CDK application with simple, reliable webhook processing:
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
Benchling Webhook
|
|
74
|
-
|
|
|
75
|
-
| HTTPS POST
|
|
76
|
-
v
|
|
77
|
-
REST API Gateway v1 + Resource Policy
|
|
78
|
-
| (optional IP filtering)
|
|
79
|
-
v
|
|
80
|
-
VPC Link
|
|
81
|
-
|
|
|
82
|
-
v
|
|
83
|
-
Network Load Balancer
|
|
84
|
-
| (internal)
|
|
85
|
-
v
|
|
86
|
-
ECS Fargate (Gunicorn + FastAPI)
|
|
87
|
-
|
|
|
88
|
-
| Multi-worker ASGI server
|
|
89
|
-
| HMAC signature verification
|
|
90
|
-
| Process webhook payload
|
|
91
|
-
|
|
|
92
|
-
+---> NAT Gateway ---> Internet (Benchling API, ECR)
|
|
93
|
-
|
|
|
94
|
-
v
|
|
95
|
-
S3 + SQS → Quilt Package
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Components
|
|
99
|
-
|
|
100
|
-
- **REST API Gateway v1** - Public HTTPS endpoint with CloudWatch logging and resource policies
|
|
101
|
-
- **Resource Policy** - Free IP allowlisting (applied when `webhookAllowList` configured)
|
|
102
|
-
- **VPC Link** - Private connection between API Gateway and VPC
|
|
103
|
-
- **Network Load Balancer** - Internal load balancer with health checks
|
|
104
|
-
- **ECS Fargate** - Gunicorn + FastAPI application (4 workers, auto-scales 2-10 tasks) with HMAC verification
|
|
105
|
-
- **NAT Gateway** - Enables ECS tasks to access external services (Benchling API, ECR, Secrets Manager)
|
|
106
|
-
- **S3** - Payload and package storage
|
|
107
|
-
- **SQS** - Quilt package creation queue
|
|
108
|
-
- **Secrets Manager** - Benchling OAuth credentials
|
|
109
|
-
- **CloudWatch** - Centralized logging and monitoring
|
|
110
|
-
|
|
111
|
-
### Cost Analysis
|
|
112
|
-
|
|
113
|
-
**Monthly Fixed Costs (us-east-1):**
|
|
114
|
-
|
|
115
|
-
- REST API v1: $0.00
|
|
116
|
-
- Resource Policy: $0.00 (free)
|
|
117
|
-
- VPC Link: $0.00
|
|
118
|
-
- Network Load Balancer: $16.20
|
|
119
|
-
- ECS Fargate (2 tasks): $14.50
|
|
120
|
-
- NAT Gateway: $32.40
|
|
121
|
-
- **Total: $63.10/month**
|
|
122
|
-
|
|
123
|
-
**Variable Costs:** ~$3.50 per million requests
|
|
124
|
-
|
|
125
68
|
### Security Features
|
|
126
69
|
|
|
127
70
|
**Single Authentication Layer:**
|
|
@@ -133,8 +76,10 @@ S3 + SQS → Quilt Package
|
|
|
133
76
|
**Optional Network Filtering:**
|
|
134
77
|
|
|
135
78
|
- **Resource Policy IP Filtering** - Free alternative to AWS WAF ($7/month saved)
|
|
136
|
-
- Blocks unknown IPs at API Gateway edge
|
|
137
|
-
- Health endpoints
|
|
79
|
+
- Blocks unknown IPs at API Gateway edge (applies to all endpoints)
|
|
80
|
+
- **BREAKING CHANGE (v1.1.0+)**: Health endpoints NO LONGER exempt from IP filtering
|
|
81
|
+
- External monitoring services must be added to allowlist or IP filtering disabled
|
|
82
|
+
- NLB health checks unaffected (bypass API Gateway)
|
|
138
83
|
- IP filtering does NOT replace authentication (it's defense-in-depth)
|
|
139
84
|
|
|
140
85
|
**Infrastructure Security:**
|
|
@@ -256,78 +201,3 @@ npx @quiltdata/benchling-webhook@latest logs --profile sales
|
|
|
256
201
|
# Destroy stack
|
|
257
202
|
npx @quiltdata/benchling-webhook@latest destroy --profile sales
|
|
258
203
|
```
|
|
259
|
-
|
|
260
|
-
### Migration from Single Stack
|
|
261
|
-
|
|
262
|
-
Existing "default" profile deployments continue to use `BenchlingWebhookStack` with no changes required. New profiles automatically get unique stack names.
|
|
263
|
-
|
|
264
|
-
## Monitoring
|
|
265
|
-
|
|
266
|
-
### CloudWatch Logs
|
|
267
|
-
|
|
268
|
-
- `/aws/apigateway/benchling-webhook-rest` - API Gateway access logs
|
|
269
|
-
- `/ecs/benchling-webhook` - ECS container logs (includes HMAC verification)
|
|
270
|
-
|
|
271
|
-
**Note**: Resource Policy filtering happens at the API Gateway edge and is visible in access logs (403 responses for blocked IPs).
|
|
272
|
-
|
|
273
|
-
### View Logs
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
# Via AWS CLI
|
|
277
|
-
aws logs tail /aws/apigateway/benchling-webhook-rest --follow
|
|
278
|
-
aws logs tail /ecs/benchling-webhook --follow
|
|
279
|
-
|
|
280
|
-
# Via NPX (all logs combined)
|
|
281
|
-
npx @quiltdata/benchling-webhook@latest logs --profile default
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
## Additional Commands
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
# Deploy without re-running setup
|
|
288
|
-
npx @quiltdata/benchling-webhook@latest deploy [--profile <name>]
|
|
289
|
-
|
|
290
|
-
# Check CloudFormation stack status
|
|
291
|
-
npx @quiltdata/benchling-webhook@latest status [--profile <name>]
|
|
292
|
-
|
|
293
|
-
# View CloudWatch logs
|
|
294
|
-
npx @quiltdata/benchling-webhook@latest logs [--profile <name>]
|
|
295
|
-
|
|
296
|
-
# Destroy stack
|
|
297
|
-
npx @quiltdata/benchling-webhook@latest destroy [--profile <name>]
|
|
298
|
-
|
|
299
|
-
# Show all available commands
|
|
300
|
-
npx @quiltdata/benchling-webhook@latest --help
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
## Upgrading
|
|
304
|
-
|
|
305
|
-
### From v1.0.0 (HTTP API v2 + Lambda Authorizer)
|
|
306
|
-
|
|
307
|
-
Version 0.8.9+ uses REST API v1 + Resource Policy architecture instead of HTTP API v2. This is a **breaking change that requires stack recreation**.
|
|
308
|
-
|
|
309
|
-
**Why the change?** REST API v1 + Resource Policy saves $5.10/month by eliminating AWS WAF costs while maintaining the same security model.
|
|
310
|
-
|
|
311
|
-
**Quick migration:**
|
|
312
|
-
|
|
313
|
-
```bash
|
|
314
|
-
# 1. Backup configuration
|
|
315
|
-
cp ~/.config/benchling-webhook/{profile}/config.json ~/backup-config.json
|
|
316
|
-
|
|
317
|
-
# 2. Destroy old stack
|
|
318
|
-
npx cdk destroy --profile {profile} --context stage={stage}
|
|
319
|
-
|
|
320
|
-
# 3. Deploy new stack
|
|
321
|
-
npm run deploy:{stage} -- --profile {profile} --yes
|
|
322
|
-
|
|
323
|
-
# 4. Update webhook URL in Benchling (now includes stage prefix: /prod/webhook)
|
|
324
|
-
|
|
325
|
-
# 5. Test
|
|
326
|
-
npm run test:{stage} -- --profile {profile}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
See [MIGRATION.md](./MIGRATION.md) for detailed upgrade instructions.
|
|
330
|
-
|
|
331
|
-
## License
|
|
332
|
-
|
|
333
|
-
Apache-2.0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import * as cdk from "aws-cdk-lib";
|
|
3
3
|
import { BenchlingWebhookStack } from "../lib/benchling-webhook-stack";
|
|
4
|
-
import type {
|
|
4
|
+
import type { StackConfig } from "../lib/types/stack-config";
|
|
5
5
|
/**
|
|
6
6
|
* Result of CDK bootstrap check
|
|
7
7
|
*/
|
|
@@ -28,9 +28,33 @@ export interface DeploymentResult {
|
|
|
28
28
|
export declare function checkCdkBootstrap(account: string, region: string): Promise<BootstrapStatus>;
|
|
29
29
|
/**
|
|
30
30
|
* Create CDK app and stack (synthesis only, no deployment)
|
|
31
|
-
*
|
|
32
|
-
* v0.
|
|
33
|
-
*
|
|
31
|
+
*
|
|
32
|
+
* v0.10.0: Clean library API - accepts minimal StackConfig interface
|
|
33
|
+
*
|
|
34
|
+
* This function is called directly by deploy.ts - no subprocess, no environment variables.
|
|
35
|
+
*
|
|
36
|
+
* @param config - Minimal stack configuration (transformed from ProfileConfig)
|
|
37
|
+
* @param options - Deployment options (account, region, profile name)
|
|
38
|
+
* @returns Deployment result with synthesized app and stack
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* import { createStack } from "@quiltdata/benchling-webhook";
|
|
43
|
+
* import { profileToStackConfig } from "./lib/utils/config-transform";
|
|
44
|
+
*
|
|
45
|
+
* const profile = XDGConfig.readProfile("default");
|
|
46
|
+
* const stackConfig = profileToStackConfig(profile);
|
|
47
|
+
*
|
|
48
|
+
* const result = createStack(stackConfig, {
|
|
49
|
+
* account: "123456789012",
|
|
50
|
+
* region: "us-east-1",
|
|
51
|
+
* profileName: "default"
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
34
54
|
*/
|
|
35
|
-
export declare function createStack(config:
|
|
55
|
+
export declare function createStack(config: StackConfig, options: {
|
|
56
|
+
account: string;
|
|
57
|
+
region: string;
|
|
58
|
+
profileName: string;
|
|
59
|
+
}): DeploymentResult;
|
|
36
60
|
//# sourceMappingURL=benchling-webhook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchling-webhook.d.ts","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"benchling-webhook.d.ts","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAGvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IACb,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,WAAW,CACvB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE;IACL,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB,GACF,gBAAgB,CAoBlB"}
|
|
@@ -77,63 +77,40 @@ async function checkCdkBootstrap(account, region) {
|
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
79
|
* Create CDK app and stack (synthesis only, no deployment)
|
|
80
|
-
*
|
|
81
|
-
* v0.
|
|
82
|
-
*
|
|
80
|
+
*
|
|
81
|
+
* v0.10.0: Clean library API - accepts minimal StackConfig interface
|
|
82
|
+
*
|
|
83
|
+
* This function is called directly by deploy.ts - no subprocess, no environment variables.
|
|
84
|
+
*
|
|
85
|
+
* @param config - Minimal stack configuration (transformed from ProfileConfig)
|
|
86
|
+
* @param options - Deployment options (account, region, profile name)
|
|
87
|
+
* @returns Deployment result with synthesized app and stack
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* import { createStack } from "@quiltdata/benchling-webhook";
|
|
92
|
+
* import { profileToStackConfig } from "./lib/utils/config-transform";
|
|
93
|
+
*
|
|
94
|
+
* const profile = XDGConfig.readProfile("default");
|
|
95
|
+
* const stackConfig = profileToStackConfig(profile);
|
|
96
|
+
*
|
|
97
|
+
* const result = createStack(stackConfig, {
|
|
98
|
+
* account: "123456789012",
|
|
99
|
+
* region: "us-east-1",
|
|
100
|
+
* profileName: "default"
|
|
101
|
+
* });
|
|
102
|
+
* ```
|
|
83
103
|
*/
|
|
84
|
-
function createStack(config) {
|
|
104
|
+
function createStack(config, options) {
|
|
85
105
|
const app = new cdk.App();
|
|
86
|
-
// Convert legacy config to ProfileConfig for backward compatibility
|
|
87
|
-
const profileConfig = {
|
|
88
|
-
quilt: {
|
|
89
|
-
stackArn: config.quiltStackArn || "",
|
|
90
|
-
catalog: config.quiltCatalog,
|
|
91
|
-
database: config.quiltDatabase,
|
|
92
|
-
queueUrl: config.queueUrl,
|
|
93
|
-
region: config.cdkRegion,
|
|
94
|
-
},
|
|
95
|
-
benchling: {
|
|
96
|
-
tenant: config.benchlingTenant,
|
|
97
|
-
clientId: config.benchlingClientId,
|
|
98
|
-
clientSecret: config.benchlingClientSecret,
|
|
99
|
-
secretArn: config.benchlingSecret,
|
|
100
|
-
appDefinitionId: config.benchlingAppDefinitionId,
|
|
101
|
-
},
|
|
102
|
-
packages: {
|
|
103
|
-
bucket: config.quiltUserBucket,
|
|
104
|
-
prefix: config.pkgPrefix || "benchling",
|
|
105
|
-
metadataKey: config.pkgKey || "experiment_id",
|
|
106
|
-
},
|
|
107
|
-
deployment: {
|
|
108
|
-
region: config.cdkRegion,
|
|
109
|
-
account: config.cdkAccount,
|
|
110
|
-
ecrRepository: config.ecrRepositoryName || "quiltdata/benchling",
|
|
111
|
-
imageTag: config.imageTag || "latest",
|
|
112
|
-
},
|
|
113
|
-
logging: {
|
|
114
|
-
level: config.logLevel || "INFO",
|
|
115
|
-
},
|
|
116
|
-
security: {
|
|
117
|
-
webhookAllowList: config.webhookAllowList || "",
|
|
118
|
-
enableVerification: config.enableWebhookVerification !== "false",
|
|
119
|
-
},
|
|
120
|
-
_metadata: {
|
|
121
|
-
version: "0.7.0-migration",
|
|
122
|
-
createdAt: new Date().toISOString(),
|
|
123
|
-
updatedAt: new Date().toISOString(),
|
|
124
|
-
source: "cli",
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
106
|
// Determine stack name: use profile-based naming with optional custom name
|
|
128
|
-
|
|
129
|
-
const profile = "default";
|
|
130
|
-
const stackName = (0, config_1.getStackName)(profile, profileConfig.deployment?.stackName);
|
|
107
|
+
const stackName = (0, config_1.getStackName)(options.profileName, config.deployment.stackName);
|
|
131
108
|
const stack = new benchling_webhook_stack_1.BenchlingWebhookStack(app, stackName, {
|
|
132
109
|
env: {
|
|
133
|
-
account:
|
|
134
|
-
region:
|
|
110
|
+
account: options.account,
|
|
111
|
+
region: options.region,
|
|
135
112
|
},
|
|
136
|
-
config:
|
|
113
|
+
config: config,
|
|
137
114
|
});
|
|
138
115
|
return {
|
|
139
116
|
app,
|
|
@@ -142,85 +119,4 @@ function createStack(config) {
|
|
|
142
119
|
stackId: stack.stackId,
|
|
143
120
|
};
|
|
144
121
|
}
|
|
145
|
-
// Only run if called directly (not imported)
|
|
146
|
-
// v0.7.0+: Uses ProfileConfig read from environment variables
|
|
147
|
-
// This module is primarily used by CDK CLI (npx cdk deploy) which requires direct execution
|
|
148
|
-
if (require.main === module) {
|
|
149
|
-
const app = new cdk.App();
|
|
150
|
-
// Minimal ProfileConfig from environment variables (for direct CDK usage)
|
|
151
|
-
// For destroy operations, provide placeholder values if SKIP_CONFIG_VALIDATION is set
|
|
152
|
-
const skipValidation = process.env.SKIP_CONFIG_VALIDATION === "true";
|
|
153
|
-
const profileConfig = {
|
|
154
|
-
quilt: {
|
|
155
|
-
stackArn: process.env.QUILT_STACK_ARN || (skipValidation ? "placeholder" : ""),
|
|
156
|
-
catalog: process.env.QUILT_CATALOG || "",
|
|
157
|
-
database: process.env.QUILT_DATABASE || "",
|
|
158
|
-
queueUrl: process.env.QUEUE_URL || "",
|
|
159
|
-
region: process.env.CDK_DEFAULT_REGION || "us-east-1",
|
|
160
|
-
},
|
|
161
|
-
benchling: {
|
|
162
|
-
tenant: process.env.BENCHLING_TENANT || "",
|
|
163
|
-
clientId: process.env.BENCHLING_CLIENT_ID || "",
|
|
164
|
-
secretArn: process.env.BENCHLING_SECRET || (skipValidation ? "placeholder" : undefined),
|
|
165
|
-
appDefinitionId: process.env.BENCHLING_APP_DEFINITION_ID || "",
|
|
166
|
-
},
|
|
167
|
-
packages: {
|
|
168
|
-
bucket: process.env.QUILT_USER_BUCKET || "",
|
|
169
|
-
prefix: process.env.PKG_PREFIX || "benchling",
|
|
170
|
-
metadataKey: process.env.PKG_KEY || "experiment_id",
|
|
171
|
-
},
|
|
172
|
-
deployment: {
|
|
173
|
-
region: process.env.CDK_DEFAULT_REGION || "us-east-1",
|
|
174
|
-
account: process.env.CDK_DEFAULT_ACCOUNT,
|
|
175
|
-
ecrRepository: process.env.ECR_REPOSITORY_NAME || "quiltdata/benchling",
|
|
176
|
-
imageTag: process.env.IMAGE_TAG || "latest",
|
|
177
|
-
// Include VPC configuration if specified
|
|
178
|
-
...(process.env.VPC_ID && {
|
|
179
|
-
vpc: {
|
|
180
|
-
vpcId: process.env.VPC_ID,
|
|
181
|
-
// Parse subnet arrays from JSON-encoded environment variables
|
|
182
|
-
...(process.env.VPC_PRIVATE_SUBNET_IDS && {
|
|
183
|
-
privateSubnetIds: JSON.parse(process.env.VPC_PRIVATE_SUBNET_IDS),
|
|
184
|
-
}),
|
|
185
|
-
...(process.env.VPC_PUBLIC_SUBNET_IDS && {
|
|
186
|
-
publicSubnetIds: JSON.parse(process.env.VPC_PUBLIC_SUBNET_IDS),
|
|
187
|
-
}),
|
|
188
|
-
...(process.env.VPC_AVAILABILITY_ZONES && {
|
|
189
|
-
availabilityZones: JSON.parse(process.env.VPC_AVAILABILITY_ZONES),
|
|
190
|
-
}),
|
|
191
|
-
...(process.env.VPC_CIDR_BLOCK && {
|
|
192
|
-
vpcCidrBlock: process.env.VPC_CIDR_BLOCK,
|
|
193
|
-
}),
|
|
194
|
-
},
|
|
195
|
-
}),
|
|
196
|
-
// Include custom stack name if specified
|
|
197
|
-
...(process.env.STACK_NAME && {
|
|
198
|
-
stackName: process.env.STACK_NAME,
|
|
199
|
-
}),
|
|
200
|
-
},
|
|
201
|
-
logging: {
|
|
202
|
-
level: process.env.LOG_LEVEL || "INFO",
|
|
203
|
-
},
|
|
204
|
-
security: {
|
|
205
|
-
webhookAllowList: process.env.WEBHOOK_ALLOW_LIST || "",
|
|
206
|
-
enableVerification: process.env.ENABLE_WEBHOOK_VERIFICATION !== "false",
|
|
207
|
-
},
|
|
208
|
-
_metadata: {
|
|
209
|
-
version: "0.7.0",
|
|
210
|
-
createdAt: new Date().toISOString(),
|
|
211
|
-
updatedAt: new Date().toISOString(),
|
|
212
|
-
source: "cli",
|
|
213
|
-
},
|
|
214
|
-
};
|
|
215
|
-
// Determine stack name from environment or profile
|
|
216
|
-
const profile = process.env.PROFILE || "default";
|
|
217
|
-
const stackName = (0, config_1.getStackName)(profile, profileConfig.deployment.stackName);
|
|
218
|
-
new benchling_webhook_stack_1.BenchlingWebhookStack(app, stackName, {
|
|
219
|
-
env: {
|
|
220
|
-
account: process.env.CDK_DEFAULT_ACCOUNT,
|
|
221
|
-
region: process.env.CDK_DEFAULT_REGION,
|
|
222
|
-
},
|
|
223
|
-
config: profileConfig,
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
122
|
//# sourceMappingURL=benchling-webhook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchling-webhook.js","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"benchling-webhook.js","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,8CAyCC;AA6BD,kCA2BC;AAhID,iDAAmC;AACnC,4EAAuE;AACvE,iDAAyC;AACzC,gDAAmD;AAwBnD;;;GAGG;AACI,KAAK,UAAU,iBAAiB,CACnC,OAAe,EACf,MAAc;IAEd,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EACnB,+CAA+C,MAAM,6EAA6E,EAClI,EAAE,QAAQ,EAAE,OAAO,EAAE,CACxB,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAElC,IACI,WAAW,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YACtC,WAAW,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACzC,CAAC;YACC,OAAO;gBACH,YAAY,EAAE,KAAK;gBACnB,OAAO,EAAE,uCAAuC,OAAO,cAAc,MAAM,EAAE;gBAC7E,OAAO,EAAE,2BAA2B,OAAO,IAAI,MAAM,EAAE;aAC1D,CAAC;QACN,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,OAAO;gBACH,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,iCAAiC,WAAW,qCAAqC;aAC7F,CAAC;QACN,CAAC;QAED,OAAO;YACH,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,WAAW;SACtB,CAAC;IACN,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,0CAA2C,KAAe,CAAC,OAAO,EAAE;SAChF,CAAC;IACN,CAAC;AACL,CAAC;AAGD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,SAAgB,WAAW,CACvB,MAAmB,EACnB,OAIC;IAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IAE1B,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEjF,MAAM,KAAK,GAAG,IAAI,+CAAqB,CAAC,GAAG,EAAE,SAAS,EAAE;QACpD,GAAG,EAAE;YACD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;SACzB;QACD,MAAM,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,OAAO;QACH,GAAG;QACH,KAAK;QACL,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;KACzB,CAAC;AACN,CAAC"}
|
|
@@ -5,8 +5,11 @@ import { ProfileConfig } from "../../lib/types/config";
|
|
|
5
5
|
* Uses new profile-based configuration with deployment tracking.
|
|
6
6
|
* Supports independent --profile and --stage options.
|
|
7
7
|
*
|
|
8
|
+
* v0.10.0: Refactored to call createStack() directly instead of spawning subprocess.
|
|
9
|
+
* This eliminates environment variable IPC complexity and simplifies testing.
|
|
10
|
+
*
|
|
8
11
|
* @module commands/deploy
|
|
9
|
-
* @version 0.
|
|
12
|
+
* @version 0.10.0
|
|
10
13
|
*/
|
|
11
14
|
export declare function deployCommand(options: {
|
|
12
15
|
yes?: boolean;
|
|
@@ -23,6 +26,9 @@ export declare function deployCommand(options: {
|
|
|
23
26
|
}): Promise<void>;
|
|
24
27
|
/**
|
|
25
28
|
* Deploy the Benchling webhook stack
|
|
29
|
+
*
|
|
30
|
+
* v0.10.0: Refactored to call createStack() directly instead of using environment variable IPC.
|
|
31
|
+
* Configuration is passed programmatically through function calls, not subprocess environment.
|
|
26
32
|
*/
|
|
27
33
|
export declare function deploy(stackArn: string, benchlingSecret: string, config: ProfileConfig, options: {
|
|
28
34
|
yes?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAgB,MAAM,wBAAwB,CAAC;AA4GrE;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FhB;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CACxB,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IACL,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB,GACF,OAAO,CAAC,IAAI,CAAC,CAqiBf"}
|