@quiltdata/benchling-webhook 0.5.4 ā 0.6.0
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 +273 -10
- package/dist/bin/benchling-webhook.d.ts +1 -1
- package/dist/bin/benchling-webhook.d.ts.map +1 -1
- package/dist/bin/benchling-webhook.js +8 -22
- package/dist/bin/benchling-webhook.js.map +1 -1
- package/dist/bin/cdk-dev.js +59 -3
- package/dist/bin/cli.js +16 -6
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/commands/deploy.d.ts +6 -2
- package/dist/bin/commands/deploy.d.ts.map +1 -1
- package/dist/bin/commands/deploy.js +149 -90
- package/dist/bin/commands/deploy.js.map +1 -1
- package/dist/bin/config-profiles.d.ts +59 -0
- package/dist/bin/config-profiles.d.ts.map +1 -0
- package/dist/bin/config-profiles.js +272 -0
- package/dist/bin/config-profiles.js.map +1 -0
- package/dist/bin/create-secret.d.ts +25 -0
- package/dist/bin/create-secret.d.ts.map +1 -0
- package/dist/bin/create-secret.js +239 -0
- package/dist/bin/create-secret.js.map +1 -0
- package/dist/lib/benchling-auth-validator.d.ts +65 -0
- package/dist/lib/benchling-auth-validator.d.ts.map +1 -0
- package/dist/lib/benchling-auth-validator.js +213 -0
- package/dist/lib/benchling-auth-validator.js.map +1 -0
- package/dist/lib/benchling-webhook-stack.d.ts +13 -10
- package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
- package/dist/lib/benchling-webhook-stack.js +25 -69
- package/dist/lib/benchling-webhook-stack.js.map +1 -1
- package/dist/lib/config-logger.d.ts +191 -0
- package/dist/lib/config-logger.d.ts.map +1 -0
- package/dist/lib/config-logger.js +372 -0
- package/dist/lib/config-logger.js.map +1 -0
- package/dist/lib/configuration-saver.d.ts +75 -0
- package/dist/lib/configuration-saver.d.ts.map +1 -0
- package/dist/lib/configuration-saver.js +145 -0
- package/dist/lib/configuration-saver.js.map +1 -0
- package/dist/lib/configuration-validator.d.ts +63 -0
- package/dist/lib/configuration-validator.d.ts.map +1 -0
- package/dist/lib/configuration-validator.js +136 -0
- package/dist/lib/configuration-validator.js.map +1 -0
- package/dist/lib/configuration-wizard.d.ts +52 -0
- package/dist/lib/configuration-wizard.d.ts.map +1 -0
- package/dist/lib/configuration-wizard.js +193 -0
- package/dist/lib/configuration-wizard.js.map +1 -0
- package/dist/lib/fargate-service.d.ts +18 -9
- package/dist/lib/fargate-service.d.ts.map +1 -1
- package/dist/lib/fargate-service.js +177 -61
- package/dist/lib/fargate-service.js.map +1 -1
- package/dist/lib/quilt-config-resolver.d.ts +53 -0
- package/dist/lib/quilt-config-resolver.d.ts.map +1 -0
- package/dist/lib/quilt-config-resolver.js +100 -0
- package/dist/lib/quilt-config-resolver.js.map +1 -0
- package/dist/lib/s3-bucket-validator.d.ts +76 -0
- package/dist/lib/s3-bucket-validator.d.ts.map +1 -0
- package/dist/lib/s3-bucket-validator.js +237 -0
- package/dist/lib/s3-bucket-validator.js.map +1 -0
- package/dist/lib/types/config.d.ts +398 -0
- package/dist/lib/types/config.d.ts.map +1 -0
- package/dist/lib/types/config.js +11 -0
- package/dist/lib/types/config.js.map +1 -0
- package/dist/lib/utils/config-loader.d.ts +48 -0
- package/dist/lib/utils/config-loader.d.ts.map +1 -0
- package/dist/lib/utils/config-loader.js +109 -0
- package/dist/lib/utils/config-loader.js.map +1 -0
- package/dist/lib/utils/config-resolver.d.ts +138 -0
- package/dist/lib/utils/config-resolver.d.ts.map +1 -0
- package/dist/lib/utils/config-resolver.js +272 -0
- package/dist/lib/utils/config-resolver.js.map +1 -0
- package/dist/lib/utils/config.d.ts +50 -0
- package/dist/lib/utils/config.d.ts.map +1 -1
- package/dist/lib/utils/config.js +86 -0
- package/dist/lib/utils/config.js.map +1 -1
- package/dist/lib/utils/secrets.d.ts +174 -0
- package/dist/lib/utils/secrets.d.ts.map +1 -0
- package/dist/lib/utils/secrets.js +351 -0
- package/dist/lib/utils/secrets.js.map +1 -0
- package/dist/lib/xdg-cli-wrapper.d.ts +113 -0
- package/dist/lib/xdg-cli-wrapper.d.ts.map +1 -0
- package/dist/lib/xdg-cli-wrapper.js +288 -0
- package/dist/lib/xdg-cli-wrapper.js.map +1 -0
- package/dist/lib/xdg-config.d.ts +187 -0
- package/dist/lib/xdg-config.d.ts.map +1 -0
- package/dist/lib/xdg-config.js +562 -0
- package/dist/lib/xdg-config.js.map +1 -0
- package/dist/package.json +33 -25
- package/dist/scripts/config-health-check.d.ts +78 -0
- package/dist/scripts/config-health-check.d.ts.map +1 -0
- package/dist/scripts/config-health-check.js +559 -0
- package/dist/scripts/config-health-check.js.map +1 -0
- package/dist/scripts/infer-quilt-config.d.ts +50 -0
- package/dist/scripts/infer-quilt-config.d.ts.map +1 -0
- package/dist/scripts/infer-quilt-config.js +353 -0
- package/dist/scripts/infer-quilt-config.js.map +1 -0
- package/dist/scripts/install-wizard.d.ts +34 -0
- package/dist/scripts/install-wizard.d.ts.map +1 -0
- package/dist/scripts/install-wizard.js +719 -0
- package/dist/scripts/install-wizard.js.map +1 -0
- package/dist/scripts/sync-secrets.d.ts +63 -0
- package/dist/scripts/sync-secrets.d.ts.map +1 -0
- package/dist/scripts/sync-secrets.js +424 -0
- package/dist/scripts/sync-secrets.js.map +1 -0
- package/env.template +60 -47
- package/package.json +33 -25
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration Profile Management CLI
|
|
5
|
+
*
|
|
6
|
+
* Provides commands for creating, listing, and managing configuration profiles.
|
|
7
|
+
* Supports AWS profile integration and profile validation.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* npx ts-node bin/config-profiles.ts list
|
|
11
|
+
* npx ts-node bin/config-profiles.ts create <profile-name>
|
|
12
|
+
* npx ts-node bin/config-profiles.ts show <profile-name>
|
|
13
|
+
* npx ts-node bin/config-profiles.ts validate <profile-name>
|
|
14
|
+
*
|
|
15
|
+
* @module bin/config-profiles
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ProfileManager = void 0;
|
|
19
|
+
const xdg_config_1 = require("../lib/xdg-config");
|
|
20
|
+
const commander_1 = require("commander");
|
|
21
|
+
/**
|
|
22
|
+
* Profile Manager
|
|
23
|
+
*
|
|
24
|
+
* Manages configuration profiles with validation and AWS integration.
|
|
25
|
+
*/
|
|
26
|
+
class ProfileManager {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.xdgConfig = new xdg_config_1.XDGConfig();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Lists all available profiles
|
|
32
|
+
*/
|
|
33
|
+
listProfiles() {
|
|
34
|
+
console.log("Available configuration profiles:\n");
|
|
35
|
+
const profiles = this.xdgConfig.listProfiles();
|
|
36
|
+
if (profiles.length === 0) {
|
|
37
|
+
console.log(" No profiles found.");
|
|
38
|
+
console.log("\n Run 'config-profiles create <name>' to create a new profile.");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
profiles.forEach((profileName) => {
|
|
42
|
+
const exists = this.xdgConfig.profileExists(profileName);
|
|
43
|
+
const status = exists ? "ā" : "ā";
|
|
44
|
+
const marker = profileName === "default" ? " (default)" : "";
|
|
45
|
+
console.log(` ${status} ${profileName}${marker}`);
|
|
46
|
+
// Show configuration status
|
|
47
|
+
if (exists) {
|
|
48
|
+
const profile = this.xdgConfig.loadProfile(profileName);
|
|
49
|
+
const hasUser = profile.user ? "user" : "";
|
|
50
|
+
const hasDerived = profile.derived ? "derived" : "";
|
|
51
|
+
const hasDeploy = profile.deploy ? "deploy" : "";
|
|
52
|
+
const configs = [hasUser, hasDerived, hasDeploy].filter(Boolean).join(", ");
|
|
53
|
+
if (configs) {
|
|
54
|
+
console.log(` Configs: ${configs}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
console.log();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new profile
|
|
62
|
+
*
|
|
63
|
+
* @param profileName - Name of the profile to create
|
|
64
|
+
* @param options - Creation options
|
|
65
|
+
*/
|
|
66
|
+
createProfile(profileName, options = {}) {
|
|
67
|
+
console.log(`Creating profile: ${profileName}\n`);
|
|
68
|
+
// Check if profile already exists
|
|
69
|
+
if (this.xdgConfig.profileExists(profileName)) {
|
|
70
|
+
console.error(`Error: Profile '${profileName}' already exists.`);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
// Ensure directories exist
|
|
74
|
+
this.xdgConfig.ensureProfileDirectories(profileName);
|
|
75
|
+
// Create initial user configuration
|
|
76
|
+
const userConfig = {
|
|
77
|
+
awsProfile: options.awsProfile,
|
|
78
|
+
_metadata: {
|
|
79
|
+
savedAt: new Date().toISOString(),
|
|
80
|
+
source: "cli",
|
|
81
|
+
version: "0.6.0",
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
// Write user configuration
|
|
85
|
+
this.xdgConfig.writeProfileConfig("user", userConfig, profileName);
|
|
86
|
+
const paths = this.xdgConfig.getProfilePaths(profileName);
|
|
87
|
+
console.log(`Profile '${profileName}' created successfully!`);
|
|
88
|
+
console.log("\nConfiguration files:");
|
|
89
|
+
console.log(` User config: ${paths.userConfig}`);
|
|
90
|
+
console.log(` Derived config: ${paths.derivedConfig}`);
|
|
91
|
+
console.log(` Deploy config: ${paths.deployConfig}`);
|
|
92
|
+
console.log();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Shows detailed information about a profile
|
|
96
|
+
*
|
|
97
|
+
* @param profileName - Name of the profile to show
|
|
98
|
+
*/
|
|
99
|
+
showProfile(profileName) {
|
|
100
|
+
if (!this.xdgConfig.profileExists(profileName)) {
|
|
101
|
+
console.error(`Error: Profile '${profileName}' does not exist.`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
console.log(`Profile: ${profileName}\n`);
|
|
105
|
+
const profile = this.xdgConfig.loadProfile(profileName);
|
|
106
|
+
const paths = this.xdgConfig.getProfilePaths(profileName);
|
|
107
|
+
// Show paths
|
|
108
|
+
console.log("Configuration files:");
|
|
109
|
+
console.log(` User config: ${paths.userConfig}`);
|
|
110
|
+
console.log(` Derived config: ${paths.derivedConfig}`);
|
|
111
|
+
console.log(` Deploy config: ${paths.deployConfig}`);
|
|
112
|
+
console.log();
|
|
113
|
+
// Show user configuration
|
|
114
|
+
if (profile.user) {
|
|
115
|
+
console.log("User Configuration:");
|
|
116
|
+
this.printConfig(profile.user);
|
|
117
|
+
console.log();
|
|
118
|
+
}
|
|
119
|
+
// Show derived configuration
|
|
120
|
+
if (profile.derived) {
|
|
121
|
+
console.log("Derived Configuration:");
|
|
122
|
+
this.printConfig(profile.derived);
|
|
123
|
+
console.log();
|
|
124
|
+
}
|
|
125
|
+
// Show deployment configuration
|
|
126
|
+
if (profile.deploy) {
|
|
127
|
+
console.log("Deployment Configuration:");
|
|
128
|
+
this.printConfig(profile.deploy);
|
|
129
|
+
console.log();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validates a profile configuration
|
|
134
|
+
*
|
|
135
|
+
* @param profileName - Name of the profile to validate
|
|
136
|
+
*/
|
|
137
|
+
validateProfile(profileName) {
|
|
138
|
+
console.log(`Validating profile: ${profileName}\n`);
|
|
139
|
+
if (!this.xdgConfig.profileExists(profileName)) {
|
|
140
|
+
console.error(`Error: Profile '${profileName}' does not exist.`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
const profile = this.xdgConfig.loadProfile(profileName);
|
|
144
|
+
const errors = [];
|
|
145
|
+
const warnings = [];
|
|
146
|
+
// Validate user configuration
|
|
147
|
+
if (!profile.user) {
|
|
148
|
+
errors.push("Missing user configuration");
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
// Check required fields
|
|
152
|
+
const required = [
|
|
153
|
+
"benchlingTenant",
|
|
154
|
+
"benchlingClientId",
|
|
155
|
+
"quiltCatalog",
|
|
156
|
+
"quiltUserBucket",
|
|
157
|
+
];
|
|
158
|
+
required.forEach((field) => {
|
|
159
|
+
if (!profile.user[field]) {
|
|
160
|
+
errors.push(`Missing required field in user config: ${field}`);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
// Check AWS profile
|
|
164
|
+
if (!profile.user.awsProfile) {
|
|
165
|
+
warnings.push("No AWS profile specified");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// Validate derived configuration
|
|
169
|
+
if (profile.derived) {
|
|
170
|
+
if (!profile.derived.catalogUrl) {
|
|
171
|
+
warnings.push("Derived config missing catalogUrl");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
warnings.push("No derived configuration found");
|
|
176
|
+
}
|
|
177
|
+
// Report results
|
|
178
|
+
if (errors.length === 0 && warnings.length === 0) {
|
|
179
|
+
console.log("ā Profile validation passed!");
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (errors.length > 0) {
|
|
183
|
+
console.log("Errors:");
|
|
184
|
+
errors.forEach((error) => console.log(` ā ${error}`));
|
|
185
|
+
console.log();
|
|
186
|
+
}
|
|
187
|
+
if (warnings.length > 0) {
|
|
188
|
+
console.log("Warnings:");
|
|
189
|
+
warnings.forEach((warning) => console.log(` ā ${warning}`));
|
|
190
|
+
console.log();
|
|
191
|
+
}
|
|
192
|
+
if (errors.length > 0) {
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Prints configuration object in a readable format
|
|
198
|
+
*
|
|
199
|
+
* @param config - Configuration object to print
|
|
200
|
+
*/
|
|
201
|
+
printConfig(config) {
|
|
202
|
+
const entries = Object.entries(config).filter(([key]) => key !== "_metadata");
|
|
203
|
+
if (entries.length === 0) {
|
|
204
|
+
console.log(" (empty)");
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
entries.forEach(([key, value]) => {
|
|
208
|
+
if (key.toLowerCase().includes("secret") && typeof value === "string") {
|
|
209
|
+
// Mask secrets
|
|
210
|
+
console.log(` ${key}: ${value.substring(0, 4)}****`);
|
|
211
|
+
}
|
|
212
|
+
else if (typeof value === "object") {
|
|
213
|
+
console.log(` ${key}: ${JSON.stringify(value, null, 2)}`);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
console.log(` ${key}: ${value}`);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.ProfileManager = ProfileManager;
|
|
222
|
+
/**
|
|
223
|
+
* Main CLI program
|
|
224
|
+
*/
|
|
225
|
+
function main() {
|
|
226
|
+
const program = new commander_1.Command();
|
|
227
|
+
const manager = new ProfileManager();
|
|
228
|
+
program
|
|
229
|
+
.name("config-profiles")
|
|
230
|
+
.description("Configuration Profile Management for Benchling Webhook")
|
|
231
|
+
.version("0.6.0");
|
|
232
|
+
// List command
|
|
233
|
+
program
|
|
234
|
+
.command("list")
|
|
235
|
+
.description("List all available configuration profiles")
|
|
236
|
+
.action(() => {
|
|
237
|
+
manager.listProfiles();
|
|
238
|
+
});
|
|
239
|
+
// Create command
|
|
240
|
+
program
|
|
241
|
+
.command("create <profile-name>")
|
|
242
|
+
.description("Create a new configuration profile")
|
|
243
|
+
.option("--aws-profile <profile>", "AWS profile to associate with this configuration")
|
|
244
|
+
.option("--description <text>", "Profile description")
|
|
245
|
+
.action((profileName, options) => {
|
|
246
|
+
manager.createProfile(profileName, options);
|
|
247
|
+
});
|
|
248
|
+
// Show command
|
|
249
|
+
program
|
|
250
|
+
.command("show <profile-name>")
|
|
251
|
+
.description("Show detailed information about a profile")
|
|
252
|
+
.action((profileName) => {
|
|
253
|
+
manager.showProfile(profileName);
|
|
254
|
+
});
|
|
255
|
+
// Validate command
|
|
256
|
+
program
|
|
257
|
+
.command("validate <profile-name>")
|
|
258
|
+
.description("Validate a profile configuration")
|
|
259
|
+
.action((profileName) => {
|
|
260
|
+
manager.validateProfile(profileName);
|
|
261
|
+
});
|
|
262
|
+
program.parse(process.argv);
|
|
263
|
+
// Show help if no command provided
|
|
264
|
+
if (!process.argv.slice(2).length) {
|
|
265
|
+
program.outputHelp();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Run CLI
|
|
269
|
+
if (require.main === module) {
|
|
270
|
+
main();
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=config-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-profiles.js","sourceRoot":"","sources":["../../bin/config-profiles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
/**
|
|
3
|
+
* Create or update Benchling webhook secret in AWS Secrets Manager
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npm run config
|
|
7
|
+
* npm run config -- --secret-name benchling-webhook-dev --region us-east-1
|
|
8
|
+
* npm run config -- --secret-name benchling-webhook-prod --region us-east-1 --env-file .env.prod
|
|
9
|
+
*
|
|
10
|
+
* Default secret name: @quiltdata/benchling-webhook (package name)
|
|
11
|
+
*
|
|
12
|
+
* Required parameters (from .env file or environment):
|
|
13
|
+
* BENCHLING_TENANT
|
|
14
|
+
* BENCHLING_CLIENT_ID
|
|
15
|
+
* BENCHLING_CLIENT_SECRET
|
|
16
|
+
* BENCHLING_APP_DEFINITION_ID
|
|
17
|
+
* BENCHLING_PKG_PREFIX
|
|
18
|
+
* BENCHLING_PKG_KEY
|
|
19
|
+
* BENCHLING_USER_BUCKET
|
|
20
|
+
* BENCHLING_LOG_LEVEL
|
|
21
|
+
* BENCHLING_ENABLE_WEBHOOK_VERIFICATION
|
|
22
|
+
* BENCHLING_WEBHOOK_ALLOW_LIST
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=create-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-secret.d.ts","sourceRoot":"","sources":["../../bin/create-secret.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
#!/usr/bin/env ts-node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Create or update Benchling webhook secret in AWS Secrets Manager
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npm run config
|
|
8
|
+
* npm run config -- --secret-name benchling-webhook-dev --region us-east-1
|
|
9
|
+
* npm run config -- --secret-name benchling-webhook-prod --region us-east-1 --env-file .env.prod
|
|
10
|
+
*
|
|
11
|
+
* Default secret name: @quiltdata/benchling-webhook (package name)
|
|
12
|
+
*
|
|
13
|
+
* Required parameters (from .env file or environment):
|
|
14
|
+
* BENCHLING_TENANT
|
|
15
|
+
* BENCHLING_CLIENT_ID
|
|
16
|
+
* BENCHLING_CLIENT_SECRET
|
|
17
|
+
* BENCHLING_APP_DEFINITION_ID
|
|
18
|
+
* BENCHLING_PKG_PREFIX
|
|
19
|
+
* BENCHLING_PKG_KEY
|
|
20
|
+
* BENCHLING_USER_BUCKET
|
|
21
|
+
* BENCHLING_LOG_LEVEL
|
|
22
|
+
* BENCHLING_ENABLE_WEBHOOK_VERIFICATION
|
|
23
|
+
* BENCHLING_WEBHOOK_ALLOW_LIST
|
|
24
|
+
*/
|
|
25
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
26
|
+
if (k2 === undefined) k2 = k;
|
|
27
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
28
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
29
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
30
|
+
}
|
|
31
|
+
Object.defineProperty(o, k2, desc);
|
|
32
|
+
}) : (function(o, m, k, k2) {
|
|
33
|
+
if (k2 === undefined) k2 = k;
|
|
34
|
+
o[k2] = m[k];
|
|
35
|
+
}));
|
|
36
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
38
|
+
}) : function(o, v) {
|
|
39
|
+
o["default"] = v;
|
|
40
|
+
});
|
|
41
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
42
|
+
var ownKeys = function(o) {
|
|
43
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
44
|
+
var ar = [];
|
|
45
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
46
|
+
return ar;
|
|
47
|
+
};
|
|
48
|
+
return ownKeys(o);
|
|
49
|
+
};
|
|
50
|
+
return function (mod) {
|
|
51
|
+
if (mod && mod.__esModule) return mod;
|
|
52
|
+
var result = {};
|
|
53
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
54
|
+
__setModuleDefault(result, mod);
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
})();
|
|
58
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
59
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
60
|
+
};
|
|
61
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
62
|
+
const commander_1 = require("commander");
|
|
63
|
+
const dotenv_1 = require("dotenv");
|
|
64
|
+
const dotenv_expand_1 = require("dotenv-expand");
|
|
65
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
66
|
+
const fs = __importStar(require("fs"));
|
|
67
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
68
|
+
const REQUIRED_PARAMS = [
|
|
69
|
+
"BENCHLING_TENANT",
|
|
70
|
+
"BENCHLING_CLIENT_ID",
|
|
71
|
+
"BENCHLING_CLIENT_SECRET",
|
|
72
|
+
"BENCHLING_APP_DEFINITION_ID",
|
|
73
|
+
"BENCHLING_PKG_PREFIX",
|
|
74
|
+
"BENCHLING_PKG_KEY",
|
|
75
|
+
"BENCHLING_USER_BUCKET",
|
|
76
|
+
"BENCHLING_LOG_LEVEL",
|
|
77
|
+
"BENCHLING_ENABLE_WEBHOOK_VERIFICATION",
|
|
78
|
+
"BENCHLING_WEBHOOK_ALLOW_LIST",
|
|
79
|
+
];
|
|
80
|
+
const VALID_LOG_LEVELS = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"];
|
|
81
|
+
function loadEnvFile(envFile) {
|
|
82
|
+
const envPath = envFile || ".env";
|
|
83
|
+
if (!fs.existsSync(envPath)) {
|
|
84
|
+
console.log(chalk_1.default.yellow(`ā¹ļø No .env file found at ${envPath}, using environment variables only`));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
console.log(chalk_1.default.blue(`š Loading environment from ${envPath}`));
|
|
88
|
+
const myEnv = (0, dotenv_1.config)({ path: envPath });
|
|
89
|
+
(0, dotenv_expand_1.expand)(myEnv);
|
|
90
|
+
}
|
|
91
|
+
function validateParameters(params) {
|
|
92
|
+
// WEBHOOK_ALLOW_LIST can be empty string (no restrictions)
|
|
93
|
+
// All others must be non-empty
|
|
94
|
+
const missing = REQUIRED_PARAMS.filter(param => {
|
|
95
|
+
if (param === "BENCHLING_WEBHOOK_ALLOW_LIST") {
|
|
96
|
+
return params[param] === undefined; // Only fail if undefined, not empty string
|
|
97
|
+
}
|
|
98
|
+
return !params[param];
|
|
99
|
+
});
|
|
100
|
+
if (missing.length > 0) {
|
|
101
|
+
console.error(chalk_1.default.red(`ā Missing required parameters: ${missing.join(", ")}`));
|
|
102
|
+
console.log(chalk_1.default.yellow("\nExpected parameters (from .env or environment):"));
|
|
103
|
+
REQUIRED_PARAMS.forEach(param => {
|
|
104
|
+
const value = params[param];
|
|
105
|
+
const status = value !== undefined ? "ā" : "ā";
|
|
106
|
+
console.log(chalk_1.default.yellow(` ${param}=${status}`));
|
|
107
|
+
});
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Validate log level
|
|
111
|
+
const logLevel = params.BENCHLING_LOG_LEVEL.toUpperCase();
|
|
112
|
+
if (!VALID_LOG_LEVELS.includes(logLevel)) {
|
|
113
|
+
console.error(chalk_1.default.red(`ā Invalid log level: ${params.BENCHLING_LOG_LEVEL}`));
|
|
114
|
+
console.log(chalk_1.default.yellow(`Valid levels: ${VALID_LOG_LEVELS.join(", ")}`));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
// Validate boolean
|
|
118
|
+
const verification = params.BENCHLING_ENABLE_WEBHOOK_VERIFICATION.toLowerCase();
|
|
119
|
+
if (!["true", "false", "1", "0"].includes(verification)) {
|
|
120
|
+
console.error(chalk_1.default.red(`ā Invalid boolean value for BENCHLING_ENABLE_WEBHOOK_VERIFICATION: ${params.BENCHLING_ENABLE_WEBHOOK_VERIFICATION}`));
|
|
121
|
+
console.log(chalk_1.default.yellow("Valid values: true, false, 1, 0"));
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
// Build secret data (convert SCREAMING_SNAKE_CASE to snake_case)
|
|
125
|
+
return {
|
|
126
|
+
tenant: params.BENCHLING_TENANT,
|
|
127
|
+
client_id: params.BENCHLING_CLIENT_ID,
|
|
128
|
+
client_secret: params.BENCHLING_CLIENT_SECRET,
|
|
129
|
+
app_definition_id: params.BENCHLING_APP_DEFINITION_ID,
|
|
130
|
+
pkg_prefix: params.BENCHLING_PKG_PREFIX,
|
|
131
|
+
pkg_key: params.BENCHLING_PKG_KEY,
|
|
132
|
+
user_bucket: params.BENCHLING_USER_BUCKET,
|
|
133
|
+
log_level: logLevel,
|
|
134
|
+
enable_webhook_verification: verification,
|
|
135
|
+
webhook_allow_list: params.BENCHLING_WEBHOOK_ALLOW_LIST,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
async function secretExists(client, secretName) {
|
|
139
|
+
try {
|
|
140
|
+
await client.send(new client_secrets_manager_1.DescribeSecretCommand({ SecretId: secretName }));
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error instanceof client_secrets_manager_1.ResourceNotFoundException) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function createOrUpdateSecret(secretName, region, secretData, dryRun) {
|
|
151
|
+
const client = new client_secrets_manager_1.SecretsManagerClient({ region });
|
|
152
|
+
const secretString = JSON.stringify(secretData, null, 2);
|
|
153
|
+
if (dryRun) {
|
|
154
|
+
console.log(chalk_1.default.blue("\nš DRY RUN MODE - No changes will be made\n"));
|
|
155
|
+
console.log(chalk_1.default.cyan("Secret Name:"), secretName);
|
|
156
|
+
console.log(chalk_1.default.cyan("Region:"), region);
|
|
157
|
+
console.log(chalk_1.default.cyan("Secret Content:"));
|
|
158
|
+
console.log(chalk_1.default.gray(secretString));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const exists = await secretExists(client, secretName);
|
|
162
|
+
if (exists) {
|
|
163
|
+
console.log(chalk_1.default.blue(`š Updating existing secret: ${secretName}`));
|
|
164
|
+
await client.send(new client_secrets_manager_1.UpdateSecretCommand({
|
|
165
|
+
SecretId: secretName,
|
|
166
|
+
SecretString: secretString,
|
|
167
|
+
}));
|
|
168
|
+
console.log(chalk_1.default.green("ā
Secret updated successfully"));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
console.log(chalk_1.default.blue(`š Creating new secret: ${secretName}`));
|
|
172
|
+
const result = await client.send(new client_secrets_manager_1.CreateSecretCommand({
|
|
173
|
+
Name: secretName,
|
|
174
|
+
Description: "Benchling webhook runtime configuration (10 parameters)",
|
|
175
|
+
SecretString: secretString,
|
|
176
|
+
}));
|
|
177
|
+
console.log(chalk_1.default.green("ā
Secret created successfully"));
|
|
178
|
+
console.log(chalk_1.default.cyan(`ARN: ${result.ARN}`));
|
|
179
|
+
}
|
|
180
|
+
console.log(chalk_1.default.green(`\n⨠Secret ${exists ? "updated" : "created"}: ${secretName}`));
|
|
181
|
+
console.log(chalk_1.default.yellow("\nTo use this secret in deployment:"));
|
|
182
|
+
console.log(chalk_1.default.gray(" npm run cli -- deploy \\"));
|
|
183
|
+
console.log(chalk_1.default.gray(" --quilt-stack-arn <your-quilt-stack-arn> \\"));
|
|
184
|
+
console.log(chalk_1.default.gray(` --benchling-secret ${secretName}`));
|
|
185
|
+
}
|
|
186
|
+
async function main() {
|
|
187
|
+
const program = new commander_1.Command();
|
|
188
|
+
program
|
|
189
|
+
.name("npm run config")
|
|
190
|
+
.description("Create or update Benchling webhook secret in AWS Secrets Manager")
|
|
191
|
+
.option("-s, --secret-name <name>", "Secret name (defaults to package name)", "@quiltdata/benchling-webhook")
|
|
192
|
+
.option("-r, --region <region>", "AWS region", "us-east-1")
|
|
193
|
+
.option("-e, --env-file <path>", ".env file path", ".env")
|
|
194
|
+
.option("-d, --dry-run", "Show what would be created without making changes", false)
|
|
195
|
+
.parse(process.argv);
|
|
196
|
+
const options = program.opts();
|
|
197
|
+
console.log(chalk_1.default.bold.blue("\nš Benchling Webhook Secret Configuration\n"));
|
|
198
|
+
// Load environment
|
|
199
|
+
loadEnvFile(options.envFile);
|
|
200
|
+
// Gather parameters from environment
|
|
201
|
+
const params = {};
|
|
202
|
+
REQUIRED_PARAMS.forEach(param => {
|
|
203
|
+
const value = process.env[param];
|
|
204
|
+
// Special handling for WEBHOOK_ALLOW_LIST - allow empty string
|
|
205
|
+
if (param === "BENCHLING_WEBHOOK_ALLOW_LIST" && value === undefined) {
|
|
206
|
+
params[param] = ""; // Default to empty string for allowlist
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
params[param] = value || "";
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
// Validate and build secret data
|
|
213
|
+
const secretData = validateParameters(params);
|
|
214
|
+
console.log(chalk_1.default.green("\nā All parameters validated"));
|
|
215
|
+
console.log(chalk_1.default.blue("\nParameters to be stored in secret:"));
|
|
216
|
+
console.log(chalk_1.default.gray(` tenant: ${secretData.tenant}`));
|
|
217
|
+
console.log(chalk_1.default.gray(` client_id: ${secretData.client_id.substring(0, 4)}***`));
|
|
218
|
+
console.log(chalk_1.default.gray(" client_secret: ***"));
|
|
219
|
+
console.log(chalk_1.default.gray(` app_definition_id: ${secretData.app_definition_id}`));
|
|
220
|
+
console.log(chalk_1.default.gray(` pkg_prefix: ${secretData.pkg_prefix}`));
|
|
221
|
+
console.log(chalk_1.default.gray(` pkg_key: ${secretData.pkg_key}`));
|
|
222
|
+
console.log(chalk_1.default.gray(` user_bucket: ${secretData.user_bucket}`));
|
|
223
|
+
console.log(chalk_1.default.gray(` log_level: ${secretData.log_level}`));
|
|
224
|
+
console.log(chalk_1.default.gray(` enable_webhook_verification: ${secretData.enable_webhook_verification}`));
|
|
225
|
+
console.log(chalk_1.default.gray(` webhook_allow_list: ${secretData.webhook_allow_list || "(empty)"}`));
|
|
226
|
+
// Create or update secret
|
|
227
|
+
await createOrUpdateSecret(options.secretName, options.region, secretData, options.dryRun);
|
|
228
|
+
}
|
|
229
|
+
main().catch(error => {
|
|
230
|
+
console.error(chalk_1.default.red(`\nā Error: ${error.message}`));
|
|
231
|
+
if (error.code === "ResourceNotFoundException") {
|
|
232
|
+
console.log(chalk_1.default.yellow("\nMake sure the AWS region is correct and you have necessary permissions."));
|
|
233
|
+
}
|
|
234
|
+
else if (error.name === "CredentialsProviderError") {
|
|
235
|
+
console.log(chalk_1.default.yellow("\nAWS credentials not found. Please configure AWS CLI or set environment variables."));
|
|
236
|
+
}
|
|
237
|
+
process.exit(1);
|
|
238
|
+
});
|
|
239
|
+
//# sourceMappingURL=create-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-secret.js","sourceRoot":"","sources":["../../bin/create-secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Benchling credentials for authentication
|
|
3
|
+
*/
|
|
4
|
+
export interface BenchlingCredentials {
|
|
5
|
+
tenant: string;
|
|
6
|
+
clientId: string;
|
|
7
|
+
clientSecret: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validation result from Benchling authentication
|
|
11
|
+
*/
|
|
12
|
+
export interface ValidationResult {
|
|
13
|
+
isValid: boolean;
|
|
14
|
+
hasRequiredPermissions?: boolean;
|
|
15
|
+
errors: string[];
|
|
16
|
+
warnings?: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Benchling authentication validator
|
|
20
|
+
*
|
|
21
|
+
* Validates Benchling credentials by attempting OAuth authentication
|
|
22
|
+
* and checking required permissions.
|
|
23
|
+
*/
|
|
24
|
+
export declare class BenchlingAuthValidator {
|
|
25
|
+
/**
|
|
26
|
+
* Required OAuth scopes for the webhook integration
|
|
27
|
+
*/
|
|
28
|
+
private static readonly REQUIRED_SCOPES;
|
|
29
|
+
/**
|
|
30
|
+
* Validate Benchling credentials
|
|
31
|
+
*
|
|
32
|
+
* @param credentials - Benchling credentials to validate
|
|
33
|
+
* @returns Validation result with errors and warnings
|
|
34
|
+
*/
|
|
35
|
+
static validate(credentials: BenchlingCredentials): Promise<ValidationResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Validate tenant format
|
|
38
|
+
*
|
|
39
|
+
* @param tenant - Benchling tenant name
|
|
40
|
+
* @returns True if tenant format is valid
|
|
41
|
+
*/
|
|
42
|
+
static validateTenant(tenant: string): Promise<boolean>;
|
|
43
|
+
/**
|
|
44
|
+
* Validate credentials completeness
|
|
45
|
+
*
|
|
46
|
+
* @param credentials - Credentials to validate
|
|
47
|
+
* @returns True if all required fields are present
|
|
48
|
+
*/
|
|
49
|
+
static validateCredentials(credentials: BenchlingCredentials): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Authenticate with Benchling OAuth API
|
|
52
|
+
*
|
|
53
|
+
* @param credentials - Benchling credentials
|
|
54
|
+
* @returns Token response from Benchling
|
|
55
|
+
*/
|
|
56
|
+
private static authenticate;
|
|
57
|
+
/**
|
|
58
|
+
* Check if OAuth scopes include required permissions
|
|
59
|
+
*
|
|
60
|
+
* @param scope - OAuth scope string
|
|
61
|
+
* @returns True if all required scopes are present
|
|
62
|
+
*/
|
|
63
|
+
private static checkPermissions;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=benchling-auth-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchling-auth-validator.d.ts","sourceRoot":"","sources":["../../lib/benchling-auth-validator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAWD;;;;;GAKG;AACH,qBAAa,sBAAsB;IAC/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAqB;IAE5D;;;;;OAKG;WACiB,QAAQ,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqE1F;;;;;OAKG;WACiB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAapE;;;;;OAKG;WACW,mBAAmB,CAAC,WAAW,EAAE,oBAAoB,GAAG,OAAO;IAW7E;;;;;OAKG;mBACkB,YAAY;IAqDjC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAMlC"}
|