@quiltdata/benchling-webhook 0.7.9 ā 0.8.0-20251117T215047Z
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 +1 -0
- package/dist/bin/benchling-webhook.js +4 -2
- package/dist/bin/benchling-webhook.js.map +1 -1
- package/dist/bin/cli.js +15 -7
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +64 -8
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/commands/health-check.d.ts.map +1 -1
- package/dist/bin/commands/health-check.js +2 -35
- package/dist/bin/commands/health-check.js.map +1 -1
- package/dist/bin/commands/infer-quilt-config.d.ts +6 -0
- package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
- package/dist/bin/commands/infer-quilt-config.js +127 -49
- package/dist/bin/commands/infer-quilt-config.js.map +1 -1
- package/dist/bin/commands/install.d.ts.map +1 -1
- package/dist/bin/commands/install.js +13 -17
- package/dist/bin/commands/install.js.map +1 -1
- package/dist/bin/commands/logs.d.ts.map +1 -1
- package/dist/bin/commands/logs.js +4 -128
- package/dist/bin/commands/logs.js.map +1 -1
- package/dist/bin/commands/manifest.d.ts.map +1 -1
- package/dist/bin/commands/manifest.js +2 -3
- package/dist/bin/commands/manifest.js.map +1 -1
- package/dist/bin/commands/setup-wizard.d.ts +2 -0
- package/dist/bin/commands/setup-wizard.d.ts.map +1 -1
- package/dist/bin/commands/setup-wizard.js +5 -5
- package/dist/bin/commands/setup-wizard.js.map +1 -1
- package/dist/bin/commands/status.d.ts +49 -0
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +666 -41
- 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 +3 -36
- package/dist/bin/commands/sync-secrets.js.map +1 -1
- package/dist/bin/commands/validate.js +1 -1
- package/dist/bin/commands/validate.js.map +1 -1
- package/dist/bin/xdg-launch.d.ts +74 -0
- package/dist/bin/xdg-launch.d.ts.map +1 -0
- package/dist/bin/xdg-launch.js +588 -0
- package/dist/bin/xdg-launch.js.map +1 -0
- package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
- package/dist/lib/benchling-webhook-stack.js +59 -7
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/fargate-service.d.ts +24 -4
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +75 -27
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/types/config.d.ts +99 -5
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/config.js +4 -1
- package/dist/lib/types/config.js.map +1 -1
- package/dist/lib/utils/service-resolver.d.ts +155 -0
- package/dist/lib/utils/service-resolver.d.ts.map +1 -0
- package/dist/lib/utils/service-resolver.js +195 -0
- package/dist/lib/utils/service-resolver.js.map +1 -0
- package/dist/lib/utils/stack-inference.d.ts +58 -0
- package/dist/lib/utils/stack-inference.d.ts.map +1 -1
- package/dist/lib/utils/stack-inference.js +76 -2
- package/dist/lib/utils/stack-inference.js.map +1 -1
- package/dist/lib/utils/stack-parameter-update.js +2 -2
- package/dist/lib/utils/stack-parameter-update.js.map +1 -1
- package/dist/lib/wizard/phase2-stack-query.d.ts.map +1 -1
- package/dist/lib/wizard/phase2-stack-query.js +46 -9
- package/dist/lib/wizard/phase2-stack-query.js.map +1 -1
- package/dist/lib/wizard/phase3-parameter-collection.js +5 -5
- package/dist/lib/wizard/phase3-parameter-collection.js.map +1 -1
- package/dist/lib/wizard/phase4-validation.d.ts.map +1 -1
- package/dist/lib/wizard/phase4-validation.js +4 -5
- package/dist/lib/wizard/phase4-validation.js.map +1 -1
- package/dist/lib/wizard/phase5-mode-decision.js +1 -1
- package/dist/lib/wizard/phase5-mode-decision.js.map +1 -1
- package/dist/lib/wizard/phase6-integrated-mode.d.ts.map +1 -1
- package/dist/lib/wizard/phase6-integrated-mode.js +19 -0
- 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 +24 -10
- package/dist/lib/wizard/phase7-standalone-mode.js.map +1 -1
- package/dist/lib/wizard/types.d.ts +14 -0
- package/dist/lib/wizard/types.d.ts.map +1 -1
- package/dist/package.json +20 -9
- package/package.json +20 -9
- package/dist/lib/utils/config-loader.d.ts +0 -48
- package/dist/lib/utils/config-loader.d.ts.map +0 -1
- package/dist/lib/utils/config-loader.js +0 -110
- package/dist/lib/utils/config-loader.js.map +0 -1
- package/dist/lib/utils/config-resolver.d.ts +0 -138
- package/dist/lib/utils/config-resolver.d.ts.map +0 -1
- package/dist/lib/utils/config-resolver.js +0 -279
- package/dist/lib/utils/config-resolver.js.map +0 -1
|
@@ -0,0 +1,588 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* XDG Launch: Unified Configuration Bridge
|
|
5
|
+
*
|
|
6
|
+
* Single command to launch Flask application in different modes (native, docker, docker-dev)
|
|
7
|
+
* using profile-based XDG configuration as the single source of truth.
|
|
8
|
+
*
|
|
9
|
+
* Eliminates .env files and manual environment variable management.
|
|
10
|
+
*
|
|
11
|
+
* @module xdg-launch
|
|
12
|
+
* @version 0.8.0
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.parseArguments = parseArguments;
|
|
16
|
+
exports.loadProfile = loadProfile;
|
|
17
|
+
exports.buildEnvVars = buildEnvVars;
|
|
18
|
+
exports.validateConfig = validateConfig;
|
|
19
|
+
exports.filterSecrets = filterSecrets;
|
|
20
|
+
const child_process_1 = require("child_process");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const fs_1 = require("fs");
|
|
23
|
+
const xdg_config_1 = require("../lib/xdg-config");
|
|
24
|
+
/**
|
|
25
|
+
* Parse command-line arguments
|
|
26
|
+
*
|
|
27
|
+
* @param argv - Command-line arguments
|
|
28
|
+
* @returns Parsed launch options
|
|
29
|
+
*/
|
|
30
|
+
function parseArguments(argv) {
|
|
31
|
+
const args = argv.slice(2);
|
|
32
|
+
const options = {
|
|
33
|
+
profile: "default",
|
|
34
|
+
verbose: false,
|
|
35
|
+
test: false,
|
|
36
|
+
};
|
|
37
|
+
for (let i = 0; i < args.length; i++) {
|
|
38
|
+
const arg = args[i];
|
|
39
|
+
if (arg === "--mode" && i + 1 < args.length) {
|
|
40
|
+
const mode = args[++i];
|
|
41
|
+
if (mode !== "native" && mode !== "docker" && mode !== "docker-dev") {
|
|
42
|
+
throw new Error(`Invalid mode: ${mode}. Must be: native, docker, or docker-dev`);
|
|
43
|
+
}
|
|
44
|
+
options.mode = mode;
|
|
45
|
+
}
|
|
46
|
+
else if (arg === "--profile" && i + 1 < args.length) {
|
|
47
|
+
options.profile = args[++i];
|
|
48
|
+
}
|
|
49
|
+
else if (arg === "--port" && i + 1 < args.length) {
|
|
50
|
+
options.port = parseInt(args[++i], 10);
|
|
51
|
+
if (isNaN(options.port) || options.port < 1 || options.port > 65535) {
|
|
52
|
+
throw new Error(`Invalid port: ${args[i]}. Must be between 1 and 65535`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else if (arg === "--verbose") {
|
|
56
|
+
options.verbose = true;
|
|
57
|
+
}
|
|
58
|
+
else if (arg === "--test") {
|
|
59
|
+
options.test = true;
|
|
60
|
+
}
|
|
61
|
+
else if (arg === "--help" || arg === "-h") {
|
|
62
|
+
printUsage();
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
throw new Error(`Unknown option: ${arg}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!options.mode) {
|
|
70
|
+
throw new Error("Missing required option: --mode");
|
|
71
|
+
}
|
|
72
|
+
return options;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Print usage information
|
|
76
|
+
*/
|
|
77
|
+
function printUsage() {
|
|
78
|
+
console.log(`
|
|
79
|
+
XDG Launch - Unified Configuration Bridge
|
|
80
|
+
|
|
81
|
+
Usage: npx ts-node bin/xdg-launch.ts [OPTIONS]
|
|
82
|
+
|
|
83
|
+
Options:
|
|
84
|
+
--mode <mode> Execution mode: native, docker, docker-dev (required)
|
|
85
|
+
--profile <name> XDG profile name (default: "default")
|
|
86
|
+
--port <number> Override default port
|
|
87
|
+
--verbose Enable verbose logging
|
|
88
|
+
--test Run in test mode
|
|
89
|
+
--help, -h Show this help message
|
|
90
|
+
|
|
91
|
+
Examples:
|
|
92
|
+
npx ts-node bin/xdg-launch.ts --mode native --profile dev
|
|
93
|
+
npx ts-node bin/xdg-launch.ts --mode docker --profile default
|
|
94
|
+
npx ts-node bin/xdg-launch.ts --mode docker-dev --profile dev --verbose
|
|
95
|
+
npx ts-node bin/xdg-launch.ts --mode native --profile dev --test
|
|
96
|
+
`.trim());
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Load XDG profile configuration
|
|
100
|
+
*
|
|
101
|
+
* @param profileName - Profile name
|
|
102
|
+
* @returns Profile configuration
|
|
103
|
+
*/
|
|
104
|
+
function loadProfile(profileName) {
|
|
105
|
+
const xdg = new xdg_config_1.XDGConfig();
|
|
106
|
+
if (!xdg.profileExists(profileName)) {
|
|
107
|
+
const available = xdg.listProfiles();
|
|
108
|
+
throw new Error(`Profile not found: "${profileName}"\n\n` +
|
|
109
|
+
"Available profiles:\n" +
|
|
110
|
+
(available.length > 0
|
|
111
|
+
? available.map((p) => ` - ${p}`).join("\n")
|
|
112
|
+
: " (none)") +
|
|
113
|
+
"\n\n" +
|
|
114
|
+
"Create a new profile:\n" +
|
|
115
|
+
` npm run setup -- --profile ${profileName}`);
|
|
116
|
+
}
|
|
117
|
+
return xdg.readProfile(profileName);
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Extract secret name from Secrets Manager ARN
|
|
121
|
+
*
|
|
122
|
+
* AWS Secrets Manager automatically appends a 6-character random suffix to secret names
|
|
123
|
+
* in ARNs (e.g., "my-secret-Ab12Cd"). This function extracts the base secret name by
|
|
124
|
+
* removing the suffix.
|
|
125
|
+
*
|
|
126
|
+
* @param arn - Secrets Manager ARN
|
|
127
|
+
* @returns Secret name without the random suffix
|
|
128
|
+
*/
|
|
129
|
+
function extractSecretName(arn) {
|
|
130
|
+
if (!arn) {
|
|
131
|
+
return "";
|
|
132
|
+
}
|
|
133
|
+
// ARN format: arn:aws:secretsmanager:region:account:secret:name-XXXXXX
|
|
134
|
+
// where XXXXXX is a 6-character random suffix added by AWS
|
|
135
|
+
const match = arn.match(/secret:([^:]+)/);
|
|
136
|
+
if (!match) {
|
|
137
|
+
return arn;
|
|
138
|
+
}
|
|
139
|
+
const fullName = match[1];
|
|
140
|
+
// Remove the AWS-generated 6-character suffix (format: -XXXXXX)
|
|
141
|
+
// The suffix is always a hyphen followed by 6 alphanumeric characters
|
|
142
|
+
const withoutSuffix = fullName.replace(/-[A-Za-z0-9]{6}$/, "");
|
|
143
|
+
return withoutSuffix;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Build environment variables from profile configuration
|
|
147
|
+
*
|
|
148
|
+
* Maps XDG config fields to service-specific environment variables.
|
|
149
|
+
*
|
|
150
|
+
* @param config - Profile configuration
|
|
151
|
+
* @param mode - Launch mode
|
|
152
|
+
* @param options - Launch options
|
|
153
|
+
* @returns Environment variables map
|
|
154
|
+
*/
|
|
155
|
+
function buildEnvVars(config, mode, options) {
|
|
156
|
+
const envVars = {
|
|
157
|
+
// Preserve existing process.env
|
|
158
|
+
...process.env,
|
|
159
|
+
// Quilt Services (v0.8.0+ service-specific - NO MORE STACK ARN!)
|
|
160
|
+
QUILT_WEB_HOST: config.quilt.catalog,
|
|
161
|
+
ATHENA_USER_DATABASE: config.quilt.database,
|
|
162
|
+
ATHENA_USER_WORKGROUP: config.quilt.athenaUserWorkgroup || "primary",
|
|
163
|
+
ATHENA_RESULTS_BUCKET: config.quilt.athenaResultsBucket || "",
|
|
164
|
+
ICEBERG_DATABASE: config.quilt.icebergDatabase || "",
|
|
165
|
+
ICEBERG_WORKGROUP: config.quilt.icebergWorkgroup || "",
|
|
166
|
+
PACKAGER_SQS_URL: config.quilt.queueUrl,
|
|
167
|
+
// AWS Configuration
|
|
168
|
+
AWS_REGION: config.quilt.region || config.deployment.region,
|
|
169
|
+
AWS_DEFAULT_REGION: config.quilt.region || config.deployment.region,
|
|
170
|
+
// Benchling Configuration (credentials from Secrets Manager, NOT environment)
|
|
171
|
+
BenchlingSecret: extractSecretName(config.benchling.secretArn || ""),
|
|
172
|
+
// Security Configuration
|
|
173
|
+
ENABLE_WEBHOOK_VERIFICATION: String(config.security?.enableVerification !== false),
|
|
174
|
+
};
|
|
175
|
+
// Mode-specific variables
|
|
176
|
+
if (mode === "native" || mode === "docker-dev") {
|
|
177
|
+
envVars.FLASK_ENV = "development";
|
|
178
|
+
envVars.FLASK_DEBUG = "true";
|
|
179
|
+
envVars.LOG_LEVEL = config.logging?.level || "DEBUG";
|
|
180
|
+
// Disable verification in dev mode for easier testing
|
|
181
|
+
if (mode === "docker-dev") {
|
|
182
|
+
envVars.ENABLE_WEBHOOK_VERIFICATION = "false";
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
// docker (production)
|
|
187
|
+
envVars.FLASK_ENV = "production";
|
|
188
|
+
envVars.LOG_LEVEL = config.logging?.level || "INFO";
|
|
189
|
+
}
|
|
190
|
+
// Test mode flag
|
|
191
|
+
if (options.test) {
|
|
192
|
+
envVars.BENCHLING_TEST_MODE = "true";
|
|
193
|
+
}
|
|
194
|
+
return envVars;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Validate required configuration
|
|
198
|
+
*
|
|
199
|
+
* Ensures all required service variables are present and well-formed.
|
|
200
|
+
*
|
|
201
|
+
* @param envVars - Environment variables to validate
|
|
202
|
+
* @param profile - Profile name (for error messages)
|
|
203
|
+
*/
|
|
204
|
+
function validateConfig(envVars, profile) {
|
|
205
|
+
// Required service variables (NO BENCHLING_TENANT - comes from Secrets Manager!)
|
|
206
|
+
const required = [
|
|
207
|
+
"QUILT_WEB_HOST",
|
|
208
|
+
"ATHENA_USER_DATABASE",
|
|
209
|
+
"PACKAGER_SQS_URL",
|
|
210
|
+
"AWS_REGION",
|
|
211
|
+
"BenchlingSecret",
|
|
212
|
+
];
|
|
213
|
+
const missing = required.filter((key) => !envVars[key]);
|
|
214
|
+
if (missing.length > 0) {
|
|
215
|
+
throw new Error("Missing required configuration:\n" +
|
|
216
|
+
missing.map((key) => ` - ${key}`).join("\n") +
|
|
217
|
+
"\n\n" +
|
|
218
|
+
"Check profile configuration at:\n" +
|
|
219
|
+
` ~/.config/benchling-webhook/${profile}/config.json\n\n` +
|
|
220
|
+
"Run setup wizard to configure:\n" +
|
|
221
|
+
` npm run setup -- --profile ${profile}`);
|
|
222
|
+
}
|
|
223
|
+
// Format validation
|
|
224
|
+
if (!envVars.PACKAGER_SQS_URL.match(/^https:\/\/sqs\.[a-z0-9-]+\.amazonaws\.com\/\d+\/.+/)) {
|
|
225
|
+
throw new Error(`Invalid SQS URL format: ${envVars.PACKAGER_SQS_URL}\n\n` +
|
|
226
|
+
"Expected format:\n" +
|
|
227
|
+
" https://sqs.{region}.amazonaws.com/{account}/{queue-name}\n\n" +
|
|
228
|
+
"Example:\n" +
|
|
229
|
+
" https://sqs.us-east-1.amazonaws.com/123456789012/packager-queue");
|
|
230
|
+
}
|
|
231
|
+
// Validate BenchlingSecret is present (secret name, not ARN)
|
|
232
|
+
if (!envVars.BenchlingSecret) {
|
|
233
|
+
throw new Error("Missing BenchlingSecret\n\n" +
|
|
234
|
+
"BenchlingSecret must be the name of your AWS Secrets Manager secret.\n" +
|
|
235
|
+
"Example: benchling-webhook-prod");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Filter secrets from environment variables for verbose logging
|
|
240
|
+
*
|
|
241
|
+
* @param envVars - Environment variables
|
|
242
|
+
* @returns Filtered environment variables (secrets masked)
|
|
243
|
+
*/
|
|
244
|
+
function filterSecrets(envVars) {
|
|
245
|
+
const filtered = {};
|
|
246
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
247
|
+
const upperKey = key.toUpperCase();
|
|
248
|
+
if (upperKey.includes("SECRET") || upperKey.includes("PASSWORD") || upperKey.includes("TOKEN")) {
|
|
249
|
+
filtered[key] = "***REDACTED***";
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
filtered[key] = value;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return filtered;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Spawn docker-compose command with consistent environment
|
|
259
|
+
*
|
|
260
|
+
* @param args - docker-compose arguments
|
|
261
|
+
* @param dockerDir - Docker working directory
|
|
262
|
+
* @param envVars - Environment variables
|
|
263
|
+
* @param stdio - stdio option for spawn
|
|
264
|
+
* @returns Child process
|
|
265
|
+
*/
|
|
266
|
+
function spawnDockerCompose(args, dockerDir, envVars, stdio = "inherit") {
|
|
267
|
+
return (0, child_process_1.spawn)("docker-compose", args, {
|
|
268
|
+
cwd: dockerDir,
|
|
269
|
+
env: envVars,
|
|
270
|
+
stdio,
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Wait for server to be healthy
|
|
275
|
+
*
|
|
276
|
+
* @param url - Server URL to check
|
|
277
|
+
* @param maxAttempts - Maximum number of attempts
|
|
278
|
+
* @param delayMs - Delay between attempts in milliseconds
|
|
279
|
+
* @returns Promise that resolves when server is healthy
|
|
280
|
+
*/
|
|
281
|
+
async function waitForHealth(url, maxAttempts = 30, delayMs = 1000) {
|
|
282
|
+
console.log(`\nā³ Waiting for server to be healthy at ${url}...`);
|
|
283
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
284
|
+
try {
|
|
285
|
+
const response = await fetch(`${url}/health`, {
|
|
286
|
+
signal: AbortSignal.timeout(5000),
|
|
287
|
+
});
|
|
288
|
+
if (response.ok) {
|
|
289
|
+
console.log(`ā
Server is healthy (attempt ${attempt}/${maxAttempts})\n`);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
// Ignore errors and retry
|
|
295
|
+
}
|
|
296
|
+
if (attempt < maxAttempts) {
|
|
297
|
+
await new Promise(resolve => setTimeout(resolve, delayMs));
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
throw new Error(`Server did not become healthy after ${maxAttempts} attempts`);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Run tests against the server
|
|
304
|
+
*
|
|
305
|
+
* @param url - Server URL to test
|
|
306
|
+
* @param profile - Profile name
|
|
307
|
+
* @returns Promise that resolves with test exit code
|
|
308
|
+
*/
|
|
309
|
+
async function runTests(url, profile) {
|
|
310
|
+
console.log("š§Ŗ Running tests...\n");
|
|
311
|
+
const dockerDir = (0, path_1.resolve)(__dirname, "..", "docker");
|
|
312
|
+
const testScript = (0, path_1.resolve)(dockerDir, "scripts", "test_webhook.py");
|
|
313
|
+
if (!(0, fs_1.existsSync)(testScript)) {
|
|
314
|
+
throw new Error(`Test script not found: ${testScript}`);
|
|
315
|
+
}
|
|
316
|
+
return new Promise((resolve) => {
|
|
317
|
+
const proc = (0, child_process_1.spawn)("uv", ["run", "python", testScript, url, "--profile", profile], {
|
|
318
|
+
cwd: dockerDir,
|
|
319
|
+
stdio: "inherit",
|
|
320
|
+
});
|
|
321
|
+
proc.on("exit", (code) => {
|
|
322
|
+
resolve(code || 0);
|
|
323
|
+
});
|
|
324
|
+
proc.on("error", (error) => {
|
|
325
|
+
console.error(`\nā Failed to run tests: ${error.message}`);
|
|
326
|
+
resolve(1);
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Launch Flask application in native mode
|
|
332
|
+
*
|
|
333
|
+
* Runs Flask directly on host using uv.
|
|
334
|
+
*
|
|
335
|
+
* @param envVars - Environment variables
|
|
336
|
+
* @param options - Launch options
|
|
337
|
+
*/
|
|
338
|
+
async function launchNative(envVars, options) {
|
|
339
|
+
const port = options.port || 5001;
|
|
340
|
+
envVars.PORT = String(port);
|
|
341
|
+
console.log(`š Launching native Flask (port ${port})...`);
|
|
342
|
+
if (options.verbose) {
|
|
343
|
+
console.log("\nEnvironment Variables:");
|
|
344
|
+
const filtered = filterSecrets(envVars);
|
|
345
|
+
Object.entries(filtered)
|
|
346
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
347
|
+
.forEach(([key, value]) => console.log(` ${key}=${value}`));
|
|
348
|
+
console.log();
|
|
349
|
+
}
|
|
350
|
+
// Check if uv is installed
|
|
351
|
+
const dockerDir = (0, path_1.resolve)(__dirname, "..", "docker");
|
|
352
|
+
if (!(0, fs_1.existsSync)(dockerDir)) {
|
|
353
|
+
throw new Error(`Docker directory not found: ${dockerDir}`);
|
|
354
|
+
}
|
|
355
|
+
console.log(`Working directory: ${dockerDir}`);
|
|
356
|
+
console.log("Command: uv run python -m src.app\n");
|
|
357
|
+
const proc = (0, child_process_1.spawn)("uv", ["run", "python", "-m", "src.app"], {
|
|
358
|
+
cwd: dockerDir,
|
|
359
|
+
env: envVars,
|
|
360
|
+
stdio: options.test ? "pipe" : "inherit",
|
|
361
|
+
});
|
|
362
|
+
// If in test mode, run tests after server is healthy
|
|
363
|
+
if (options.test) {
|
|
364
|
+
try {
|
|
365
|
+
const serverUrl = `http://localhost:${port}`;
|
|
366
|
+
await waitForHealth(serverUrl);
|
|
367
|
+
const exitCode = await runTests(serverUrl, options.profile);
|
|
368
|
+
console.log("\nš Shutting down server...");
|
|
369
|
+
proc.kill("SIGTERM");
|
|
370
|
+
// Wait a moment for cleanup
|
|
371
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
372
|
+
process.exit(exitCode);
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
console.error(`\nā Test failed: ${error.message}`);
|
|
376
|
+
proc.kill("SIGTERM");
|
|
377
|
+
process.exit(1);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
// Non-test mode: run server interactively with graceful shutdown
|
|
382
|
+
const cleanup = () => {
|
|
383
|
+
console.log("\n\nš Shutting down...");
|
|
384
|
+
proc.kill("SIGTERM");
|
|
385
|
+
};
|
|
386
|
+
process.on("SIGINT", cleanup);
|
|
387
|
+
process.on("SIGTERM", cleanup);
|
|
388
|
+
proc.on("error", (error) => {
|
|
389
|
+
console.error(`\nā Failed to start native Flask: ${error.message}`);
|
|
390
|
+
if (error.code === "ENOENT") {
|
|
391
|
+
console.error("\nIs \"uv\" installed and in your PATH?");
|
|
392
|
+
console.error("Install uv: https://docs.astral.sh/uv/getting-started/installation/");
|
|
393
|
+
}
|
|
394
|
+
process.exit(1);
|
|
395
|
+
});
|
|
396
|
+
proc.on("exit", (code) => {
|
|
397
|
+
if (code !== 0 && code !== null) {
|
|
398
|
+
console.error(`\nā Native Flask exited with code ${code}`);
|
|
399
|
+
}
|
|
400
|
+
process.exit(code || 0);
|
|
401
|
+
});
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Launch Flask application in Docker production mode
|
|
406
|
+
*
|
|
407
|
+
* Runs production Docker container via docker-compose.
|
|
408
|
+
*
|
|
409
|
+
* @param envVars - Environment variables
|
|
410
|
+
* @param options - Launch options
|
|
411
|
+
*/
|
|
412
|
+
async function launchDocker(envVars, options) {
|
|
413
|
+
const port = options.port || 5003;
|
|
414
|
+
envVars.PORT = String(port);
|
|
415
|
+
console.log(`š³ Launching Docker production (port ${port})...`);
|
|
416
|
+
if (options.verbose) {
|
|
417
|
+
console.log("\nEnvironment Variables:");
|
|
418
|
+
const filtered = filterSecrets(envVars);
|
|
419
|
+
Object.entries(filtered)
|
|
420
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
421
|
+
.forEach(([key, value]) => console.log(` ${key}=${value}`));
|
|
422
|
+
console.log();
|
|
423
|
+
}
|
|
424
|
+
const dockerDir = (0, path_1.resolve)(__dirname, "..", "docker");
|
|
425
|
+
if (!(0, fs_1.existsSync)(dockerDir)) {
|
|
426
|
+
throw new Error(`Docker directory not found: ${dockerDir}`);
|
|
427
|
+
}
|
|
428
|
+
console.log(`Working directory: ${dockerDir}`);
|
|
429
|
+
console.log("Command: docker-compose up app\n");
|
|
430
|
+
const proc = spawnDockerCompose(["up", "app"], dockerDir, envVars, options.test ? "pipe" : "inherit");
|
|
431
|
+
// If in test mode, run tests after server is healthy
|
|
432
|
+
if (options.test) {
|
|
433
|
+
const dockerCleanup = () => {
|
|
434
|
+
spawnDockerCompose(["down"], dockerDir, envVars);
|
|
435
|
+
};
|
|
436
|
+
try {
|
|
437
|
+
const serverUrl = `http://localhost:${port}`;
|
|
438
|
+
await waitForHealth(serverUrl);
|
|
439
|
+
const exitCode = await runTests(serverUrl, options.profile);
|
|
440
|
+
console.log("\nš Shutting down Docker container...");
|
|
441
|
+
dockerCleanup();
|
|
442
|
+
// Wait a moment for cleanup
|
|
443
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
444
|
+
process.exit(exitCode);
|
|
445
|
+
}
|
|
446
|
+
catch (error) {
|
|
447
|
+
console.error(`\nā Test failed: ${error.message}`);
|
|
448
|
+
dockerCleanup();
|
|
449
|
+
process.exit(1);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
// Non-test mode: run server interactively with graceful shutdown
|
|
454
|
+
const cleanup = () => {
|
|
455
|
+
console.log("\n\nš Shutting down Docker container...");
|
|
456
|
+
spawnDockerCompose(["down"], dockerDir, envVars);
|
|
457
|
+
proc.kill("SIGTERM");
|
|
458
|
+
};
|
|
459
|
+
process.on("SIGINT", cleanup);
|
|
460
|
+
process.on("SIGTERM", cleanup);
|
|
461
|
+
proc.on("error", (error) => {
|
|
462
|
+
console.error(`\nā Failed to start Docker: ${error.message}`);
|
|
463
|
+
if (error.code === "ENOENT") {
|
|
464
|
+
console.error("\nIs \"docker-compose\" installed and in your PATH?");
|
|
465
|
+
}
|
|
466
|
+
process.exit(1);
|
|
467
|
+
});
|
|
468
|
+
proc.on("exit", (code) => {
|
|
469
|
+
if (code !== 0 && code !== null) {
|
|
470
|
+
console.error(`\nā Docker exited with code ${code}`);
|
|
471
|
+
}
|
|
472
|
+
process.exit(code || 0);
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Launch Flask application in Docker development mode
|
|
478
|
+
*
|
|
479
|
+
* Runs Docker container with hot-reload enabled via docker-compose --profile dev.
|
|
480
|
+
*
|
|
481
|
+
* @param envVars - Environment variables
|
|
482
|
+
* @param options - Launch options
|
|
483
|
+
*/
|
|
484
|
+
async function launchDockerDev(envVars, options) {
|
|
485
|
+
const port = options.port || 5002;
|
|
486
|
+
envVars.PORT = String(port);
|
|
487
|
+
console.log(`š³ Launching Docker development (port ${port}, hot-reload enabled)...`);
|
|
488
|
+
if (options.verbose) {
|
|
489
|
+
console.log("\nEnvironment Variables:");
|
|
490
|
+
const filtered = filterSecrets(envVars);
|
|
491
|
+
Object.entries(filtered)
|
|
492
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
493
|
+
.forEach(([key, value]) => console.log(` ${key}=${value}`));
|
|
494
|
+
console.log();
|
|
495
|
+
}
|
|
496
|
+
const dockerDir = (0, path_1.resolve)(__dirname, "..", "docker");
|
|
497
|
+
if (!(0, fs_1.existsSync)(dockerDir)) {
|
|
498
|
+
throw new Error(`Docker directory not found: ${dockerDir}`);
|
|
499
|
+
}
|
|
500
|
+
console.log(`Working directory: ${dockerDir}`);
|
|
501
|
+
console.log("Command: docker-compose --profile dev up app-dev\n");
|
|
502
|
+
const proc = spawnDockerCompose(["--profile", "dev", "up", "app-dev"], dockerDir, envVars, options.test ? "pipe" : "inherit");
|
|
503
|
+
// If in test mode, run tests after server is healthy
|
|
504
|
+
if (options.test) {
|
|
505
|
+
const dockerCleanup = () => {
|
|
506
|
+
spawnDockerCompose(["--profile", "dev", "down"], dockerDir, envVars);
|
|
507
|
+
};
|
|
508
|
+
try {
|
|
509
|
+
const serverUrl = `http://localhost:${port}`;
|
|
510
|
+
await waitForHealth(serverUrl);
|
|
511
|
+
const exitCode = await runTests(serverUrl, options.profile);
|
|
512
|
+
console.log("\nš Shutting down Docker dev container...");
|
|
513
|
+
dockerCleanup();
|
|
514
|
+
// Wait a moment for cleanup
|
|
515
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
516
|
+
process.exit(exitCode);
|
|
517
|
+
}
|
|
518
|
+
catch (error) {
|
|
519
|
+
console.error(`\nā Test failed: ${error.message}`);
|
|
520
|
+
dockerCleanup();
|
|
521
|
+
process.exit(1);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
// Non-test mode: run server interactively with graceful shutdown
|
|
526
|
+
const cleanup = () => {
|
|
527
|
+
console.log("\n\nš Shutting down Docker dev container...");
|
|
528
|
+
spawnDockerCompose(["--profile", "dev", "down"], dockerDir, envVars);
|
|
529
|
+
proc.kill("SIGTERM");
|
|
530
|
+
};
|
|
531
|
+
process.on("SIGINT", cleanup);
|
|
532
|
+
process.on("SIGTERM", cleanup);
|
|
533
|
+
proc.on("error", (error) => {
|
|
534
|
+
console.error(`\nā Failed to start Docker dev: ${error.message}`);
|
|
535
|
+
if (error.code === "ENOENT") {
|
|
536
|
+
console.error("\nIs \"docker-compose\" installed and in your PATH?");
|
|
537
|
+
}
|
|
538
|
+
process.exit(1);
|
|
539
|
+
});
|
|
540
|
+
proc.on("exit", (code) => {
|
|
541
|
+
if (code !== 0 && code !== null) {
|
|
542
|
+
console.error(`\nā Docker dev exited with code ${code}`);
|
|
543
|
+
}
|
|
544
|
+
process.exit(code || 0);
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Main entry point
|
|
550
|
+
*/
|
|
551
|
+
async function main() {
|
|
552
|
+
try {
|
|
553
|
+
// Parse command-line arguments
|
|
554
|
+
const options = parseArguments(process.argv);
|
|
555
|
+
// Load XDG profile configuration
|
|
556
|
+
const config = loadProfile(options.profile);
|
|
557
|
+
// Build environment variables
|
|
558
|
+
const envVars = buildEnvVars(config, options.mode, options);
|
|
559
|
+
// Validate configuration
|
|
560
|
+
validateConfig(envVars, options.profile);
|
|
561
|
+
// Launch appropriate mode
|
|
562
|
+
switch (options.mode) {
|
|
563
|
+
case "native":
|
|
564
|
+
await launchNative(envVars, options);
|
|
565
|
+
break;
|
|
566
|
+
case "docker":
|
|
567
|
+
await launchDocker(envVars, options);
|
|
568
|
+
break;
|
|
569
|
+
case "docker-dev":
|
|
570
|
+
await launchDockerDev(envVars, options);
|
|
571
|
+
break;
|
|
572
|
+
default:
|
|
573
|
+
throw new Error(`Unknown mode: ${options.mode}`);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
console.error(`\nā Error: ${error.message}\n`);
|
|
578
|
+
process.exit(1);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
// Run if called directly
|
|
582
|
+
if (require.main === module) {
|
|
583
|
+
main().catch((error) => {
|
|
584
|
+
console.error(`\nā Fatal error: ${error.message}\n`);
|
|
585
|
+
process.exit(1);
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
//# sourceMappingURL=xdg-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xdg-launch.js","sourceRoot":"","sources":["../../bin/xdg-launch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchling-webhook-stack.d.ts","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;GAKG;AACH,MAAM,WAAW,0BAA2B,SAAQ,GAAG,CAAC,UAAU;IAC9D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAED,qBAAa,qBAAsB,SAAQ,GAAG,CAAC,KAAK;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,SAAgB,eAAe,EAAE,MAAM,CAAC;gBAGpC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,0BAA0B;
|
|
1
|
+
{"version":3,"file":"benchling-webhook-stack.d.ts","sourceRoot":"","sources":["../../lib/benchling-webhook-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,aAAa,CAAC;AAInC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;GAKG;AACH,MAAM,WAAW,0BAA2B,SAAQ,GAAG,CAAC,UAAU;IAC9D;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAClC;AAED,qBAAa,qBAAsB,SAAQ,GAAG,CAAC,KAAK;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,SAAgB,eAAe,EAAE,MAAM,CAAC;gBAGpC,KAAK,EAAE,SAAS,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,0BAA0B;CAsNxC"}
|