@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,559 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Configuration Health Checks
|
|
5
|
+
*
|
|
6
|
+
* Validates:
|
|
7
|
+
* - XDG configuration integrity
|
|
8
|
+
* - Secrets accessibility
|
|
9
|
+
* - Benchling credential freshness
|
|
10
|
+
* - AWS resource connectivity
|
|
11
|
+
*
|
|
12
|
+
* @module scripts/config-health-check
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.ConfigHealthChecker = void 0;
|
|
49
|
+
const xdg_config_1 = require("../lib/xdg-config");
|
|
50
|
+
const fs_1 = require("fs");
|
|
51
|
+
const sync_secrets_1 = require("./sync-secrets");
|
|
52
|
+
const config_logger_1 = require("../lib/config-logger");
|
|
53
|
+
const https = __importStar(require("https"));
|
|
54
|
+
/**
|
|
55
|
+
* Configuration health checker
|
|
56
|
+
*/
|
|
57
|
+
class ConfigHealthChecker {
|
|
58
|
+
constructor(profile = "default") {
|
|
59
|
+
this.logger = new config_logger_1.ConfigLogger({ minLogLevel: config_logger_1.LogLevel.INFO });
|
|
60
|
+
this.xdgConfig = new xdg_config_1.XDGConfig();
|
|
61
|
+
this.profile = profile;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Checks XDG configuration file integrity
|
|
65
|
+
*
|
|
66
|
+
* @returns Health check result
|
|
67
|
+
*/
|
|
68
|
+
async checkXDGIntegrity() {
|
|
69
|
+
try {
|
|
70
|
+
const paths = this.xdgConfig.getProfilePaths(this.profile);
|
|
71
|
+
// Check if profile directory exists
|
|
72
|
+
const profileDir = this.xdgConfig.getProfileDir(this.profile);
|
|
73
|
+
if (!(0, fs_1.existsSync)(profileDir)) {
|
|
74
|
+
return {
|
|
75
|
+
check: "xdg-integrity",
|
|
76
|
+
status: "fail",
|
|
77
|
+
message: "Profile directory does not exist",
|
|
78
|
+
details: {
|
|
79
|
+
profileDir,
|
|
80
|
+
profile: this.profile,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Check for configuration files
|
|
85
|
+
const files = {
|
|
86
|
+
userConfig: (0, fs_1.existsSync)(paths.userConfig),
|
|
87
|
+
derivedConfig: (0, fs_1.existsSync)(paths.derivedConfig),
|
|
88
|
+
deployConfig: (0, fs_1.existsSync)(paths.deployConfig),
|
|
89
|
+
};
|
|
90
|
+
// At least user or derived config should exist
|
|
91
|
+
if (!files.userConfig && !files.derivedConfig) {
|
|
92
|
+
return {
|
|
93
|
+
check: "xdg-integrity",
|
|
94
|
+
status: "warn",
|
|
95
|
+
message: "No configuration files found",
|
|
96
|
+
details: {
|
|
97
|
+
...files,
|
|
98
|
+
profile: this.profile,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
// Try to read and validate existing configs
|
|
103
|
+
if (files.userConfig) {
|
|
104
|
+
try {
|
|
105
|
+
this.xdgConfig.readProfileConfig("user", this.profile);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return {
|
|
109
|
+
check: "xdg-integrity",
|
|
110
|
+
status: "fail",
|
|
111
|
+
message: `User config validation failed: ${error.message}`,
|
|
112
|
+
details: {
|
|
113
|
+
profile: this.profile,
|
|
114
|
+
error: error.message,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (files.derivedConfig) {
|
|
120
|
+
try {
|
|
121
|
+
this.xdgConfig.readProfileConfig("derived", this.profile);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
return {
|
|
125
|
+
check: "xdg-integrity",
|
|
126
|
+
status: "fail",
|
|
127
|
+
message: `Derived config validation failed: ${error.message}`,
|
|
128
|
+
details: {
|
|
129
|
+
profile: this.profile,
|
|
130
|
+
error: error.message,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
check: "xdg-integrity",
|
|
137
|
+
status: "pass",
|
|
138
|
+
message: "XDG configuration integrity verified",
|
|
139
|
+
details: {
|
|
140
|
+
...files,
|
|
141
|
+
profile: this.profile,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
return {
|
|
147
|
+
check: "xdg-integrity",
|
|
148
|
+
status: "fail",
|
|
149
|
+
message: `Integrity check failed: ${error.message}`,
|
|
150
|
+
details: {
|
|
151
|
+
error: error.message,
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Checks AWS Secrets Manager accessibility
|
|
158
|
+
*
|
|
159
|
+
* @returns Health check result
|
|
160
|
+
*/
|
|
161
|
+
async checkSecretsAccess() {
|
|
162
|
+
try {
|
|
163
|
+
// Load derived config to get secret ARN
|
|
164
|
+
const derivedConfig = this.xdgConfig.readProfileConfig("derived", this.profile);
|
|
165
|
+
if (!derivedConfig.benchlingSecretArn) {
|
|
166
|
+
return {
|
|
167
|
+
check: "secrets-access",
|
|
168
|
+
status: "warn",
|
|
169
|
+
message: "No secrets configured",
|
|
170
|
+
details: {
|
|
171
|
+
profile: this.profile,
|
|
172
|
+
recommendation: "Run sync-secrets to configure AWS Secrets Manager",
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Validate secrets accessibility
|
|
177
|
+
const isAccessible = await (0, sync_secrets_1.validateSecretsAccess)({
|
|
178
|
+
profile: this.profile,
|
|
179
|
+
region: derivedConfig.cdkRegion || "us-east-1",
|
|
180
|
+
awsProfile: derivedConfig.awsProfile,
|
|
181
|
+
});
|
|
182
|
+
if (isAccessible) {
|
|
183
|
+
return {
|
|
184
|
+
check: "secrets-access",
|
|
185
|
+
status: "pass",
|
|
186
|
+
message: "Secrets accessible",
|
|
187
|
+
details: {
|
|
188
|
+
secretArn: derivedConfig.benchlingSecretArn,
|
|
189
|
+
profile: this.profile,
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return {
|
|
195
|
+
check: "secrets-access",
|
|
196
|
+
status: "fail",
|
|
197
|
+
message: "Secrets not accessible",
|
|
198
|
+
details: {
|
|
199
|
+
secretArn: derivedConfig.benchlingSecretArn,
|
|
200
|
+
profile: this.profile,
|
|
201
|
+
recommendation: "Check AWS credentials and IAM permissions",
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
return {
|
|
208
|
+
check: "secrets-access",
|
|
209
|
+
status: "fail",
|
|
210
|
+
message: `Secrets access check failed: ${error.message}`,
|
|
211
|
+
details: {
|
|
212
|
+
error: error.message,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Checks Benchling credential freshness
|
|
219
|
+
*
|
|
220
|
+
* @returns Health check result
|
|
221
|
+
*/
|
|
222
|
+
async checkBenchlingCredentials() {
|
|
223
|
+
try {
|
|
224
|
+
const userConfig = this.xdgConfig.readProfileConfig("user", this.profile);
|
|
225
|
+
if (!userConfig.benchlingTenant) {
|
|
226
|
+
return {
|
|
227
|
+
check: "benchling-credentials",
|
|
228
|
+
status: "warn",
|
|
229
|
+
message: "No Benchling tenant configured",
|
|
230
|
+
details: {
|
|
231
|
+
profile: this.profile,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
// Check tenant accessibility
|
|
236
|
+
const tenantUrl = `https://${userConfig.benchlingTenant}.benchling.com`;
|
|
237
|
+
return new Promise((resolve) => {
|
|
238
|
+
https
|
|
239
|
+
.get(tenantUrl, { timeout: 5000 }, (res) => {
|
|
240
|
+
if (res.statusCode === 200 || res.statusCode === 302 || res.statusCode === 301) {
|
|
241
|
+
resolve({
|
|
242
|
+
check: "benchling-credentials",
|
|
243
|
+
status: "pass",
|
|
244
|
+
message: "Benchling tenant accessible",
|
|
245
|
+
details: {
|
|
246
|
+
tenant: userConfig.benchlingTenant,
|
|
247
|
+
tenantUrl,
|
|
248
|
+
},
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
resolve({
|
|
253
|
+
check: "benchling-credentials",
|
|
254
|
+
status: "warn",
|
|
255
|
+
message: `Tenant returned status ${res.statusCode}`,
|
|
256
|
+
details: {
|
|
257
|
+
tenant: userConfig.benchlingTenant,
|
|
258
|
+
statusCode: res.statusCode,
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
})
|
|
263
|
+
.on("error", (error) => {
|
|
264
|
+
resolve({
|
|
265
|
+
check: "benchling-credentials",
|
|
266
|
+
status: "fail",
|
|
267
|
+
message: `Tenant not accessible: ${error.message}`,
|
|
268
|
+
details: {
|
|
269
|
+
tenant: userConfig.benchlingTenant,
|
|
270
|
+
error: error.message,
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
return {
|
|
278
|
+
check: "benchling-credentials",
|
|
279
|
+
status: "fail",
|
|
280
|
+
message: `Credential check failed: ${error.message}`,
|
|
281
|
+
details: {
|
|
282
|
+
error: error.message,
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Checks Quilt catalog connectivity
|
|
289
|
+
*
|
|
290
|
+
* @returns Health check result
|
|
291
|
+
*/
|
|
292
|
+
async checkQuiltCatalog() {
|
|
293
|
+
try {
|
|
294
|
+
const userConfig = this.xdgConfig.readProfileConfig("user", this.profile);
|
|
295
|
+
const catalogUrl = userConfig.quiltCatalog || userConfig.quiltCatalog;
|
|
296
|
+
if (!catalogUrl) {
|
|
297
|
+
return {
|
|
298
|
+
check: "quilt-catalog",
|
|
299
|
+
status: "warn",
|
|
300
|
+
message: "No Quilt catalog configured",
|
|
301
|
+
details: {
|
|
302
|
+
profile: this.profile,
|
|
303
|
+
recommendation: "Run infer-quilt-config or install-wizard",
|
|
304
|
+
},
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
// Test catalog API endpoint
|
|
308
|
+
const apiUrl = `${catalogUrl}/api/config`;
|
|
309
|
+
return new Promise((resolve) => {
|
|
310
|
+
https
|
|
311
|
+
.get(apiUrl, { timeout: 5000 }, (res) => {
|
|
312
|
+
if (res.statusCode === 200) {
|
|
313
|
+
resolve({
|
|
314
|
+
check: "quilt-catalog",
|
|
315
|
+
status: "pass",
|
|
316
|
+
message: "Quilt catalog accessible",
|
|
317
|
+
details: {
|
|
318
|
+
catalogUrl,
|
|
319
|
+
apiUrl,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
resolve({
|
|
325
|
+
check: "quilt-catalog",
|
|
326
|
+
status: "warn",
|
|
327
|
+
message: `Catalog API returned status ${res.statusCode}`,
|
|
328
|
+
details: {
|
|
329
|
+
catalogUrl,
|
|
330
|
+
statusCode: res.statusCode,
|
|
331
|
+
},
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
})
|
|
335
|
+
.on("error", (error) => {
|
|
336
|
+
resolve({
|
|
337
|
+
check: "quilt-catalog",
|
|
338
|
+
status: "fail",
|
|
339
|
+
message: `Catalog not accessible: ${error.message}`,
|
|
340
|
+
details: {
|
|
341
|
+
catalogUrl,
|
|
342
|
+
error: error.message,
|
|
343
|
+
},
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
return {
|
|
350
|
+
check: "quilt-catalog",
|
|
351
|
+
status: "fail",
|
|
352
|
+
message: `Catalog check failed: ${error.message}`,
|
|
353
|
+
details: {
|
|
354
|
+
error: error.message,
|
|
355
|
+
},
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Checks deployment configuration
|
|
361
|
+
*
|
|
362
|
+
* @returns Health check result
|
|
363
|
+
*/
|
|
364
|
+
async checkDeploymentConfig() {
|
|
365
|
+
try {
|
|
366
|
+
const paths = this.xdgConfig.getProfilePaths(this.profile);
|
|
367
|
+
if (!(0, fs_1.existsSync)(paths.deployConfig)) {
|
|
368
|
+
return {
|
|
369
|
+
check: "deployment-config",
|
|
370
|
+
status: "warn",
|
|
371
|
+
message: "No deployment configuration found",
|
|
372
|
+
details: {
|
|
373
|
+
profile: this.profile,
|
|
374
|
+
recommendation: "Deploy the stack to generate deployment configuration",
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
const deployConfig = this.xdgConfig.readProfileConfig("deploy", this.profile);
|
|
379
|
+
// Check for webhook endpoint
|
|
380
|
+
if (!deployConfig.webhookEndpoint && !deployConfig.webhookUrl) {
|
|
381
|
+
return {
|
|
382
|
+
check: "deployment-config",
|
|
383
|
+
status: "warn",
|
|
384
|
+
message: "Webhook endpoint not configured",
|
|
385
|
+
details: {
|
|
386
|
+
profile: this.profile,
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
// Check deployment age
|
|
391
|
+
if (deployConfig.deployedAt) {
|
|
392
|
+
const deployedDate = new Date(deployConfig.deployedAt);
|
|
393
|
+
const ageInDays = (Date.now() - deployedDate.getTime()) / (1000 * 60 * 60 * 24);
|
|
394
|
+
if (ageInDays > 30) {
|
|
395
|
+
return {
|
|
396
|
+
check: "deployment-config",
|
|
397
|
+
status: "warn",
|
|
398
|
+
message: `Deployment is ${Math.floor(ageInDays)} days old`,
|
|
399
|
+
details: {
|
|
400
|
+
deployedAt: deployConfig.deployedAt,
|
|
401
|
+
ageInDays: Math.floor(ageInDays),
|
|
402
|
+
recommendation: "Consider updating deployment",
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return {
|
|
408
|
+
check: "deployment-config",
|
|
409
|
+
status: "pass",
|
|
410
|
+
message: "Deployment configuration valid",
|
|
411
|
+
details: {
|
|
412
|
+
webhookEndpoint: deployConfig.webhookEndpoint || deployConfig.webhookUrl,
|
|
413
|
+
deployedAt: deployConfig.deployedAt,
|
|
414
|
+
stackArn: deployConfig.stackArn,
|
|
415
|
+
},
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
catch (error) {
|
|
419
|
+
return {
|
|
420
|
+
check: "deployment-config",
|
|
421
|
+
status: "fail",
|
|
422
|
+
message: `Deployment check failed: ${error.message}`,
|
|
423
|
+
details: {
|
|
424
|
+
error: error.message,
|
|
425
|
+
},
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Runs all health checks
|
|
431
|
+
*
|
|
432
|
+
* @returns Complete health status
|
|
433
|
+
*/
|
|
434
|
+
async runAllChecks() {
|
|
435
|
+
this.logger.info("health-check", `Running health checks for profile: ${this.profile}`);
|
|
436
|
+
const checks = [];
|
|
437
|
+
// Run all checks in parallel
|
|
438
|
+
const results = await Promise.all([
|
|
439
|
+
this.checkXDGIntegrity(),
|
|
440
|
+
this.checkSecretsAccess(),
|
|
441
|
+
this.checkBenchlingCredentials(),
|
|
442
|
+
this.checkQuiltCatalog(),
|
|
443
|
+
this.checkDeploymentConfig(),
|
|
444
|
+
]);
|
|
445
|
+
checks.push(...results);
|
|
446
|
+
// Determine overall status
|
|
447
|
+
const failCount = checks.filter((c) => c.status === "fail").length;
|
|
448
|
+
const warnCount = checks.filter((c) => c.status === "warn").length;
|
|
449
|
+
let overall;
|
|
450
|
+
if (failCount > 0) {
|
|
451
|
+
overall = "unhealthy";
|
|
452
|
+
}
|
|
453
|
+
else if (warnCount > 0) {
|
|
454
|
+
overall = "degraded";
|
|
455
|
+
}
|
|
456
|
+
else {
|
|
457
|
+
overall = "healthy";
|
|
458
|
+
}
|
|
459
|
+
const status = {
|
|
460
|
+
overall,
|
|
461
|
+
checks,
|
|
462
|
+
timestamp: new Date().toISOString(),
|
|
463
|
+
profile: this.profile,
|
|
464
|
+
};
|
|
465
|
+
this.logger.info("health-check", `Health check completed: ${overall}`, {
|
|
466
|
+
failCount,
|
|
467
|
+
warnCount,
|
|
468
|
+
passCount: checks.filter((c) => c.status === "pass").length,
|
|
469
|
+
});
|
|
470
|
+
return status;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
exports.ConfigHealthChecker = ConfigHealthChecker;
|
|
474
|
+
/**
|
|
475
|
+
* Formats health status for console output
|
|
476
|
+
*
|
|
477
|
+
* @param status - Health status
|
|
478
|
+
* @returns Formatted string
|
|
479
|
+
*/
|
|
480
|
+
function formatHealthStatus(status) {
|
|
481
|
+
const lines = [];
|
|
482
|
+
lines.push("╔═══════════════════════════════════════════════════════════╗");
|
|
483
|
+
lines.push("║ Configuration Health Check ║");
|
|
484
|
+
lines.push("╚═══════════════════════════════════════════════════════════╝");
|
|
485
|
+
lines.push("");
|
|
486
|
+
lines.push(`Profile: ${status.profile}`);
|
|
487
|
+
lines.push(`Timestamp: ${status.timestamp}`);
|
|
488
|
+
lines.push(`Overall Status: ${status.overall.toUpperCase()}`);
|
|
489
|
+
lines.push("");
|
|
490
|
+
lines.push("Checks:");
|
|
491
|
+
for (const check of status.checks) {
|
|
492
|
+
const icon = check.status === "pass" ? "✓" : check.status === "warn" ? "⚠" : "❌";
|
|
493
|
+
lines.push(` ${icon} ${check.check}: ${check.message}`);
|
|
494
|
+
if (check.details) {
|
|
495
|
+
Object.entries(check.details).forEach(([key, value]) => {
|
|
496
|
+
if (key !== "error" && key !== "recommendation") {
|
|
497
|
+
lines.push(` ${key}: ${value}`);
|
|
498
|
+
}
|
|
499
|
+
});
|
|
500
|
+
if (check.details.recommendation) {
|
|
501
|
+
lines.push(` → ${check.details.recommendation}`);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
lines.push("");
|
|
505
|
+
}
|
|
506
|
+
return lines.join("\n");
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* Main execution for CLI usage
|
|
510
|
+
*/
|
|
511
|
+
async function main() {
|
|
512
|
+
const args = process.argv.slice(2);
|
|
513
|
+
let profile = "default";
|
|
514
|
+
let outputFormat = "text";
|
|
515
|
+
// Parse arguments
|
|
516
|
+
for (let i = 0; i < args.length; i++) {
|
|
517
|
+
if (args[i] === "--profile" && i + 1 < args.length) {
|
|
518
|
+
profile = args[i + 1];
|
|
519
|
+
i++;
|
|
520
|
+
}
|
|
521
|
+
else if (args[i] === "--json") {
|
|
522
|
+
outputFormat = "json";
|
|
523
|
+
}
|
|
524
|
+
else if (args[i] === "--help") {
|
|
525
|
+
console.log("Usage: config-health-check [options]");
|
|
526
|
+
console.log("\nOptions:");
|
|
527
|
+
console.log(" --profile <name> Configuration profile (default: default)");
|
|
528
|
+
console.log(" --json Output in JSON format");
|
|
529
|
+
console.log(" --help Show this help message");
|
|
530
|
+
process.exit(0);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
const checker = new ConfigHealthChecker(profile);
|
|
534
|
+
const status = await checker.runAllChecks();
|
|
535
|
+
if (outputFormat === "json") {
|
|
536
|
+
console.log(JSON.stringify(status, null, 2));
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
console.log(formatHealthStatus(status));
|
|
540
|
+
}
|
|
541
|
+
// Exit with appropriate code
|
|
542
|
+
if (status.overall === "unhealthy") {
|
|
543
|
+
process.exit(1);
|
|
544
|
+
}
|
|
545
|
+
else if (status.overall === "degraded") {
|
|
546
|
+
process.exit(2);
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
process.exit(0);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
// Run main if executed directly
|
|
553
|
+
if (require.main === module) {
|
|
554
|
+
main().catch((error) => {
|
|
555
|
+
console.error("Error:", error.message);
|
|
556
|
+
process.exit(1);
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
//# sourceMappingURL=config-health-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-health-check.js","sourceRoot":"","sources":["../../scripts/config-health-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Quilt Catalog Auto-Inference
|
|
4
|
+
*
|
|
5
|
+
* Automatically infers Quilt catalog configuration from:
|
|
6
|
+
* 1. quilt3 CLI command (`quilt3 config`)
|
|
7
|
+
* 2. AWS CloudFormation stack inspection
|
|
8
|
+
* 3. Interactive catalog selection (if multiple catalogs available)
|
|
9
|
+
*
|
|
10
|
+
* @module scripts/infer-quilt-config
|
|
11
|
+
*/
|
|
12
|
+
import { DerivedConfig } from "../lib/types/config";
|
|
13
|
+
/**
|
|
14
|
+
* Result of Quilt configuration inference
|
|
15
|
+
*/
|
|
16
|
+
interface InferenceResult {
|
|
17
|
+
catalogUrl?: string;
|
|
18
|
+
quiltUserBucket?: string;
|
|
19
|
+
quiltDatabase?: string;
|
|
20
|
+
quiltStackArn?: string;
|
|
21
|
+
quiltRegion?: string;
|
|
22
|
+
queueArn?: string;
|
|
23
|
+
registryUrl?: string;
|
|
24
|
+
source: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Infers Quilt configuration from multiple sources
|
|
28
|
+
*
|
|
29
|
+
* Priority order:
|
|
30
|
+
* 1. quilt3 CLI command (`quilt3 config`)
|
|
31
|
+
* 2. CloudFormation stack inspection
|
|
32
|
+
* 3. Interactive selection if multiple options
|
|
33
|
+
*
|
|
34
|
+
* @param options - Inference options
|
|
35
|
+
* @returns Inferred configuration
|
|
36
|
+
*/
|
|
37
|
+
export declare function inferQuiltConfig(options: {
|
|
38
|
+
region?: string;
|
|
39
|
+
profile?: string;
|
|
40
|
+
interactive?: boolean;
|
|
41
|
+
}): Promise<InferenceResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Converts inference result to DerivedConfig
|
|
44
|
+
*
|
|
45
|
+
* @param result - Inference result
|
|
46
|
+
* @returns DerivedConfig object
|
|
47
|
+
*/
|
|
48
|
+
export declare function inferenceResultToDerivedConfig(result: InferenceResult): DerivedConfig;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=infer-quilt-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-quilt-config.d.ts","sourceRoot":"","sources":["../../scripts/infer-quilt-config.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAsBpD;;GAEG;AACH,UAAU,eAAe;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAClB;AA4ID;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2F3B;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,CAgCrF"}
|