@quiltdata/benchling-webhook 0.5.4 → 0.6.1-20251104T043302Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +295 -12
  2. package/dist/bin/benchling-webhook.d.ts +1 -1
  3. package/dist/bin/benchling-webhook.d.ts.map +1 -1
  4. package/dist/bin/benchling-webhook.js +12 -22
  5. package/dist/bin/benchling-webhook.js.map +1 -1
  6. package/dist/bin/cdk-dev.js +59 -3
  7. package/dist/bin/cli.js +27 -9
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/commands/deploy.d.ts +6 -2
  10. package/dist/bin/commands/deploy.d.ts.map +1 -1
  11. package/dist/bin/commands/deploy.js +151 -90
  12. package/dist/bin/commands/deploy.js.map +1 -1
  13. package/dist/bin/commands/setup-wizard.d.ts +22 -0
  14. package/dist/bin/commands/setup-wizard.d.ts.map +1 -0
  15. package/dist/bin/commands/setup-wizard.js +47 -0
  16. package/dist/bin/commands/setup-wizard.js.map +1 -0
  17. package/dist/bin/config-profiles.d.ts +59 -0
  18. package/dist/bin/config-profiles.d.ts.map +1 -0
  19. package/dist/bin/config-profiles.js +272 -0
  20. package/dist/bin/config-profiles.js.map +1 -0
  21. package/dist/bin/create-secret.d.ts +25 -0
  22. package/dist/bin/create-secret.d.ts.map +1 -0
  23. package/dist/bin/create-secret.js +239 -0
  24. package/dist/bin/create-secret.js.map +1 -0
  25. package/dist/lib/benchling-auth-validator.d.ts +65 -0
  26. package/dist/lib/benchling-auth-validator.d.ts.map +1 -0
  27. package/dist/lib/benchling-auth-validator.js +213 -0
  28. package/dist/lib/benchling-auth-validator.js.map +1 -0
  29. package/dist/lib/benchling-webhook-stack.d.ts +13 -10
  30. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
  31. package/dist/lib/benchling-webhook-stack.js +25 -69
  32. package/dist/lib/benchling-webhook-stack.js.map +1 -1
  33. package/dist/lib/config-logger.d.ts +191 -0
  34. package/dist/lib/config-logger.d.ts.map +1 -0
  35. package/dist/lib/config-logger.js +372 -0
  36. package/dist/lib/config-logger.js.map +1 -0
  37. package/dist/lib/configuration-saver.d.ts +75 -0
  38. package/dist/lib/configuration-saver.d.ts.map +1 -0
  39. package/dist/lib/configuration-saver.js +145 -0
  40. package/dist/lib/configuration-saver.js.map +1 -0
  41. package/dist/lib/configuration-validator.d.ts +63 -0
  42. package/dist/lib/configuration-validator.d.ts.map +1 -0
  43. package/dist/lib/configuration-validator.js +136 -0
  44. package/dist/lib/configuration-validator.js.map +1 -0
  45. package/dist/lib/configuration-wizard.d.ts +52 -0
  46. package/dist/lib/configuration-wizard.d.ts.map +1 -0
  47. package/dist/lib/configuration-wizard.js +193 -0
  48. package/dist/lib/configuration-wizard.js.map +1 -0
  49. package/dist/lib/fargate-service.d.ts +18 -9
  50. package/dist/lib/fargate-service.d.ts.map +1 -1
  51. package/dist/lib/fargate-service.js +177 -61
  52. package/dist/lib/fargate-service.js.map +1 -1
  53. package/dist/lib/quilt-config-resolver.d.ts +53 -0
  54. package/dist/lib/quilt-config-resolver.d.ts.map +1 -0
  55. package/dist/lib/quilt-config-resolver.js +100 -0
  56. package/dist/lib/quilt-config-resolver.js.map +1 -0
  57. package/dist/lib/s3-bucket-validator.d.ts +76 -0
  58. package/dist/lib/s3-bucket-validator.d.ts.map +1 -0
  59. package/dist/lib/s3-bucket-validator.js +237 -0
  60. package/dist/lib/s3-bucket-validator.js.map +1 -0
  61. package/dist/lib/types/config.d.ts +398 -0
  62. package/dist/lib/types/config.d.ts.map +1 -0
  63. package/dist/lib/types/config.js +11 -0
  64. package/dist/lib/types/config.js.map +1 -0
  65. package/dist/lib/utils/config-loader.d.ts +48 -0
  66. package/dist/lib/utils/config-loader.d.ts.map +1 -0
  67. package/dist/lib/utils/config-loader.js +109 -0
  68. package/dist/lib/utils/config-loader.js.map +1 -0
  69. package/dist/lib/utils/config-resolver.d.ts +138 -0
  70. package/dist/lib/utils/config-resolver.d.ts.map +1 -0
  71. package/dist/lib/utils/config-resolver.js +272 -0
  72. package/dist/lib/utils/config-resolver.js.map +1 -0
  73. package/dist/lib/utils/config.d.ts +50 -0
  74. package/dist/lib/utils/config.d.ts.map +1 -1
  75. package/dist/lib/utils/config.js +86 -0
  76. package/dist/lib/utils/config.js.map +1 -1
  77. package/dist/lib/utils/secrets.d.ts +174 -0
  78. package/dist/lib/utils/secrets.d.ts.map +1 -0
  79. package/dist/lib/utils/secrets.js +351 -0
  80. package/dist/lib/utils/secrets.js.map +1 -0
  81. package/dist/lib/xdg-cli-wrapper.d.ts +113 -0
  82. package/dist/lib/xdg-cli-wrapper.d.ts.map +1 -0
  83. package/dist/lib/xdg-cli-wrapper.js +288 -0
  84. package/dist/lib/xdg-cli-wrapper.js.map +1 -0
  85. package/dist/lib/xdg-config.d.ts +187 -0
  86. package/dist/lib/xdg-config.d.ts.map +1 -0
  87. package/dist/lib/xdg-config.js +562 -0
  88. package/dist/lib/xdg-config.js.map +1 -0
  89. package/dist/package.json +34 -26
  90. package/dist/scripts/config-health-check.d.ts +78 -0
  91. package/dist/scripts/config-health-check.d.ts.map +1 -0
  92. package/dist/scripts/config-health-check.js +559 -0
  93. package/dist/scripts/config-health-check.js.map +1 -0
  94. package/dist/scripts/infer-quilt-config.d.ts +50 -0
  95. package/dist/scripts/infer-quilt-config.d.ts.map +1 -0
  96. package/dist/scripts/infer-quilt-config.js +353 -0
  97. package/dist/scripts/infer-quilt-config.js.map +1 -0
  98. package/dist/scripts/install-wizard.d.ts +34 -0
  99. package/dist/scripts/install-wizard.d.ts.map +1 -0
  100. package/dist/scripts/install-wizard.js +719 -0
  101. package/dist/scripts/install-wizard.js.map +1 -0
  102. package/dist/scripts/sync-secrets.d.ts +63 -0
  103. package/dist/scripts/sync-secrets.d.ts.map +1 -0
  104. package/dist/scripts/sync-secrets.js +424 -0
  105. package/dist/scripts/sync-secrets.js.map +1 -0
  106. package/env.template +60 -47
  107. package/package.json +34 -26
@@ -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"}