@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,410 @@
1
+ "use strict";
2
+ /**
3
+ * Stack inference utilities for discovering CloudFormation stacks
4
+ * and extracting configuration from Quilt catalogs
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.fetchJson = fetchJson;
41
+ exports.extractBucketName = extractBucketName;
42
+ exports.findStackByResource = findStackByResource;
43
+ exports.searchStacksByPattern = searchStacksByPattern;
44
+ exports.getStackDetails = getStackDetails;
45
+ exports.getAwsAccountId = getAwsAccountId;
46
+ exports.extractApiGatewayId = extractApiGatewayId;
47
+ exports.inferStackPrefix = inferStackPrefix;
48
+ exports.findStack = findStack;
49
+ exports.buildInferredConfig = buildInferredConfig;
50
+ exports.inferStackConfig = inferStackConfig;
51
+ const child_process_1 = require("child_process");
52
+ /**
53
+ * Fetch JSON from a URL using native Node.js modules
54
+ */
55
+ async function fetchJson(url) {
56
+ const https = await Promise.resolve().then(() => __importStar(require("https")));
57
+ const http = await Promise.resolve().then(() => __importStar(require("http")));
58
+ return new Promise((resolve, reject) => {
59
+ const parsedUrl = new URL(url);
60
+ const client = parsedUrl.protocol === "https:" ? https : http;
61
+ const options = {
62
+ headers: {
63
+ "User-Agent": "benchling-webhook-config-tool/1.0",
64
+ Accept: "application/json",
65
+ },
66
+ };
67
+ client
68
+ .get(url, options, (res) => {
69
+ let data = "";
70
+ if (res.statusCode !== 200) {
71
+ reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
72
+ return;
73
+ }
74
+ res.on("data", (chunk) => {
75
+ data += chunk.toString();
76
+ });
77
+ res.on("end", () => {
78
+ try {
79
+ resolve(JSON.parse(data));
80
+ }
81
+ catch (e) {
82
+ const error = e;
83
+ reject(new Error(`Failed to parse JSON: ${error.message}`));
84
+ }
85
+ });
86
+ })
87
+ .on("error", reject);
88
+ });
89
+ }
90
+ /**
91
+ * Extract bucket name from S3 ARN or bucket name string
92
+ */
93
+ function extractBucketName(bucketString) {
94
+ if (bucketString.startsWith("arn:aws:s3:::")) {
95
+ return bucketString.replace("arn:aws:s3:::", "").split("/")[0];
96
+ }
97
+ return bucketString.split("/")[0];
98
+ }
99
+ /**
100
+ * Try to find CloudFormation stack by searching for resource
101
+ */
102
+ function findStackByResource(region, resourceId) {
103
+ try {
104
+ const result = (0, child_process_1.execSync)(`aws cloudformation describe-stack-resources --region ${region} --physical-resource-id "${resourceId}" --query "StackResources[0].StackName" --output text 2>/dev/null`, { encoding: "utf-8" });
105
+ const stackName = result.trim();
106
+ return stackName && stackName !== "None" ? stackName : null;
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ /**
113
+ * Search for stacks by name pattern
114
+ */
115
+ function searchStacksByPattern(region, pattern) {
116
+ try {
117
+ const result = (0, child_process_1.execSync)(`aws cloudformation list-stacks --region ${region} --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE UPDATE_ROLLBACK_COMPLETE --query "StackSummaries[?contains(StackName, '${pattern}')].StackName" --output json`, { encoding: "utf-8" });
118
+ return JSON.parse(result);
119
+ }
120
+ catch {
121
+ return [];
122
+ }
123
+ }
124
+ /**
125
+ * Get stack outputs and parameters
126
+ */
127
+ function getStackDetails(region, stackName) {
128
+ try {
129
+ const outputsResult = (0, child_process_1.execSync)(`aws cloudformation describe-stacks --region ${region} --stack-name "${stackName}" --query "Stacks[0].Outputs" --output json`, { encoding: "utf-8" });
130
+ const paramsResult = (0, child_process_1.execSync)(`aws cloudformation describe-stacks --region ${region} --stack-name "${stackName}" --query "Stacks[0].Parameters" --output json`, { encoding: "utf-8" });
131
+ return {
132
+ outputs: JSON.parse(outputsResult) || [],
133
+ parameters: JSON.parse(paramsResult) || [],
134
+ };
135
+ }
136
+ catch (error) {
137
+ console.error(`Warning: Could not get stack details: ${error.message}`);
138
+ return { outputs: [], parameters: [] };
139
+ }
140
+ }
141
+ /**
142
+ * Get AWS account ID
143
+ */
144
+ function getAwsAccountId() {
145
+ try {
146
+ const result = (0, child_process_1.execSync)("aws sts get-caller-identity --query Account --output text", {
147
+ encoding: "utf-8",
148
+ });
149
+ return result.trim();
150
+ }
151
+ catch {
152
+ return null;
153
+ }
154
+ }
155
+ /**
156
+ * Extract API Gateway ID from endpoint URL
157
+ */
158
+ function extractApiGatewayId(endpoint) {
159
+ const match = endpoint.match(/https:\/\/([a-z0-9]+)\.execute-api/);
160
+ return match ? match[1] : null;
161
+ }
162
+ /**
163
+ * Extract stack name prefix from bucket names
164
+ */
165
+ function inferStackPrefix(analyticsBucket, serviceBucket) {
166
+ const patterns = [analyticsBucket, serviceBucket]
167
+ .filter(Boolean)
168
+ .map((bucket) => {
169
+ const parts = bucket.split("-");
170
+ if (parts.length >= 3) {
171
+ return parts.slice(0, 2).join("-");
172
+ }
173
+ return parts[0];
174
+ });
175
+ return patterns[0] || "quilt";
176
+ }
177
+ /**
178
+ * Find CloudFormation stack using multiple search strategies
179
+ */
180
+ function findStack(region, apiGatewayId, analyticsBucket, serviceBucket, stackPrefix, verbose = true) {
181
+ let stackName = null;
182
+ // Method 1: Search by API Gateway ID
183
+ if (apiGatewayId) {
184
+ if (verbose)
185
+ console.log(`Searching by API Gateway ID: ${apiGatewayId}...`);
186
+ stackName = findStackByResource(region, apiGatewayId);
187
+ if (stackName && verbose) {
188
+ console.log(`✓ Found stack by API Gateway: ${stackName}`);
189
+ }
190
+ }
191
+ // Method 2: Search by Analytics Bucket
192
+ if (!stackName && analyticsBucket) {
193
+ if (verbose)
194
+ console.log(`Searching by Analytics Bucket: ${analyticsBucket}...`);
195
+ stackName = findStackByResource(region, analyticsBucket);
196
+ if (stackName && verbose) {
197
+ console.log(`✓ Found stack by Analytics Bucket: ${stackName}`);
198
+ }
199
+ }
200
+ // Method 3: Search by Service Bucket
201
+ if (!stackName && serviceBucket) {
202
+ if (verbose)
203
+ console.log(`Searching by Service Bucket: ${serviceBucket}...`);
204
+ stackName = findStackByResource(region, serviceBucket);
205
+ if (stackName && verbose) {
206
+ console.log(`✓ Found stack by Service Bucket: ${stackName}`);
207
+ }
208
+ }
209
+ // Method 4: Search by name pattern
210
+ if (!stackName && stackPrefix) {
211
+ if (verbose)
212
+ console.log(`Searching by stack name pattern: *${stackPrefix}*...`);
213
+ const stacks = searchStacksByPattern(region, stackPrefix);
214
+ if (stacks.length > 0) {
215
+ if (verbose) {
216
+ console.log(`✓ Found ${stacks.length} potential stack(s):`);
217
+ stacks.forEach((name, i) => console.log(` ${i + 1}. ${name}`));
218
+ }
219
+ if (stacks.length === 1) {
220
+ stackName = stacks[0];
221
+ if (verbose)
222
+ console.log(` Using: ${stackName}`);
223
+ }
224
+ else {
225
+ if (verbose) {
226
+ console.log("");
227
+ console.log("⚠️ Multiple stacks found. Using first match: " + stacks[0]);
228
+ console.log(" If this is incorrect, manually verify the stack name.");
229
+ }
230
+ stackName = stacks[0];
231
+ }
232
+ }
233
+ }
234
+ return stackName;
235
+ }
236
+ /**
237
+ * Build inferred configuration from stack details
238
+ */
239
+ function buildInferredConfig(config, stackName, stackDetails, region, accountId, catalogDomain) {
240
+ const vars = {};
241
+ // Extract catalog domain
242
+ const catalogMatch = catalogDomain.match(/https?:\/\/([^/]+)/);
243
+ const catalog = catalogMatch ? catalogMatch[1] : "";
244
+ // AWS Configuration
245
+ if (accountId) {
246
+ vars.CDK_DEFAULT_ACCOUNT = accountId;
247
+ }
248
+ vars.CDK_DEFAULT_REGION = region;
249
+ vars.AWS_REGION = region;
250
+ // Quilt Configuration
251
+ if (catalog) {
252
+ vars.QUILT_CATALOG = catalog;
253
+ }
254
+ // Try to infer bucket and database from stack or config
255
+ const serviceBucket = extractBucketName(config.serviceBucket);
256
+ // Find data bucket from stack outputs or use service bucket as fallback
257
+ const bucketOutput = stackDetails.outputs.find((o) => o.OutputKey === "Bucket" || o.OutputKey === "DataBucket");
258
+ const dataBucket = bucketOutput?.OutputValue || serviceBucket;
259
+ if (dataBucket) {
260
+ vars.QUILT_USER_BUCKET = `${dataBucket} # Verify this is YOUR data bucket`;
261
+ }
262
+ // Try to find database name from stack
263
+ const databaseOutput = stackDetails.outputs.find((o) => o.OutputKey === "Database" ||
264
+ o.OutputKey === "AthenaDatabase" ||
265
+ o.OutputKey === "UserAthenaDatabase");
266
+ if (databaseOutput) {
267
+ vars.QUILT_DATABASE = databaseOutput.OutputValue;
268
+ }
269
+ else if (catalog) {
270
+ // Infer database name from catalog (common pattern)
271
+ const dbGuess = catalog.replace(/[.-]/g, "_") + "_db";
272
+ vars.QUILT_DATABASE = `${dbGuess} # VERIFY THIS - inferred from catalog name`;
273
+ }
274
+ // SQS Queue
275
+ const queueOutput = stackDetails.outputs.find((o) => o.OutputKey === "PackagerQueue" || o.OutputKey.includes("Queue"));
276
+ if (queueOutput) {
277
+ const queueValue = queueOutput.OutputValue;
278
+ // Parse queue name from ARN or URL
279
+ let queueName;
280
+ if (queueValue.startsWith("arn:aws:sqs:")) {
281
+ // ARN format: arn:aws:sqs:region:account:queue-name
282
+ queueName = queueValue.split(":").pop();
283
+ }
284
+ else if (queueValue.includes("sqs.")) {
285
+ // URL format: https://sqs.region.amazonaws.com/account/queue-name
286
+ queueName = queueValue.split("/").pop();
287
+ }
288
+ else {
289
+ // Assume it's just the queue name
290
+ queueName = queueValue;
291
+ }
292
+ vars.QUEUE_NAME = queueName;
293
+ // Build SQS URL
294
+ if (accountId && region && queueName) {
295
+ vars.SQS_QUEUE_URL = `https://sqs.${region}.amazonaws.com/${accountId}/${queueName}`;
296
+ }
297
+ }
298
+ else if (stackName) {
299
+ vars.QUEUE_NAME = `${stackName}-PackagerQueue-XXXXX # VERIFY THIS - not found in outputs`;
300
+ }
301
+ // Additional useful info
302
+ if (stackName) {
303
+ vars["# CloudFormation Stack"] = stackName;
304
+ }
305
+ if (config.stackVersion) {
306
+ vars["# Stack Version"] = config.stackVersion;
307
+ }
308
+ vars["# API Gateway Endpoint"] = config.apiGatewayEndpoint;
309
+ return vars;
310
+ }
311
+ /**
312
+ * Parse config.json and infer stack information
313
+ */
314
+ async function inferStackConfig(catalogUrl, verbose = true) {
315
+ if (verbose) {
316
+ console.log(`Fetching config from: ${catalogUrl}`);
317
+ console.log("");
318
+ }
319
+ // Normalize URL and construct config.json URL
320
+ let configUrl = catalogUrl.replace(/\/$/, "");
321
+ if (!configUrl.endsWith("/config.json")) {
322
+ configUrl += "/config.json";
323
+ }
324
+ // Fetch config.json
325
+ let config;
326
+ try {
327
+ config = (await fetchJson(configUrl));
328
+ }
329
+ catch (error) {
330
+ // If direct fetch fails, try with just /config.json path
331
+ const err = error;
332
+ if (err.message.includes("403") || err.message.includes("404")) {
333
+ const baseUrl = catalogUrl.match(/https?:\/\/[^/]+/)?.[0];
334
+ if (baseUrl) {
335
+ if (verbose)
336
+ console.log(`Direct fetch failed, trying: ${baseUrl}/config.json`);
337
+ config = (await fetchJson(`${baseUrl}/config.json`));
338
+ }
339
+ else {
340
+ throw error;
341
+ }
342
+ }
343
+ else {
344
+ throw error;
345
+ }
346
+ }
347
+ if (verbose) {
348
+ console.log("✓ Successfully fetched config.json");
349
+ console.log("");
350
+ console.log("Configuration Summary:");
351
+ console.log("=".repeat(80));
352
+ console.log(`Region: ${config.region}`);
353
+ console.log(`API Gateway: ${config.apiGatewayEndpoint}`);
354
+ console.log(`Analytics Bucket: ${config.analyticsBucket}`);
355
+ console.log(`Service Bucket: ${config.serviceBucket}`);
356
+ console.log(`Stack Version: ${config.stackVersion}`);
357
+ console.log("=".repeat(80));
358
+ console.log("");
359
+ }
360
+ // Extract identifiable resources
361
+ const region = config.region;
362
+ const apiGatewayId = extractApiGatewayId(config.apiGatewayEndpoint);
363
+ const analyticsBucket = extractBucketName(config.analyticsBucket);
364
+ const serviceBucket = extractBucketName(config.serviceBucket);
365
+ const stackPrefix = inferStackPrefix(analyticsBucket, serviceBucket);
366
+ if (verbose) {
367
+ console.log("Searching for CloudFormation stack...");
368
+ console.log(` Region: ${region}`);
369
+ console.log(` API Gateway ID: ${apiGatewayId || "not found"}`);
370
+ console.log(` Inferred stack prefix: ${stackPrefix}`);
371
+ console.log("");
372
+ }
373
+ // Try to find the stack
374
+ const stackName = findStack(region, apiGatewayId, analyticsBucket, serviceBucket, stackPrefix, verbose);
375
+ if (verbose) {
376
+ console.log("");
377
+ if (!stackName) {
378
+ console.log("⚠️ Could not automatically find CloudFormation stack.");
379
+ console.log(" You may need to manually specify stack resources.");
380
+ console.log("");
381
+ }
382
+ }
383
+ // Get stack details if found
384
+ let stackDetails = { outputs: [], parameters: [] };
385
+ if (stackName) {
386
+ if (verbose) {
387
+ console.log(`Fetching stack details for: ${stackName}...`);
388
+ }
389
+ stackDetails = getStackDetails(region, stackName);
390
+ if (verbose) {
391
+ console.log(`✓ Retrieved ${stackDetails.outputs.length} outputs and ${stackDetails.parameters.length} parameters`);
392
+ console.log("");
393
+ }
394
+ }
395
+ // Get AWS account ID
396
+ const accountId = getAwsAccountId();
397
+ if (accountId && verbose) {
398
+ console.log(`✓ AWS Account ID: ${accountId}`);
399
+ console.log("");
400
+ }
401
+ // Build inferred environment variables
402
+ const inferredVars = buildInferredConfig(config, stackName, stackDetails, region, accountId, catalogUrl.replace(/\/config\.json$/, ""));
403
+ return {
404
+ config,
405
+ stackName,
406
+ stackDetails,
407
+ inferredVars,
408
+ };
409
+ }
410
+ //# sourceMappingURL=stack-inference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-inference.js","sourceRoot":"","sources":["../../../lib/utils/stack-inference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@quiltdata/benchling-webhook",
3
+ "version": "0.5.0-20251029T180511Z",
4
+ "description": "AWS CDK deployment for Benchling webhook processing using Fargate - Deploy directly with npx",
5
+ "main": "dist/lib/index.js",
6
+ "types": "dist/lib/index.d.ts",
7
+ "files": [
8
+ "dist/",
9
+ "README.md",
10
+ "LICENSE",
11
+ "env.template"
12
+ ],
13
+ "bin": {
14
+ "benchling-webhook": "./dist/bin/cli.js"
15
+ },
16
+ "scripts": {
17
+ "clean": "rm -rf cdk.out */{*.js,*.d.ts}",
18
+ "test": "NODE_ENV=test TMPDIR=./.tmp node --max-old-space-size=4096 ./node_modules/.bin/jest",
19
+ "cdk": "npm run test && npx cdk deploy --require-approval never",
20
+ "lint": "eslint . --ext .ts --fix",
21
+ "build": "tsc",
22
+ "prebuild": "rm -rf dist",
23
+ "postbuild": "chmod +x dist/bin/cli.js && cp bin/*.js dist/bin/ 2>/dev/null || true",
24
+ "synth": "npx cdk synth",
25
+ "logs": "node bin/check-logs.js",
26
+ "event": "node bin/send-event.js",
27
+ "check": "npm run cdk && npm run event && sleep 45 && npm run logs",
28
+ "docker:test": "make -C docker test",
29
+ "docker-push": "make -C docker push-local",
30
+ "docker-check": "make -C docker docker-validate",
31
+ "release": "npm run test && node bin/release.js",
32
+ "release:dev": "npm run test && node bin/release.js dev",
33
+ "notes": "bin/release-notes.sh \"$(jq -r .version package.json)\" \"712023778557.dkr.ecr.us-east-1.amazonaws.com/quiltdata/benchling:$(jq -r .version package.json)\" \"false\" \"$(jq -r .name package.json)\"",
34
+ "version": "node bin/version.js patch",
35
+ "version:patch": "npm run version -- patch",
36
+ "prepublishOnly": "npm run build"
37
+ },
38
+ "keywords": [
39
+ "benchling",
40
+ "webhook",
41
+ "aws",
42
+ "cdk",
43
+ "fargate",
44
+ "docker",
45
+ "quilt",
46
+ "cli",
47
+ "npx"
48
+ ],
49
+ "author": "Quilt Data",
50
+ "license": "Apache-2.0",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/quiltdata/benchling-webhook.git"
54
+ },
55
+ "devDependencies": {
56
+ "@eslint/js": "^9.22.0",
57
+ "@types/adm-zip": "^0.5.7",
58
+ "@types/aws-lambda": "^8.10.156",
59
+ "@types/jest": "^30.0.0",
60
+ "@types/node": "^24.0.0",
61
+ "@typescript-eslint/eslint-plugin": "^8.26.1",
62
+ "@typescript-eslint/parser": "^8.26.1",
63
+ "aws-cdk": "2.1031.0",
64
+ "dotenv": "^17.2.3",
65
+ "esbuild": "0.25.11",
66
+ "eslint": "^9.22.0",
67
+ "globals": "^16.0.0",
68
+ "jest": "^30.0.0",
69
+ "ts-jest": "^29.2.5",
70
+ "ts-node": "^10.9.2",
71
+ "typescript": "~5.9.0"
72
+ },
73
+ "dependencies": {
74
+ "@aws-sdk/client-s3": "^3.758.0",
75
+ "adm-zip": "^0.5.10",
76
+ "aws-cdk-lib": "2.221.0",
77
+ "aws-sdk": "^2.1574.0",
78
+ "boxen": "^5.1.2",
79
+ "chalk": "^4.1.2",
80
+ "commander": "^14.0.2",
81
+ "constructs": "^10.0.0",
82
+ "dotenv-expand": "^12.0.3",
83
+ "enquirer": "^2.4.1",
84
+ "ora": "^5.4.1"
85
+ },
86
+ "engines": {
87
+ "node": ">=18.0.0",
88
+ "npm": ">=9.0.0"
89
+ }
90
+ }
package/package.json CHANGED
@@ -1,36 +1,39 @@
1
1
  {
2
2
  "name": "@quiltdata/benchling-webhook",
3
- "version": "0.4.13",
4
- "description": "AWS CDK deployment for Benchling webhook processing using Fargate",
5
- "main": "lib/index.ts",
3
+ "version": "0.5.0-20251029T180511Z",
4
+ "description": "AWS CDK deployment for Benchling webhook processing using Fargate - Deploy directly with npx",
5
+ "main": "dist/lib/index.js",
6
+ "types": "dist/lib/index.d.ts",
7
+ "files": [
8
+ "dist/",
9
+ "README.md",
10
+ "LICENSE",
11
+ "env.template"
12
+ ],
6
13
  "bin": {
7
- "benchling-webhook": "bin/benchling-webhook.ts"
14
+ "benchling-webhook": "./dist/bin/cli.js"
8
15
  },
9
16
  "scripts": {
10
- "sync-version": "node bin/sync-version.js",
11
17
  "clean": "rm -rf cdk.out */{*.js,*.d.ts}",
12
18
  "test": "NODE_ENV=test TMPDIR=./.tmp node --max-old-space-size=4096 ./node_modules/.bin/jest",
13
19
  "cdk": "npm run test && npx cdk deploy --require-approval never",
14
20
  "lint": "eslint . --ext .ts --fix",
15
- "build": "tsc --noEmit",
16
- "watch": "tsc --noEmit -w",
21
+ "build": "tsc",
22
+ "prebuild": "rm -rf dist",
23
+ "postbuild": "chmod +x dist/bin/cli.js && cp bin/*.js dist/bin/ 2>/dev/null || true",
17
24
  "synth": "npx cdk synth",
18
- "diff": "npx cdk diff",
19
25
  "logs": "node bin/check-logs.js",
20
26
  "event": "node bin/send-event.js",
21
27
  "check": "npm run cdk && npm run event && sleep 45 && npm run logs",
22
- "get-env": "node bin/get-env.js",
23
- "dev": "npm run build && npm run docker:test && npm run lint",
24
28
  "docker:test": "make -C docker test",
25
29
  "docker-push": "make -C docker push-local",
26
30
  "docker-check": "make -C docker docker-validate",
27
- "release": "node bin/release.js",
28
- "release:dev": "node bin/release.js dev",
29
- "version:major": "node bin/version.js major",
30
- "version:minor": "node bin/version.js minor",
31
- "version:patch": "node bin/version.js patch",
32
- "version:dev": "node bin/version.js dev",
33
- "publish:manual": "node bin/publish-manual.js"
31
+ "release": "npm run test && node bin/release.js",
32
+ "release:dev": "npm run test && node bin/release.js dev",
33
+ "notes": "bin/release-notes.sh \"$(jq -r .version package.json)\" \"712023778557.dkr.ecr.us-east-1.amazonaws.com/quiltdata/benchling:$(jq -r .version package.json)\" \"false\" \"$(jq -r .name package.json)\"",
34
+ "version": "node bin/version.js patch",
35
+ "version:patch": "npm run version -- patch",
36
+ "prepublishOnly": "npm run build"
34
37
  },
35
38
  "keywords": [
36
39
  "benchling",
@@ -39,13 +42,15 @@
39
42
  "cdk",
40
43
  "fargate",
41
44
  "docker",
42
- "quilt"
45
+ "quilt",
46
+ "cli",
47
+ "npx"
43
48
  ],
44
49
  "author": "Quilt Data",
45
50
  "license": "Apache-2.0",
46
51
  "repository": {
47
52
  "type": "git",
48
- "url": "https://github.com/quiltdata/benchling-webhook.git"
53
+ "url": "git+https://github.com/quiltdata/benchling-webhook.git"
49
54
  },
50
55
  "devDependencies": {
51
56
  "@eslint/js": "^9.22.0",
@@ -70,7 +75,13 @@
70
75
  "adm-zip": "^0.5.10",
71
76
  "aws-cdk-lib": "2.221.0",
72
77
  "aws-sdk": "^2.1574.0",
73
- "constructs": "^10.0.0"
78
+ "boxen": "^5.1.2",
79
+ "chalk": "^4.1.2",
80
+ "commander": "^14.0.2",
81
+ "constructs": "^10.0.0",
82
+ "dotenv-expand": "^12.0.3",
83
+ "enquirer": "^2.4.1",
84
+ "ora": "^5.4.1"
74
85
  },
75
86
  "engines": {
76
87
  "node": ">=18.0.0",