@quiltdata/benchling-webhook 0.7.7 → 0.7.9
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 +73 -11
- package/dist/bin/cli.js +159 -5
- 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 +4 -0
- package/dist/bin/commands/infer-quilt-config.d.ts.map +1 -1
- package/dist/bin/commands/infer-quilt-config.js +87 -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 +42 -7
- package/dist/bin/commands/install.js.map +1 -1
- package/dist/bin/commands/logs.d.ts +30 -0
- package/dist/bin/commands/logs.d.ts.map +1 -0
- package/dist/bin/commands/logs.js +276 -0
- package/dist/bin/commands/logs.js.map +1 -0
- 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 +240 -742
- package/dist/bin/commands/setup-wizard.js.map +1 -1
- package/dist/bin/commands/status.d.ts +38 -0
- package/dist/bin/commands/status.d.ts.map +1 -0
- package/dist/bin/commands/status.js +171 -0
- package/dist/bin/commands/status.js.map +1 -0
- 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/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +3 -1
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/next-steps-generator.js +25 -4
- package/dist/lib/next-steps-generator.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/utils/stack-parameter-update.d.ts +37 -0
- package/dist/lib/utils/stack-parameter-update.d.ts.map +1 -0
- package/dist/lib/utils/stack-parameter-update.js +129 -0
- package/dist/lib/utils/stack-parameter-update.js.map +1 -0
- 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 +105 -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 +389 -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 +25 -0
- package/dist/lib/wizard/phase6-integrated-mode.d.ts.map +1 -0
- package/dist/lib/wizard/phase6-integrated-mode.js +230 -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 +178 -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/dist/scripts/check-logs.d.ts +9 -2
- package/dist/scripts/check-logs.d.ts.map +1 -1
- package/dist/scripts/check-logs.js +26 -2
- package/dist/scripts/check-logs.js.map +1 -1
- 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
package/dist/lib/utils/config.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration Utilities
|
|
4
|
+
*
|
|
5
|
+
* Legacy configuration types and utility functions.
|
|
6
|
+
* Most configuration loading now happens via XDG profiles (see lib/xdg-config.ts).
|
|
7
|
+
*/
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.getQuilt3Catalog = getQuilt3Catalog;
|
|
4
|
-
exports.loadDotenv = loadDotenv;
|
|
5
10
|
exports.processBenchlingSecretsInput = processBenchlingSecretsInput;
|
|
6
11
|
exports.maskArn = maskArn;
|
|
7
|
-
exports.loadConfigSync = loadConfigSync;
|
|
8
|
-
exports.mergeInferredConfig = mergeInferredConfig;
|
|
9
12
|
exports.validateConfig = validateConfig;
|
|
10
13
|
exports.formatValidationErrors = formatValidationErrors;
|
|
11
|
-
const dotenv_1 = require("dotenv");
|
|
12
|
-
const dotenv_expand_1 = require("dotenv-expand");
|
|
13
14
|
const fs_1 = require("fs");
|
|
14
15
|
const path_1 = require("path");
|
|
15
16
|
const child_process_1 = require("child_process");
|
|
@@ -34,24 +35,6 @@ function getQuilt3Catalog() {
|
|
|
34
35
|
}
|
|
35
36
|
return undefined;
|
|
36
37
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Load .env file and expand variables
|
|
39
|
-
*/
|
|
40
|
-
function loadDotenv(filePath) {
|
|
41
|
-
const resolvedPath = (0, path_1.resolve)(filePath);
|
|
42
|
-
if (!(0, fs_1.existsSync)(resolvedPath)) {
|
|
43
|
-
return {};
|
|
44
|
-
}
|
|
45
|
-
const result = (0, dotenv_1.config)({ path: resolvedPath });
|
|
46
|
-
if (result.error) {
|
|
47
|
-
throw new Error(`Failed to load ${filePath}: ${result.error.message}`);
|
|
48
|
-
}
|
|
49
|
-
// Expand variables like ${VAR}
|
|
50
|
-
if (result.parsed) {
|
|
51
|
-
(0, dotenv_expand_1.expand)(result);
|
|
52
|
-
}
|
|
53
|
-
return result.parsed || {};
|
|
54
|
-
}
|
|
55
38
|
/**
|
|
56
39
|
* Process benchling-secrets parameter, handling @file.json syntax
|
|
57
40
|
*
|
|
@@ -130,71 +113,6 @@ function maskArn(arn) {
|
|
|
130
113
|
// Return as-is if pattern doesn't match
|
|
131
114
|
return arn;
|
|
132
115
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Load configuration from multiple sources with priority:
|
|
135
|
-
* 1. CLI options (highest)
|
|
136
|
-
* 2. Environment variables
|
|
137
|
-
* 3. .env file
|
|
138
|
-
* 4. quilt3 config (for catalog only)
|
|
139
|
-
* 5. Inferred values (will be added separately)
|
|
140
|
-
*/
|
|
141
|
-
function loadConfigSync(options = {}) {
|
|
142
|
-
// 1. Load .env file
|
|
143
|
-
const envFile = options.envFile || ".env";
|
|
144
|
-
const dotenvVars = (0, fs_1.existsSync)(envFile) ? loadDotenv(envFile) : {};
|
|
145
|
-
// 2. Merge with process.env
|
|
146
|
-
const envVars = { ...dotenvVars, ...process.env };
|
|
147
|
-
// 3. Try to get catalog from quilt3 config as fallback
|
|
148
|
-
const quilt3Catalog = getQuilt3Catalog();
|
|
149
|
-
// 4. Build config with CLI options taking priority
|
|
150
|
-
const config = {
|
|
151
|
-
// Quilt
|
|
152
|
-
quiltCatalog: options.catalog || envVars.QUILT_CATALOG || quilt3Catalog,
|
|
153
|
-
quiltUserBucket: options.bucket || envVars.QUILT_USER_BUCKET,
|
|
154
|
-
quiltDatabase: envVars.QUILT_DATABASE,
|
|
155
|
-
// Benchling
|
|
156
|
-
benchlingTenant: options.tenant || envVars.BENCHLING_TENANT,
|
|
157
|
-
benchlingClientId: options.clientId || envVars.BENCHLING_CLIENT_ID,
|
|
158
|
-
benchlingClientSecret: options.clientSecret || envVars.BENCHLING_CLIENT_SECRET,
|
|
159
|
-
benchlingAppDefinitionId: options.appId || envVars.BENCHLING_APP_DEFINITION_ID,
|
|
160
|
-
// Unified secrets (priority: CLI > env > .env)
|
|
161
|
-
// Process file input syntax (@file.json) if present
|
|
162
|
-
benchlingSecrets: (() => {
|
|
163
|
-
const rawSecrets = options.benchlingSecrets || envVars.BENCHLING_SECRETS;
|
|
164
|
-
return rawSecrets ? processBenchlingSecretsInput(rawSecrets) : undefined;
|
|
165
|
-
})(),
|
|
166
|
-
// AWS
|
|
167
|
-
cdkAccount: envVars.CDK_DEFAULT_ACCOUNT,
|
|
168
|
-
cdkRegion: options.region || envVars.CDK_DEFAULT_REGION || envVars.AWS_REGION,
|
|
169
|
-
awsProfile: options.profile || envVars.AWS_PROFILE,
|
|
170
|
-
// SQS
|
|
171
|
-
queueUrl: envVars.QUEUE_URL,
|
|
172
|
-
// Optional
|
|
173
|
-
pkgPrefix: envVars.PKG_PREFIX || "benchling",
|
|
174
|
-
pkgKey: envVars.PKG_KEY || "experiment_id",
|
|
175
|
-
logLevel: envVars.LOG_LEVEL || "INFO",
|
|
176
|
-
webhookAllowList: envVars.WEBHOOK_ALLOW_LIST,
|
|
177
|
-
enableWebhookVerification: envVars.ENABLE_WEBHOOK_VERIFICATION ?? "true",
|
|
178
|
-
createEcrRepository: envVars.CREATE_ECR_REPOSITORY,
|
|
179
|
-
ecrRepositoryName: envVars.ECR_REPOSITORY_NAME || "quiltdata/benchling",
|
|
180
|
-
imageTag: options.imageTag || envVars.IMAGE_TAG || "latest",
|
|
181
|
-
};
|
|
182
|
-
// Remove undefined values
|
|
183
|
-
return Object.fromEntries(Object.entries(config).filter(([, v]) => v !== undefined));
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Merge inferred configuration with loaded config
|
|
187
|
-
*/
|
|
188
|
-
function mergeInferredConfig(config, inferredVars) {
|
|
189
|
-
// Only use inferred values if not already set
|
|
190
|
-
return {
|
|
191
|
-
cdkAccount: config.cdkAccount || inferredVars.CDK_DEFAULT_ACCOUNT,
|
|
192
|
-
cdkRegion: config.cdkRegion || inferredVars.CDK_DEFAULT_REGION,
|
|
193
|
-
queueUrl: config.queueUrl || inferredVars.QUEUE_URL,
|
|
194
|
-
quiltDatabase: config.quiltDatabase || inferredVars.QUILT_DATABASE,
|
|
195
|
-
...config, // User values always take precedence
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
116
|
/**
|
|
199
117
|
* Validate configuration and return detailed errors
|
|
200
118
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../lib/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudFormation stack parameter update utility
|
|
3
|
+
*
|
|
4
|
+
* Provides safe parameter updates with UsePreviousValue for all other parameters
|
|
5
|
+
*
|
|
6
|
+
* @module utils/stack-parameter-update
|
|
7
|
+
*/
|
|
8
|
+
export interface StackParameterUpdateOptions {
|
|
9
|
+
stackArn: string;
|
|
10
|
+
region: string;
|
|
11
|
+
parameterKey: string;
|
|
12
|
+
parameterValue: string;
|
|
13
|
+
awsProfile?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface StackParameterUpdateResult {
|
|
16
|
+
success: boolean;
|
|
17
|
+
stackId?: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Updates a single CloudFormation stack parameter while preserving all others
|
|
22
|
+
*
|
|
23
|
+
* @param options - Update options
|
|
24
|
+
* @returns Update result
|
|
25
|
+
*/
|
|
26
|
+
export declare function updateStackParameter(options: StackParameterUpdateOptions): Promise<StackParameterUpdateResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Gets current value of a stack parameter
|
|
29
|
+
*
|
|
30
|
+
* @param stackArn - Stack ARN
|
|
31
|
+
* @param region - AWS region
|
|
32
|
+
* @param parameterKey - Parameter key to query
|
|
33
|
+
* @param awsProfile - Optional AWS profile
|
|
34
|
+
* @returns Parameter value or undefined if not found
|
|
35
|
+
*/
|
|
36
|
+
export declare function getStackParameter(stackArn: string, region: string, parameterKey: string, awsProfile?: string): Promise<string | undefined>;
|
|
37
|
+
//# sourceMappingURL=stack-parameter-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-parameter-update.d.ts","sourceRoot":"","sources":["../../../lib/utils/stack-parameter-update.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,2BAA2B;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,0BAA0B;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACtC,OAAO,EAAE,2BAA2B,GACrC,OAAO,CAAC,0BAA0B,CAAC,CA0ErC;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8B7B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CloudFormation stack parameter update utility
|
|
4
|
+
*
|
|
5
|
+
* Provides safe parameter updates with UsePreviousValue for all other parameters
|
|
6
|
+
*
|
|
7
|
+
* @module utils/stack-parameter-update
|
|
8
|
+
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.updateStackParameter = updateStackParameter;
|
|
14
|
+
exports.getStackParameter = getStackParameter;
|
|
15
|
+
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
16
|
+
const credential_providers_1 = require("@aws-sdk/credential-providers");
|
|
17
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
+
/**
|
|
19
|
+
* Updates a single CloudFormation stack parameter while preserving all others
|
|
20
|
+
*
|
|
21
|
+
* @param options - Update options
|
|
22
|
+
* @returns Update result
|
|
23
|
+
*/
|
|
24
|
+
async function updateStackParameter(options) {
|
|
25
|
+
const { stackArn, region, parameterKey, parameterValue, awsProfile } = options;
|
|
26
|
+
try {
|
|
27
|
+
// Extract stack name from ARN
|
|
28
|
+
// ARN format: arn:aws:cloudformation:REGION:ACCOUNT:stack/STACK_NAME/STACK_ID
|
|
29
|
+
const stackNameMatch = stackArn.match(/stack\/([^\/]+)\//);
|
|
30
|
+
if (!stackNameMatch) {
|
|
31
|
+
throw new Error(`Invalid stack ARN format: ${stackArn}`);
|
|
32
|
+
}
|
|
33
|
+
const stackName = stackNameMatch[1];
|
|
34
|
+
// Configure AWS SDK client
|
|
35
|
+
const clientConfig = { region };
|
|
36
|
+
if (awsProfile) {
|
|
37
|
+
clientConfig.credentials = (0, credential_providers_1.fromIni)({ profile: awsProfile });
|
|
38
|
+
}
|
|
39
|
+
const client = new client_cloudformation_1.CloudFormationClient(clientConfig);
|
|
40
|
+
// Get current stack parameters
|
|
41
|
+
const describeCommand = new client_cloudformation_1.DescribeStacksCommand({
|
|
42
|
+
StackName: stackName,
|
|
43
|
+
});
|
|
44
|
+
const describeResponse = await client.send(describeCommand);
|
|
45
|
+
const stack = describeResponse.Stacks?.[0];
|
|
46
|
+
if (!stack) {
|
|
47
|
+
throw new Error(`Stack not found: ${stackName}`);
|
|
48
|
+
}
|
|
49
|
+
const currentParameters = stack.Parameters || [];
|
|
50
|
+
// Build parameter list: update target parameter, preserve all others
|
|
51
|
+
const parameters = currentParameters.map((param) => {
|
|
52
|
+
if (param.ParameterKey === parameterKey) {
|
|
53
|
+
return {
|
|
54
|
+
ParameterKey: parameterKey,
|
|
55
|
+
ParameterValue: parameterValue,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return {
|
|
60
|
+
ParameterKey: param.ParameterKey,
|
|
61
|
+
UsePreviousValue: true,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Update stack
|
|
66
|
+
const updateCommand = new client_cloudformation_1.UpdateStackCommand({
|
|
67
|
+
StackName: stackName,
|
|
68
|
+
Parameters: parameters,
|
|
69
|
+
UsePreviousTemplate: true, // CRITICAL: Don't change template
|
|
70
|
+
Capabilities: stack.Capabilities, // Preserve capabilities
|
|
71
|
+
});
|
|
72
|
+
const updateResponse = await client.send(updateCommand);
|
|
73
|
+
return {
|
|
74
|
+
success: true,
|
|
75
|
+
stackId: updateResponse.StackId,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const err = error;
|
|
80
|
+
// CloudFormation returns specific error if no updates are needed
|
|
81
|
+
if (err.message?.includes("No updates are to be performed")) {
|
|
82
|
+
return {
|
|
83
|
+
success: true, // Not really an error
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
success: false,
|
|
88
|
+
error: err.message,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets current value of a stack parameter
|
|
94
|
+
*
|
|
95
|
+
* @param stackArn - Stack ARN
|
|
96
|
+
* @param region - AWS region
|
|
97
|
+
* @param parameterKey - Parameter key to query
|
|
98
|
+
* @param awsProfile - Optional AWS profile
|
|
99
|
+
* @returns Parameter value or undefined if not found
|
|
100
|
+
*/
|
|
101
|
+
async function getStackParameter(stackArn, region, parameterKey, awsProfile) {
|
|
102
|
+
try {
|
|
103
|
+
const stackNameMatch = stackArn.match(/stack\/([^\/]+)\//);
|
|
104
|
+
if (!stackNameMatch) {
|
|
105
|
+
throw new Error(`Invalid stack ARN format: ${stackArn}`);
|
|
106
|
+
}
|
|
107
|
+
const stackName = stackNameMatch[1];
|
|
108
|
+
const clientConfig = { region };
|
|
109
|
+
if (awsProfile) {
|
|
110
|
+
clientConfig.credentials = (0, credential_providers_1.fromIni)({ profile: awsProfile });
|
|
111
|
+
}
|
|
112
|
+
const client = new client_cloudformation_1.CloudFormationClient(clientConfig);
|
|
113
|
+
const describeCommand = new client_cloudformation_1.DescribeStacksCommand({
|
|
114
|
+
StackName: stackName,
|
|
115
|
+
});
|
|
116
|
+
const describeResponse = await client.send(describeCommand);
|
|
117
|
+
const stack = describeResponse.Stacks?.[0];
|
|
118
|
+
if (!stack) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
const param = stack.Parameters?.find((p) => p.ParameterKey === parameterKey);
|
|
122
|
+
return param?.ParameterValue;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.warn(chalk_1.default.yellow(`Warning: Could not get parameter ${parameterKey}: ${error.message}`));
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=stack-parameter-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-parameter-update.js","sourceRoot":"","sources":["../../../lib/utils/stack-parameter-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 1: Catalog Discovery
|
|
3
|
+
*
|
|
4
|
+
* Detects and confirms the Quilt catalog DNS name.
|
|
5
|
+
* Does NOT query AWS - only reads local quilt3 config.
|
|
6
|
+
*
|
|
7
|
+
* @module wizard/phase1-catalog-discovery
|
|
8
|
+
*/
|
|
9
|
+
import { CatalogDiscoveryResult } from "./types";
|
|
10
|
+
/**
|
|
11
|
+
* Phase 1 options
|
|
12
|
+
*/
|
|
13
|
+
export interface CatalogDiscoveryOptions {
|
|
14
|
+
/** Non-interactive mode (skip prompts) */
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
/** Catalog URL provided via CLI */
|
|
17
|
+
catalogUrl?: string;
|
|
18
|
+
/** Existing catalog from loaded profile (takes precedence over detection) */
|
|
19
|
+
existingCatalog?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Phase 1: Catalog Discovery
|
|
23
|
+
*
|
|
24
|
+
* Responsibilities:
|
|
25
|
+
* - Check existing config first (highest priority)
|
|
26
|
+
* - Read quilt3 CLI config as fallback
|
|
27
|
+
* - Ask user to confirm detected catalog
|
|
28
|
+
* - If not confirmed, prompt for manual entry
|
|
29
|
+
* - Return confirmed catalog DNS
|
|
30
|
+
*
|
|
31
|
+
* Priority order:
|
|
32
|
+
* 1. CLI argument (--catalog-url)
|
|
33
|
+
* 2. Existing profile config
|
|
34
|
+
* 3. quilt3 CLI detection
|
|
35
|
+
* 4. Manual entry prompt
|
|
36
|
+
*
|
|
37
|
+
* @param options - Catalog discovery options
|
|
38
|
+
* @returns Catalog discovery result
|
|
39
|
+
*/
|
|
40
|
+
export declare function runCatalogDiscovery(options: CatalogDiscoveryOptions): Promise<CatalogDiscoveryResult>;
|
|
41
|
+
//# sourceMappingURL=phase1-catalog-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase1-catalog-discovery.d.ts","sourceRoot":"","sources":["../../../lib/wizard/phase1-catalog-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAwDD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,uBAAuB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CA4IjC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase 1: Catalog Discovery
|
|
4
|
+
*
|
|
5
|
+
* Detects and confirms the Quilt catalog DNS name.
|
|
6
|
+
* Does NOT query AWS - only reads local quilt3 config.
|
|
7
|
+
*
|
|
8
|
+
* @module wizard/phase1-catalog-discovery
|
|
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.runCatalogDiscovery = runCatalogDiscovery;
|
|
15
|
+
const child_process_1 = require("child_process");
|
|
16
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
17
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
+
/**
|
|
19
|
+
* Attempts to detect catalog from quilt3 CLI config
|
|
20
|
+
*
|
|
21
|
+
* @returns Catalog URL from quilt3 config, or null if not found
|
|
22
|
+
*/
|
|
23
|
+
function detectQuilt3Catalog() {
|
|
24
|
+
try {
|
|
25
|
+
const output = (0, child_process_1.execSync)("quilt3 config", {
|
|
26
|
+
encoding: "utf-8",
|
|
27
|
+
stdio: ["pipe", "pipe", "ignore"],
|
|
28
|
+
});
|
|
29
|
+
const catalogUrl = output.trim();
|
|
30
|
+
if (catalogUrl && catalogUrl.startsWith("http")) {
|
|
31
|
+
return catalogUrl;
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// quilt3 command not available or failed
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Normalizes catalog URL to DNS format (removes protocol, trailing slash)
|
|
42
|
+
*
|
|
43
|
+
* @param catalogUrl - Raw catalog URL
|
|
44
|
+
* @returns Normalized DNS name
|
|
45
|
+
*/
|
|
46
|
+
function normalizeCatalogDns(catalogUrl) {
|
|
47
|
+
return catalogUrl.replace(/^https?:\/\//, "").replace(/\/$/, "");
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Validates catalog DNS format
|
|
51
|
+
*
|
|
52
|
+
* @param catalogDns - Catalog DNS to validate
|
|
53
|
+
* @returns True if valid, error message otherwise
|
|
54
|
+
*/
|
|
55
|
+
function validateCatalogDns(catalogDns) {
|
|
56
|
+
const trimmed = catalogDns.trim();
|
|
57
|
+
if (trimmed.length === 0) {
|
|
58
|
+
return "Catalog DNS name is required";
|
|
59
|
+
}
|
|
60
|
+
// Basic DNS validation (allow alphanumeric, dots, hyphens)
|
|
61
|
+
if (!/^[a-zA-Z0-9.-]+$/.test(trimmed)) {
|
|
62
|
+
return "Invalid DNS name format";
|
|
63
|
+
}
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Phase 1: Catalog Discovery
|
|
68
|
+
*
|
|
69
|
+
* Responsibilities:
|
|
70
|
+
* - Check existing config first (highest priority)
|
|
71
|
+
* - Read quilt3 CLI config as fallback
|
|
72
|
+
* - Ask user to confirm detected catalog
|
|
73
|
+
* - If not confirmed, prompt for manual entry
|
|
74
|
+
* - Return confirmed catalog DNS
|
|
75
|
+
*
|
|
76
|
+
* Priority order:
|
|
77
|
+
* 1. CLI argument (--catalog-url)
|
|
78
|
+
* 2. Existing profile config
|
|
79
|
+
* 3. quilt3 CLI detection
|
|
80
|
+
* 4. Manual entry prompt
|
|
81
|
+
*
|
|
82
|
+
* @param options - Catalog discovery options
|
|
83
|
+
* @returns Catalog discovery result
|
|
84
|
+
*/
|
|
85
|
+
async function runCatalogDiscovery(options) {
|
|
86
|
+
const { yes = false, catalogUrl: cliCatalogUrl, existingCatalog } = options;
|
|
87
|
+
// If catalog provided via CLI, use it directly
|
|
88
|
+
if (cliCatalogUrl) {
|
|
89
|
+
const catalogDns = normalizeCatalogDns(cliCatalogUrl);
|
|
90
|
+
console.log(chalk_1.default.blue(`Using catalog from CLI: ${catalogDns}\n`));
|
|
91
|
+
return {
|
|
92
|
+
catalogDns,
|
|
93
|
+
wasManuallyEntered: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// If existing config has a catalog, prioritize it over detection
|
|
97
|
+
if (existingCatalog) {
|
|
98
|
+
const catalogDns = normalizeCatalogDns(existingCatalog);
|
|
99
|
+
console.log(chalk_1.default.blue(`Using catalog from existing profile: ${catalogDns}\n`));
|
|
100
|
+
// In --yes mode, use existing catalog automatically
|
|
101
|
+
if (yes) {
|
|
102
|
+
return {
|
|
103
|
+
catalogDns,
|
|
104
|
+
wasManuallyEntered: false,
|
|
105
|
+
detectedCatalog: catalogDns,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Ask user to confirm existing catalog
|
|
109
|
+
const { isCorrect } = await inquirer_1.default.prompt([
|
|
110
|
+
{
|
|
111
|
+
type: "confirm",
|
|
112
|
+
name: "isCorrect",
|
|
113
|
+
message: `Is ${catalogDns} the correct catalog?`,
|
|
114
|
+
default: true,
|
|
115
|
+
},
|
|
116
|
+
]);
|
|
117
|
+
if (isCorrect) {
|
|
118
|
+
return {
|
|
119
|
+
catalogDns,
|
|
120
|
+
wasManuallyEntered: false,
|
|
121
|
+
detectedCatalog: catalogDns,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// User declined, ask for manual entry
|
|
125
|
+
const { manualCatalog } = await inquirer_1.default.prompt([
|
|
126
|
+
{
|
|
127
|
+
type: "input",
|
|
128
|
+
name: "manualCatalog",
|
|
129
|
+
message: "Enter catalog DNS name:",
|
|
130
|
+
validate: validateCatalogDns,
|
|
131
|
+
filter: normalizeCatalogDns,
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
134
|
+
return {
|
|
135
|
+
catalogDns: manualCatalog,
|
|
136
|
+
wasManuallyEntered: true,
|
|
137
|
+
detectedCatalog: catalogDns,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Try to detect catalog from quilt3 CLI
|
|
141
|
+
const detectedCatalog = detectQuilt3Catalog();
|
|
142
|
+
if (detectedCatalog) {
|
|
143
|
+
const catalogDns = normalizeCatalogDns(detectedCatalog);
|
|
144
|
+
console.log(chalk_1.default.blue(`Detected catalog: ${catalogDns}\n`));
|
|
145
|
+
// In --yes mode, use detected catalog automatically
|
|
146
|
+
if (yes) {
|
|
147
|
+
return {
|
|
148
|
+
catalogDns,
|
|
149
|
+
wasManuallyEntered: false,
|
|
150
|
+
detectedCatalog: catalogDns,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Ask user to confirm
|
|
154
|
+
const { isCorrect } = await inquirer_1.default.prompt([
|
|
155
|
+
{
|
|
156
|
+
type: "confirm",
|
|
157
|
+
name: "isCorrect",
|
|
158
|
+
message: `Is ${catalogDns} the correct catalog?`,
|
|
159
|
+
default: true,
|
|
160
|
+
},
|
|
161
|
+
]);
|
|
162
|
+
if (isCorrect) {
|
|
163
|
+
return {
|
|
164
|
+
catalogDns,
|
|
165
|
+
wasManuallyEntered: false,
|
|
166
|
+
detectedCatalog: catalogDns,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
// User declined, ask for manual entry
|
|
170
|
+
const { manualCatalog } = await inquirer_1.default.prompt([
|
|
171
|
+
{
|
|
172
|
+
type: "input",
|
|
173
|
+
name: "manualCatalog",
|
|
174
|
+
message: "Enter catalog DNS name:",
|
|
175
|
+
validate: validateCatalogDns,
|
|
176
|
+
filter: normalizeCatalogDns,
|
|
177
|
+
},
|
|
178
|
+
]);
|
|
179
|
+
return {
|
|
180
|
+
catalogDns: manualCatalog,
|
|
181
|
+
wasManuallyEntered: true,
|
|
182
|
+
detectedCatalog: catalogDns,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
// No catalog detected
|
|
186
|
+
console.log(chalk_1.default.yellow("No quilt3 CLI configuration detected.\n"));
|
|
187
|
+
if (yes) {
|
|
188
|
+
throw new Error("No catalog detected and --yes flag prevents interactive prompt. " +
|
|
189
|
+
"Provide catalog URL via --catalog-url argument.");
|
|
190
|
+
}
|
|
191
|
+
// Prompt for manual entry
|
|
192
|
+
const { manualCatalog } = await inquirer_1.default.prompt([
|
|
193
|
+
{
|
|
194
|
+
type: "input",
|
|
195
|
+
name: "manualCatalog",
|
|
196
|
+
message: "Enter Quilt Catalog DNS name (e.g., open.quiltdata.com):",
|
|
197
|
+
validate: validateCatalogDns,
|
|
198
|
+
filter: normalizeCatalogDns,
|
|
199
|
+
},
|
|
200
|
+
]);
|
|
201
|
+
return {
|
|
202
|
+
catalogDns: manualCatalog,
|
|
203
|
+
wasManuallyEntered: true,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=phase1-catalog-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase1-catalog-discovery.js","sourceRoot":"","sources":["../../../lib/wizard/phase1-catalog-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 2: Stack Query
|
|
3
|
+
*
|
|
4
|
+
* Queries CloudFormation stack for the confirmed catalog and extracts
|
|
5
|
+
* all available parameters including BenchlingSecret ARN.
|
|
6
|
+
*
|
|
7
|
+
* @module wizard/phase2-stack-query
|
|
8
|
+
*/
|
|
9
|
+
import { StackQueryResult } from "./types";
|
|
10
|
+
/**
|
|
11
|
+
* Phase 2 options
|
|
12
|
+
*/
|
|
13
|
+
export interface StackQueryOptions {
|
|
14
|
+
/** AWS profile to use for querying */
|
|
15
|
+
awsProfile?: string;
|
|
16
|
+
/** AWS region to search in */
|
|
17
|
+
awsRegion?: string;
|
|
18
|
+
/** Non-interactive mode */
|
|
19
|
+
yes?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Phase 2: Stack Query
|
|
23
|
+
*
|
|
24
|
+
* Responsibilities:
|
|
25
|
+
* - Query CloudFormation stack for the confirmed catalog
|
|
26
|
+
* - Extract ALL available parameters from stack
|
|
27
|
+
* - Handle stack query failures gracefully
|
|
28
|
+
* - Return stack configuration
|
|
29
|
+
*
|
|
30
|
+
* @param catalogDns - Confirmed catalog DNS name
|
|
31
|
+
* @param options - Stack query options
|
|
32
|
+
* @returns Stack query result
|
|
33
|
+
*/
|
|
34
|
+
export declare function runStackQuery(catalogDns: string, options?: StackQueryOptions): Promise<StackQueryResult>;
|
|
35
|
+
//# sourceMappingURL=phase2-stack-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase2-stack-query.d.ts","sourceRoot":"","sources":["../../../lib/wizard/phase2-stack-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,iBAAsB,GAChC,OAAO,CAAC,gBAAgB,CAAC,CAsF3B"}
|