@insureco/cli 0.1.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 +168 -0
- package/dist/commands/backup.d.ts +11 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +112 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/config.d.ts +10 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +16 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +219 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +12 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/destroy.js +62 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/env.d.ts +7 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +42 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init-ai.d.ts +7 -0
- package/dist/commands/init-ai.d.ts.map +1 -0
- package/dist/commands/init-ai.js +257 -0
- package/dist/commands/init-ai.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +228 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +10 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +193 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/login.d.ts +8 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +164 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +362 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/preflight.d.ts +8 -0
- package/dist/commands/preflight.d.ts.map +1 -0
- package/dist/commands/preflight.js +188 -0
- package/dist/commands/preflight.js.map +1 -0
- package/dist/commands/program.d.ts +7 -0
- package/dist/commands/program.d.ts.map +1 -0
- package/dist/commands/program.js +59 -0
- package/dist/commands/program.js.map +1 -0
- package/dist/commands/push.d.ts +12 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +171 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/register.d.ts +7 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +124 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/rollback.d.ts +11 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +172 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/sample.d.ts +11 -0
- package/dist/commands/sample.d.ts.map +1 -0
- package/dist/commands/sample.js +114 -0
- package/dist/commands/sample.js.map +1 -0
- package/dist/commands/services.d.ts +13 -0
- package/dist/commands/services.d.ts.map +1 -0
- package/dist/commands/services.js +95 -0
- package/dist/commands/services.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +170 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/troubleshoot.d.ts +19 -0
- package/dist/commands/troubleshoot.d.ts.map +1 -0
- package/dist/commands/troubleshoot.js +465 -0
- package/dist/commands/troubleshoot.js.map +1 -0
- package/dist/commands/versions.d.ts +16 -0
- package/dist/commands/versions.d.ts.map +1 -0
- package/dist/commands/versions.js +162 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +294 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ai/client.d.ts +36 -0
- package/dist/lib/ai/client.d.ts.map +1 -0
- package/dist/lib/ai/client.js +140 -0
- package/dist/lib/ai/client.js.map +1 -0
- package/dist/lib/ai/generator.d.ts +17 -0
- package/dist/lib/ai/generator.d.ts.map +1 -0
- package/dist/lib/ai/generator.js +338 -0
- package/dist/lib/ai/generator.js.map +1 -0
- package/dist/lib/ai/prompts.d.ts +47 -0
- package/dist/lib/ai/prompts.d.ts.map +1 -0
- package/dist/lib/ai/prompts.js +247 -0
- package/dist/lib/ai/prompts.js.map +1 -0
- package/dist/lib/ai/scanner.d.ts +50 -0
- package/dist/lib/ai/scanner.d.ts.map +1 -0
- package/dist/lib/ai/scanner.js +237 -0
- package/dist/lib/ai/scanner.js.map +1 -0
- package/dist/lib/api.d.ts +18 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +67 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/builder.d.ts +34 -0
- package/dist/lib/builder.d.ts.map +1 -0
- package/dist/lib/builder.js +132 -0
- package/dist/lib/builder.js.map +1 -0
- package/dist/lib/config.d.ts +20 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +124 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/output.d.ts +12 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +39 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/scaffold.d.ts +29 -0
- package/dist/lib/scaffold.d.ts.map +1 -0
- package/dist/lib/scaffold.js +166 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/dist/lib/troubleshoot/analyzer.d.ts +14 -0
- package/dist/lib/troubleshoot/analyzer.d.ts.map +1 -0
- package/dist/lib/troubleshoot/analyzer.js +541 -0
- package/dist/lib/troubleshoot/analyzer.js.map +1 -0
- package/dist/lib/troubleshoot/auto-fix.d.ts +29 -0
- package/dist/lib/troubleshoot/auto-fix.d.ts.map +1 -0
- package/dist/lib/troubleshoot/auto-fix.js +373 -0
- package/dist/lib/troubleshoot/auto-fix.js.map +1 -0
- package/dist/lib/troubleshoot/index.d.ts +5 -0
- package/dist/lib/troubleshoot/index.d.ts.map +1 -0
- package/dist/lib/troubleshoot/index.js +6 -0
- package/dist/lib/troubleshoot/index.js.map +1 -0
- package/dist/lib/troubleshoot/log-fetcher.d.ts +43 -0
- package/dist/lib/troubleshoot/log-fetcher.d.ts.map +1 -0
- package/dist/lib/troubleshoot/log-fetcher.js +431 -0
- package/dist/lib/troubleshoot/log-fetcher.js.map +1 -0
- package/dist/lib/troubleshoot/redactor.d.ts +35 -0
- package/dist/lib/troubleshoot/redactor.d.ts.map +1 -0
- package/dist/lib/troubleshoot/redactor.js +208 -0
- package/dist/lib/troubleshoot/redactor.js.map +1 -0
- package/dist/lib/validators/catalog-validator.d.ts +3 -0
- package/dist/lib/validators/catalog-validator.d.ts.map +1 -0
- package/dist/lib/validators/catalog-validator.js +205 -0
- package/dist/lib/validators/catalog-validator.js.map +1 -0
- package/dist/lib/validators/dockerfile-validator.d.ts +4 -0
- package/dist/lib/validators/dockerfile-validator.d.ts.map +1 -0
- package/dist/lib/validators/dockerfile-validator.js +262 -0
- package/dist/lib/validators/dockerfile-validator.js.map +1 -0
- package/dist/lib/validators/env-validator.d.ts +3 -0
- package/dist/lib/validators/env-validator.d.ts.map +1 -0
- package/dist/lib/validators/env-validator.js +268 -0
- package/dist/lib/validators/env-validator.js.map +1 -0
- package/dist/lib/validators/git-validator.d.ts +3 -0
- package/dist/lib/validators/git-validator.d.ts.map +1 -0
- package/dist/lib/validators/git-validator.js +236 -0
- package/dist/lib/validators/git-validator.js.map +1 -0
- package/dist/lib/validators/health-detector.d.ts +4 -0
- package/dist/lib/validators/health-detector.d.ts.map +1 -0
- package/dist/lib/validators/health-detector.js +159 -0
- package/dist/lib/validators/health-detector.js.map +1 -0
- package/dist/lib/validators/index.d.ts +7 -0
- package/dist/lib/validators/index.d.ts.map +1 -0
- package/dist/lib/validators/index.js +7 -0
- package/dist/lib/validators/index.js.map +1 -0
- package/dist/lib/validators/route-validator.d.ts +3 -0
- package/dist/lib/validators/route-validator.d.ts.map +1 -0
- package/dist/lib/validators/route-validator.js +238 -0
- package/dist/lib/validators/route-validator.js.map +1 -0
- package/dist/types/index.d.ts +455 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +37 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { readFile, access } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parse } from 'yaml';
|
|
4
|
+
// Valid HTTP methods
|
|
5
|
+
const VALID_METHODS = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']);
|
|
6
|
+
// Valid auth types
|
|
7
|
+
const VALID_AUTH_TYPES = new Set(['none', 'required', 'service']);
|
|
8
|
+
// Route path patterns
|
|
9
|
+
const PATH_PATTERN = /^\/[a-z0-9\-_/:{}*]*$/i;
|
|
10
|
+
const PARAM_PATTERN = /\{([a-z][a-z0-9_]*)\}/gi;
|
|
11
|
+
const WILDCARD_PATTERN = /\*/;
|
|
12
|
+
export async function validateRoutes(cwd = process.cwd()) {
|
|
13
|
+
const checks = [];
|
|
14
|
+
const catalogPath = join(cwd, 'catalog-info.yaml');
|
|
15
|
+
try {
|
|
16
|
+
await access(catalogPath);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
checks.push({
|
|
20
|
+
name: 'Routes defined',
|
|
21
|
+
status: 'skip',
|
|
22
|
+
message: 'No catalog-info.yaml found, skipping route validation',
|
|
23
|
+
});
|
|
24
|
+
return { checks };
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const content = await readFile(catalogPath, 'utf-8');
|
|
28
|
+
const catalogInfo = parse(content);
|
|
29
|
+
const routes = catalogInfo.spec?.routes;
|
|
30
|
+
if (!routes || routes.length === 0) {
|
|
31
|
+
checks.push({
|
|
32
|
+
name: 'Routes defined',
|
|
33
|
+
status: 'warn',
|
|
34
|
+
message: 'No routes defined in catalog-info.yaml',
|
|
35
|
+
details: [
|
|
36
|
+
'Without routes, the service will not be accessible through Janus gateway',
|
|
37
|
+
'Only direct Kubernetes service access will work',
|
|
38
|
+
],
|
|
39
|
+
remediation: 'Add routes to catalog-info.yaml spec.routes section for API gateway access',
|
|
40
|
+
});
|
|
41
|
+
return { checks };
|
|
42
|
+
}
|
|
43
|
+
checks.push({
|
|
44
|
+
name: 'Routes defined',
|
|
45
|
+
status: 'pass',
|
|
46
|
+
message: `${routes.length} route(s) defined in catalog-info.yaml`,
|
|
47
|
+
});
|
|
48
|
+
// Validate each route
|
|
49
|
+
const routeValidations = routes.map(validateRoute);
|
|
50
|
+
const invalidRoutes = routeValidations.filter(v => !v.isValid);
|
|
51
|
+
if (invalidRoutes.length > 0) {
|
|
52
|
+
const details = invalidRoutes.flatMap(r => r.issues.map(i => `${r.path}: ${i}`));
|
|
53
|
+
checks.push({
|
|
54
|
+
name: 'Routes valid',
|
|
55
|
+
status: 'fail',
|
|
56
|
+
message: `${invalidRoutes.length} route(s) have validation errors`,
|
|
57
|
+
details,
|
|
58
|
+
remediation: 'Fix the route validation errors listed above',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
checks.push({
|
|
63
|
+
name: 'Routes valid',
|
|
64
|
+
status: 'pass',
|
|
65
|
+
message: 'All routes pass validation',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// Check for overlapping routes
|
|
69
|
+
const overlapCheck = checkRouteOverlaps(routes);
|
|
70
|
+
checks.push(overlapCheck);
|
|
71
|
+
// Check for security concerns
|
|
72
|
+
const securityCheck = checkRouteSecurity(routes);
|
|
73
|
+
checks.push(securityCheck);
|
|
74
|
+
// Check for rate limiting
|
|
75
|
+
const rateLimitCheck = checkRateLimits(routes);
|
|
76
|
+
checks.push(rateLimitCheck);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
checks.push({
|
|
80
|
+
name: 'Route validation',
|
|
81
|
+
status: 'fail',
|
|
82
|
+
message: `Failed to validate routes: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return { checks };
|
|
86
|
+
}
|
|
87
|
+
function validateRoute(route) {
|
|
88
|
+
const issues = [];
|
|
89
|
+
// Validate path
|
|
90
|
+
if (!route.path) {
|
|
91
|
+
issues.push('Missing path');
|
|
92
|
+
}
|
|
93
|
+
else if (!PATH_PATTERN.test(route.path)) {
|
|
94
|
+
issues.push(`Invalid path format: ${route.path}`);
|
|
95
|
+
}
|
|
96
|
+
// Validate methods
|
|
97
|
+
if (!route.methods || route.methods.length === 0) {
|
|
98
|
+
issues.push('No HTTP methods defined');
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const invalidMethods = route.methods.filter(m => !VALID_METHODS.has(m));
|
|
102
|
+
if (invalidMethods.length > 0) {
|
|
103
|
+
issues.push(`Invalid methods: ${invalidMethods.join(', ')}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Validate auth
|
|
107
|
+
if (!route.auth) {
|
|
108
|
+
issues.push('Missing auth type');
|
|
109
|
+
}
|
|
110
|
+
else if (!VALID_AUTH_TYPES.has(route.auth)) {
|
|
111
|
+
issues.push(`Invalid auth type: ${route.auth} (must be: none, required, or service)`);
|
|
112
|
+
}
|
|
113
|
+
// Validate scopes if auth requires them
|
|
114
|
+
if (route.auth === 'required' && (!route.scopes || route.scopes.length === 0)) {
|
|
115
|
+
issues.push('Auth is required but no scopes defined');
|
|
116
|
+
}
|
|
117
|
+
// Validate rate limit if present
|
|
118
|
+
if (route.rateLimit) {
|
|
119
|
+
if (!route.rateLimit.requestsPerMinute || route.rateLimit.requestsPerMinute < 1) {
|
|
120
|
+
issues.push('Invalid requestsPerMinute in rateLimit');
|
|
121
|
+
}
|
|
122
|
+
if (route.rateLimit.burstSize && route.rateLimit.burstSize < 1) {
|
|
123
|
+
issues.push('Invalid burstSize in rateLimit');
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
path: route.path || '(no path)',
|
|
128
|
+
isValid: issues.length === 0,
|
|
129
|
+
issues,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function checkRouteOverlaps(routes) {
|
|
133
|
+
const overlaps = [];
|
|
134
|
+
for (let i = 0; i < routes.length; i++) {
|
|
135
|
+
for (let j = i + 1; j < routes.length; j++) {
|
|
136
|
+
const pathA = routes[i].path;
|
|
137
|
+
const pathB = routes[j].path;
|
|
138
|
+
// Check for exact match
|
|
139
|
+
if (pathA === pathB) {
|
|
140
|
+
const methodsA = new Set(routes[i].methods);
|
|
141
|
+
const methodsB = routes[j].methods;
|
|
142
|
+
const overlap = methodsB.filter(m => methodsA.has(m));
|
|
143
|
+
if (overlap.length > 0) {
|
|
144
|
+
overlaps.push(`${pathA} ${overlap.join(',')} - duplicate route definition`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Check for pattern conflicts
|
|
148
|
+
if (routesPotentiallyConflict(pathA, pathB)) {
|
|
149
|
+
overlaps.push(`${pathA} may conflict with ${pathB}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (overlaps.length > 0) {
|
|
154
|
+
return {
|
|
155
|
+
name: 'No route conflicts',
|
|
156
|
+
status: 'warn',
|
|
157
|
+
message: `${overlaps.length} potential route conflict(s) detected`,
|
|
158
|
+
details: overlaps,
|
|
159
|
+
remediation: 'Review route definitions to ensure no unintended overlaps',
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
name: 'No route conflicts',
|
|
164
|
+
status: 'pass',
|
|
165
|
+
message: 'No route conflicts detected',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function routesPotentiallyConflict(pathA, pathB) {
|
|
169
|
+
// Normalize paths
|
|
170
|
+
const normalizeA = pathA.replace(PARAM_PATTERN, ':param').replace(WILDCARD_PATTERN, '*');
|
|
171
|
+
const normalizeB = pathB.replace(PARAM_PATTERN, ':param').replace(WILDCARD_PATTERN, '*');
|
|
172
|
+
if (normalizeA === normalizeB)
|
|
173
|
+
return true;
|
|
174
|
+
// Check if one is a prefix of another with wildcard
|
|
175
|
+
if (normalizeA.includes('*') || normalizeB.includes('*')) {
|
|
176
|
+
const baseA = normalizeA.replace(/\*.*$/, '');
|
|
177
|
+
const baseB = normalizeB.replace(/\*.*$/, '');
|
|
178
|
+
if (baseA.startsWith(baseB) || baseB.startsWith(baseA)) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
function checkRouteSecurity(routes) {
|
|
185
|
+
const issues = [];
|
|
186
|
+
const publicRoutes = routes.filter(r => r.auth === 'none');
|
|
187
|
+
const writePublicRoutes = publicRoutes.filter(r => r.methods.some(m => ['POST', 'PUT', 'DELETE', 'PATCH'].includes(m)));
|
|
188
|
+
if (writePublicRoutes.length > 0) {
|
|
189
|
+
issues.push(...writePublicRoutes.map(r => `${r.path} allows ${r.methods.filter(m => m !== 'GET').join(',')} without auth`));
|
|
190
|
+
}
|
|
191
|
+
// Check for admin-looking routes without auth
|
|
192
|
+
const adminRoutes = routes.filter(r => r.auth === 'none' &&
|
|
193
|
+
(r.path.includes('admin') || r.path.includes('internal') || r.path.includes('debug')));
|
|
194
|
+
if (adminRoutes.length > 0) {
|
|
195
|
+
issues.push(...adminRoutes.map(r => `${r.path} appears to be an admin route but has no auth`));
|
|
196
|
+
}
|
|
197
|
+
if (issues.length > 0) {
|
|
198
|
+
return {
|
|
199
|
+
name: 'Route security',
|
|
200
|
+
status: 'warn',
|
|
201
|
+
message: `${issues.length} potential security concern(s)`,
|
|
202
|
+
details: issues,
|
|
203
|
+
remediation: 'Consider adding authentication to sensitive routes',
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
name: 'Route security',
|
|
208
|
+
status: 'pass',
|
|
209
|
+
message: 'Routes follow security best practices',
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
function checkRateLimits(routes) {
|
|
213
|
+
const publicRoutes = routes.filter(r => r.auth === 'none');
|
|
214
|
+
const publicWithoutRateLimit = publicRoutes.filter(r => !r.rateLimit);
|
|
215
|
+
if (publicWithoutRateLimit.length > 0) {
|
|
216
|
+
return {
|
|
217
|
+
name: 'Rate limiting',
|
|
218
|
+
status: 'warn',
|
|
219
|
+
message: `${publicWithoutRateLimit.length} public route(s) without rate limiting`,
|
|
220
|
+
details: publicWithoutRateLimit.map(r => r.path),
|
|
221
|
+
remediation: 'Add rateLimit to public routes to prevent abuse',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const rateLimitedRoutes = routes.filter(r => r.rateLimit);
|
|
225
|
+
if (rateLimitedRoutes.length > 0) {
|
|
226
|
+
return {
|
|
227
|
+
name: 'Rate limiting',
|
|
228
|
+
status: 'pass',
|
|
229
|
+
message: `${rateLimitedRoutes.length} route(s) have rate limiting configured`,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
name: 'Rate limiting',
|
|
234
|
+
status: 'skip',
|
|
235
|
+
message: 'No public routes found',
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=route-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-validator.js","sourceRoot":"","sources":["../../../src/lib/validators/route-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export interface ApiResponse<T> {
|
|
3
|
+
success: boolean;
|
|
4
|
+
data?: T;
|
|
5
|
+
error?: {
|
|
6
|
+
code: string;
|
|
7
|
+
message: string;
|
|
8
|
+
details?: Record<string, unknown>;
|
|
9
|
+
};
|
|
10
|
+
meta?: {
|
|
11
|
+
total?: number;
|
|
12
|
+
page?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
requestId: string;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface ServiceRoute {
|
|
19
|
+
path: string;
|
|
20
|
+
methods: Array<'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'>;
|
|
21
|
+
auth: 'none' | 'required' | 'service';
|
|
22
|
+
scopes?: string[];
|
|
23
|
+
description?: string;
|
|
24
|
+
stripPrefix?: boolean;
|
|
25
|
+
rateLimit?: {
|
|
26
|
+
requestsPerMinute: number;
|
|
27
|
+
burstSize?: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface OAuthClientConfig {
|
|
31
|
+
clientId: string;
|
|
32
|
+
grantTypes: Array<'authorization_code' | 'client_credentials' | 'refresh_token'>;
|
|
33
|
+
redirectUris?: string[];
|
|
34
|
+
scopes: string[];
|
|
35
|
+
}
|
|
36
|
+
export interface Service {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
description: string;
|
|
40
|
+
owner: string;
|
|
41
|
+
status: 'active' | 'inactive' | 'deprecated';
|
|
42
|
+
repo: string;
|
|
43
|
+
database: string;
|
|
44
|
+
upstream: string;
|
|
45
|
+
healthEndpoint: string;
|
|
46
|
+
tags: string[];
|
|
47
|
+
metadata: Record<string, unknown>;
|
|
48
|
+
routes?: ServiceRoute[];
|
|
49
|
+
oauth?: OAuthClientConfig;
|
|
50
|
+
createdAt: string;
|
|
51
|
+
updatedAt: string;
|
|
52
|
+
}
|
|
53
|
+
export interface CreateServiceRequest {
|
|
54
|
+
id: string;
|
|
55
|
+
name: string;
|
|
56
|
+
description: string;
|
|
57
|
+
owner: string;
|
|
58
|
+
repo: string;
|
|
59
|
+
database?: string;
|
|
60
|
+
upstream: string;
|
|
61
|
+
healthEndpoint?: string;
|
|
62
|
+
tags?: string[];
|
|
63
|
+
metadata?: Record<string, unknown>;
|
|
64
|
+
routes?: ServiceRoute[];
|
|
65
|
+
oauth?: OAuthClientConfig;
|
|
66
|
+
}
|
|
67
|
+
export interface Program {
|
|
68
|
+
id: string;
|
|
69
|
+
code: string;
|
|
70
|
+
name: string;
|
|
71
|
+
status: 'active' | 'suspended' | 'trial';
|
|
72
|
+
tier: 'starter' | 'professional' | 'enterprise';
|
|
73
|
+
companyId: string;
|
|
74
|
+
createdAt: string;
|
|
75
|
+
updatedAt: string;
|
|
76
|
+
}
|
|
77
|
+
export declare const ConfigSchema: z.ZodObject<{
|
|
78
|
+
koko_url: z.ZodString;
|
|
79
|
+
builder_url: z.ZodString;
|
|
80
|
+
bio_url: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
81
|
+
registry: z.ZodString;
|
|
82
|
+
kubeconfig: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
83
|
+
anthropic_api_key: z.ZodOptional<z.ZodString>;
|
|
84
|
+
}, "strip", z.ZodTypeAny, {
|
|
85
|
+
koko_url: string;
|
|
86
|
+
builder_url: string;
|
|
87
|
+
bio_url: string;
|
|
88
|
+
registry: string;
|
|
89
|
+
kubeconfig: string;
|
|
90
|
+
anthropic_api_key?: string | undefined;
|
|
91
|
+
}, {
|
|
92
|
+
koko_url: string;
|
|
93
|
+
builder_url: string;
|
|
94
|
+
registry: string;
|
|
95
|
+
bio_url?: string | undefined;
|
|
96
|
+
kubeconfig?: string | undefined;
|
|
97
|
+
anthropic_api_key?: string | undefined;
|
|
98
|
+
}>;
|
|
99
|
+
export type Config = z.infer<typeof ConfigSchema>;
|
|
100
|
+
export declare const AuthSchema: z.ZodObject<{
|
|
101
|
+
token: z.ZodString;
|
|
102
|
+
user: z.ZodObject<{
|
|
103
|
+
id: z.ZodString;
|
|
104
|
+
email: z.ZodString;
|
|
105
|
+
name: z.ZodString;
|
|
106
|
+
}, "strip", z.ZodTypeAny, {
|
|
107
|
+
id: string;
|
|
108
|
+
email: string;
|
|
109
|
+
name: string;
|
|
110
|
+
}, {
|
|
111
|
+
id: string;
|
|
112
|
+
email: string;
|
|
113
|
+
name: string;
|
|
114
|
+
}>;
|
|
115
|
+
expiresAt: z.ZodOptional<z.ZodString>;
|
|
116
|
+
}, "strip", z.ZodTypeAny, {
|
|
117
|
+
token: string;
|
|
118
|
+
user: {
|
|
119
|
+
id: string;
|
|
120
|
+
email: string;
|
|
121
|
+
name: string;
|
|
122
|
+
};
|
|
123
|
+
expiresAt?: string | undefined;
|
|
124
|
+
}, {
|
|
125
|
+
token: string;
|
|
126
|
+
user: {
|
|
127
|
+
id: string;
|
|
128
|
+
email: string;
|
|
129
|
+
name: string;
|
|
130
|
+
};
|
|
131
|
+
expiresAt?: string | undefined;
|
|
132
|
+
}>;
|
|
133
|
+
export type Auth = z.infer<typeof AuthSchema>;
|
|
134
|
+
export declare const LinkedRepoSchema: z.ZodObject<{
|
|
135
|
+
serviceId: z.ZodString;
|
|
136
|
+
programId: z.ZodOptional<z.ZodString>;
|
|
137
|
+
repo: z.ZodString;
|
|
138
|
+
provider: z.ZodEnum<["github", "gitlab", "bitbucket"]>;
|
|
139
|
+
linkedAt: z.ZodString;
|
|
140
|
+
}, "strip", z.ZodTypeAny, {
|
|
141
|
+
serviceId: string;
|
|
142
|
+
repo: string;
|
|
143
|
+
provider: "github" | "gitlab" | "bitbucket";
|
|
144
|
+
linkedAt: string;
|
|
145
|
+
programId?: string | undefined;
|
|
146
|
+
}, {
|
|
147
|
+
serviceId: string;
|
|
148
|
+
repo: string;
|
|
149
|
+
provider: "github" | "gitlab" | "bitbucket";
|
|
150
|
+
linkedAt: string;
|
|
151
|
+
programId?: string | undefined;
|
|
152
|
+
}>;
|
|
153
|
+
export type LinkedRepo = z.infer<typeof LinkedRepoSchema>;
|
|
154
|
+
export interface GitRemote {
|
|
155
|
+
provider: 'github' | 'gitlab' | 'bitbucket' | 'unknown';
|
|
156
|
+
owner: string;
|
|
157
|
+
repo: string;
|
|
158
|
+
url: string;
|
|
159
|
+
}
|
|
160
|
+
export interface LinkRepoRequest {
|
|
161
|
+
serviceId: string;
|
|
162
|
+
provider: 'github' | 'gitlab' | 'bitbucket';
|
|
163
|
+
owner: string;
|
|
164
|
+
repo: string;
|
|
165
|
+
branch?: string;
|
|
166
|
+
}
|
|
167
|
+
export interface LinkRepoResponse {
|
|
168
|
+
serviceId: string;
|
|
169
|
+
webhookId: string;
|
|
170
|
+
webhookUrl: string;
|
|
171
|
+
status: 'linked';
|
|
172
|
+
}
|
|
173
|
+
export interface CatalogInfo {
|
|
174
|
+
apiVersion: string;
|
|
175
|
+
kind: 'Component';
|
|
176
|
+
metadata: {
|
|
177
|
+
name: string;
|
|
178
|
+
description: string;
|
|
179
|
+
tags?: string[];
|
|
180
|
+
annotations?: Record<string, string>;
|
|
181
|
+
};
|
|
182
|
+
spec: {
|
|
183
|
+
type: 'service';
|
|
184
|
+
lifecycle: 'production' | 'experimental' | 'deprecated';
|
|
185
|
+
owner: string;
|
|
186
|
+
system?: string;
|
|
187
|
+
providesApis?: string[];
|
|
188
|
+
consumesApis?: string[];
|
|
189
|
+
routes?: ServiceRoute[];
|
|
190
|
+
oauth?: OAuthClientConfig;
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
export interface ProvisionDatabaseResponse {
|
|
194
|
+
database: string;
|
|
195
|
+
connectionString: string;
|
|
196
|
+
user: string;
|
|
197
|
+
status: 'provisioned';
|
|
198
|
+
}
|
|
199
|
+
export interface BuilderService {
|
|
200
|
+
id: string;
|
|
201
|
+
name: string;
|
|
202
|
+
repoUrl: string;
|
|
203
|
+
branch: string;
|
|
204
|
+
dockerfilePath: string;
|
|
205
|
+
helmChart?: string;
|
|
206
|
+
helmValues?: Record<string, unknown>;
|
|
207
|
+
webhookSecret: string;
|
|
208
|
+
createdAt: string;
|
|
209
|
+
updatedAt: string;
|
|
210
|
+
}
|
|
211
|
+
export interface CreateBuilderServiceRequest {
|
|
212
|
+
name: string;
|
|
213
|
+
repoUrl: string;
|
|
214
|
+
branch?: string;
|
|
215
|
+
dockerfilePath?: string;
|
|
216
|
+
helmChart?: string;
|
|
217
|
+
helmValues?: Record<string, unknown>;
|
|
218
|
+
}
|
|
219
|
+
export interface Build {
|
|
220
|
+
id: string;
|
|
221
|
+
serviceId: string;
|
|
222
|
+
status: 'queued' | 'cloning' | 'building' | 'pushing' | 'deploying' | 'completed' | 'failed' | 'cancelled';
|
|
223
|
+
branch: string;
|
|
224
|
+
environment?: Environment;
|
|
225
|
+
commitSha?: string;
|
|
226
|
+
commitMessage?: string;
|
|
227
|
+
imageTag?: string;
|
|
228
|
+
logs?: string;
|
|
229
|
+
error?: string;
|
|
230
|
+
startedAt?: string;
|
|
231
|
+
completedAt?: string;
|
|
232
|
+
createdAt: string;
|
|
233
|
+
}
|
|
234
|
+
export type Environment = 'prod' | 'sandbox' | 'uat' | 'dev';
|
|
235
|
+
export interface TriggerBuildRequest {
|
|
236
|
+
serviceId: string;
|
|
237
|
+
branch?: string;
|
|
238
|
+
commitSha?: string;
|
|
239
|
+
environment?: Environment;
|
|
240
|
+
}
|
|
241
|
+
export interface TriggerBuildResponse {
|
|
242
|
+
buildId: string;
|
|
243
|
+
message: string;
|
|
244
|
+
service: string;
|
|
245
|
+
}
|
|
246
|
+
export declare const LinkedServiceSchema: z.ZodObject<{
|
|
247
|
+
serviceId: z.ZodString;
|
|
248
|
+
serviceName: z.ZodString;
|
|
249
|
+
repoUrl: z.ZodString;
|
|
250
|
+
branch: z.ZodString;
|
|
251
|
+
linkedAt: z.ZodString;
|
|
252
|
+
}, "strip", z.ZodTypeAny, {
|
|
253
|
+
serviceId: string;
|
|
254
|
+
linkedAt: string;
|
|
255
|
+
serviceName: string;
|
|
256
|
+
repoUrl: string;
|
|
257
|
+
branch: string;
|
|
258
|
+
}, {
|
|
259
|
+
serviceId: string;
|
|
260
|
+
linkedAt: string;
|
|
261
|
+
serviceName: string;
|
|
262
|
+
repoUrl: string;
|
|
263
|
+
branch: string;
|
|
264
|
+
}>;
|
|
265
|
+
export type LinkedService = z.infer<typeof LinkedServiceSchema>;
|
|
266
|
+
export interface Version {
|
|
267
|
+
id: string;
|
|
268
|
+
serviceId: string;
|
|
269
|
+
serviceName: string;
|
|
270
|
+
archiveId: string;
|
|
271
|
+
checksum: string;
|
|
272
|
+
size: number;
|
|
273
|
+
message: string;
|
|
274
|
+
uploadedBy: string;
|
|
275
|
+
deployedTo?: string[];
|
|
276
|
+
builds?: string[];
|
|
277
|
+
createdAt: string;
|
|
278
|
+
updatedAt: string;
|
|
279
|
+
}
|
|
280
|
+
export interface PushRequest {
|
|
281
|
+
serviceId: string;
|
|
282
|
+
serviceName: string;
|
|
283
|
+
archive: Buffer;
|
|
284
|
+
checksum: string;
|
|
285
|
+
message?: string;
|
|
286
|
+
}
|
|
287
|
+
export interface PushResponse {
|
|
288
|
+
versionId: string;
|
|
289
|
+
archiveId: string;
|
|
290
|
+
message: string;
|
|
291
|
+
size: number;
|
|
292
|
+
}
|
|
293
|
+
export interface DeployVersionResponse {
|
|
294
|
+
buildId: string;
|
|
295
|
+
versionId: string;
|
|
296
|
+
environment: string;
|
|
297
|
+
message: string;
|
|
298
|
+
}
|
|
299
|
+
export type PreflightStatus = 'pass' | 'fail' | 'warn' | 'skip';
|
|
300
|
+
export interface PreflightCheck {
|
|
301
|
+
name: string;
|
|
302
|
+
status: PreflightStatus;
|
|
303
|
+
message: string;
|
|
304
|
+
details?: string[];
|
|
305
|
+
remediation?: string;
|
|
306
|
+
}
|
|
307
|
+
export interface PreflightResult {
|
|
308
|
+
checks: PreflightCheck[];
|
|
309
|
+
}
|
|
310
|
+
export interface FrameworkInfo {
|
|
311
|
+
name: string;
|
|
312
|
+
dockerfile?: string;
|
|
313
|
+
defaultPort: number;
|
|
314
|
+
healthPath: string;
|
|
315
|
+
}
|
|
316
|
+
export interface EnvVarReference {
|
|
317
|
+
name: string;
|
|
318
|
+
file: string;
|
|
319
|
+
line: number;
|
|
320
|
+
}
|
|
321
|
+
export interface RouteValidation {
|
|
322
|
+
path: string;
|
|
323
|
+
isValid: boolean;
|
|
324
|
+
issues: string[];
|
|
325
|
+
}
|
|
326
|
+
export interface LogEntry {
|
|
327
|
+
timestamp: string;
|
|
328
|
+
level: 'debug' | 'info' | 'warn' | 'error' | 'fatal';
|
|
329
|
+
message: string;
|
|
330
|
+
service: string;
|
|
331
|
+
traceId?: string;
|
|
332
|
+
spanId?: string;
|
|
333
|
+
metadata?: Record<string, unknown>;
|
|
334
|
+
}
|
|
335
|
+
export interface LogTimeline {
|
|
336
|
+
entries: LogEntry[];
|
|
337
|
+
startTime: string;
|
|
338
|
+
endTime: string;
|
|
339
|
+
services: string[];
|
|
340
|
+
}
|
|
341
|
+
export type IssueType = 'missing_scope' | 'service_not_registered' | 'upstream_down' | 'dns_not_propagated' | 'oom_killed' | 'crash_loop' | 'health_check_failure' | 'connection_refused' | 'authentication_failure' | 'rate_limited' | 'unknown';
|
|
342
|
+
export interface DetectedIssue {
|
|
343
|
+
type: IssueType;
|
|
344
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
345
|
+
title: string;
|
|
346
|
+
description: string;
|
|
347
|
+
evidence: string[];
|
|
348
|
+
affectedService: string;
|
|
349
|
+
relatedServices?: string[];
|
|
350
|
+
}
|
|
351
|
+
export interface TroubleshootRecommendation {
|
|
352
|
+
id: string;
|
|
353
|
+
priority: number;
|
|
354
|
+
title: string;
|
|
355
|
+
description: string;
|
|
356
|
+
action: TroubleshootAction;
|
|
357
|
+
autoFixAvailable: boolean;
|
|
358
|
+
estimatedImpact: string;
|
|
359
|
+
}
|
|
360
|
+
export type TroubleshootAction = {
|
|
361
|
+
type: 'add_scope';
|
|
362
|
+
scope: string;
|
|
363
|
+
service: string;
|
|
364
|
+
} | {
|
|
365
|
+
type: 'register_service';
|
|
366
|
+
serviceName: string;
|
|
367
|
+
} | {
|
|
368
|
+
type: 'update_catalog';
|
|
369
|
+
field: string;
|
|
370
|
+
value: unknown;
|
|
371
|
+
} | {
|
|
372
|
+
type: 'update_helm_values';
|
|
373
|
+
path: string;
|
|
374
|
+
value: unknown;
|
|
375
|
+
} | {
|
|
376
|
+
type: 'redeploy';
|
|
377
|
+
environment: Environment;
|
|
378
|
+
} | {
|
|
379
|
+
type: 'check_upstream';
|
|
380
|
+
upstream: string;
|
|
381
|
+
} | {
|
|
382
|
+
type: 'increase_memory';
|
|
383
|
+
currentLimit: string;
|
|
384
|
+
suggestedLimit: string;
|
|
385
|
+
} | {
|
|
386
|
+
type: 'fix_health_endpoint';
|
|
387
|
+
path: string;
|
|
388
|
+
} | {
|
|
389
|
+
type: 'manual';
|
|
390
|
+
instructions: string;
|
|
391
|
+
};
|
|
392
|
+
export interface TroubleshootResult {
|
|
393
|
+
timestamp: string;
|
|
394
|
+
service: string;
|
|
395
|
+
environment: Environment;
|
|
396
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
397
|
+
issues: DetectedIssue[];
|
|
398
|
+
recommendations: TroubleshootRecommendation[];
|
|
399
|
+
context: TroubleshootContext;
|
|
400
|
+
}
|
|
401
|
+
export interface TroubleshootContext {
|
|
402
|
+
service: {
|
|
403
|
+
name: string;
|
|
404
|
+
id?: string;
|
|
405
|
+
upstream?: string;
|
|
406
|
+
routes?: ServiceRoute[];
|
|
407
|
+
};
|
|
408
|
+
recentBuilds: Array<{
|
|
409
|
+
id: string;
|
|
410
|
+
status: string;
|
|
411
|
+
createdAt: string;
|
|
412
|
+
}>;
|
|
413
|
+
dependencies: string[];
|
|
414
|
+
podStatus?: {
|
|
415
|
+
name: string;
|
|
416
|
+
status: string;
|
|
417
|
+
restarts: number;
|
|
418
|
+
ready: boolean;
|
|
419
|
+
reason?: string;
|
|
420
|
+
}[];
|
|
421
|
+
recentEvents?: Array<{
|
|
422
|
+
type: string;
|
|
423
|
+
reason: string;
|
|
424
|
+
message: string;
|
|
425
|
+
timestamp: string;
|
|
426
|
+
}>;
|
|
427
|
+
}
|
|
428
|
+
export interface LogFetchConfig {
|
|
429
|
+
serviceName: string;
|
|
430
|
+
namespace: string;
|
|
431
|
+
environment: Environment;
|
|
432
|
+
tailLines: number;
|
|
433
|
+
since?: string;
|
|
434
|
+
includeJanus?: boolean;
|
|
435
|
+
includeDependencies?: boolean;
|
|
436
|
+
}
|
|
437
|
+
export interface RedactionConfig {
|
|
438
|
+
redactBearerTokens: boolean;
|
|
439
|
+
redactApiKeys: boolean;
|
|
440
|
+
redactRequestBodies: boolean;
|
|
441
|
+
redactResponseBodies: boolean;
|
|
442
|
+
allowedServices: string[];
|
|
443
|
+
preserveFields: string[];
|
|
444
|
+
}
|
|
445
|
+
export interface FixPreview {
|
|
446
|
+
description: string;
|
|
447
|
+
files: Array<{
|
|
448
|
+
path: string;
|
|
449
|
+
before: string;
|
|
450
|
+
after: string;
|
|
451
|
+
changeType: 'create' | 'modify' | 'delete';
|
|
452
|
+
}>;
|
|
453
|
+
commands: string[];
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=index.d.ts.map
|