@quiltdata/benchling-webhook 0.7.2-20251106T003353Z → 0.7.2

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 (78) hide show
  1. package/README.md +33 -159
  2. package/dist/bin/benchling-webhook.d.ts.map +1 -1
  3. package/dist/bin/benchling-webhook.js +2 -4
  4. package/dist/bin/benchling-webhook.js.map +1 -1
  5. package/dist/bin/commands/config-profiles.d.ts.map +1 -1
  6. package/dist/bin/commands/config-profiles.js +1 -2
  7. package/dist/bin/commands/config-profiles.js.map +1 -1
  8. package/dist/bin/commands/deploy.d.ts +1 -1
  9. package/dist/bin/commands/deploy.d.ts.map +1 -1
  10. package/dist/bin/commands/deploy.js +67 -9
  11. package/dist/bin/commands/deploy.js.map +1 -1
  12. package/dist/bin/commands/infer-quilt-config.d.ts +6 -15
  13. package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
  14. package/dist/bin/commands/infer-quilt-config.js +35 -64
  15. package/dist/bin/commands/infer-quilt-config.js.map +1 -1
  16. package/dist/bin/commands/manifest.d.ts +0 -11
  17. package/dist/bin/commands/manifest.d.ts.map +1 -1
  18. package/dist/bin/commands/manifest.js +8 -22
  19. package/dist/bin/commands/manifest.js.map +1 -1
  20. package/dist/bin/commands/setup-profile.d.ts.map +1 -1
  21. package/dist/bin/commands/setup-profile.js +15 -17
  22. package/dist/bin/commands/setup-profile.js.map +1 -1
  23. package/dist/bin/commands/setup-wizard.d.ts +0 -2
  24. package/dist/bin/commands/setup-wizard.d.ts.map +1 -1
  25. package/dist/bin/commands/setup-wizard.js +172 -414
  26. package/dist/bin/commands/setup-wizard.js.map +1 -1
  27. package/dist/bin/commands/sync-secrets.js +2 -2
  28. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
  29. package/dist/lib/benchling-webhook-stack.js +15 -1
  30. package/dist/lib/benchling-webhook-stack.js.map +1 -1
  31. package/dist/lib/configuration-saver.d.ts +0 -8
  32. package/dist/lib/configuration-saver.d.ts.map +1 -1
  33. package/dist/lib/configuration-saver.js +1 -18
  34. package/dist/lib/configuration-saver.js.map +1 -1
  35. package/dist/lib/fargate-service.d.ts +4 -2
  36. package/dist/lib/fargate-service.d.ts.map +1 -1
  37. package/dist/lib/fargate-service.js +25 -12
  38. package/dist/lib/fargate-service.js.map +1 -1
  39. package/dist/lib/types/config.d.ts +9 -70
  40. package/dist/lib/types/config.d.ts.map +1 -1
  41. package/dist/lib/types/config.js +2 -3
  42. package/dist/lib/types/config.js.map +1 -1
  43. package/dist/lib/utils/config-loader.d.ts.map +1 -1
  44. package/dist/lib/utils/config-loader.js +3 -2
  45. package/dist/lib/utils/config-loader.js.map +1 -1
  46. package/dist/lib/utils/config-resolver.d.ts +2 -2
  47. package/dist/lib/utils/config-resolver.d.ts.map +1 -1
  48. package/dist/lib/utils/config-resolver.js +14 -7
  49. package/dist/lib/utils/config-resolver.js.map +1 -1
  50. package/dist/lib/utils/config.d.ts +1 -1
  51. package/dist/lib/utils/config.d.ts.map +1 -1
  52. package/dist/lib/utils/config.js +7 -3
  53. package/dist/lib/utils/config.js.map +1 -1
  54. package/dist/lib/utils/sqs.d.ts +13 -0
  55. package/dist/lib/utils/sqs.d.ts.map +1 -0
  56. package/dist/lib/utils/sqs.js +22 -0
  57. package/dist/lib/utils/sqs.js.map +1 -0
  58. package/dist/lib/utils/stack-inference.d.ts.map +1 -1
  59. package/dist/lib/utils/stack-inference.js +8 -6
  60. package/dist/lib/utils/stack-inference.js.map +1 -1
  61. package/dist/lib/xdg-config.d.ts +3 -1
  62. package/dist/lib/xdg-config.d.ts.map +1 -1
  63. package/dist/lib/xdg-config.js +7 -1
  64. package/dist/lib/xdg-config.js.map +1 -1
  65. package/dist/package.json +4 -2
  66. package/dist/scripts/get-dev-version.d.ts +16 -0
  67. package/dist/scripts/get-dev-version.d.ts.map +1 -0
  68. package/dist/scripts/get-dev-version.js +57 -0
  69. package/dist/scripts/get-dev-version.js.map +1 -0
  70. package/package.json +4 -2
  71. package/dist/lib/xdg-cli-wrapper.d.ts +0 -113
  72. package/dist/lib/xdg-cli-wrapper.d.ts.map +0 -1
  73. package/dist/lib/xdg-cli-wrapper.js +0 -289
  74. package/dist/lib/xdg-cli-wrapper.js.map +0 -1
  75. package/dist/scripts/infer-quilt-config.d.ts +0 -47
  76. package/dist/scripts/infer-quilt-config.d.ts.map +0 -1
  77. package/dist/scripts/infer-quilt-config.js +0 -315
  78. package/dist/scripts/infer-quilt-config.js.map +0 -1
@@ -1,315 +0,0 @@
1
- #!/usr/bin/env ts-node
2
- "use strict";
3
- /**
4
- * Quilt Catalog Auto-Inference (v0.7.0)
5
- *
6
- * Automatically infers Quilt catalog configuration from:
7
- * 1. quilt3 CLI command (`quilt3 config`)
8
- * 2. AWS CloudFormation stack inspection
9
- * 3. Interactive catalog selection (if multiple catalogs available)
10
- *
11
- * Returns configuration in v0.7.0 ProfileConfig format.
12
- *
13
- * @module scripts/infer-quilt-config
14
- */
15
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- var desc = Object.getOwnPropertyDescriptor(m, k);
18
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
- desc = { enumerable: true, get: function() { return m[k]; } };
20
- }
21
- Object.defineProperty(o, k2, desc);
22
- }) : (function(o, m, k, k2) {
23
- if (k2 === undefined) k2 = k;
24
- o[k2] = m[k];
25
- }));
26
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
- Object.defineProperty(o, "default", { enumerable: true, value: v });
28
- }) : function(o, v) {
29
- o["default"] = v;
30
- });
31
- var __importStar = (this && this.__importStar) || (function () {
32
- var ownKeys = function(o) {
33
- ownKeys = Object.getOwnPropertyNames || function (o) {
34
- var ar = [];
35
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
- return ar;
37
- };
38
- return ownKeys(o);
39
- };
40
- return function (mod) {
41
- if (mod && mod.__esModule) return mod;
42
- var result = {};
43
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
- __setModuleDefault(result, mod);
45
- return result;
46
- };
47
- })();
48
- Object.defineProperty(exports, "__esModule", { value: true });
49
- exports.inferQuiltConfig = inferQuiltConfig;
50
- const child_process_1 = require("child_process");
51
- const readline = __importStar(require("readline"));
52
- const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
53
- /**
54
- * Executes quilt3 config command to get current catalog URL
55
- *
56
- * @returns Catalog URL from quilt3 CLI or null if command fails
57
- */
58
- function getQuilt3Catalog() {
59
- try {
60
- const output = (0, child_process_1.execSync)("quilt3 config", { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] });
61
- let catalogUrl = output.trim();
62
- if (catalogUrl && catalogUrl.startsWith("http")) {
63
- console.log(`Found quilt3 CLI configuration: ${catalogUrl}`);
64
- // Strip protocol and trailing slash, store only domain
65
- catalogUrl = catalogUrl.replace(/^https?:\/\//, "").replace(/\/$/, "");
66
- return { catalogUrl };
67
- }
68
- return null;
69
- }
70
- catch {
71
- // quilt3 command not available or failed
72
- return null;
73
- }
74
- }
75
- /**
76
- * Finds Quilt CloudFormation stacks in AWS account
77
- *
78
- * @param region - AWS region to search
79
- * @param profile - AWS profile to use
80
- * @returns Array of Quilt stack information
81
- */
82
- async function findQuiltStacks(region, profile) {
83
- try {
84
- const clientConfig = { region };
85
- if (profile) {
86
- const { fromIni } = await Promise.resolve().then(() => __importStar(require("@aws-sdk/credential-providers")));
87
- clientConfig.credentials = fromIni({ profile });
88
- }
89
- const client = new client_cloudformation_1.CloudFormationClient(clientConfig);
90
- // List all stacks
91
- const listCommand = new client_cloudformation_1.ListStacksCommand({
92
- StackStatusFilter: ["CREATE_COMPLETE", "UPDATE_COMPLETE"],
93
- });
94
- const listResponse = await client.send(listCommand);
95
- const stacks = listResponse.StackSummaries || [];
96
- // Filter for Quilt stacks (containing "quilt" in the name)
97
- const quiltStacks = stacks.filter((stack) => stack.StackName?.toLowerCase().includes("quilt") ||
98
- stack.StackName?.toLowerCase().includes("catalog"));
99
- // Get detailed information for each stack
100
- const stackInfos = [];
101
- for (const stack of quiltStacks) {
102
- if (!stack.StackName)
103
- continue;
104
- try {
105
- const describeCommand = new client_cloudformation_1.DescribeStacksCommand({
106
- StackName: stack.StackName,
107
- });
108
- const describeResponse = await client.send(describeCommand);
109
- const stackDetail = describeResponse.Stacks?.[0];
110
- if (!stackDetail)
111
- continue;
112
- const outputs = stackDetail.Outputs || [];
113
- const stackInfo = {
114
- stackName: stack.StackName,
115
- stackArn: stackDetail.StackId || "",
116
- region: region,
117
- };
118
- // Extract outputs
119
- for (const output of outputs) {
120
- const key = output.OutputKey || "";
121
- const value = output.OutputValue || "";
122
- if (key === "QuiltWebHost") {
123
- // Strip protocol and trailing slash, store only domain
124
- stackInfo.catalogUrl = value.replace(/^https?:\/\//, "").replace(/\/$/, "");
125
- }
126
- else if (key.includes("ucket")) {
127
- stackInfo.bucket = value;
128
- }
129
- else if (key === "UserAthenaDatabaseName" || key.includes("Database")) {
130
- stackInfo.database = value;
131
- }
132
- else if (key.includes("Queue")) {
133
- stackInfo.queueArn = value;
134
- }
135
- }
136
- stackInfos.push(stackInfo);
137
- }
138
- catch (describeError) {
139
- console.error(`Warning: Failed to describe stack ${stack.StackName}: ${describeError.message}`);
140
- }
141
- }
142
- return stackInfos;
143
- }
144
- catch (error) {
145
- console.error(`Warning: Failed to list CloudFormation stacks: ${error.message}`);
146
- return [];
147
- }
148
- }
149
- /**
150
- * Prompts user to select from multiple catalog options
151
- *
152
- * @param options - Array of catalog options
153
- * @returns Selected catalog index
154
- */
155
- async function promptCatalogSelection(options) {
156
- console.log("\nMultiple Quilt catalog configurations found:");
157
- options.forEach((opt, idx) => {
158
- console.log(` ${idx + 1}. ${opt}`);
159
- });
160
- const rl = readline.createInterface({
161
- input: process.stdin,
162
- output: process.stdout,
163
- });
164
- return new Promise((resolve) => {
165
- rl.question(`\nSelect catalog (1-${options.length}): `, (answer) => {
166
- rl.close();
167
- const selection = parseInt(answer.trim(), 10);
168
- if (isNaN(selection) || selection < 1 || selection > options.length) {
169
- console.log("Invalid selection, using first option.");
170
- resolve(0);
171
- }
172
- else {
173
- resolve(selection - 1);
174
- }
175
- });
176
- });
177
- }
178
- /**
179
- * Infers Quilt configuration from multiple sources
180
- *
181
- * Priority order:
182
- * 1. quilt3 CLI command (`quilt3 config`)
183
- * 2. CloudFormation stack inspection
184
- * 3. Interactive selection if multiple options
185
- *
186
- * Returns configuration in v0.7.0 ProfileConfig.quilt format.
187
- *
188
- * @param options - Inference options
189
- * @returns Quilt configuration object
190
- *
191
- * @example
192
- * ```typescript
193
- * const quiltConfig = await inferQuiltConfig({
194
- * region: "us-east-1",
195
- * profile: "default",
196
- * interactive: true
197
- * });
198
- * console.log(quiltConfig.stackArn);
199
- * ```
200
- */
201
- async function inferQuiltConfig(options = {}) {
202
- const { region = "us-east-1", profile, interactive = true } = options;
203
- const result = {
204
- region,
205
- };
206
- // Step 1: Try quilt3 CLI command
207
- console.log("Checking quilt3 CLI configuration...");
208
- const quilt3Config = getQuilt3Catalog();
209
- if (quilt3Config?.catalogUrl) {
210
- result.catalog = quilt3Config.catalogUrl;
211
- console.log(` ✓ Found catalog URL from quilt3: ${result.catalog}`);
212
- }
213
- else {
214
- console.log(" No quilt3 CLI configuration found.");
215
- }
216
- // Step 2: Search for CloudFormation stacks
217
- console.log("\nSearching for Quilt CloudFormation stacks...");
218
- const stacks = await findQuiltStacks(region, profile);
219
- if (stacks.length === 0) {
220
- console.log(" No Quilt CloudFormation stacks found.");
221
- if (!result.catalog) {
222
- throw new Error("Unable to infer Quilt configuration. Please run 'quilt3 config <catalog-url>' or provide stack ARN manually.");
223
- }
224
- return result;
225
- }
226
- console.log(` Found ${stacks.length} Quilt stack(s)\n`);
227
- let selectedStack;
228
- // If we have a catalog URL from quilt3, try to find matching stack
229
- if (result.catalog && stacks.length > 1) {
230
- // Both result.catalog and stack catalogUrl are now bare domains, so compare directly
231
- const matchingStack = stacks.find((s) => s.catalogUrl === result.catalog);
232
- if (matchingStack) {
233
- selectedStack = matchingStack;
234
- console.log(` Auto-selected stack matching catalog URL: ${selectedStack.stackName}`);
235
- }
236
- else {
237
- console.log(` No stack found matching catalog URL: ${result.catalog}`);
238
- if (interactive) {
239
- const options = stacks.map((s) => `${s.stackName} (${s.region})`);
240
- const selectedIndex = await promptCatalogSelection(options);
241
- selectedStack = stacks[selectedIndex];
242
- console.log(`\nSelected: ${selectedStack.stackName}`);
243
- }
244
- else {
245
- selectedStack = stacks[0];
246
- console.log(` Using first stack: ${selectedStack.stackName}`);
247
- }
248
- }
249
- }
250
- else if (stacks.length === 1) {
251
- selectedStack = stacks[0];
252
- console.log(` Using stack: ${selectedStack.stackName}`);
253
- }
254
- else if (interactive) {
255
- const options = stacks.map((s) => `${s.stackName} (${s.region})`);
256
- const selectedIndex = await promptCatalogSelection(options);
257
- selectedStack = stacks[selectedIndex];
258
- console.log(`\nSelected: ${selectedStack.stackName}`);
259
- }
260
- else {
261
- selectedStack = stacks[0];
262
- console.log(` Using first stack: ${selectedStack.stackName}`);
263
- }
264
- // Populate result from selected stack
265
- result.stackArn = selectedStack.stackArn;
266
- result.bucket = selectedStack.bucket;
267
- result.database = selectedStack.database || "quilt_catalog";
268
- result.queueArn = selectedStack.queueArn;
269
- result.region = selectedStack.region;
270
- if (selectedStack.catalogUrl) {
271
- result.catalog = selectedStack.catalogUrl;
272
- }
273
- console.log("\n✓ Quilt configuration inferred successfully\n");
274
- return result;
275
- }
276
- /**
277
- * Main execution for CLI usage
278
- */
279
- async function main() {
280
- const args = process.argv.slice(2);
281
- const options = {
282
- interactive: true,
283
- };
284
- // Parse command line arguments
285
- for (let i = 0; i < args.length; i++) {
286
- if (args[i] === "--region" && i + 1 < args.length) {
287
- options.region = args[i + 1];
288
- i++;
289
- }
290
- else if (args[i] === "--profile" && i + 1 < args.length) {
291
- options.profile = args[i + 1];
292
- i++;
293
- }
294
- else if (args[i] === "--non-interactive") {
295
- options.interactive = false;
296
- }
297
- }
298
- console.log("Quilt Catalog Auto-Inference (v0.7.0)\n");
299
- const result = await inferQuiltConfig(options);
300
- console.log("=== Inference Results ===");
301
- console.log(`Stack ARN: ${result.stackArn || "Not found"}`);
302
- console.log(`Catalog URL: ${result.catalog || "Not found"}`);
303
- console.log(`Bucket: ${result.bucket || "Not found"}`);
304
- console.log(`Database: ${result.database || "Not found"}`);
305
- console.log(`Queue ARN: ${result.queueArn || "Not found"}`);
306
- console.log(`Region: ${result.region || "Not found"}`);
307
- }
308
- // Run main if executed directly
309
- if (require.main === module) {
310
- main().catch((error) => {
311
- console.error("Error:", error.message);
312
- process.exit(1);
313
- });
314
- }
315
- //# sourceMappingURL=infer-quilt-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"infer-quilt-config.js","sourceRoot":"","sources":["../../scripts/infer-quilt-config.ts"],"names":[],"mappings":"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"}