@quiltdata/benchling-webhook 0.7.7 → 0.7.8-20251115T063729Z
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 +24 -11
- package/dist/bin/cli.js +77 -3
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/config-show.d.ts +14 -0
- package/dist/bin/commands/config-show.d.ts.map +1 -0
- package/dist/bin/commands/config-show.js +24 -0
- package/dist/bin/commands/config-show.js.map +1 -0
- package/dist/bin/commands/deploy.d.ts +14 -0
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +1 -0
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/commands/infer-quilt-config.d.ts +3 -0
- package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
- package/dist/bin/commands/infer-quilt-config.js +74 -8
- 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 +40 -7
- package/dist/bin/commands/install.js.map +1 -1
- package/dist/bin/commands/manifest.d.ts +20 -3
- package/dist/bin/commands/manifest.d.ts.map +1 -1
- package/dist/bin/commands/manifest.js +23 -7
- package/dist/bin/commands/manifest.js.map +1 -1
- package/dist/bin/commands/setup-wizard.d.ts +67 -13
- package/dist/bin/commands/setup-wizard.d.ts.map +1 -1
- package/dist/bin/commands/setup-wizard.js +239 -742
- package/dist/bin/commands/setup-wizard.js.map +1 -1
- package/dist/bin/commands/sync-secrets.d.ts +7 -7
- package/dist/bin/commands/sync-secrets.d.ts.map +1 -1
- package/dist/bin/commands/sync-secrets.js +55 -15
- package/dist/bin/commands/sync-secrets.js.map +1 -1
- package/dist/bin/commands/validate.d.ts +18 -3
- package/dist/bin/commands/validate.d.ts.map +1 -1
- package/dist/bin/commands/validate.js +103 -69
- package/dist/bin/commands/validate.js.map +1 -1
- package/dist/lib/types/config.d.ts +13 -0
- package/dist/lib/types/config.d.ts.map +1 -1
- package/dist/lib/types/config.js +1 -0
- package/dist/lib/types/config.js.map +1 -1
- package/dist/lib/utils/config.d.ts +14 -17
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/config.js +6 -88
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/lib/wizard/phase1-catalog-discovery.d.ts +41 -0
- package/dist/lib/wizard/phase1-catalog-discovery.d.ts.map +1 -0
- package/dist/lib/wizard/phase1-catalog-discovery.js +206 -0
- package/dist/lib/wizard/phase1-catalog-discovery.js.map +1 -0
- package/dist/lib/wizard/phase2-stack-query.d.ts +35 -0
- package/dist/lib/wizard/phase2-stack-query.d.ts.map +1 -0
- package/dist/lib/wizard/phase2-stack-query.js +99 -0
- package/dist/lib/wizard/phase2-stack-query.js.map +1 -0
- package/dist/lib/wizard/phase3-parameter-collection.d.ts +24 -0
- package/dist/lib/wizard/phase3-parameter-collection.d.ts.map +1 -0
- package/dist/lib/wizard/phase3-parameter-collection.js +399 -0
- package/dist/lib/wizard/phase3-parameter-collection.js.map +1 -0
- package/dist/lib/wizard/phase4-validation.d.ts +22 -0
- package/dist/lib/wizard/phase4-validation.d.ts.map +1 -0
- package/dist/lib/wizard/phase4-validation.js +294 -0
- package/dist/lib/wizard/phase4-validation.js.map +1 -0
- package/dist/lib/wizard/phase5-mode-decision.d.ts +22 -0
- package/dist/lib/wizard/phase5-mode-decision.d.ts.map +1 -0
- package/dist/lib/wizard/phase5-mode-decision.js +65 -0
- package/dist/lib/wizard/phase5-mode-decision.js.map +1 -0
- package/dist/lib/wizard/phase6-integrated-mode.d.ts +24 -0
- package/dist/lib/wizard/phase6-integrated-mode.d.ts.map +1 -0
- package/dist/lib/wizard/phase6-integrated-mode.js +131 -0
- package/dist/lib/wizard/phase6-integrated-mode.js.map +1 -0
- package/dist/lib/wizard/phase7-standalone-mode.d.ts +25 -0
- package/dist/lib/wizard/phase7-standalone-mode.d.ts.map +1 -0
- package/dist/lib/wizard/phase7-standalone-mode.js +210 -0
- package/dist/lib/wizard/phase7-standalone-mode.js.map +1 -0
- package/dist/lib/wizard/types.d.ts +175 -0
- package/dist/lib/wizard/types.d.ts.map +1 -0
- package/dist/lib/wizard/types.js +11 -0
- package/dist/lib/wizard/types.js.map +1 -0
- package/dist/package.json +3 -4
- package/package.json +3 -4
- package/dist/bin/commands/get-env.d.ts +0 -16
- package/dist/bin/commands/get-env.d.ts.map +0 -1
- package/dist/bin/commands/get-env.js +0 -210
- package/dist/bin/commands/get-env.js.map +0 -1
- package/env.template +0 -79
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 2: Stack Query
|
|
4
|
+
*
|
|
5
|
+
* Queries CloudFormation stack for the confirmed catalog and extracts
|
|
6
|
+
* all available parameters including BenchlingSecret ARN.
|
|
7
|
+
*
|
|
8
|
+
* @module wizard/phase2-stack-query
|
|
9
|
+
*/
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.runStackQuery = runStackQuery;
|
|
15
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
16
|
+
const infer_quilt_config_1 = require("../../bin/commands/infer-quilt-config");
|
|
17
|
+
/**
|
|
18
|
+
* Phase 2: Stack Query
|
|
19
|
+
*
|
|
20
|
+
* Responsibilities:
|
|
21
|
+
* - Query CloudFormation stack for the confirmed catalog
|
|
22
|
+
* - Extract ALL available parameters from stack
|
|
23
|
+
* - Handle stack query failures gracefully
|
|
24
|
+
* - Return stack configuration
|
|
25
|
+
*
|
|
26
|
+
* @param catalogDns - Confirmed catalog DNS name
|
|
27
|
+
* @param options - Stack query options
|
|
28
|
+
* @returns Stack query result
|
|
29
|
+
*/
|
|
30
|
+
async function runStackQuery(catalogDns, options = {}) {
|
|
31
|
+
const { awsProfile, awsRegion, yes = false } = options;
|
|
32
|
+
console.log(`Querying CloudFormation stack for catalog: ${catalogDns}...\n`);
|
|
33
|
+
try {
|
|
34
|
+
// Use inferQuiltConfig with the confirmed catalog - this will skip quilt3 check
|
|
35
|
+
const inferenceResult = await (0, infer_quilt_config_1.inferQuiltConfig)({
|
|
36
|
+
region: awsRegion,
|
|
37
|
+
profile: awsProfile,
|
|
38
|
+
interactive: false, // Don't prompt - we already have the catalog
|
|
39
|
+
yes: true, // Auto-confirm - we already got user's catalog choice
|
|
40
|
+
catalogDns: catalogDns, // Pass the confirmed catalog
|
|
41
|
+
});
|
|
42
|
+
// Verify the inferred catalog matches our confirmed catalog
|
|
43
|
+
const normalizedInferred = inferenceResult.catalog?.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
44
|
+
const normalizedConfirmed = catalogDns.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
45
|
+
if (normalizedInferred !== normalizedConfirmed) {
|
|
46
|
+
console.log(chalk_1.default.yellow(`Warning: Inferred catalog (${normalizedInferred}) does not match confirmed catalog (${normalizedConfirmed})`));
|
|
47
|
+
}
|
|
48
|
+
// Extract data from inference result
|
|
49
|
+
if (!inferenceResult.stackArn) {
|
|
50
|
+
throw new Error(`No CloudFormation stack found for catalog: ${catalogDns}`);
|
|
51
|
+
}
|
|
52
|
+
const stackArn = inferenceResult.stackArn;
|
|
53
|
+
const database = inferenceResult.database || "quilt_catalog";
|
|
54
|
+
const queueUrl = inferenceResult.queueUrl || "";
|
|
55
|
+
const region = inferenceResult.region || awsRegion || "us-east-1";
|
|
56
|
+
const account = inferenceResult.account || "";
|
|
57
|
+
const benchlingSecretArn = inferenceResult.benchlingSecretArn;
|
|
58
|
+
// Log what we found
|
|
59
|
+
console.log(chalk_1.default.green("✓ Stack query succeeded\n"));
|
|
60
|
+
console.log(chalk_1.default.dim(`Stack ARN: ${stackArn}`));
|
|
61
|
+
console.log(chalk_1.default.dim(`Database: ${database}`));
|
|
62
|
+
console.log(chalk_1.default.dim(`Queue URL: ${queueUrl}`));
|
|
63
|
+
console.log(chalk_1.default.dim(`Region: ${region}`));
|
|
64
|
+
console.log(chalk_1.default.dim(`Account: ${account}`));
|
|
65
|
+
if (benchlingSecretArn) {
|
|
66
|
+
console.log(chalk_1.default.dim(`BenchlingSecret: ${benchlingSecretArn}`));
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
console.log(chalk_1.default.dim("BenchlingSecret: Not found in stack"));
|
|
70
|
+
}
|
|
71
|
+
console.log("");
|
|
72
|
+
return {
|
|
73
|
+
stackArn,
|
|
74
|
+
catalog: normalizedConfirmed,
|
|
75
|
+
database,
|
|
76
|
+
queueUrl,
|
|
77
|
+
region,
|
|
78
|
+
account,
|
|
79
|
+
benchlingSecretArn,
|
|
80
|
+
stackQuerySucceeded: true,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
const errorMessage = error.message;
|
|
85
|
+
console.error(chalk_1.default.red(`Stack query failed: ${errorMessage}\n`));
|
|
86
|
+
// Return partial data for graceful degradation
|
|
87
|
+
return {
|
|
88
|
+
stackArn: "",
|
|
89
|
+
catalog: catalogDns,
|
|
90
|
+
database: "quilt_catalog",
|
|
91
|
+
queueUrl: "",
|
|
92
|
+
region: awsRegion || "us-east-1",
|
|
93
|
+
account: "",
|
|
94
|
+
benchlingSecretArn: undefined,
|
|
95
|
+
stackQuerySucceeded: false,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=phase2-stack-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase2-stack-query.js","sourceRoot":"","sources":["../../../lib/wizard/phase2-stack-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 3: Parameter Collection
|
|
3
|
+
*
|
|
4
|
+
* Collects all required parameters from the user, using stack query results
|
|
5
|
+
* as defaults to avoid re-prompting.
|
|
6
|
+
*
|
|
7
|
+
* @module wizard/phase3-parameter-collection
|
|
8
|
+
*/
|
|
9
|
+
import { ParameterCollectionInput, ParameterCollectionResult } from "./types";
|
|
10
|
+
/**
|
|
11
|
+
* Phase 3: Parameter Collection
|
|
12
|
+
*
|
|
13
|
+
* Responsibilities:
|
|
14
|
+
* - Collect Benchling credentials
|
|
15
|
+
* - Collect package settings
|
|
16
|
+
* - Collect deployment configuration
|
|
17
|
+
* - Use stack query results as defaults (don't re-prompt)
|
|
18
|
+
* - Return complete configuration
|
|
19
|
+
*
|
|
20
|
+
* @param input - Parameter collection input
|
|
21
|
+
* @returns Parameter collection result
|
|
22
|
+
*/
|
|
23
|
+
export declare function runParameterCollection(input: ParameterCollectionInput): Promise<ParameterCollectionResult>;
|
|
24
|
+
//# sourceMappingURL=phase3-parameter-collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase3-parameter-collection.d.ts","sourceRoot":"","sources":["../../../lib/wizard/phase3-parameter-collection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CACxC,KAAK,EAAE,wBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CAqYpC"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 3: Parameter Collection
|
|
4
|
+
*
|
|
5
|
+
* Collects all required parameters from the user, using stack query results
|
|
6
|
+
* as defaults to avoid re-prompting.
|
|
7
|
+
*
|
|
8
|
+
* @module wizard/phase3-parameter-collection
|
|
9
|
+
*/
|
|
10
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
11
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.runParameterCollection = runParameterCollection;
|
|
15
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
16
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
17
|
+
const manifest_1 = require("../../bin/commands/manifest");
|
|
18
|
+
/**
|
|
19
|
+
* Phase 3: Parameter Collection
|
|
20
|
+
*
|
|
21
|
+
* Responsibilities:
|
|
22
|
+
* - Collect Benchling credentials
|
|
23
|
+
* - Collect package settings
|
|
24
|
+
* - Collect deployment configuration
|
|
25
|
+
* - Use stack query results as defaults (don't re-prompt)
|
|
26
|
+
* - Return complete configuration
|
|
27
|
+
*
|
|
28
|
+
* @param input - Parameter collection input
|
|
29
|
+
* @returns Parameter collection result
|
|
30
|
+
*/
|
|
31
|
+
async function runParameterCollection(input) {
|
|
32
|
+
const { stackQuery, existingConfig, yes = false } = input;
|
|
33
|
+
// =========================================================================
|
|
34
|
+
// Benchling Configuration
|
|
35
|
+
// =========================================================================
|
|
36
|
+
console.log(chalk_1.default.cyan("Benchling Configuration:"));
|
|
37
|
+
// Tenant
|
|
38
|
+
let tenant;
|
|
39
|
+
if (input.benchlingTenant) {
|
|
40
|
+
tenant = input.benchlingTenant;
|
|
41
|
+
console.log(` Tenant: ${tenant} (from CLI)`);
|
|
42
|
+
}
|
|
43
|
+
else if (yes) {
|
|
44
|
+
// In non-interactive mode, use existing config or error
|
|
45
|
+
if (existingConfig?.benchling?.tenant) {
|
|
46
|
+
tenant = existingConfig.benchling.tenant;
|
|
47
|
+
console.log(` Tenant: ${tenant} (from existing config)`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw new Error("--benchling-tenant is required in non-interactive mode");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Always show prompt with default from existing config
|
|
55
|
+
const tenantAnswer = await inquirer_1.default.prompt([
|
|
56
|
+
{
|
|
57
|
+
type: "input",
|
|
58
|
+
name: "tenant",
|
|
59
|
+
message: "Benchling Tenant:",
|
|
60
|
+
default: existingConfig?.benchling?.tenant || "",
|
|
61
|
+
validate: (value) => value.trim().length > 0 || "Tenant is required",
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
tenant = tenantAnswer.tenant;
|
|
65
|
+
}
|
|
66
|
+
// Check if we have existing app - offer to reuse or create new
|
|
67
|
+
let shouldReuseApp = true; // Default to reusing existing app
|
|
68
|
+
const catalogChanged = existingConfig?.quilt?.catalog && existingConfig.quilt.catalog !== stackQuery.catalog;
|
|
69
|
+
if (existingConfig?.benchling?.appDefinitionId && !yes) {
|
|
70
|
+
// Show catalog change warning if applicable
|
|
71
|
+
if (catalogChanged) {
|
|
72
|
+
console.log("\n" + chalk_1.default.yellow(`Catalog changed from ${existingConfig.quilt.catalog} to ${stackQuery.catalog}`));
|
|
73
|
+
}
|
|
74
|
+
// Always ask if user wants to reuse existing app or create new one
|
|
75
|
+
const { reuseApp } = await inquirer_1.default.prompt([
|
|
76
|
+
{
|
|
77
|
+
type: "list",
|
|
78
|
+
name: "reuseApp",
|
|
79
|
+
message: "Benchling app configuration:",
|
|
80
|
+
choices: [
|
|
81
|
+
{
|
|
82
|
+
name: `Use existing app (${existingConfig.benchling.appDefinitionId})`,
|
|
83
|
+
value: true,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "Create new app for this catalog",
|
|
87
|
+
value: false,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
default: true,
|
|
91
|
+
},
|
|
92
|
+
]);
|
|
93
|
+
shouldReuseApp = reuseApp;
|
|
94
|
+
if (!shouldReuseApp) {
|
|
95
|
+
console.log(chalk_1.default.dim("Will prompt for new app credentials\n"));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// App Definition ID
|
|
99
|
+
let appDefinitionId;
|
|
100
|
+
let hasAppDefId = false;
|
|
101
|
+
if (input.benchlingAppDefinitionId) {
|
|
102
|
+
appDefinitionId = input.benchlingAppDefinitionId;
|
|
103
|
+
hasAppDefId = true;
|
|
104
|
+
console.log(` App Definition ID: ${appDefinitionId} (from CLI)`);
|
|
105
|
+
}
|
|
106
|
+
else if (yes) {
|
|
107
|
+
// In non-interactive mode, use existing config or error
|
|
108
|
+
if (existingConfig?.benchling?.appDefinitionId && shouldReuseApp) {
|
|
109
|
+
appDefinitionId = existingConfig.benchling.appDefinitionId;
|
|
110
|
+
hasAppDefId = true;
|
|
111
|
+
console.log(` App Definition ID: ${appDefinitionId} (from existing config)`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new Error("--benchling-app-definition-id is required in non-interactive mode");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else if (existingConfig?.benchling?.appDefinitionId && shouldReuseApp) {
|
|
118
|
+
// Have existing app ID and user chose to reuse - show prompt with default
|
|
119
|
+
const appDefAnswer = await inquirer_1.default.prompt([
|
|
120
|
+
{
|
|
121
|
+
type: "input",
|
|
122
|
+
name: "appDefinitionId",
|
|
123
|
+
message: "Benchling App Definition ID:",
|
|
124
|
+
default: existingConfig.benchling.appDefinitionId,
|
|
125
|
+
validate: (value) => value.trim().length > 0 || "App definition ID is required",
|
|
126
|
+
},
|
|
127
|
+
]);
|
|
128
|
+
appDefinitionId = appDefAnswer.appDefinitionId;
|
|
129
|
+
hasAppDefId = true;
|
|
130
|
+
}
|
|
131
|
+
else if (!shouldReuseApp) {
|
|
132
|
+
// User explicitly chose to create new app - skip to manifest generation
|
|
133
|
+
hasAppDefId = false;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// No existing app ID and no choice made - ask if they have one
|
|
137
|
+
const hasAppDefIdAnswer = await inquirer_1.default.prompt([
|
|
138
|
+
{
|
|
139
|
+
type: "confirm",
|
|
140
|
+
name: "hasIt",
|
|
141
|
+
message: "Do you have a Benchling App Definition ID for this app?",
|
|
142
|
+
default: false,
|
|
143
|
+
},
|
|
144
|
+
]);
|
|
145
|
+
hasAppDefId = hasAppDefIdAnswer.hasIt;
|
|
146
|
+
if (hasAppDefId) {
|
|
147
|
+
// Prompt for it
|
|
148
|
+
const appDefAnswer = await inquirer_1.default.prompt([
|
|
149
|
+
{
|
|
150
|
+
type: "input",
|
|
151
|
+
name: "appDefinitionId",
|
|
152
|
+
message: "Benchling App Definition ID:",
|
|
153
|
+
validate: (value) => value.trim().length > 0 || "App definition ID is required",
|
|
154
|
+
},
|
|
155
|
+
]);
|
|
156
|
+
appDefinitionId = appDefAnswer.appDefinitionId;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (!hasAppDefId) {
|
|
160
|
+
// They don't have it - create manifest and guide them
|
|
161
|
+
console.log("\n" + chalk_1.default.blue("Creating app manifest...") + "\n");
|
|
162
|
+
await (0, manifest_1.manifestCommand)({
|
|
163
|
+
catalog: stackQuery.catalog,
|
|
164
|
+
output: "app-manifest.yaml",
|
|
165
|
+
});
|
|
166
|
+
console.log("\n" + chalk_1.default.yellow("After you have installed the app in Benchling and have the App Definition ID, you can continue.") + "\n");
|
|
167
|
+
// Now ask for the app definition ID
|
|
168
|
+
const appDefAnswer = await inquirer_1.default.prompt([
|
|
169
|
+
{
|
|
170
|
+
type: "input",
|
|
171
|
+
name: "appDefinitionId",
|
|
172
|
+
message: "Benchling App Definition ID:",
|
|
173
|
+
validate: (value) => value.trim().length > 0 || "App definition ID is required to continue",
|
|
174
|
+
},
|
|
175
|
+
]);
|
|
176
|
+
appDefinitionId = appDefAnswer.appDefinitionId;
|
|
177
|
+
}
|
|
178
|
+
// Validation: Exit if no app definition ID
|
|
179
|
+
if (!appDefinitionId || appDefinitionId.trim().length === 0) {
|
|
180
|
+
console.log("\n" + chalk_1.default.red("Setup cannot continue without an App Definition ID."));
|
|
181
|
+
console.log(chalk_1.default.yellow("Please install the app in Benchling first, then run setup again.\n"));
|
|
182
|
+
process.exit(0);
|
|
183
|
+
}
|
|
184
|
+
// OAuth Credentials
|
|
185
|
+
let clientId;
|
|
186
|
+
let clientSecret;
|
|
187
|
+
if (input.benchlingClientId && input.benchlingClientSecret) {
|
|
188
|
+
clientId = input.benchlingClientId;
|
|
189
|
+
clientSecret = input.benchlingClientSecret;
|
|
190
|
+
console.log(` Client ID: ${clientId.substring(0, 8)}... (from CLI)`);
|
|
191
|
+
console.log(" Client Secret: ******** (from CLI)");
|
|
192
|
+
}
|
|
193
|
+
else if (yes) {
|
|
194
|
+
// In non-interactive mode, use existing config or error
|
|
195
|
+
if (existingConfig?.benchling?.clientId && existingConfig?.benchling?.clientSecret && shouldReuseApp) {
|
|
196
|
+
clientId = existingConfig.benchling.clientId;
|
|
197
|
+
clientSecret = existingConfig.benchling.clientSecret;
|
|
198
|
+
console.log(` Client ID: ${clientId.substring(0, 8)}... (from existing config)`);
|
|
199
|
+
console.log(" Client Secret: ******** (from existing config)");
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
throw new Error("--benchling-client-id and --benchling-client-secret are required in non-interactive mode");
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Always show prompts with defaults from existing config (only if reusing app)
|
|
207
|
+
const hasExistingCreds = shouldReuseApp && existingConfig?.benchling?.clientId && existingConfig?.benchling?.clientSecret;
|
|
208
|
+
const credentialAnswers = await inquirer_1.default.prompt([
|
|
209
|
+
{
|
|
210
|
+
type: "input",
|
|
211
|
+
name: "clientId",
|
|
212
|
+
message: "Benchling OAuth Client ID:",
|
|
213
|
+
default: hasExistingCreds ? existingConfig?.benchling?.clientId : "",
|
|
214
|
+
validate: (value) => value.trim().length > 0 || "Client ID is required",
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
type: "password",
|
|
218
|
+
name: "clientSecret",
|
|
219
|
+
message: "Benchling OAuth Client Secret" +
|
|
220
|
+
(hasExistingCreds ? " (press Enter to keep existing):" : ":"),
|
|
221
|
+
default: hasExistingCreds ? existingConfig?.benchling?.clientSecret : "",
|
|
222
|
+
validate: (value) => {
|
|
223
|
+
// Allow empty input if we have existing credentials (will use default)
|
|
224
|
+
if (hasExistingCreds && value.trim().length === 0) {
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
return value.trim().length > 0 || "Client secret is required";
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
]);
|
|
231
|
+
clientId = credentialAnswers.clientId;
|
|
232
|
+
// If user pressed Enter with empty input and we have existing creds, use the existing secret
|
|
233
|
+
clientSecret = credentialAnswers.clientSecret.trim() === "" && hasExistingCreds
|
|
234
|
+
? existingConfig.benchling.clientSecret
|
|
235
|
+
: credentialAnswers.clientSecret;
|
|
236
|
+
}
|
|
237
|
+
// Test Entry ID (optional) - can be reused even when creating new app
|
|
238
|
+
let testEntryId;
|
|
239
|
+
if (input.benchlingTestEntryId) {
|
|
240
|
+
testEntryId = input.benchlingTestEntryId;
|
|
241
|
+
console.log(` Test Entry ID: ${testEntryId} (from CLI)`);
|
|
242
|
+
}
|
|
243
|
+
else if (yes) {
|
|
244
|
+
// In non-interactive mode, use existing config if available
|
|
245
|
+
testEntryId = existingConfig?.benchling?.testEntryId;
|
|
246
|
+
if (testEntryId) {
|
|
247
|
+
console.log(` Test Entry ID: ${testEntryId} (from existing config)`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// Always show prompt with default from existing config (even for new apps)
|
|
252
|
+
const existingTestEntryId = existingConfig?.benchling?.testEntryId;
|
|
253
|
+
const testEntryAnswer = await inquirer_1.default.prompt([
|
|
254
|
+
{
|
|
255
|
+
type: "input",
|
|
256
|
+
name: "testEntryId",
|
|
257
|
+
message: "Benchling Test Entry ID (optional)" +
|
|
258
|
+
(existingTestEntryId ? " (press Enter to keep existing):" : ":"),
|
|
259
|
+
default: existingTestEntryId || "",
|
|
260
|
+
},
|
|
261
|
+
]);
|
|
262
|
+
// Accept both empty (to keep existing) and new values
|
|
263
|
+
if (testEntryAnswer.testEntryId && testEntryAnswer.testEntryId.trim() !== "") {
|
|
264
|
+
testEntryId = testEntryAnswer.testEntryId.trim();
|
|
265
|
+
}
|
|
266
|
+
else if (existingTestEntryId) {
|
|
267
|
+
// User pressed Enter with existing value - keep it
|
|
268
|
+
testEntryId = existingTestEntryId;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// =========================================================================
|
|
272
|
+
// Package Configuration
|
|
273
|
+
// =========================================================================
|
|
274
|
+
console.log("\n" + chalk_1.default.cyan("Package Configuration:"));
|
|
275
|
+
let bucket;
|
|
276
|
+
let prefix;
|
|
277
|
+
let metadataKey;
|
|
278
|
+
if (input.userBucket && input.pkgPrefix && input.pkgKey) {
|
|
279
|
+
bucket = input.userBucket;
|
|
280
|
+
prefix = input.pkgPrefix;
|
|
281
|
+
metadataKey = input.pkgKey;
|
|
282
|
+
console.log(` Bucket: ${bucket} (from CLI)`);
|
|
283
|
+
console.log(` Prefix: ${prefix} (from CLI)`);
|
|
284
|
+
console.log(` Metadata Key: ${metadataKey} (from CLI)`);
|
|
285
|
+
}
|
|
286
|
+
else if (yes) {
|
|
287
|
+
// In non-interactive mode, use CLI args or existing config or error
|
|
288
|
+
bucket = input.userBucket || existingConfig?.packages?.bucket || "";
|
|
289
|
+
prefix = input.pkgPrefix || existingConfig?.packages?.prefix || "benchling";
|
|
290
|
+
metadataKey = input.pkgKey || existingConfig?.packages?.metadataKey || "experiment_id";
|
|
291
|
+
if (!bucket) {
|
|
292
|
+
throw new Error("--user-bucket is required in non-interactive mode");
|
|
293
|
+
}
|
|
294
|
+
console.log(` Bucket: ${bucket} (from ${input.userBucket ? 'CLI' : 'existing config'})`);
|
|
295
|
+
console.log(` Prefix: ${prefix} (from ${input.pkgPrefix ? 'CLI' : existingConfig?.packages?.prefix ? 'existing config' : 'default'})`);
|
|
296
|
+
console.log(` Metadata Key: ${metadataKey} (from ${input.pkgKey ? 'CLI' : existingConfig?.packages?.metadataKey ? 'existing config' : 'default'})`);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
// Always show prompts with defaults from existing config
|
|
300
|
+
const packageAnswers = await inquirer_1.default.prompt([
|
|
301
|
+
{
|
|
302
|
+
type: "input",
|
|
303
|
+
name: "bucket",
|
|
304
|
+
message: "Package S3 Bucket:",
|
|
305
|
+
default: existingConfig?.packages?.bucket || "",
|
|
306
|
+
validate: (value) => value.trim().length > 0 || "Bucket name is required",
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
type: "input",
|
|
310
|
+
name: "prefix",
|
|
311
|
+
message: "Package S3 prefix:",
|
|
312
|
+
default: existingConfig?.packages?.prefix || "benchling",
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
type: "input",
|
|
316
|
+
name: "metadataKey",
|
|
317
|
+
message: "Package metadata key:",
|
|
318
|
+
default: existingConfig?.packages?.metadataKey || "experiment_id",
|
|
319
|
+
},
|
|
320
|
+
]);
|
|
321
|
+
bucket = packageAnswers.bucket;
|
|
322
|
+
prefix = packageAnswers.prefix;
|
|
323
|
+
metadataKey = packageAnswers.metadataKey;
|
|
324
|
+
}
|
|
325
|
+
// =========================================================================
|
|
326
|
+
// Deployment Configuration
|
|
327
|
+
// =========================================================================
|
|
328
|
+
console.log("\n" + chalk_1.default.cyan("Deployment Configuration:"));
|
|
329
|
+
const region = stackQuery.region;
|
|
330
|
+
const account = stackQuery.account;
|
|
331
|
+
console.log(` Region: ${region} (from stack)`);
|
|
332
|
+
console.log(` Account: ${account} (from stack)`);
|
|
333
|
+
// =========================================================================
|
|
334
|
+
// Optional Configuration
|
|
335
|
+
// =========================================================================
|
|
336
|
+
console.log("\n" + chalk_1.default.cyan("Optional Configuration:"));
|
|
337
|
+
let logLevel;
|
|
338
|
+
let webhookAllowList;
|
|
339
|
+
if (input.logLevel && input.webhookAllowList !== undefined) {
|
|
340
|
+
logLevel = input.logLevel;
|
|
341
|
+
webhookAllowList = input.webhookAllowList;
|
|
342
|
+
console.log(` Log Level: ${logLevel} (from CLI)`);
|
|
343
|
+
console.log(` Webhook Allow List: ${webhookAllowList || "(none)"} (from CLI)`);
|
|
344
|
+
}
|
|
345
|
+
else if (yes) {
|
|
346
|
+
// In non-interactive mode, use CLI args or existing config or defaults
|
|
347
|
+
logLevel = input.logLevel || existingConfig?.logging?.level || "INFO";
|
|
348
|
+
webhookAllowList = input.webhookAllowList ?? existingConfig?.security?.webhookAllowList ?? "";
|
|
349
|
+
console.log(` Log Level: ${logLevel} (from ${input.logLevel ? 'CLI' : existingConfig?.logging?.level ? 'existing config' : 'default'})`);
|
|
350
|
+
console.log(` Webhook Allow List: ${webhookAllowList || "(none)"} (from ${input.webhookAllowList !== undefined ? 'CLI' : existingConfig?.security?.webhookAllowList ? 'existing config' : 'default'})`);
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
// Always show prompts with defaults from existing config
|
|
354
|
+
const optionalAnswers = await inquirer_1.default.prompt([
|
|
355
|
+
{
|
|
356
|
+
type: "list",
|
|
357
|
+
name: "logLevel",
|
|
358
|
+
message: "Log level:",
|
|
359
|
+
choices: ["DEBUG", "INFO", "WARNING", "ERROR"],
|
|
360
|
+
default: existingConfig?.logging?.level || "INFO",
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
type: "input",
|
|
364
|
+
name: "webhookAllowList",
|
|
365
|
+
message: "Webhook IP allowlist (comma-separated, empty for none):",
|
|
366
|
+
default: existingConfig?.security?.webhookAllowList || "",
|
|
367
|
+
},
|
|
368
|
+
]);
|
|
369
|
+
logLevel = optionalAnswers.logLevel;
|
|
370
|
+
webhookAllowList = optionalAnswers.webhookAllowList;
|
|
371
|
+
}
|
|
372
|
+
console.log(""); // Empty line for spacing
|
|
373
|
+
return {
|
|
374
|
+
benchling: {
|
|
375
|
+
tenant,
|
|
376
|
+
clientId,
|
|
377
|
+
clientSecret,
|
|
378
|
+
appDefinitionId,
|
|
379
|
+
testEntryId,
|
|
380
|
+
},
|
|
381
|
+
packages: {
|
|
382
|
+
bucket,
|
|
383
|
+
prefix,
|
|
384
|
+
metadataKey,
|
|
385
|
+
},
|
|
386
|
+
deployment: {
|
|
387
|
+
region,
|
|
388
|
+
account,
|
|
389
|
+
},
|
|
390
|
+
logging: {
|
|
391
|
+
level: logLevel,
|
|
392
|
+
},
|
|
393
|
+
security: {
|
|
394
|
+
enableVerification: true,
|
|
395
|
+
webhookAllowList,
|
|
396
|
+
},
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=phase3-parameter-collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase3-parameter-collection.js","sourceRoot":"","sources":["../../../lib/wizard/phase3-parameter-collection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 4: Validation
|
|
3
|
+
*
|
|
4
|
+
* Validates all collected parameters before proceeding to mode decision.
|
|
5
|
+
*
|
|
6
|
+
* @module wizard/phase4-validation
|
|
7
|
+
*/
|
|
8
|
+
import { ValidationInput, ValidationResult } from "./types";
|
|
9
|
+
/**
|
|
10
|
+
* Phase 4: Validation
|
|
11
|
+
*
|
|
12
|
+
* Responsibilities:
|
|
13
|
+
* - Validate Benchling credentials (OAuth test)
|
|
14
|
+
* - Validate S3 bucket access
|
|
15
|
+
* - Validate app definition ID exists
|
|
16
|
+
* - Return validation result with errors
|
|
17
|
+
*
|
|
18
|
+
* @param input - Validation input
|
|
19
|
+
* @returns Validation result
|
|
20
|
+
*/
|
|
21
|
+
export declare function runValidation(input: ValidationInput): Promise<ValidationResult>;
|
|
22
|
+
//# sourceMappingURL=phase4-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase4-validation.d.ts","sourceRoot":"","sources":["../../../lib/wizard/phase4-validation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAsO5D;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4DrF"}
|