@quiltdata/benchling-webhook 0.5.4-20251102T020826Z → 0.5.4-20251103T180145Z

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 (91) hide show
  1. package/README.md +26 -17
  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 +8 -23
  5. package/dist/bin/benchling-webhook.js.map +1 -1
  6. package/dist/bin/cdk-dev.js +51 -0
  7. package/dist/bin/cli.js +8 -22
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/commands/deploy.d.ts +4 -2
  10. package/dist/bin/commands/deploy.d.ts.map +1 -1
  11. package/dist/bin/commands/deploy.js +88 -300
  12. package/dist/bin/commands/deploy.js.map +1 -1
  13. package/dist/bin/config-profiles.d.ts +59 -0
  14. package/dist/bin/config-profiles.d.ts.map +1 -0
  15. package/dist/bin/config-profiles.js +272 -0
  16. package/dist/bin/config-profiles.js.map +1 -0
  17. package/dist/bin/create-secret.d.ts +3 -0
  18. package/dist/bin/create-secret.d.ts.map +1 -1
  19. package/dist/bin/create-secret.js +51 -48
  20. package/dist/bin/create-secret.js.map +1 -1
  21. package/dist/lib/benchling-auth-validator.d.ts +65 -0
  22. package/dist/lib/benchling-auth-validator.d.ts.map +1 -0
  23. package/dist/lib/benchling-auth-validator.js +213 -0
  24. package/dist/lib/benchling-auth-validator.js.map +1 -0
  25. package/dist/lib/benchling-webhook-stack.d.ts +5 -23
  26. package/dist/lib/benchling-webhook-stack.d.ts.map +1 -1
  27. package/dist/lib/benchling-webhook-stack.js +25 -145
  28. package/dist/lib/benchling-webhook-stack.js.map +1 -1
  29. package/dist/lib/config-logger.d.ts +191 -0
  30. package/dist/lib/config-logger.d.ts.map +1 -0
  31. package/dist/lib/config-logger.js +372 -0
  32. package/dist/lib/config-logger.js.map +1 -0
  33. package/dist/lib/configuration-saver.d.ts +75 -0
  34. package/dist/lib/configuration-saver.d.ts.map +1 -0
  35. package/dist/lib/configuration-saver.js +145 -0
  36. package/dist/lib/configuration-saver.js.map +1 -0
  37. package/dist/lib/configuration-validator.d.ts +63 -0
  38. package/dist/lib/configuration-validator.d.ts.map +1 -0
  39. package/dist/lib/configuration-validator.js +136 -0
  40. package/dist/lib/configuration-validator.js.map +1 -0
  41. package/dist/lib/configuration-wizard.d.ts +52 -0
  42. package/dist/lib/configuration-wizard.d.ts.map +1 -0
  43. package/dist/lib/configuration-wizard.js +193 -0
  44. package/dist/lib/configuration-wizard.js.map +1 -0
  45. package/dist/lib/quilt-config-resolver.d.ts +53 -0
  46. package/dist/lib/quilt-config-resolver.d.ts.map +1 -0
  47. package/dist/lib/quilt-config-resolver.js +100 -0
  48. package/dist/lib/quilt-config-resolver.js.map +1 -0
  49. package/dist/lib/s3-bucket-validator.d.ts +76 -0
  50. package/dist/lib/s3-bucket-validator.d.ts.map +1 -0
  51. package/dist/lib/s3-bucket-validator.js +237 -0
  52. package/dist/lib/s3-bucket-validator.js.map +1 -0
  53. package/dist/lib/types/config.d.ts +398 -0
  54. package/dist/lib/types/config.d.ts.map +1 -0
  55. package/dist/lib/types/config.js +11 -0
  56. package/dist/lib/types/config.js.map +1 -0
  57. package/dist/lib/utils/config-loader.js.map +1 -1
  58. package/dist/lib/utils/config-resolver.d.ts +26 -26
  59. package/dist/lib/utils/config-resolver.d.ts.map +1 -1
  60. package/dist/lib/utils/config-resolver.js +29 -29
  61. package/dist/lib/utils/config-resolver.js.map +1 -1
  62. package/dist/lib/utils/config.d.ts +2 -0
  63. package/dist/lib/utils/config.d.ts.map +1 -1
  64. package/dist/lib/utils/config.js.map +1 -1
  65. package/dist/lib/xdg-cli-wrapper.d.ts +113 -0
  66. package/dist/lib/xdg-cli-wrapper.d.ts.map +1 -0
  67. package/dist/lib/xdg-cli-wrapper.js +288 -0
  68. package/dist/lib/xdg-cli-wrapper.js.map +1 -0
  69. package/dist/lib/xdg-config.d.ts +187 -0
  70. package/dist/lib/xdg-config.d.ts.map +1 -0
  71. package/dist/lib/xdg-config.js +562 -0
  72. package/dist/lib/xdg-config.js.map +1 -0
  73. package/dist/package.json +38 -26
  74. package/dist/scripts/config-health-check.d.ts +78 -0
  75. package/dist/scripts/config-health-check.d.ts.map +1 -0
  76. package/dist/scripts/config-health-check.js +559 -0
  77. package/dist/scripts/config-health-check.js.map +1 -0
  78. package/dist/scripts/infer-quilt-config.d.ts +50 -0
  79. package/dist/scripts/infer-quilt-config.d.ts.map +1 -0
  80. package/dist/scripts/infer-quilt-config.js +353 -0
  81. package/dist/scripts/infer-quilt-config.js.map +1 -0
  82. package/dist/scripts/install-wizard.d.ts +34 -0
  83. package/dist/scripts/install-wizard.d.ts.map +1 -0
  84. package/dist/scripts/install-wizard.js +719 -0
  85. package/dist/scripts/install-wizard.js.map +1 -0
  86. package/dist/scripts/sync-secrets.d.ts +63 -0
  87. package/dist/scripts/sync-secrets.d.ts.map +1 -0
  88. package/dist/scripts/sync-secrets.js +424 -0
  89. package/dist/scripts/sync-secrets.js.map +1 -0
  90. package/env.template +60 -47
  91. package/package.json +38 -26
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfigurationSaver = void 0;
7
+ const xdg_config_1 = require("./xdg-config");
8
+ const lodash_merge_1 = __importDefault(require("lodash.merge"));
9
+ /**
10
+ * Configuration saver for persisting configuration to XDG files
11
+ */
12
+ class ConfigurationSaver {
13
+ /**
14
+ * Get or create default XDG config instance
15
+ */
16
+ static getDefaultXDGConfig() {
17
+ if (!ConfigurationSaver.defaultXDGConfig) {
18
+ ConfigurationSaver.defaultXDGConfig = new xdg_config_1.XDGConfig();
19
+ ConfigurationSaver.defaultXDGConfig.ensureDirectories();
20
+ }
21
+ return ConfigurationSaver.defaultXDGConfig;
22
+ }
23
+ /**
24
+ * Save configuration to user config file
25
+ *
26
+ * @param config - Configuration to save
27
+ * @param options - Save options
28
+ * @returns Saved configuration with metadata
29
+ */
30
+ static async save(config, options = {}) {
31
+ const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "wizard", skipValidation = false, merge: shouldMerge = false, } = options;
32
+ // Validate configuration if not skipped
33
+ if (!skipValidation) {
34
+ ConfigurationSaver.validateConfig(config);
35
+ }
36
+ // Merge with existing config if requested
37
+ let finalConfig = { ...config };
38
+ if (shouldMerge) {
39
+ try {
40
+ const existingConfig = xdgConfig.readConfig("user");
41
+ finalConfig = (0, lodash_merge_1.default)({}, existingConfig, config);
42
+ }
43
+ catch {
44
+ // If no existing config, just use the new config
45
+ finalConfig = { ...config };
46
+ }
47
+ }
48
+ // Add metadata
49
+ const metadata = ConfigurationSaver.getMetadata({ source });
50
+ const configWithMetadata = {
51
+ ...finalConfig,
52
+ _metadata: metadata,
53
+ };
54
+ // Save to user config
55
+ xdgConfig.writeConfig("user", configWithMetadata);
56
+ // If source indicates inference, also save to derived config
57
+ if (source === "quilt-cli" || source === "inference") {
58
+ await ConfigurationSaver.saveToDerived(config, {
59
+ xdgConfig,
60
+ source,
61
+ });
62
+ }
63
+ return finalConfig;
64
+ }
65
+ /**
66
+ * Save inferred configuration to derived config file
67
+ *
68
+ * @param config - Inferred configuration
69
+ * @param options - Save options
70
+ */
71
+ static async saveToDerived(config, options = {}) {
72
+ const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "inferred", } = options;
73
+ // Add inference metadata
74
+ const metadata = ConfigurationSaver.getMetadata({
75
+ source,
76
+ inferredAt: new Date().toISOString(),
77
+ });
78
+ const configWithMetadata = {
79
+ ...config,
80
+ _metadata: metadata,
81
+ };
82
+ // Save to derived config
83
+ xdgConfig.writeConfig("derived", configWithMetadata);
84
+ }
85
+ /**
86
+ * Save deployment outputs to deployment config file
87
+ *
88
+ * @param config - Deployment configuration
89
+ * @param options - Save options
90
+ */
91
+ static async saveToDeployment(config, options = {}) {
92
+ const { xdgConfig = ConfigurationSaver.getDefaultXDGConfig(), source = "deployment", } = options;
93
+ // Add deployment metadata
94
+ const metadata = ConfigurationSaver.getMetadata({ source });
95
+ const configWithMetadata = {
96
+ ...config,
97
+ _metadata: metadata,
98
+ };
99
+ // Save to deployment config
100
+ xdgConfig.writeConfig("deploy", configWithMetadata);
101
+ }
102
+ /**
103
+ * Create metadata for configuration
104
+ *
105
+ * @param options - Metadata options
106
+ * @returns Configuration metadata
107
+ */
108
+ static getMetadata(options = {}) {
109
+ return {
110
+ savedAt: new Date().toISOString(),
111
+ source: options.source || "unknown",
112
+ version: ConfigurationSaver.getVersion(),
113
+ ...(options.inferredAt && { inferredAt: options.inferredAt }),
114
+ };
115
+ }
116
+ /**
117
+ * Get the current version
118
+ *
119
+ * @returns Version string
120
+ */
121
+ static getVersion() {
122
+ // For now, return a static version
123
+ // In production, this would read from package.json
124
+ return "0.6.0";
125
+ }
126
+ /**
127
+ * Validate configuration before saving
128
+ *
129
+ * @param config - Configuration to validate
130
+ * @throws {Error} If configuration is invalid
131
+ */
132
+ static validateConfig(config) {
133
+ // Check if config is empty
134
+ if (Object.keys(config).length === 0) {
135
+ throw new Error("Configuration validation failed: Configuration cannot be empty");
136
+ }
137
+ // Basic validation passed
138
+ }
139
+ }
140
+ exports.ConfigurationSaver = ConfigurationSaver;
141
+ /**
142
+ * Default XDG config instance
143
+ */
144
+ ConfigurationSaver.defaultXDGConfig = null;
145
+ //# sourceMappingURL=configuration-saver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-saver.js","sourceRoot":"","sources":["../../lib/configuration-saver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Configuration object for validation
3
+ */
4
+ export interface Configuration {
5
+ catalogUrl?: string;
6
+ benchlingTenant?: string;
7
+ benchlingClientId?: string;
8
+ benchlingClientSecret?: string;
9
+ benchlingAppDefinitionId?: string;
10
+ quiltUserBucket?: string;
11
+ quiltRegion?: string;
12
+ [key: string]: string | undefined;
13
+ }
14
+ /**
15
+ * Validation options
16
+ */
17
+ export interface ValidationOptions {
18
+ skipBenchlingValidation?: boolean;
19
+ skipS3Validation?: boolean;
20
+ }
21
+ /**
22
+ * Comprehensive validation result
23
+ */
24
+ export interface ComprehensiveValidationResult {
25
+ isValid: boolean;
26
+ errors: string[];
27
+ warnings?: string[];
28
+ }
29
+ /**
30
+ * Comprehensive configuration validator
31
+ *
32
+ * Combines all validation checks (Benchling + S3) and provides
33
+ * comprehensive validation results with aggregated errors.
34
+ */
35
+ export declare class ConfigurationValidator {
36
+ /**
37
+ * Required configuration fields
38
+ */
39
+ private static readonly REQUIRED_FIELDS;
40
+ /**
41
+ * Validate entire configuration
42
+ *
43
+ * @param config - Configuration to validate
44
+ * @param options - Validation options
45
+ * @returns Comprehensive validation result
46
+ */
47
+ static validate(config: Configuration, options?: ValidationOptions): Promise<ComprehensiveValidationResult>;
48
+ /**
49
+ * Validate catalog URL format
50
+ *
51
+ * @param catalogUrl - Catalog URL to validate
52
+ * @returns True if URL format is valid
53
+ */
54
+ static validateCatalogUrl(catalogUrl: string): boolean;
55
+ /**
56
+ * Check for missing required fields
57
+ *
58
+ * @param config - Configuration to check
59
+ * @returns Array of missing field names
60
+ */
61
+ static checkRequiredFields(config: Configuration): string[];
62
+ }
63
+ //# sourceMappingURL=configuration-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-validator.d.ts","sourceRoot":"","sources":["../../lib/configuration-validator.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IAC/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAQrC;IAEF;;;;;;OAMG;WACiB,QAAQ,CACxB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,iBAAsB,GAChC,OAAO,CAAC,6BAA6B,CAAC;IA8EzC;;;;;OAKG;WACW,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAa7D;;;;;OAKG;WACW,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE;CAWrE"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigurationValidator = void 0;
4
+ const benchling_auth_validator_1 = require("./benchling-auth-validator");
5
+ const s3_bucket_validator_1 = require("./s3-bucket-validator");
6
+ /**
7
+ * Comprehensive configuration validator
8
+ *
9
+ * Combines all validation checks (Benchling + S3) and provides
10
+ * comprehensive validation results with aggregated errors.
11
+ */
12
+ class ConfigurationValidator {
13
+ /**
14
+ * Validate entire configuration
15
+ *
16
+ * @param config - Configuration to validate
17
+ * @param options - Validation options
18
+ * @returns Comprehensive validation result
19
+ */
20
+ static async validate(config, options = {}) {
21
+ const errors = [];
22
+ const warnings = [];
23
+ // Check required fields
24
+ const missingFields = ConfigurationValidator.checkRequiredFields(config);
25
+ if (missingFields.length > 0) {
26
+ errors.push(`Missing required fields: ${missingFields.join(", ")}`);
27
+ }
28
+ // Validate catalog URL format
29
+ if (config.catalogUrl && !ConfigurationValidator.validateCatalogUrl(config.catalogUrl)) {
30
+ errors.push("Invalid catalog URL");
31
+ }
32
+ else if (!config.catalogUrl) {
33
+ errors.push("Invalid catalog URL");
34
+ }
35
+ // If basic validation fails, return early
36
+ if (errors.length > 0 && (options.skipBenchlingValidation || options.skipS3Validation)) {
37
+ return {
38
+ isValid: false,
39
+ errors,
40
+ warnings: warnings.length > 0 ? warnings : undefined,
41
+ };
42
+ }
43
+ // Validate Benchling authentication
44
+ if (!options.skipBenchlingValidation && config.benchlingTenant && config.benchlingClientId && config.benchlingClientSecret) {
45
+ try {
46
+ const benchlingCredentials = {
47
+ tenant: config.benchlingTenant,
48
+ clientId: config.benchlingClientId,
49
+ clientSecret: config.benchlingClientSecret,
50
+ };
51
+ const benchlingResult = await benchling_auth_validator_1.BenchlingAuthValidator.validate(benchlingCredentials);
52
+ if (!benchlingResult.isValid) {
53
+ errors.push(...benchlingResult.errors);
54
+ }
55
+ if (benchlingResult.warnings) {
56
+ warnings.push(...benchlingResult.warnings);
57
+ }
58
+ }
59
+ catch (error) {
60
+ if (error instanceof Error) {
61
+ errors.push(`Benchling validation failed: ${error.message}`);
62
+ }
63
+ }
64
+ }
65
+ // Validate S3 bucket access
66
+ if (!options.skipS3Validation && config.quiltUserBucket && config.quiltRegion) {
67
+ try {
68
+ const s3Config = {
69
+ bucketName: config.quiltUserBucket,
70
+ region: config.quiltRegion,
71
+ };
72
+ const s3Result = await s3_bucket_validator_1.S3BucketValidator.validate(s3Config);
73
+ if (!s3Result.hasAccess) {
74
+ errors.push(...s3Result.errors);
75
+ }
76
+ }
77
+ catch (error) {
78
+ if (error instanceof Error) {
79
+ errors.push(`S3 validation failed: ${error.message}`);
80
+ }
81
+ }
82
+ }
83
+ return {
84
+ isValid: errors.length === 0,
85
+ errors,
86
+ warnings: warnings.length > 0 ? warnings : undefined,
87
+ };
88
+ }
89
+ /**
90
+ * Validate catalog URL format
91
+ *
92
+ * @param catalogUrl - Catalog URL to validate
93
+ * @returns True if URL format is valid
94
+ */
95
+ static validateCatalogUrl(catalogUrl) {
96
+ if (!catalogUrl || catalogUrl.trim() === "") {
97
+ return false;
98
+ }
99
+ try {
100
+ const url = new URL(catalogUrl);
101
+ return url.protocol === "http:" || url.protocol === "https:";
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ /**
108
+ * Check for missing required fields
109
+ *
110
+ * @param config - Configuration to check
111
+ * @returns Array of missing field names
112
+ */
113
+ static checkRequiredFields(config) {
114
+ const missing = [];
115
+ for (const field of ConfigurationValidator.REQUIRED_FIELDS) {
116
+ if (!config[field] || config[field]?.trim() === "") {
117
+ missing.push(field);
118
+ }
119
+ }
120
+ return missing;
121
+ }
122
+ }
123
+ exports.ConfigurationValidator = ConfigurationValidator;
124
+ /**
125
+ * Required configuration fields
126
+ */
127
+ ConfigurationValidator.REQUIRED_FIELDS = [
128
+ "catalogUrl",
129
+ "benchlingTenant",
130
+ "benchlingClientId",
131
+ "benchlingClientSecret",
132
+ "benchlingAppDefinitionId",
133
+ "quiltUserBucket",
134
+ "quiltRegion",
135
+ ];
136
+ //# sourceMappingURL=configuration-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-validator.js","sourceRoot":"","sources":["../../lib/configuration-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Configuration wizard options
3
+ */
4
+ export interface WizardOptions {
5
+ partialConfig?: Record<string, string | number | boolean>;
6
+ }
7
+ /**
8
+ * Interactive configuration wizard for completing missing configuration details
9
+ */
10
+ export declare class ConfigurationWizard {
11
+ /**
12
+ * Required configuration fields
13
+ */
14
+ private static readonly REQUIRED_FIELDS;
15
+ /**
16
+ * Optional configuration fields
17
+ */
18
+ private static readonly OPTIONAL_FIELDS;
19
+ /**
20
+ * Run the configuration wizard
21
+ */
22
+ static run(options: WizardOptions): Promise<Record<string, string | number | boolean>>;
23
+ /**
24
+ * Get missing required fields from partial configuration
25
+ */
26
+ static getMissingFields(partialConfig: Record<string, string | number | boolean | undefined>): string[];
27
+ /**
28
+ * Create inquirer questions for missing fields
29
+ */
30
+ private static createQuestions;
31
+ /**
32
+ * Validate answers after prompting
33
+ */
34
+ private static validateAnswers;
35
+ /**
36
+ * Validate Benchling tenant format
37
+ */
38
+ static validateTenant(value: string): boolean | string;
39
+ /**
40
+ * Validate Benchling client ID format
41
+ */
42
+ static validateClientId(value: string): boolean | string;
43
+ /**
44
+ * Validate Benchling client secret format
45
+ */
46
+ static validateClientSecret(value: string): boolean | string;
47
+ /**
48
+ * Validate Benchling app definition ID format
49
+ */
50
+ static validateAppDefinitionId(value: string): boolean | string;
51
+ }
52
+ //# sourceMappingURL=configuration-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-wizard.d.ts","sourceRoot":"","sources":["../../lib/configuration-wizard.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAC7D;AAaD;;GAEG;AACH,qBAAa,mBAAmB;IAC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAyBrC;IAEF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAOrC;IAEF;;OAEG;WACiB,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAwCnG;;OAEG;WACW,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE;IAY9G;;OAEG;IAEH,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAuB9B;;OAEG;WACW,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAO7D;;OAEG;WACW,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAO/D;;OAEG;WACW,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;IAUnE;;OAEG;WACW,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM;CAMzE"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfigurationWizard = void 0;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ /**
9
+ * Interactive configuration wizard for completing missing configuration details
10
+ */
11
+ class ConfigurationWizard {
12
+ /**
13
+ * Run the configuration wizard
14
+ */
15
+ static async run(options) {
16
+ const { partialConfig = {} } = options;
17
+ try {
18
+ // Identify missing required fields
19
+ const missingFields = ConfigurationWizard.getMissingFields(partialConfig);
20
+ // If no fields are missing, return the partial config
21
+ if (missingFields.length === 0) {
22
+ return partialConfig;
23
+ }
24
+ // Create prompt questions for missing fields
25
+ const questions = ConfigurationWizard.createQuestions(missingFields);
26
+ // Prompt the user for missing fields
27
+ const answers = await inquirer_1.default.prompt(questions);
28
+ // Validate the answers
29
+ ConfigurationWizard.validateAnswers(answers);
30
+ // Merge answers with partial config
31
+ const completeConfig = { ...partialConfig };
32
+ // Add non-empty answers
33
+ for (const [key, value] of Object.entries(answers)) {
34
+ if (value && typeof value === "string" && value.trim() !== "") {
35
+ completeConfig[key] = value;
36
+ }
37
+ }
38
+ return completeConfig;
39
+ }
40
+ catch (error) {
41
+ if (error instanceof Error && error.message === "User cancelled") {
42
+ throw new Error("Configuration wizard cancelled");
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ /**
48
+ * Get missing required fields from partial configuration
49
+ */
50
+ static getMissingFields(partialConfig) {
51
+ const missingFields = [];
52
+ for (const field of ConfigurationWizard.REQUIRED_FIELDS) {
53
+ if (!partialConfig[field.name] || partialConfig[field.name] === "") {
54
+ missingFields.push(field.name);
55
+ }
56
+ }
57
+ return missingFields;
58
+ }
59
+ /**
60
+ * Create inquirer questions for missing fields
61
+ */
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ static createQuestions(missingFields) {
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ const questions = [];
66
+ // Add questions for missing required fields
67
+ for (const field of ConfigurationWizard.REQUIRED_FIELDS) {
68
+ if (missingFields.includes(field.name)) {
69
+ questions.push({
70
+ type: field.type,
71
+ name: field.name,
72
+ message: field.message,
73
+ validate: field.validate ? (input) => {
74
+ const result = field.validate(input);
75
+ return result === true ? true : result;
76
+ } : undefined,
77
+ });
78
+ }
79
+ }
80
+ // Add optional fields
81
+ for (const field of ConfigurationWizard.OPTIONAL_FIELDS) {
82
+ questions.push({
83
+ type: field.type,
84
+ name: field.name,
85
+ message: field.message,
86
+ });
87
+ }
88
+ return questions;
89
+ }
90
+ /**
91
+ * Validate answers after prompting
92
+ */
93
+ static validateAnswers(answers) {
94
+ // Check for empty tenant
95
+ if (answers.benchlingTenant !== undefined &&
96
+ (answers.benchlingTenant === "" || answers.benchlingTenant.trim() === "")) {
97
+ throw new Error("Benchling tenant cannot be empty");
98
+ }
99
+ // Check for empty client ID
100
+ if (answers.benchlingClientId !== undefined && answers.benchlingClientId === "") {
101
+ throw new Error("Benchling client ID cannot be empty");
102
+ }
103
+ // Check for empty client secret
104
+ if (answers.benchlingClientSecret !== undefined && answers.benchlingClientSecret === "") {
105
+ throw new Error("Benchling client secret cannot be empty");
106
+ }
107
+ // Check for empty app definition ID
108
+ if (answers.benchlingAppDefinitionId !== undefined && answers.benchlingAppDefinitionId === "") {
109
+ throw new Error("Benchling app definition ID cannot be empty");
110
+ }
111
+ }
112
+ /**
113
+ * Validate Benchling tenant format
114
+ */
115
+ static validateTenant(value) {
116
+ if (!value || value.trim() === "") {
117
+ return "Benchling tenant cannot be empty";
118
+ }
119
+ return true;
120
+ }
121
+ /**
122
+ * Validate Benchling client ID format
123
+ */
124
+ static validateClientId(value) {
125
+ if (!value || value.trim() === "") {
126
+ return "Client ID cannot be empty";
127
+ }
128
+ return true;
129
+ }
130
+ /**
131
+ * Validate Benchling client secret format
132
+ */
133
+ static validateClientSecret(value) {
134
+ if (!value || value.trim() === "") {
135
+ return "Client secret cannot be empty";
136
+ }
137
+ if (value.length < 6) {
138
+ return "Client secret must be at least 6 characters";
139
+ }
140
+ return true;
141
+ }
142
+ /**
143
+ * Validate Benchling app definition ID format
144
+ */
145
+ static validateAppDefinitionId(value) {
146
+ if (!value || value.trim() === "") {
147
+ return "App definition ID cannot be empty";
148
+ }
149
+ return true;
150
+ }
151
+ }
152
+ exports.ConfigurationWizard = ConfigurationWizard;
153
+ /**
154
+ * Required configuration fields
155
+ */
156
+ ConfigurationWizard.REQUIRED_FIELDS = [
157
+ {
158
+ name: "benchlingTenant",
159
+ message: "Enter your Benchling tenant name (e.g., 'acme' for acme.benchling.com):",
160
+ type: "input",
161
+ validate: ConfigurationWizard.validateTenant,
162
+ },
163
+ {
164
+ name: "benchlingClientId",
165
+ message: "Enter your Benchling OAuth client ID:",
166
+ type: "input",
167
+ validate: ConfigurationWizard.validateClientId,
168
+ },
169
+ {
170
+ name: "benchlingClientSecret",
171
+ message: "Enter your Benchling OAuth client secret:",
172
+ type: "password",
173
+ validate: ConfigurationWizard.validateClientSecret,
174
+ },
175
+ {
176
+ name: "benchlingAppDefinitionId",
177
+ message: "Enter your Benchling app definition ID:",
178
+ type: "input",
179
+ validate: ConfigurationWizard.validateAppDefinitionId,
180
+ },
181
+ ];
182
+ /**
183
+ * Optional configuration fields
184
+ */
185
+ ConfigurationWizard.OPTIONAL_FIELDS = [
186
+ {
187
+ name: "benchlingTestEntry",
188
+ message: "Enter a Benchling test entry ID (optional, press Enter to skip):",
189
+ type: "input",
190
+ optional: true,
191
+ },
192
+ ];
193
+ //# sourceMappingURL=configuration-wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configuration-wizard.js","sourceRoot":"","sources":["../../lib/configuration-wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Quilt Configuration Resolver
3
+ *
4
+ * Automatically infers Quilt configuration from the quilt3 CLI.
5
+ * Extracts catalog URL, S3 bucket, and region information.
6
+ *
7
+ * @module quilt-config-resolver
8
+ */
9
+ /**
10
+ * Quilt configuration structure
11
+ */
12
+ export interface QuiltConfig {
13
+ catalogUrl?: string;
14
+ userBucket?: string;
15
+ defaultRegion?: string;
16
+ }
17
+ /**
18
+ * Quilt Configuration Resolver
19
+ *
20
+ * Resolves Quilt configuration from the quilt3 CLI or user overrides.
21
+ */
22
+ export declare class QuiltConfigResolver {
23
+ /**
24
+ * Resolves Quilt configuration with optional manual overrides
25
+ *
26
+ * @param manualConfig - Optional manual configuration overrides
27
+ * @returns Resolved Quilt configuration
28
+ */
29
+ static resolve(manualConfig?: Partial<QuiltConfig>): Promise<QuiltConfig>;
30
+ /**
31
+ * Resolves configuration from quilt3 CLI
32
+ *
33
+ * @returns Resolved Quilt configuration
34
+ * @throws {Error} If quilt3 is not installed or configured
35
+ */
36
+ resolveFromQuilt3(): Promise<QuiltConfig>;
37
+ /**
38
+ * Resolves configuration using a custom command
39
+ *
40
+ * @param command - Command to execute
41
+ * @returns Resolved Quilt configuration
42
+ * @throws {Error} If command fails
43
+ */
44
+ resolveWithCommand(command: string): Promise<QuiltConfig>;
45
+ /**
46
+ * Parses quilt3 config output
47
+ *
48
+ * @param output - Raw output from quilt3 config command
49
+ * @returns Parsed Quilt configuration
50
+ */
51
+ parseQuilt3Config(output: string): QuiltConfig;
52
+ }
53
+ //# sourceMappingURL=quilt-config-resolver.d.ts.map