@quiltdata/benchling-webhook 0.4.13 → 0.5.0-20251029T180511Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/bin/benchling-webhook.d.ts +50 -0
  2. package/dist/bin/benchling-webhook.d.ts.map +1 -0
  3. package/dist/bin/benchling-webhook.js +268 -0
  4. package/dist/bin/benchling-webhook.js.map +1 -0
  5. package/dist/bin/cli.d.ts +3 -0
  6. package/dist/bin/cli.d.ts.map +1 -0
  7. package/dist/bin/cli.js +83 -0
  8. package/dist/bin/cli.js.map +1 -0
  9. package/dist/bin/commands/deploy.d.ts +7 -0
  10. package/dist/bin/commands/deploy.d.ts.map +1 -0
  11. package/dist/bin/commands/deploy.js +154 -0
  12. package/dist/bin/commands/deploy.js.map +1 -0
  13. package/dist/bin/commands/init.d.ts +9 -0
  14. package/dist/bin/commands/init.d.ts.map +1 -0
  15. package/dist/bin/commands/init.js +155 -0
  16. package/dist/bin/commands/init.js.map +1 -0
  17. package/dist/bin/commands/validate.d.ts +5 -0
  18. package/dist/bin/commands/validate.d.ts.map +1 -0
  19. package/dist/bin/commands/validate.js +135 -0
  20. package/dist/bin/commands/validate.js.map +1 -0
  21. package/dist/bin/get-env.js +180 -0
  22. package/dist/bin/publish.js +327 -0
  23. package/{bin → dist/bin}/version.js +73 -37
  24. package/dist/lib/alb-api-gateway.d.ts +17 -0
  25. package/dist/lib/alb-api-gateway.d.ts.map +1 -0
  26. package/dist/lib/alb-api-gateway.js +191 -0
  27. package/dist/lib/alb-api-gateway.js.map +1 -0
  28. package/dist/lib/benchling-webhook-stack.d.ts +25 -0
  29. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -0
  30. package/dist/lib/benchling-webhook-stack.js +165 -0
  31. package/dist/lib/benchling-webhook-stack.js.map +1 -0
  32. package/dist/lib/constants.d.ts +28 -0
  33. package/dist/lib/constants.d.ts.map +1 -0
  34. package/dist/lib/constants.js +31 -0
  35. package/dist/lib/constants.js.map +1 -0
  36. package/dist/lib/ecr-repository.d.ts +16 -0
  37. package/dist/lib/ecr-repository.d.ts.map +1 -0
  38. package/dist/lib/ecr-repository.js +90 -0
  39. package/dist/lib/ecr-repository.js.map +1 -0
  40. package/dist/lib/fargate-service.d.ts +32 -0
  41. package/dist/lib/fargate-service.d.ts.map +1 -0
  42. package/dist/lib/fargate-service.js +294 -0
  43. package/dist/lib/fargate-service.js.map +1 -0
  44. package/{lib/index.ts → dist/lib/index.d.ts} +5 -5
  45. package/dist/lib/index.d.ts.map +1 -0
  46. package/dist/lib/index.js +38 -0
  47. package/dist/lib/index.js.map +1 -0
  48. package/dist/lib/templates/base-template.d.ts +14 -0
  49. package/dist/lib/templates/base-template.d.ts.map +1 -0
  50. package/dist/lib/templates/base-template.js +68 -0
  51. package/dist/lib/templates/base-template.js.map +1 -0
  52. package/dist/lib/templates/readme.d.ts +11 -0
  53. package/dist/lib/templates/readme.d.ts.map +1 -0
  54. package/dist/lib/templates/readme.js +105 -0
  55. package/dist/lib/templates/readme.js.map +1 -0
  56. package/dist/lib/utils/config.d.ts +68 -0
  57. package/dist/lib/utils/config.d.ts.map +1 -0
  58. package/dist/lib/utils/config.js +195 -0
  59. package/dist/lib/utils/config.js.map +1 -0
  60. package/dist/lib/utils/stack-inference.d.ts +73 -0
  61. package/dist/lib/utils/stack-inference.d.ts.map +1 -0
  62. package/dist/lib/utils/stack-inference.js +410 -0
  63. package/dist/lib/utils/stack-inference.js.map +1 -0
  64. package/dist/package.json +90 -0
  65. package/package.json +31 -20
  66. package/AGENTS.md +0 -226
  67. package/CHANGELOG.md +0 -91
  68. package/bin/benchling-webhook.ts +0 -172
  69. package/bin/cli-auth.sh +0 -74
  70. package/bin/get-env.js +0 -564
  71. package/bin/publish-manual.js +0 -211
  72. package/bin/release-notes.sh +0 -82
  73. package/bin/sync-version.js +0 -72
  74. package/cdk.context.json +0 -58
  75. package/cdk.json +0 -85
  76. package/doc/NPM_OIDC_SETUP.md +0 -95
  77. package/doc/PARAMETERS.md +0 -203
  78. package/doc/RELEASE.md +0 -297
  79. package/doc/RELEASE_NOTES.md +0 -64
  80. package/jest.config.js +0 -14
  81. package/lib/README.md +0 -50
  82. package/lib/oauth-tester.json +0 -35
  83. package/tsconfig.json +0 -34
  84. /package/{bin → dist/bin}/check-logs.js +0 -0
  85. /package/{bin → dist/bin}/release.js +0 -0
  86. /package/{bin → dist/bin}/send-event.js +0 -0
  87. /package/{bin → dist/bin}/test-invalid-signature.js +0 -0
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import * as cdk from "aws-cdk-lib";
4
+ import { BenchlingWebhookStack } from "../lib/benchling-webhook-stack";
5
+ import type { Config } from "../lib/utils/config";
6
+ declare const inferStackConfig: any;
7
+ /**
8
+ * Result of CDK bootstrap check
9
+ */
10
+ export interface BootstrapStatus {
11
+ bootstrapped: boolean;
12
+ status?: string;
13
+ message?: string;
14
+ command?: string;
15
+ warning?: string;
16
+ }
17
+ /**
18
+ * Result of deployment
19
+ */
20
+ export interface DeploymentResult {
21
+ app: cdk.App;
22
+ stack: BenchlingWebhookStack;
23
+ stackName: string;
24
+ stackId: string;
25
+ }
26
+ /**
27
+ * Configuration inference result
28
+ */
29
+ export interface InferenceResult {
30
+ success: boolean;
31
+ inferredVars: Record<string, string>;
32
+ error?: string;
33
+ }
34
+ /**
35
+ * Check if CDK is bootstrapped for the given account/region
36
+ * Returns status object instead of exiting
37
+ */
38
+ export declare function checkCdkBootstrap(account: string, region: string): Promise<BootstrapStatus>;
39
+ /**
40
+ * Attempt to infer configuration from catalog
41
+ * Non-fatal - returns success flag and inferred values
42
+ */
43
+ export declare function inferConfiguration(catalogUrl: string): Promise<InferenceResult>;
44
+ /**
45
+ * Create CDK app and stack (synthesis only, no deployment)
46
+ * Pure function - returns app and stack objects
47
+ */
48
+ export declare function createStack(config: Config): DeploymentResult;
49
+ export { inferStackConfig };
50
+ //# sourceMappingURL=benchling-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchling-webhook.d.ts","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAIlD,QAAA,MAAQ,gBAAgB,KAA4B,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,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;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;IACb,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoBrF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CA6B5D;AAmKD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,268 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.inferStackConfig = void 0;
38
+ exports.checkCdkBootstrap = checkCdkBootstrap;
39
+ exports.inferConfiguration = inferConfiguration;
40
+ exports.createStack = createStack;
41
+ require("dotenv/config");
42
+ const cdk = __importStar(require("aws-cdk-lib"));
43
+ const benchling_webhook_stack_1 = require("../lib/benchling-webhook-stack");
44
+ const child_process_1 = require("child_process");
45
+ // Import get-env for library usage
46
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
47
+ const { inferStackConfig } = require("./get-env.js");
48
+ exports.inferStackConfig = inferStackConfig;
49
+ /**
50
+ * Check if CDK is bootstrapped for the given account/region
51
+ * Returns status object instead of exiting
52
+ */
53
+ async function checkCdkBootstrap(account, region) {
54
+ try {
55
+ const result = (0, child_process_1.execSync)(`aws cloudformation describe-stacks --region ${region} --stack-name CDKToolkit --query "Stacks[0].StackStatus" --output text 2>&1`, { encoding: "utf-8" });
56
+ const stackStatus = result.trim();
57
+ if (stackStatus.includes("does not exist") ||
58
+ stackStatus.includes("ValidationError")) {
59
+ return {
60
+ bootstrapped: false,
61
+ message: `CDK is not bootstrapped for account ${account} in region ${region}`,
62
+ command: `npx cdk bootstrap aws://${account}/${region}`,
63
+ };
64
+ }
65
+ if (!stackStatus.includes("COMPLETE")) {
66
+ return {
67
+ bootstrapped: true,
68
+ status: stackStatus,
69
+ warning: `CDKToolkit stack is in state: ${stackStatus}. This may cause deployment issues.`,
70
+ };
71
+ }
72
+ return {
73
+ bootstrapped: true,
74
+ status: stackStatus,
75
+ };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ bootstrapped: false,
80
+ message: `Could not verify CDK bootstrap status: ${error.message}`,
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * Attempt to infer configuration from catalog
86
+ * Non-fatal - returns success flag and inferred values
87
+ */
88
+ async function inferConfiguration(catalogUrl) {
89
+ try {
90
+ // Normalize URL
91
+ const normalizedUrl = catalogUrl.startsWith("http")
92
+ ? catalogUrl
93
+ : `https://${catalogUrl}`;
94
+ const result = await inferStackConfig(normalizedUrl);
95
+ return {
96
+ success: true,
97
+ inferredVars: result.inferredVars,
98
+ };
99
+ }
100
+ catch (error) {
101
+ return {
102
+ success: false,
103
+ inferredVars: {},
104
+ error: error.message,
105
+ };
106
+ }
107
+ }
108
+ /**
109
+ * Create CDK app and stack (synthesis only, no deployment)
110
+ * Pure function - returns app and stack objects
111
+ */
112
+ function createStack(config) {
113
+ const app = new cdk.App();
114
+ const stack = new benchling_webhook_stack_1.BenchlingWebhookStack(app, "BenchlingWebhookStack", {
115
+ env: {
116
+ account: config.cdkAccount,
117
+ region: config.cdkRegion,
118
+ },
119
+ bucketName: config.quiltUserBucket,
120
+ queueName: config.queueName,
121
+ environment: "production",
122
+ prefix: config.pkgPrefix || "benchling",
123
+ benchlingClientId: config.benchlingClientId,
124
+ benchlingClientSecret: config.benchlingClientSecret,
125
+ benchlingTenant: config.benchlingTenant,
126
+ quiltCatalog: config.quiltCatalog,
127
+ quiltDatabase: config.quiltDatabase,
128
+ webhookAllowList: config.webhookAllowList,
129
+ logLevel: config.logLevel || "INFO",
130
+ createEcrRepository: config.createEcrRepository === "true",
131
+ ecrRepositoryName: config.ecrRepositoryName || "quiltdata/benchling",
132
+ });
133
+ return {
134
+ app,
135
+ stack,
136
+ stackName: stack.stackName,
137
+ stackId: stack.stackId,
138
+ };
139
+ }
140
+ /**
141
+ * DEPRECATED: Legacy getConfig function for backwards compatibility
142
+ * This combines user-provided values from .env with inferred values from the Quilt catalog.
143
+ * User values always take precedence over inferred values.
144
+ */
145
+ async function legacyGetConfig() {
146
+ const userEnv = process.env;
147
+ let inferredEnv = {};
148
+ // If QUILT_CATALOG is provided, try to infer additional configuration
149
+ if (userEnv.QUILT_CATALOG) {
150
+ try {
151
+ console.log(`Inferring configuration from catalog: ${userEnv.QUILT_CATALOG}`);
152
+ const result = await inferStackConfig(`https://${userEnv.QUILT_CATALOG.replace(/^https?:\/\//, "")}`);
153
+ inferredEnv = result.inferredVars;
154
+ console.log("✓ Successfully inferred stack configuration\n");
155
+ }
156
+ catch (error) {
157
+ console.error(`Warning: Could not infer configuration from catalog: ${error.message}`);
158
+ console.error("Falling back to environment variables only.\n");
159
+ }
160
+ }
161
+ // Merge: user env takes precedence over inferred values
162
+ const config = { ...inferredEnv, ...userEnv };
163
+ // Validate required user-provided values
164
+ const requiredUserVars = [
165
+ "QUILT_CATALOG",
166
+ "QUILT_USER_BUCKET",
167
+ "BENCHLING_CLIENT_ID",
168
+ "BENCHLING_CLIENT_SECRET",
169
+ "BENCHLING_TENANT",
170
+ ];
171
+ const missingVars = requiredUserVars.filter((varName) => !config[varName]);
172
+ if (missingVars.length > 0) {
173
+ console.error("Error: Missing required environment variables:");
174
+ missingVars.forEach((varName) => {
175
+ console.error(` - ${varName}`);
176
+ });
177
+ console.error("\nPlease set these variables in your .env file.");
178
+ console.error("See env.template for guidance.");
179
+ process.exit(1);
180
+ }
181
+ // Validate inferred values are present
182
+ const requiredInferredVars = [
183
+ "CDK_DEFAULT_ACCOUNT",
184
+ "CDK_DEFAULT_REGION",
185
+ "QUEUE_NAME",
186
+ "SQS_QUEUE_URL",
187
+ "QUILT_DATABASE",
188
+ ];
189
+ const missingInferredVars = requiredInferredVars.filter((varName) => !config[varName]);
190
+ if (missingInferredVars.length > 0) {
191
+ console.error("Error: Could not infer required configuration:");
192
+ missingInferredVars.forEach((varName) => {
193
+ console.error(` - ${varName}`);
194
+ });
195
+ console.error("\nThese values should be automatically inferred from your Quilt catalog.");
196
+ console.error("Please ensure:");
197
+ console.error(" 1. QUILT_CATALOG is set correctly");
198
+ console.error(" 2. Your AWS credentials have CloudFormation read permissions");
199
+ console.error(" 3. The Quilt stack is deployed and accessible");
200
+ console.error("\nAlternatively, you can manually set these values in your .env file.");
201
+ process.exit(1);
202
+ }
203
+ // Validate conditional requirements
204
+ if (config.ENABLE_WEBHOOK_VERIFICATION !== "false" &&
205
+ !config.BENCHLING_APP_DEFINITION_ID) {
206
+ console.error("Error: BENCHLING_APP_DEFINITION_ID is required when webhook verification is enabled.");
207
+ console.error("Either set BENCHLING_APP_DEFINITION_ID or set ENABLE_WEBHOOK_VERIFICATION=false");
208
+ process.exit(1);
209
+ }
210
+ return config;
211
+ }
212
+ /**
213
+ * DEPRECATED: Legacy main function for backwards compatibility
214
+ * Use createStack() + CDK CLI for new code
215
+ */
216
+ async function legacyMain() {
217
+ const config = await legacyGetConfig();
218
+ // Check bootstrap
219
+ const bootstrapStatus = await checkCdkBootstrap(config.CDK_DEFAULT_ACCOUNT, config.CDK_DEFAULT_REGION);
220
+ if (!bootstrapStatus.bootstrapped) {
221
+ console.error("\n❌ CDK Bootstrap Error");
222
+ console.error("=".repeat(80));
223
+ console.error(bootstrapStatus.message);
224
+ console.error("\nTo bootstrap CDK, run:");
225
+ console.error(` ${bootstrapStatus.command}`);
226
+ console.error("=".repeat(80));
227
+ process.exit(1);
228
+ }
229
+ if (bootstrapStatus.warning) {
230
+ console.error("\n⚠️ CDK Bootstrap Warning");
231
+ console.error("=".repeat(80));
232
+ console.error(bootstrapStatus.warning);
233
+ console.error("=".repeat(80));
234
+ }
235
+ else {
236
+ console.log(`✓ CDK is bootstrapped (CDKToolkit stack: ${bootstrapStatus.status})\n`);
237
+ }
238
+ // Create stack
239
+ const app = new cdk.App();
240
+ new benchling_webhook_stack_1.BenchlingWebhookStack(app, "BenchlingWebhookStack", {
241
+ env: {
242
+ account: config.CDK_DEFAULT_ACCOUNT,
243
+ region: config.CDK_DEFAULT_REGION,
244
+ },
245
+ bucketName: config.QUILT_USER_BUCKET, // User's data bucket
246
+ queueName: config.QUEUE_NAME,
247
+ environment: "production",
248
+ prefix: config.PKG_PREFIX || "benchling",
249
+ benchlingClientId: config.BENCHLING_CLIENT_ID,
250
+ benchlingClientSecret: config.BENCHLING_CLIENT_SECRET,
251
+ benchlingTenant: config.BENCHLING_TENANT,
252
+ quiltCatalog: config.QUILT_CATALOG,
253
+ quiltDatabase: config.QUILT_DATABASE,
254
+ webhookAllowList: config.WEBHOOK_ALLOW_LIST,
255
+ logLevel: config.LOG_LEVEL || "INFO",
256
+ // ECR repository configuration
257
+ createEcrRepository: config.CREATE_ECR_REPOSITORY === "true",
258
+ ecrRepositoryName: config.ECR_REPOSITORY_NAME || "quiltdata/benchling",
259
+ });
260
+ }
261
+ // Only run if called directly (not imported)
262
+ if (require.main === module) {
263
+ legacyMain().catch((error) => {
264
+ console.error("Fatal error during CDK synthesis:", error);
265
+ process.exit(1);
266
+ });
267
+ }
268
+ //# sourceMappingURL=benchling-webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchling-webhook.js","sourceRoot":"","sources":["../../bin/benchling-webhook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const deploy_1 = require("./commands/deploy");
10
+ const init_1 = require("./commands/init");
11
+ const validate_1 = require("./commands/validate");
12
+ // Load package.json for version
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
14
+ const pkg = require("../package.json");
15
+ const program = new commander_1.Command();
16
+ program
17
+ .name("benchling-webhook")
18
+ .description("Benchling Webhook Integration for Quilt - Deploy lab notebook integration to AWS")
19
+ .version(pkg.version, "-v, --version", "Display version number")
20
+ .helpOption("-h, --help", "Display help for command");
21
+ // Deploy command (default)
22
+ program
23
+ .command("deploy", { isDefault: true })
24
+ .description("Deploy the CDK stack to AWS")
25
+ .option("--catalog <url>", "Quilt catalog URL")
26
+ .option("--bucket <name>", "S3 bucket for data")
27
+ .option("--tenant <name>", "Benchling tenant")
28
+ .option("--client-id <id>", "Benchling OAuth client ID")
29
+ .option("--client-secret <secret>", "Benchling OAuth client secret")
30
+ .option("--app-id <id>", "Benchling app definition ID")
31
+ .option("--env-file <path>", "Path to .env file", ".env")
32
+ .option("--no-bootstrap-check", "Skip CDK bootstrap verification")
33
+ .option("--require-approval <level>", "CDK approval level", "never")
34
+ .option("--profile <name>", "AWS profile to use")
35
+ .option("--region <region>", "AWS region to deploy to")
36
+ .option("--yes", "Skip confirmation prompts")
37
+ .action(async (options) => {
38
+ try {
39
+ await (0, deploy_1.deployCommand)(options);
40
+ }
41
+ catch (error) {
42
+ console.error(chalk_1.default.red(error.message));
43
+ process.exit(1);
44
+ }
45
+ });
46
+ // Init command
47
+ program
48
+ .command("init")
49
+ .description("Initialize configuration interactively")
50
+ .option("--output <path>", "Output file path", ".env")
51
+ .option("--force", "Overwrite existing file")
52
+ .option("--minimal", "Only prompt for required values")
53
+ .option("--infer", "Attempt to infer values from catalog")
54
+ .action(async (options) => {
55
+ try {
56
+ await (0, init_1.initCommand)(options);
57
+ }
58
+ catch (error) {
59
+ console.error(chalk_1.default.red(error.message));
60
+ process.exit(1);
61
+ }
62
+ });
63
+ // Validate command
64
+ program
65
+ .command("validate")
66
+ .description("Validate configuration without deploying")
67
+ .option("--env-file <path>", "Path to .env file", ".env")
68
+ .option("--verbose", "Show detailed validation information")
69
+ .action(async (options) => {
70
+ try {
71
+ await (0, validate_1.validateCommand)(options);
72
+ }
73
+ catch (error) {
74
+ console.error(chalk_1.default.red(error.message));
75
+ process.exit(1);
76
+ }
77
+ });
78
+ // Show help when no command provided
79
+ if (!process.argv.slice(2).length) {
80
+ program.outputHelp();
81
+ }
82
+ program.parse();
83
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../bin/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ConfigOptions } from "../../lib/utils/config";
2
+ export declare function deployCommand(options: ConfigOptions & {
3
+ yes?: boolean;
4
+ bootstrapCheck?: boolean;
5
+ requireApproval?: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"AAKA,OAAO,EAMH,KAAK,aAAa,EACrB,MAAM,wBAAwB,CAAC;AAOhC,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuKjJ"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deployCommand = deployCommand;
7
+ const child_process_1 = require("child_process");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const boxen_1 = __importDefault(require("boxen"));
11
+ const enquirer_1 = require("enquirer");
12
+ const config_1 = require("../../lib/utils/config");
13
+ const benchling_webhook_1 = require("../benchling-webhook");
14
+ async function deployCommand(options) {
15
+ console.log((0, boxen_1.default)(chalk_1.default.bold("Benchling Webhook Deployment"), {
16
+ padding: 1,
17
+ borderColor: "blue",
18
+ borderStyle: "round",
19
+ }));
20
+ console.log();
21
+ // 1. Load configuration
22
+ const spinner = (0, ora_1.default)("Loading configuration...").start();
23
+ let config = (0, config_1.loadConfigSync)(options);
24
+ // 2. Attempt inference if catalog is available
25
+ if (config.quiltCatalog) {
26
+ spinner.text = "Inferring configuration from catalog...";
27
+ const inferenceResult = await (0, benchling_webhook_1.inferConfiguration)(config.quiltCatalog);
28
+ if (inferenceResult.success) {
29
+ config = (0, config_1.mergeInferredConfig)(config, inferenceResult.inferredVars);
30
+ spinner.succeed("Configuration loaded and inferred");
31
+ }
32
+ else {
33
+ spinner.warn(`Configuration loaded (inference failed: ${inferenceResult.error})`);
34
+ }
35
+ }
36
+ else {
37
+ spinner.succeed("Configuration loaded");
38
+ }
39
+ // 3. Validate configuration
40
+ spinner.start("Validating configuration...");
41
+ const validation = (0, config_1.validateConfig)(config);
42
+ if (!validation.valid) {
43
+ spinner.fail("Configuration validation failed");
44
+ console.log();
45
+ console.error(chalk_1.default.red.bold("❌ Configuration Error\n"));
46
+ console.error((0, config_1.formatValidationErrors)(validation));
47
+ console.log(chalk_1.default.yellow("To fix this, you can:"));
48
+ console.log(" 1. Run interactive setup: " + chalk_1.default.cyan("npx @quiltdata/benchling-webhook init"));
49
+ console.log(" 2. Create/edit .env file with required values");
50
+ console.log(" 3. Pass values as CLI options");
51
+ console.log();
52
+ console.log("For help: " + chalk_1.default.cyan("npx @quiltdata/benchling-webhook --help"));
53
+ process.exit(1);
54
+ }
55
+ spinner.succeed("Configuration validated");
56
+ if (validation.warnings.length > 0) {
57
+ console.log();
58
+ for (const warning of validation.warnings) {
59
+ console.log(chalk_1.default.yellow(` ⚠ ${warning}`));
60
+ }
61
+ }
62
+ // 4. Check CDK bootstrap
63
+ if (options.bootstrapCheck !== false) {
64
+ spinner.start("Checking CDK bootstrap status...");
65
+ const bootstrapStatus = await (0, benchling_webhook_1.checkCdkBootstrap)(config.cdkAccount, config.cdkRegion);
66
+ if (!bootstrapStatus.bootstrapped) {
67
+ spinner.fail("CDK is not bootstrapped");
68
+ console.log();
69
+ console.error(chalk_1.default.red.bold("❌ CDK Bootstrap Error\n"));
70
+ console.error(bootstrapStatus.message);
71
+ console.log();
72
+ console.log("To bootstrap CDK, run:");
73
+ console.log(chalk_1.default.cyan(` ${bootstrapStatus.command}`));
74
+ console.log();
75
+ console.log(chalk_1.default.dim("What is CDK bootstrap?"));
76
+ console.log(chalk_1.default.dim(" It creates necessary AWS resources (S3 bucket, IAM roles) that CDK"));
77
+ console.log(chalk_1.default.dim(" needs to deploy CloudFormation stacks. This is a one-time setup per"));
78
+ console.log(chalk_1.default.dim(" AWS account/region combination."));
79
+ console.log();
80
+ process.exit(1);
81
+ }
82
+ if (bootstrapStatus.warning) {
83
+ spinner.warn(`CDK bootstrap: ${bootstrapStatus.warning}`);
84
+ }
85
+ else {
86
+ spinner.succeed(`CDK is bootstrapped (${bootstrapStatus.status})`);
87
+ }
88
+ }
89
+ // 5. Display deployment plan
90
+ console.log();
91
+ console.log(chalk_1.default.bold("Deployment Plan"));
92
+ console.log(chalk_1.default.gray("─".repeat(80)));
93
+ console.log(` ${chalk_1.default.bold("Stack:")} BenchlingWebhookStack`);
94
+ console.log(` ${chalk_1.default.bold("Account:")} ${config.cdkAccount}`);
95
+ console.log(` ${chalk_1.default.bold("Region:")} ${config.cdkRegion}`);
96
+ console.log(` ${chalk_1.default.bold("Catalog:")} ${config.quiltCatalog}`);
97
+ console.log(` ${chalk_1.default.bold("Bucket:")} ${config.quiltUserBucket}`);
98
+ console.log(chalk_1.default.gray("─".repeat(80)));
99
+ console.log();
100
+ // 6. Confirm (unless --yes)
101
+ if (!options.yes) {
102
+ const response = await (0, enquirer_1.prompt)({
103
+ type: "confirm",
104
+ name: "proceed",
105
+ message: "Proceed with deployment?",
106
+ initial: true,
107
+ });
108
+ if (!response.proceed) {
109
+ console.log(chalk_1.default.yellow("Deployment cancelled"));
110
+ process.exit(0);
111
+ }
112
+ console.log();
113
+ }
114
+ // 7. Create stack (synthesis)
115
+ spinner.start("Synthesizing CDK stack...");
116
+ try {
117
+ const result = (0, benchling_webhook_1.createStack)(config);
118
+ spinner.succeed("Stack synthesized");
119
+ // 8. Deploy using CDK CLI
120
+ spinner.start("Deploying to AWS (this may take a few minutes)...");
121
+ spinner.stop(); // Stop spinner for CDK output
122
+ console.log(); // New line for CDK output
123
+ // Execute CDK deploy directly - the app.synth() will be called by CDK
124
+ // We need to synthesize to cdk.out and then deploy
125
+ result.app.synth();
126
+ const cdkCommand = `npx cdk deploy --require-approval ${options.requireApproval || "never"} --app cdk.out`;
127
+ (0, child_process_1.execSync)(cdkCommand, {
128
+ stdio: "inherit",
129
+ env: {
130
+ ...process.env,
131
+ CDK_DEFAULT_ACCOUNT: config.cdkAccount,
132
+ CDK_DEFAULT_REGION: config.cdkRegion,
133
+ },
134
+ });
135
+ spinner.succeed("Stack deployed successfully");
136
+ // 9. Success message
137
+ console.log();
138
+ console.log((0, boxen_1.default)(`${chalk_1.default.green.bold("✓ Deployment completed successfully!")}\n\n` +
139
+ `Stack: ${chalk_1.default.cyan(result.stackName)}\n` +
140
+ `Region: ${chalk_1.default.cyan(config.cdkRegion)}\n\n` +
141
+ `${chalk_1.default.bold("Next steps:")}\n` +
142
+ " 1. Configure your Benchling app\n" +
143
+ " 2. Set the webhook URL from AWS console\n" +
144
+ " 3. Test the integration\n\n" +
145
+ `${chalk_1.default.dim("For more info: https://github.com/quiltdata/benchling-webhook#readme")}`, { padding: 1, borderColor: "green", borderStyle: "round" }));
146
+ }
147
+ catch (error) {
148
+ spinner.fail("Deployment failed");
149
+ console.error();
150
+ console.error(chalk_1.default.red(error.message));
151
+ process.exit(1);
152
+ }
153
+ }
154
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../bin/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface InitOptions {
2
+ output?: string;
3
+ force?: boolean;
4
+ minimal?: boolean;
5
+ infer?: boolean;
6
+ }
7
+ export declare function initCommand(options: InitOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../bin/commands/init.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkLrE"}