@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.
Files changed (174) hide show
  1. package/README.md +168 -0
  2. package/dist/commands/backup.d.ts +11 -0
  3. package/dist/commands/backup.d.ts.map +1 -0
  4. package/dist/commands/backup.js +112 -0
  5. package/dist/commands/backup.js.map +1 -0
  6. package/dist/commands/config.d.ts +10 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +41 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/deploy.d.ts +16 -0
  11. package/dist/commands/deploy.d.ts.map +1 -0
  12. package/dist/commands/deploy.js +219 -0
  13. package/dist/commands/deploy.js.map +1 -0
  14. package/dist/commands/destroy.d.ts +12 -0
  15. package/dist/commands/destroy.d.ts.map +1 -0
  16. package/dist/commands/destroy.js +62 -0
  17. package/dist/commands/destroy.js.map +1 -0
  18. package/dist/commands/env.d.ts +7 -0
  19. package/dist/commands/env.d.ts.map +1 -0
  20. package/dist/commands/env.js +42 -0
  21. package/dist/commands/env.js.map +1 -0
  22. package/dist/commands/init-ai.d.ts +7 -0
  23. package/dist/commands/init-ai.d.ts.map +1 -0
  24. package/dist/commands/init-ai.js +257 -0
  25. package/dist/commands/init-ai.js.map +1 -0
  26. package/dist/commands/init.d.ts +8 -0
  27. package/dist/commands/init.d.ts.map +1 -0
  28. package/dist/commands/init.js +228 -0
  29. package/dist/commands/init.js.map +1 -0
  30. package/dist/commands/link.d.ts +10 -0
  31. package/dist/commands/link.d.ts.map +1 -0
  32. package/dist/commands/link.js +193 -0
  33. package/dist/commands/link.js.map +1 -0
  34. package/dist/commands/login.d.ts +8 -0
  35. package/dist/commands/login.d.ts.map +1 -0
  36. package/dist/commands/login.js +164 -0
  37. package/dist/commands/login.js.map +1 -0
  38. package/dist/commands/logs.d.ts +16 -0
  39. package/dist/commands/logs.d.ts.map +1 -0
  40. package/dist/commands/logs.js +362 -0
  41. package/dist/commands/logs.js.map +1 -0
  42. package/dist/commands/preflight.d.ts +8 -0
  43. package/dist/commands/preflight.d.ts.map +1 -0
  44. package/dist/commands/preflight.js +188 -0
  45. package/dist/commands/preflight.js.map +1 -0
  46. package/dist/commands/program.d.ts +7 -0
  47. package/dist/commands/program.d.ts.map +1 -0
  48. package/dist/commands/program.js +59 -0
  49. package/dist/commands/program.js.map +1 -0
  50. package/dist/commands/push.d.ts +12 -0
  51. package/dist/commands/push.d.ts.map +1 -0
  52. package/dist/commands/push.js +171 -0
  53. package/dist/commands/push.js.map +1 -0
  54. package/dist/commands/register.d.ts +7 -0
  55. package/dist/commands/register.d.ts.map +1 -0
  56. package/dist/commands/register.js +124 -0
  57. package/dist/commands/register.js.map +1 -0
  58. package/dist/commands/rollback.d.ts +11 -0
  59. package/dist/commands/rollback.d.ts.map +1 -0
  60. package/dist/commands/rollback.js +172 -0
  61. package/dist/commands/rollback.js.map +1 -0
  62. package/dist/commands/sample.d.ts +11 -0
  63. package/dist/commands/sample.d.ts.map +1 -0
  64. package/dist/commands/sample.js +114 -0
  65. package/dist/commands/sample.js.map +1 -0
  66. package/dist/commands/services.d.ts +13 -0
  67. package/dist/commands/services.d.ts.map +1 -0
  68. package/dist/commands/services.js +95 -0
  69. package/dist/commands/services.js.map +1 -0
  70. package/dist/commands/status.d.ts +9 -0
  71. package/dist/commands/status.d.ts.map +1 -0
  72. package/dist/commands/status.js +170 -0
  73. package/dist/commands/status.js.map +1 -0
  74. package/dist/commands/troubleshoot.d.ts +19 -0
  75. package/dist/commands/troubleshoot.d.ts.map +1 -0
  76. package/dist/commands/troubleshoot.js +465 -0
  77. package/dist/commands/troubleshoot.js.map +1 -0
  78. package/dist/commands/versions.d.ts +16 -0
  79. package/dist/commands/versions.d.ts.map +1 -0
  80. package/dist/commands/versions.js +162 -0
  81. package/dist/commands/versions.js.map +1 -0
  82. package/dist/index.d.ts +3 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +294 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/lib/ai/client.d.ts +36 -0
  87. package/dist/lib/ai/client.d.ts.map +1 -0
  88. package/dist/lib/ai/client.js +140 -0
  89. package/dist/lib/ai/client.js.map +1 -0
  90. package/dist/lib/ai/generator.d.ts +17 -0
  91. package/dist/lib/ai/generator.d.ts.map +1 -0
  92. package/dist/lib/ai/generator.js +338 -0
  93. package/dist/lib/ai/generator.js.map +1 -0
  94. package/dist/lib/ai/prompts.d.ts +47 -0
  95. package/dist/lib/ai/prompts.d.ts.map +1 -0
  96. package/dist/lib/ai/prompts.js +247 -0
  97. package/dist/lib/ai/prompts.js.map +1 -0
  98. package/dist/lib/ai/scanner.d.ts +50 -0
  99. package/dist/lib/ai/scanner.d.ts.map +1 -0
  100. package/dist/lib/ai/scanner.js +237 -0
  101. package/dist/lib/ai/scanner.js.map +1 -0
  102. package/dist/lib/api.d.ts +18 -0
  103. package/dist/lib/api.d.ts.map +1 -0
  104. package/dist/lib/api.js +67 -0
  105. package/dist/lib/api.js.map +1 -0
  106. package/dist/lib/builder.d.ts +34 -0
  107. package/dist/lib/builder.d.ts.map +1 -0
  108. package/dist/lib/builder.js +132 -0
  109. package/dist/lib/builder.js.map +1 -0
  110. package/dist/lib/config.d.ts +20 -0
  111. package/dist/lib/config.d.ts.map +1 -0
  112. package/dist/lib/config.js +124 -0
  113. package/dist/lib/config.js.map +1 -0
  114. package/dist/lib/output.d.ts +12 -0
  115. package/dist/lib/output.d.ts.map +1 -0
  116. package/dist/lib/output.js +39 -0
  117. package/dist/lib/output.js.map +1 -0
  118. package/dist/lib/scaffold.d.ts +29 -0
  119. package/dist/lib/scaffold.d.ts.map +1 -0
  120. package/dist/lib/scaffold.js +166 -0
  121. package/dist/lib/scaffold.js.map +1 -0
  122. package/dist/lib/troubleshoot/analyzer.d.ts +14 -0
  123. package/dist/lib/troubleshoot/analyzer.d.ts.map +1 -0
  124. package/dist/lib/troubleshoot/analyzer.js +541 -0
  125. package/dist/lib/troubleshoot/analyzer.js.map +1 -0
  126. package/dist/lib/troubleshoot/auto-fix.d.ts +29 -0
  127. package/dist/lib/troubleshoot/auto-fix.d.ts.map +1 -0
  128. package/dist/lib/troubleshoot/auto-fix.js +373 -0
  129. package/dist/lib/troubleshoot/auto-fix.js.map +1 -0
  130. package/dist/lib/troubleshoot/index.d.ts +5 -0
  131. package/dist/lib/troubleshoot/index.d.ts.map +1 -0
  132. package/dist/lib/troubleshoot/index.js +6 -0
  133. package/dist/lib/troubleshoot/index.js.map +1 -0
  134. package/dist/lib/troubleshoot/log-fetcher.d.ts +43 -0
  135. package/dist/lib/troubleshoot/log-fetcher.d.ts.map +1 -0
  136. package/dist/lib/troubleshoot/log-fetcher.js +431 -0
  137. package/dist/lib/troubleshoot/log-fetcher.js.map +1 -0
  138. package/dist/lib/troubleshoot/redactor.d.ts +35 -0
  139. package/dist/lib/troubleshoot/redactor.d.ts.map +1 -0
  140. package/dist/lib/troubleshoot/redactor.js +208 -0
  141. package/dist/lib/troubleshoot/redactor.js.map +1 -0
  142. package/dist/lib/validators/catalog-validator.d.ts +3 -0
  143. package/dist/lib/validators/catalog-validator.d.ts.map +1 -0
  144. package/dist/lib/validators/catalog-validator.js +205 -0
  145. package/dist/lib/validators/catalog-validator.js.map +1 -0
  146. package/dist/lib/validators/dockerfile-validator.d.ts +4 -0
  147. package/dist/lib/validators/dockerfile-validator.d.ts.map +1 -0
  148. package/dist/lib/validators/dockerfile-validator.js +262 -0
  149. package/dist/lib/validators/dockerfile-validator.js.map +1 -0
  150. package/dist/lib/validators/env-validator.d.ts +3 -0
  151. package/dist/lib/validators/env-validator.d.ts.map +1 -0
  152. package/dist/lib/validators/env-validator.js +268 -0
  153. package/dist/lib/validators/env-validator.js.map +1 -0
  154. package/dist/lib/validators/git-validator.d.ts +3 -0
  155. package/dist/lib/validators/git-validator.d.ts.map +1 -0
  156. package/dist/lib/validators/git-validator.js +236 -0
  157. package/dist/lib/validators/git-validator.js.map +1 -0
  158. package/dist/lib/validators/health-detector.d.ts +4 -0
  159. package/dist/lib/validators/health-detector.d.ts.map +1 -0
  160. package/dist/lib/validators/health-detector.js +159 -0
  161. package/dist/lib/validators/health-detector.js.map +1 -0
  162. package/dist/lib/validators/index.d.ts +7 -0
  163. package/dist/lib/validators/index.d.ts.map +1 -0
  164. package/dist/lib/validators/index.js +7 -0
  165. package/dist/lib/validators/index.js.map +1 -0
  166. package/dist/lib/validators/route-validator.d.ts +3 -0
  167. package/dist/lib/validators/route-validator.d.ts.map +1 -0
  168. package/dist/lib/validators/route-validator.js +238 -0
  169. package/dist/lib/validators/route-validator.js.map +1 -0
  170. package/dist/types/index.d.ts +455 -0
  171. package/dist/types/index.d.ts.map +1 -0
  172. package/dist/types/index.js +37 -0
  173. package/dist/types/index.js.map +1 -0
  174. package/package.json +58 -0
@@ -0,0 +1,208 @@
1
+ const REDACTED_MARKER = '[REDACTED]';
2
+ // Patterns for sensitive data detection
3
+ const SENSITIVE_PATTERNS = {
4
+ bearerToken: /Bearer\s+[A-Za-z0-9\-_]+\.?[A-Za-z0-9\-_]*\.?[A-Za-z0-9\-_]*/gi,
5
+ apiKey: /(?:api[_-]?key|apikey|x-api-key)["\s:=]+["']?[A-Za-z0-9\-_]{16,}["']?/gi,
6
+ authHeader: /Authorization:\s*[^\s\n]+/gi,
7
+ jwtToken: /eyJ[A-Za-z0-9\-_]+\.eyJ[A-Za-z0-9\-_]+\.[A-Za-z0-9\-_]+/g,
8
+ password: /(?:password|passwd|pwd)["\s:=]+["']?[^\s"',}{]+["']?/gi,
9
+ secret: /(?:secret|token|credential)["\s:=]+["']?[A-Za-z0-9\-_]{8,}["']?/gi,
10
+ connectionString: /(?:mongodb|redis|postgres|mysql):\/\/[^\s"']+/gi,
11
+ ipAddress: /\b(?:\d{1,3}\.){3}\d{1,3}\b/g,
12
+ email: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
13
+ creditCard: /\b(?:\d{4}[- ]?){3}\d{4}\b/g,
14
+ ssn: /\b\d{3}-\d{2}-\d{4}\b/g,
15
+ };
16
+ // Fields that commonly contain request/response bodies
17
+ const BODY_FIELDS = [
18
+ 'body',
19
+ 'requestBody',
20
+ 'responseBody',
21
+ 'payload',
22
+ 'data',
23
+ 'request.body',
24
+ 'response.body',
25
+ ];
26
+ const DEFAULT_CONFIG = {
27
+ redactBearerTokens: true,
28
+ redactApiKeys: true,
29
+ redactRequestBodies: true,
30
+ redactResponseBodies: true,
31
+ allowedServices: [],
32
+ preserveFields: ['status', 'statusCode', 'method', 'path', 'duration', 'traceId', 'spanId'],
33
+ };
34
+ /**
35
+ * Redact sensitive information from a string
36
+ */
37
+ export function redactString(input, config = {}) {
38
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
39
+ let result = input;
40
+ if (mergedConfig.redactBearerTokens) {
41
+ result = result.replace(SENSITIVE_PATTERNS.bearerToken, `Bearer ${REDACTED_MARKER}`);
42
+ result = result.replace(SENSITIVE_PATTERNS.jwtToken, REDACTED_MARKER);
43
+ }
44
+ if (mergedConfig.redactApiKeys) {
45
+ result = result.replace(SENSITIVE_PATTERNS.apiKey, `api_key: ${REDACTED_MARKER}`);
46
+ result = result.replace(SENSITIVE_PATTERNS.secret, `secret: ${REDACTED_MARKER}`);
47
+ }
48
+ // Always redact these sensitive patterns
49
+ result = result.replace(SENSITIVE_PATTERNS.authHeader, `Authorization: ${REDACTED_MARKER}`);
50
+ result = result.replace(SENSITIVE_PATTERNS.password, `password: ${REDACTED_MARKER}`);
51
+ result = result.replace(SENSITIVE_PATTERNS.connectionString, REDACTED_MARKER);
52
+ result = result.replace(SENSITIVE_PATTERNS.creditCard, REDACTED_MARKER);
53
+ result = result.replace(SENSITIVE_PATTERNS.ssn, REDACTED_MARKER);
54
+ return result;
55
+ }
56
+ /**
57
+ * Redact sensitive data from an object recursively
58
+ */
59
+ export function redactObject(obj, config = {}, currentPath = '') {
60
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
61
+ const result = {};
62
+ for (const [key, value] of Object.entries(obj)) {
63
+ const fullPath = currentPath ? `${currentPath}.${key}` : key;
64
+ const lowerKey = key.toLowerCase();
65
+ // Check if this field should be preserved
66
+ if (mergedConfig.preserveFields.some((f) => f.toLowerCase() === lowerKey || fullPath.toLowerCase() === f.toLowerCase())) {
67
+ result[key] = value;
68
+ continue;
69
+ }
70
+ // Check if this is a body field that should be redacted
71
+ if ((mergedConfig.redactRequestBodies || mergedConfig.redactResponseBodies) &&
72
+ BODY_FIELDS.some((f) => f.toLowerCase() === lowerKey || fullPath.toLowerCase().endsWith(f.toLowerCase()))) {
73
+ result[key] = REDACTED_MARKER;
74
+ continue;
75
+ }
76
+ // Handle different value types
77
+ if (typeof value === 'string') {
78
+ result[key] = redactString(value, mergedConfig);
79
+ }
80
+ else if (typeof value === 'object' && value !== null) {
81
+ if (Array.isArray(value)) {
82
+ result[key] = value.map((item, index) => {
83
+ if (typeof item === 'string') {
84
+ return redactString(item, mergedConfig);
85
+ }
86
+ else if (typeof item === 'object' && item !== null) {
87
+ return redactObject(item, mergedConfig, `${fullPath}[${index}]`);
88
+ }
89
+ return item;
90
+ });
91
+ }
92
+ else {
93
+ result[key] = redactObject(value, mergedConfig, fullPath);
94
+ }
95
+ }
96
+ else {
97
+ result[key] = value;
98
+ }
99
+ }
100
+ return result;
101
+ }
102
+ /**
103
+ * Redact a log entry based on service access level
104
+ */
105
+ export function redactLogEntry(entry, ownService, config = {}) {
106
+ const mergedConfig = { ...DEFAULT_CONFIG, ...config };
107
+ const isOwnService = entry.service === ownService;
108
+ const isAllowedService = mergedConfig.allowedServices.includes(entry.service);
109
+ // For own service or explicitly allowed services, only redact credentials
110
+ if (isOwnService || isAllowedService) {
111
+ return {
112
+ ...entry,
113
+ message: redactString(entry.message, {
114
+ ...mergedConfig,
115
+ redactRequestBodies: false,
116
+ redactResponseBodies: false,
117
+ }),
118
+ metadata: entry.metadata
119
+ ? redactObject(entry.metadata, {
120
+ ...mergedConfig,
121
+ redactRequestBodies: false,
122
+ redactResponseBodies: false,
123
+ })
124
+ : undefined,
125
+ };
126
+ }
127
+ // For other services, redact more aggressively
128
+ return {
129
+ ...entry,
130
+ message: redactString(entry.message, mergedConfig),
131
+ metadata: entry.metadata
132
+ ? redactObject(entry.metadata, mergedConfig)
133
+ : undefined,
134
+ };
135
+ }
136
+ /**
137
+ * Redact multiple log entries
138
+ */
139
+ export function redactLogs(entries, ownService, config = {}) {
140
+ return entries.map((entry) => redactLogEntry(entry, ownService, config));
141
+ }
142
+ /**
143
+ * Create a summary of redactions made
144
+ */
145
+ export function summarizeRedactions(original, redacted) {
146
+ const types = new Set();
147
+ let count = 0;
148
+ // Count Bearer tokens
149
+ const bearerMatches = original.match(SENSITIVE_PATTERNS.bearerToken);
150
+ if (bearerMatches) {
151
+ count += bearerMatches.length;
152
+ types.add('bearer_token');
153
+ }
154
+ // Count JWT tokens
155
+ const jwtMatches = original.match(SENSITIVE_PATTERNS.jwtToken);
156
+ if (jwtMatches) {
157
+ count += jwtMatches.length;
158
+ types.add('jwt_token');
159
+ }
160
+ // Count API keys
161
+ const apiKeyMatches = original.match(SENSITIVE_PATTERNS.apiKey);
162
+ if (apiKeyMatches) {
163
+ count += apiKeyMatches.length;
164
+ types.add('api_key');
165
+ }
166
+ // Count passwords
167
+ const passwordMatches = original.match(SENSITIVE_PATTERNS.password);
168
+ if (passwordMatches) {
169
+ count += passwordMatches.length;
170
+ types.add('password');
171
+ }
172
+ // Count connection strings
173
+ const connMatches = original.match(SENSITIVE_PATTERNS.connectionString);
174
+ if (connMatches) {
175
+ count += connMatches.length;
176
+ types.add('connection_string');
177
+ }
178
+ return { count, types: Array.from(types) };
179
+ }
180
+ /**
181
+ * Add redaction markers to indicate where sensitive data was removed
182
+ */
183
+ export function markRedactedSections(text) {
184
+ const lines = text.split('\n');
185
+ const markedLines = lines.map((line) => {
186
+ if (line.includes(REDACTED_MARKER)) {
187
+ return `${line} [SENSITIVE DATA REMOVED]`;
188
+ }
189
+ return line;
190
+ });
191
+ return markedLines.join('\n');
192
+ }
193
+ /**
194
+ * Check if a log entry contains potentially sensitive information
195
+ */
196
+ export function containsSensitiveData(text) {
197
+ for (const pattern of Object.values(SENSITIVE_PATTERNS)) {
198
+ if (pattern.test(text)) {
199
+ // Reset regex lastIndex for global patterns
200
+ pattern.lastIndex = 0;
201
+ return true;
202
+ }
203
+ pattern.lastIndex = 0;
204
+ }
205
+ return false;
206
+ }
207
+ export { REDACTED_MARKER };
208
+ //# sourceMappingURL=redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../../src/lib/troubleshoot/redactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PreflightResult } from '../../types/index.js';
2
+ export declare function validateCatalog(cwd?: string): Promise<PreflightResult>;
3
+ //# sourceMappingURL=catalog-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/catalog-validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAA;AAiDxF,wBAAsB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB3F"}
@@ -0,0 +1,205 @@
1
+ import { readFile, access } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { parse } from 'yaml';
4
+ import { z } from 'zod';
5
+ // Zod schema for catalog-info.yaml validation
6
+ const CatalogInfoSchema = z.object({
7
+ apiVersion: z.string(),
8
+ kind: z.literal('Component'),
9
+ metadata: z.object({
10
+ name: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Name must be lowercase alphanumeric with hyphens'),
11
+ description: z.string().min(1),
12
+ tags: z.array(z.string()).optional(),
13
+ annotations: z.record(z.string()).optional(),
14
+ }),
15
+ spec: z.object({
16
+ type: z.literal('service'),
17
+ lifecycle: z.enum(['production', 'experimental', 'deprecated']),
18
+ owner: z.string().min(1),
19
+ system: z.string().optional(),
20
+ providesApis: z.array(z.string()).optional(),
21
+ consumesApis: z.array(z.string()).optional(),
22
+ routes: z.array(z.object({
23
+ path: z.string(),
24
+ methods: z.array(z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])),
25
+ auth: z.enum(['none', 'required', 'service']),
26
+ scopes: z.array(z.string()).optional(),
27
+ description: z.string().optional(),
28
+ stripPrefix: z.boolean().optional(),
29
+ rateLimit: z.object({
30
+ requestsPerMinute: z.number(),
31
+ burstSize: z.number().optional(),
32
+ }).optional(),
33
+ })).optional(),
34
+ oauth: z.object({
35
+ clientId: z.string(),
36
+ grantTypes: z.array(z.enum(['authorization_code', 'client_credentials', 'refresh_token'])),
37
+ redirectUris: z.array(z.string()).optional(),
38
+ scopes: z.array(z.string()),
39
+ }).optional(),
40
+ }),
41
+ });
42
+ // Zod schema for .iec.yaml validation
43
+ const IecYamlSchema = z.object({
44
+ serviceId: z.string().min(1),
45
+ serviceName: z.string().min(1),
46
+ repoUrl: z.string().url(),
47
+ branch: z.string().min(1),
48
+ linkedAt: z.string(),
49
+ });
50
+ export async function validateCatalog(cwd = process.cwd()) {
51
+ const checks = [];
52
+ // Check catalog-info.yaml exists
53
+ const catalogPath = join(cwd, 'catalog-info.yaml');
54
+ const catalogCheck = await validateCatalogFile(catalogPath);
55
+ checks.push(catalogCheck.check);
56
+ // Check .iec.yaml exists (linked service)
57
+ const iecYamlPath = join(cwd, '.iec.yaml');
58
+ const iecCheck = await validateIecYaml(iecYamlPath);
59
+ checks.push(iecCheck.check);
60
+ // Cross-validation if both files exist
61
+ if (catalogCheck.data && iecCheck.data) {
62
+ const crossCheck = validateCrossReference(catalogCheck.data, iecCheck.data);
63
+ checks.push(crossCheck);
64
+ }
65
+ return { checks };
66
+ }
67
+ async function validateCatalogFile(path) {
68
+ try {
69
+ await access(path);
70
+ }
71
+ catch {
72
+ return {
73
+ check: {
74
+ name: 'catalog-info.yaml exists',
75
+ status: 'fail',
76
+ message: 'catalog-info.yaml not found',
77
+ remediation: 'Run "iec init <service-name>" to create a new service with catalog-info.yaml',
78
+ },
79
+ };
80
+ }
81
+ try {
82
+ const content = await readFile(path, 'utf-8');
83
+ const parsed = parse(content);
84
+ const validated = CatalogInfoSchema.parse(parsed);
85
+ const details = [
86
+ `Name: ${validated.metadata.name}`,
87
+ `Owner: ${validated.spec.owner}`,
88
+ `Lifecycle: ${validated.spec.lifecycle}`,
89
+ ];
90
+ if (validated.spec.routes) {
91
+ details.push(`Routes: ${validated.spec.routes.length} defined`);
92
+ }
93
+ if (validated.spec.oauth) {
94
+ details.push(`OAuth: ${validated.spec.oauth.clientId}`);
95
+ }
96
+ return {
97
+ check: {
98
+ name: 'catalog-info.yaml valid',
99
+ status: 'pass',
100
+ message: 'catalog-info.yaml is valid',
101
+ details,
102
+ },
103
+ data: validated,
104
+ };
105
+ }
106
+ catch (error) {
107
+ if (error instanceof z.ZodError) {
108
+ const issues = error.errors.map(e => `${e.path.join('.')}: ${e.message}`);
109
+ return {
110
+ check: {
111
+ name: 'catalog-info.yaml valid',
112
+ status: 'fail',
113
+ message: 'catalog-info.yaml has validation errors',
114
+ details: issues,
115
+ remediation: 'Fix the validation errors listed above',
116
+ },
117
+ };
118
+ }
119
+ return {
120
+ check: {
121
+ name: 'catalog-info.yaml valid',
122
+ status: 'fail',
123
+ message: `Failed to parse catalog-info.yaml: ${error instanceof Error ? error.message : 'Unknown error'}`,
124
+ remediation: 'Ensure catalog-info.yaml is valid YAML',
125
+ },
126
+ };
127
+ }
128
+ }
129
+ async function validateIecYaml(path) {
130
+ try {
131
+ await access(path);
132
+ }
133
+ catch {
134
+ return {
135
+ check: {
136
+ name: '.iec.yaml exists',
137
+ status: 'warn',
138
+ message: 'Service not linked to iec-builder',
139
+ details: ['Service can still be registered but not deployed'],
140
+ remediation: 'Run "iec link" to connect this service to iec-builder',
141
+ },
142
+ };
143
+ }
144
+ try {
145
+ const content = await readFile(path, 'utf-8');
146
+ const parsed = parse(content);
147
+ const validated = IecYamlSchema.parse(parsed);
148
+ return {
149
+ check: {
150
+ name: '.iec.yaml valid',
151
+ status: 'pass',
152
+ message: 'Service is linked to iec-builder',
153
+ details: [
154
+ `Service ID: ${validated.serviceId}`,
155
+ `Repo: ${validated.repoUrl}`,
156
+ `Branch: ${validated.branch}`,
157
+ ],
158
+ },
159
+ data: validated,
160
+ };
161
+ }
162
+ catch (error) {
163
+ if (error instanceof z.ZodError) {
164
+ const issues = error.errors.map(e => `${e.path.join('.')}: ${e.message}`);
165
+ return {
166
+ check: {
167
+ name: '.iec.yaml valid',
168
+ status: 'fail',
169
+ message: '.iec.yaml has validation errors',
170
+ details: issues,
171
+ remediation: 'Run "iec unlink" then "iec link" to re-link the service',
172
+ },
173
+ };
174
+ }
175
+ return {
176
+ check: {
177
+ name: '.iec.yaml valid',
178
+ status: 'fail',
179
+ message: `Failed to parse .iec.yaml: ${error instanceof Error ? error.message : 'Unknown error'}`,
180
+ remediation: 'Delete .iec.yaml and run "iec link" again',
181
+ },
182
+ };
183
+ }
184
+ }
185
+ function validateCrossReference(catalog, iecYaml) {
186
+ const issues = [];
187
+ if (catalog.metadata.name !== iecYaml.serviceName) {
188
+ issues.push(`Service name mismatch: catalog-info.yaml has "${catalog.metadata.name}", .iec.yaml has "${iecYaml.serviceName}"`);
189
+ }
190
+ if (issues.length > 0) {
191
+ return {
192
+ name: 'Config files consistent',
193
+ status: 'warn',
194
+ message: 'Configuration files have inconsistencies',
195
+ details: issues,
196
+ remediation: 'Run "iec unlink" then "iec link" to synchronize configuration',
197
+ };
198
+ }
199
+ return {
200
+ name: 'Config files consistent',
201
+ status: 'pass',
202
+ message: 'catalog-info.yaml and .iec.yaml are consistent',
203
+ };
204
+ }
205
+ //# sourceMappingURL=catalog-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-validator.js","sourceRoot":"","sources":["../../../src/lib/validators/catalog-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PreflightResult, FrameworkInfo } from '../../types/index.js';
2
+ export declare function validateDockerfile(cwd?: string): Promise<PreflightResult>;
3
+ export declare function detectFramework(cwd: string): Promise<FrameworkInfo | null>;
4
+ //# sourceMappingURL=dockerfile-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dockerfile-validator.d.ts","sourceRoot":"","sources":["../../../src/lib/validators/dockerfile-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAkB,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAkE1F,wBAAsB,kBAAkB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsD9F;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA2DhF"}