@ketrics/ketrics-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 (91) hide show
  1. package/README.md +326 -0
  2. package/dist/bin/ketrics.d.ts +8 -0
  3. package/dist/bin/ketrics.d.ts.map +1 -0
  4. package/dist/bin/ketrics.js +12 -0
  5. package/dist/bin/ketrics.js.map +1 -0
  6. package/dist/src/cli.d.ts +11 -0
  7. package/dist/src/cli.d.ts.map +1 -0
  8. package/dist/src/cli.js +77 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/commands/build.d.ts +10 -0
  11. package/dist/src/commands/build.d.ts.map +1 -0
  12. package/dist/src/commands/build.js +35 -0
  13. package/dist/src/commands/build.js.map +1 -0
  14. package/dist/src/commands/create.d.ts +11 -0
  15. package/dist/src/commands/create.d.ts.map +1 -0
  16. package/dist/src/commands/create.js +170 -0
  17. package/dist/src/commands/create.js.map +1 -0
  18. package/dist/src/commands/deploy.d.ts +11 -0
  19. package/dist/src/commands/deploy.d.ts.map +1 -0
  20. package/dist/src/commands/deploy.js +105 -0
  21. package/dist/src/commands/deploy.js.map +1 -0
  22. package/dist/src/commands/run.d.ts +11 -0
  23. package/dist/src/commands/run.d.ts.map +1 -0
  24. package/dist/src/commands/run.js +236 -0
  25. package/dist/src/commands/run.js.map +1 -0
  26. package/dist/src/commands/validate.d.ts +10 -0
  27. package/dist/src/commands/validate.d.ts.map +1 -0
  28. package/dist/src/commands/validate.js +46 -0
  29. package/dist/src/commands/validate.js.map +1 -0
  30. package/dist/src/index.d.ts +13 -0
  31. package/dist/src/index.d.ts.map +1 -0
  32. package/dist/src/index.js +29 -0
  33. package/dist/src/index.js.map +1 -0
  34. package/dist/src/services/api-client.d.ts +14 -0
  35. package/dist/src/services/api-client.d.ts.map +1 -0
  36. package/dist/src/services/api-client.js +57 -0
  37. package/dist/src/services/api-client.js.map +1 -0
  38. package/dist/src/services/build-service.d.ts +40 -0
  39. package/dist/src/services/build-service.d.ts.map +1 -0
  40. package/dist/src/services/build-service.js +130 -0
  41. package/dist/src/services/build-service.js.map +1 -0
  42. package/dist/src/services/config-service.d.ts +35 -0
  43. package/dist/src/services/config-service.d.ts.map +1 -0
  44. package/dist/src/services/config-service.js +204 -0
  45. package/dist/src/services/config-service.js.map +1 -0
  46. package/dist/src/services/template-service.d.ts +51 -0
  47. package/dist/src/services/template-service.d.ts.map +1 -0
  48. package/dist/src/services/template-service.js +214 -0
  49. package/dist/src/services/template-service.js.map +1 -0
  50. package/dist/src/services/upload-service.d.ts +13 -0
  51. package/dist/src/services/upload-service.d.ts.map +1 -0
  52. package/dist/src/services/upload-service.js +54 -0
  53. package/dist/src/services/upload-service.js.map +1 -0
  54. package/dist/src/services/zip-service.d.ts +55 -0
  55. package/dist/src/services/zip-service.d.ts.map +1 -0
  56. package/dist/src/services/zip-service.js +219 -0
  57. package/dist/src/services/zip-service.js.map +1 -0
  58. package/dist/src/types/index.d.ts +188 -0
  59. package/dist/src/types/index.d.ts.map +1 -0
  60. package/dist/src/types/index.js +50 -0
  61. package/dist/src/types/index.js.map +1 -0
  62. package/dist/src/utils/logger.d.ts +52 -0
  63. package/dist/src/utils/logger.d.ts.map +1 -0
  64. package/dist/src/utils/logger.js +95 -0
  65. package/dist/src/utils/logger.js.map +1 -0
  66. package/dist/src/utils/spinner.d.ts +15 -0
  67. package/dist/src/utils/spinner.d.ts.map +1 -0
  68. package/dist/src/utils/spinner.js +38 -0
  69. package/dist/src/utils/spinner.js.map +1 -0
  70. package/package.json +47 -0
  71. package/templates/ketrics-app-v1/.env.example +17 -0
  72. package/templates/ketrics-app-v1/README.md +134 -0
  73. package/templates/ketrics-app-v1/backend/package-lock.json +716 -0
  74. package/templates/ketrics-app-v1/backend/package.json +18 -0
  75. package/templates/ketrics-app-v1/backend/src/index.ts +41 -0
  76. package/templates/ketrics-app-v1/backend/src/volume.ts +48 -0
  77. package/templates/ketrics-app-v1/backend/tsconfig.json +16 -0
  78. package/templates/ketrics-app-v1/frontend/index.html +13 -0
  79. package/templates/ketrics-app-v1/frontend/package-lock.json +1981 -0
  80. package/templates/ketrics-app-v1/frontend/package.json +24 -0
  81. package/templates/ketrics-app-v1/frontend/src/App.css +121 -0
  82. package/templates/ketrics-app-v1/frontend/src/App.tsx +109 -0
  83. package/templates/ketrics-app-v1/frontend/src/main.tsx +10 -0
  84. package/templates/ketrics-app-v1/frontend/src/services/index.ts +55 -0
  85. package/templates/ketrics-app-v1/frontend/tsconfig.json +21 -0
  86. package/templates/ketrics-app-v1/frontend/tsconfig.node.json +11 -0
  87. package/templates/ketrics-app-v1/frontend/vite.config.ts +11 -0
  88. package/templates/ketrics-app-v1/ketrics.config.json +10 -0
  89. package/templates/ketrics-app-v1/tests/test.echo.json +13 -0
  90. package/templates/ketrics-app-v1/tests/test.greet.json +11 -0
  91. package/templates/ketrics-app-v1/tests/test.info.json +9 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Deploy Command
3
+ *
4
+ * Builds frontend and backend, then packages and uploads to Ketrics platform.
5
+ */
6
+ import type { DeployOptions } from '../types';
7
+ /**
8
+ * Execute deploy command
9
+ */
10
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
11
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;AAEhE;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkIzE"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * Deploy Command
4
+ *
5
+ * Builds frontend and backend, then packages and uploads to Ketrics platform.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.deployCommand = deployCommand;
9
+ const logger_1 = require("../utils/logger");
10
+ const spinner_1 = require("../utils/spinner");
11
+ const config_service_1 = require("../services/config-service");
12
+ const api_client_1 = require("../services/api-client");
13
+ const zip_service_1 = require("../services/zip-service");
14
+ const upload_service_1 = require("../services/upload-service");
15
+ const build_service_1 = require("../services/build-service");
16
+ /**
17
+ * Execute deploy command
18
+ */
19
+ async function deployCommand(options) {
20
+ const startTime = Date.now();
21
+ const cwd = process.cwd();
22
+ logger_1.logger.header('Ketrics CLI v1.0.0');
23
+ try {
24
+ // Load environment configuration
25
+ const envConfig = await (0, spinner_1.withSpinner)('Loading environment configuration', async () => (0, config_service_1.loadEnvConfig)(options.env), 'Loaded environment configuration');
26
+ // Validate deployment token format
27
+ await (0, spinner_1.withSpinner)('Validating deployment token', async () => {
28
+ if (!envConfig.KETRICS_TOKEN.startsWith('ktd_')) {
29
+ throw new Error('Invalid token format. Token should start with "ktd_"');
30
+ }
31
+ }, 'Validated deployment token');
32
+ // Build frontend and backend
33
+ logger_1.logger.newline();
34
+ logger_1.logger.info('Building frontend and backend...');
35
+ logger_1.logger.newline();
36
+ let buildResult;
37
+ try {
38
+ buildResult = (0, build_service_1.buildAll)(cwd);
39
+ logger_1.logger.success('Frontend and backend built successfully');
40
+ }
41
+ catch (error) {
42
+ logger_1.logger.error(error.message);
43
+ process.exit(1);
44
+ }
45
+ // Create ZIP from builds
46
+ const zipResult = await (0, spinner_1.withSpinner)('Creating deployment ZIP archive', async () => (0, zip_service_1.createDeploymentZipBundle)(buildResult.frontendDistPath, buildResult.backendDistPath), 'Created deployment ZIP archive');
47
+ logger_1.logger.success(`ZIP archive: ${(0, zip_service_1.formatSize)(zipResult.zipSize)} from ${zipResult.files.length} files`);
48
+ // Dry run - show files and exit
49
+ if (options.dryRun) {
50
+ logger_1.logger.newline();
51
+ logger_1.logger.warn('Dry run - no files were uploaded');
52
+ logger_1.logger.newline();
53
+ logger_1.logger.log('Files to deploy:');
54
+ // Group files by prefix
55
+ const frontendFiles = zipResult.files.filter((f) => f.relativePath.startsWith('frontend/'));
56
+ const backendFiles = zipResult.files.filter((f) => f.relativePath.startsWith('backend/'));
57
+ logger_1.logger.log(' frontend/');
58
+ frontendFiles.forEach((file) => {
59
+ const shortPath = file.relativePath.replace('frontend/', '');
60
+ logger_1.logger.file(` ${shortPath}`, (0, zip_service_1.formatSize)(file.size));
61
+ });
62
+ logger_1.logger.newline();
63
+ logger_1.logger.log(' backend/');
64
+ backendFiles.forEach((file) => {
65
+ const shortPath = file.relativePath.replace('backend/', '');
66
+ logger_1.logger.file(` ${shortPath}`, (0, zip_service_1.formatSize)(file.size));
67
+ });
68
+ logger_1.logger.newline();
69
+ logger_1.logger.keyValue('Total files', String(zipResult.files.length));
70
+ logger_1.logger.keyValue('Frontend files', String(frontendFiles.length));
71
+ logger_1.logger.keyValue('Backend files', String(backendFiles.length));
72
+ logger_1.logger.keyValue('Source size', (0, zip_service_1.formatSize)(zipResult.totalSourceSize));
73
+ logger_1.logger.keyValue('ZIP size', (0, zip_service_1.formatSize)(zipResult.zipSize));
74
+ return;
75
+ }
76
+ // Initiate deployment
77
+ const deployResponse = await (0, spinner_1.withSpinner)('Initiating deployment', async () => (0, api_client_1.initiateDeploy)(envConfig), 'Initiated deployment');
78
+ // Upload to S3
79
+ await (0, spinner_1.withSpinner)('Uploading to S3', async () => (0, upload_service_1.uploadToS3)(deployResponse.data.uploadUrl, zipResult.buffer), 'Uploaded to S3');
80
+ // Calculate duration
81
+ const duration = ((Date.now() - startTime) / 1000).toFixed(1);
82
+ // Show success
83
+ const result = {
84
+ success: true,
85
+ deploymentId: deployResponse.data.deploymentId,
86
+ filesDeployed: zipResult.files.length,
87
+ totalSize: zipResult.zipSize,
88
+ s3Key: deployResponse.data.s3Key,
89
+ };
90
+ logger_1.logger.box('Deployment successful!', [
91
+ `Deployment ID: ${result.deploymentId}`,
92
+ `Files: ${result.filesDeployed}`,
93
+ `Size: ${(0, zip_service_1.formatSize)(result.totalSize)}`,
94
+ `Duration: ${duration}s`,
95
+ '',
96
+ 'Your deployment is being processed by Ketrics.',
97
+ ]);
98
+ }
99
+ catch (error) {
100
+ logger_1.logger.newline();
101
+ logger_1.logger.error(error.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Run Command
3
+ *
4
+ * Executes API requests from JSON configuration files with variable interpolation.
5
+ */
6
+ import { RunOptions } from '../types';
7
+ /**
8
+ * Execute the run command
9
+ */
10
+ export declare function runCommand(jsonFilePath: string, options: RunOptions): Promise<void>;
11
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAKL,UAAU,EACX,MAAM,UAAU,CAAC;AA6JlB;;GAEG;AACH,wBAAsB,UAAU,CAC9B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAkFf"}
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ /**
3
+ * Run Command
4
+ *
5
+ * Executes API requests from JSON configuration files with variable interpolation.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.runCommand = runCommand;
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const axios_1 = __importDefault(require("axios"));
48
+ const chalk_1 = __importDefault(require("chalk"));
49
+ const logger_1 = require("../utils/logger");
50
+ const spinner_1 = require("../utils/spinner");
51
+ const config_service_1 = require("../services/config-service");
52
+ const types_1 = require("../types");
53
+ /**
54
+ * Interpolate template variables in a string
55
+ * Supports: {{tenantId}}, {{applicationId}}, {{token}}
56
+ */
57
+ function interpolateString(template, vars) {
58
+ return template.replace(/\{\{(\w+)\}\}/g, (match, varName) => {
59
+ if (varName in vars) {
60
+ return vars[varName];
61
+ }
62
+ logger_1.logger.warn(`Unknown variable: ${match}`);
63
+ return match;
64
+ });
65
+ }
66
+ /**
67
+ * Recursively interpolate all string values in an object/array
68
+ */
69
+ function interpolateObject(obj, vars) {
70
+ if (typeof obj === 'string') {
71
+ return interpolateString(obj, vars);
72
+ }
73
+ if (Array.isArray(obj)) {
74
+ return obj.map((item) => interpolateObject(item, vars));
75
+ }
76
+ if (obj && typeof obj === 'object') {
77
+ const result = {};
78
+ for (const [key, value] of Object.entries(obj)) {
79
+ result[key] = interpolateObject(value, vars);
80
+ }
81
+ return result;
82
+ }
83
+ return obj;
84
+ }
85
+ /**
86
+ * Load and parse the JSON configuration file
87
+ */
88
+ function loadRunFile(filePath) {
89
+ const absolutePath = path.isAbsolute(filePath)
90
+ ? filePath
91
+ : path.join(process.cwd(), filePath);
92
+ if (!fs.existsSync(absolutePath)) {
93
+ throw new Error(`JSON file not found: ${absolutePath}`);
94
+ }
95
+ const content = fs.readFileSync(absolutePath, 'utf-8');
96
+ let parsed;
97
+ try {
98
+ parsed = JSON.parse(content);
99
+ }
100
+ catch {
101
+ throw new Error(`Invalid JSON in file: ${absolutePath}`);
102
+ }
103
+ const result = types_1.runFileSchema.safeParse(parsed);
104
+ if (!result.success) {
105
+ const errors = result.error.errors
106
+ .map((e) => ` - ${e.path.join('.')}: ${e.message}`)
107
+ .join('\n');
108
+ throw new Error(`Invalid run file format:\n${errors}`);
109
+ }
110
+ return result.data;
111
+ }
112
+ /**
113
+ * Validate env config has KETRICS_AUTH_TOKEN and KETRICS_RUNTIME_URL (required for run command)
114
+ */
115
+ function validateRunEnvConfig(envConfig) {
116
+ const result = types_1.runEnvConfigSchema.safeParse(envConfig);
117
+ if (!result.success) {
118
+ const errors = result.error.errors
119
+ .map((e) => ` - ${e.path.join('.')}: ${e.message}`)
120
+ .join('\n');
121
+ throw new Error(`Missing required environment variables for run command:\n${errors}`);
122
+ }
123
+ return result.data;
124
+ }
125
+ /**
126
+ * Create variable map from environment configuration
127
+ */
128
+ function createVariableMap(envConfig) {
129
+ return {
130
+ tenantId: envConfig.KETRICS_TENANT_ID,
131
+ applicationId: envConfig.KETRICS_APPLICATION_ID,
132
+ token: envConfig.KETRICS_AUTH_TOKEN,
133
+ };
134
+ }
135
+ /**
136
+ * Display request details
137
+ */
138
+ function displayRequest(method, url, headers, body) {
139
+ logger_1.logger.newline();
140
+ logger_1.logger.info(`${chalk_1.default.bold(method)} ${url}`);
141
+ if (Object.keys(headers).length > 0) {
142
+ logger_1.logger.newline();
143
+ logger_1.logger.log(chalk_1.default.gray('Headers:'));
144
+ for (const [key, value] of Object.entries(headers)) {
145
+ // Mask authorization header value for security
146
+ const displayValue = key.toLowerCase() === 'authorization'
147
+ ? value.substring(0, 20) + '...'
148
+ : value;
149
+ logger_1.logger.indent(`${key}: ${displayValue}`, 1);
150
+ }
151
+ }
152
+ if (body && Object.keys(body).length > 0) {
153
+ logger_1.logger.newline();
154
+ logger_1.logger.log(chalk_1.default.gray('Body:'));
155
+ logger_1.logger.indent(JSON.stringify(body, null, 2), 1);
156
+ }
157
+ logger_1.logger.newline();
158
+ }
159
+ /**
160
+ * Display response details
161
+ */
162
+ function displayResponse(status, data) {
163
+ const statusColor = status >= 200 && status < 300
164
+ ? chalk_1.default.green
165
+ : status >= 400
166
+ ? chalk_1.default.red
167
+ : chalk_1.default.yellow;
168
+ logger_1.logger.log(chalk_1.default.gray('Response:'));
169
+ logger_1.logger.indent(`Status: ${statusColor(status)}`, 1);
170
+ logger_1.logger.newline();
171
+ logger_1.logger.log(chalk_1.default.gray('Body:'));
172
+ console.log(JSON.stringify(data, null, 2));
173
+ }
174
+ /**
175
+ * Execute the run command
176
+ */
177
+ async function runCommand(jsonFilePath, options) {
178
+ const startTime = Date.now();
179
+ logger_1.logger.header('Ketrics CLI - Run');
180
+ try {
181
+ // 1. Load environment configuration
182
+ const baseEnvConfig = await (0, spinner_1.withSpinner)('Loading environment configuration', async () => (0, config_service_1.loadEnvConfig)(options.env), 'Loaded environment configuration');
183
+ // 2. Validate that KETRICS_AUTH_TOKEN is present
184
+ const envConfig = validateRunEnvConfig(baseEnvConfig);
185
+ // 3. Load and validate JSON file
186
+ const runFile = await (0, spinner_1.withSpinner)(`Loading ${jsonFilePath}`, async () => loadRunFile(jsonFilePath), `Loaded ${jsonFilePath}`);
187
+ // 4. Create variable map from env config
188
+ const vars = createVariableMap(envConfig);
189
+ // 5. Interpolate all variables
190
+ const interpolatedEndpoint = interpolateString(runFile.endpoint, vars);
191
+ const interpolatedHeaders = interpolateObject(runFile.headers || {}, vars);
192
+ const interpolatedBody = interpolateObject(runFile.body || {}, vars);
193
+ // 6. Construct full URL using runtime URL
194
+ const fullUrl = `${envConfig.KETRICS_RUNTIME_URL}${interpolatedEndpoint}`;
195
+ // 7. Display request details
196
+ displayRequest(runFile.method, fullUrl, interpolatedHeaders, interpolatedBody);
197
+ // 8. Execute HTTP request
198
+ const response = await (0, spinner_1.withSpinner)('Executing request', async () => {
199
+ return (0, axios_1.default)({
200
+ method: runFile.method.toLowerCase(),
201
+ url: fullUrl,
202
+ headers: interpolatedHeaders,
203
+ data: runFile.method !== 'GET' ? interpolatedBody : undefined,
204
+ timeout: 30000,
205
+ validateStatus: () => true, // Don't throw on non-2xx responses
206
+ });
207
+ }, 'Request completed');
208
+ // 9. Display response
209
+ logger_1.logger.newline();
210
+ displayResponse(response.status, response.data);
211
+ // 10. Show duration
212
+ const duration = ((Date.now() - startTime) / 1000).toFixed(2);
213
+ logger_1.logger.newline();
214
+ logger_1.logger.info(`Completed in ${duration}s`);
215
+ }
216
+ catch (error) {
217
+ logger_1.logger.newline();
218
+ if (axios_1.default.isAxiosError(error)) {
219
+ const axiosError = error;
220
+ if (axiosError.code === 'ECONNREFUSED') {
221
+ logger_1.logger.error(`Connection refused: ${axiosError.config?.url}`);
222
+ }
223
+ else if (axiosError.code === 'ETIMEDOUT') {
224
+ logger_1.logger.error('Request timed out');
225
+ }
226
+ else {
227
+ logger_1.logger.error(`Request failed: ${axiosError.message}`);
228
+ }
229
+ }
230
+ else {
231
+ logger_1.logger.error(error.message);
232
+ }
233
+ process.exit(1);
234
+ }
235
+ }
236
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Validate Command
3
+ *
4
+ * Validates ketrics.config.json and .env files.
5
+ */
6
+ /**
7
+ * Execute validate command
8
+ */
9
+ export declare function validateCommand(configPath?: string, envPath?: string): Promise<void>;
10
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAsB,eAAe,CACnC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * Validate Command
4
+ *
5
+ * Validates ketrics.config.json and .env files.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.validateCommand = validateCommand;
9
+ const logger_1 = require("../utils/logger");
10
+ const config_service_1 = require("../services/config-service");
11
+ /**
12
+ * Execute validate command
13
+ */
14
+ async function validateCommand(configPath, envPath) {
15
+ logger_1.logger.info('Validating configuration...');
16
+ logger_1.logger.newline();
17
+ const result = (0, config_service_1.validateConfig)(configPath, envPath);
18
+ // Show errors
19
+ if (result.errors.length > 0) {
20
+ logger_1.logger.error('Configuration errors found:');
21
+ result.errors.forEach((error) => {
22
+ logger_1.logger.indent(`- ${error}`, 1);
23
+ });
24
+ logger_1.logger.newline();
25
+ }
26
+ // Show warnings
27
+ if (result.warnings.length > 0) {
28
+ logger_1.logger.warn('Configuration warnings:');
29
+ result.warnings.forEach((warning) => {
30
+ logger_1.logger.indent(`- ${warning}`, 1);
31
+ });
32
+ logger_1.logger.newline();
33
+ }
34
+ // Show result
35
+ if (result.valid) {
36
+ logger_1.logger.success('Configuration is valid!');
37
+ if (result.warnings.length > 0) {
38
+ logger_1.logger.info('Consider addressing the warnings above.');
39
+ }
40
+ }
41
+ else {
42
+ logger_1.logger.error('Configuration is invalid. Please fix the errors above.');
43
+ process.exit(1);
44
+ }
45
+ }
46
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/commands/validate.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAQH,0CAqCC;AA3CD,4CAAyC;AACzC,+DAA4D;AAE5D;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,UAAmB,EACnB,OAAgB;IAEhB,eAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3C,eAAM,CAAC,OAAO,EAAE,CAAC;IAEjB,MAAM,MAAM,GAAG,IAAA,+BAAc,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEnD,cAAc;IACd,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,eAAM,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,eAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAClC,eAAM,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,eAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,eAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,eAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Ketrics CLI
3
+ *
4
+ * Main exports for programmatic usage.
5
+ */
6
+ export * from './types';
7
+ export * from './services/config-service';
8
+ export * from './services/api-client';
9
+ export * from './services/zip-service';
10
+ export * from './services/upload-service';
11
+ export * from './services/template-service';
12
+ export * from './services/build-service';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * Ketrics CLI
4
+ *
5
+ * Main exports for programmatic usage.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ __exportStar(require("./types"), exports);
23
+ __exportStar(require("./services/config-service"), exports);
24
+ __exportStar(require("./services/api-client"), exports);
25
+ __exportStar(require("./services/zip-service"), exports);
26
+ __exportStar(require("./services/upload-service"), exports);
27
+ __exportStar(require("./services/template-service"), exports);
28
+ __exportStar(require("./services/build-service"), exports);
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;AAEH,0CAAwB;AACxB,4DAA0C;AAC1C,wDAAsC;AACtC,yDAAuC;AACvC,4DAA0C;AAC1C,8DAA4C;AAC5C,2DAAyC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * API Client Service
3
+ *
4
+ * HTTP client for communicating with Ketrics Control Plane API.
5
+ */
6
+ import type { EnvConfig, DeployResponse } from "../types";
7
+ /**
8
+ * Initiate a deployment by requesting a presigned URL
9
+ *
10
+ * @param envConfig - Environment configuration with token and API URL
11
+ * @returns Deploy response with presigned URL
12
+ */
13
+ export declare function initiateDeploy(envConfig: EnvConfig): Promise<DeployResponse>;
14
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../src/services/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAW1D;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAiDlF"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * API Client Service
4
+ *
5
+ * HTTP client for communicating with Ketrics Control Plane API.
6
+ */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.initiateDeploy = initiateDeploy;
12
+ const axios_1 = __importDefault(require("axios"));
13
+ /**
14
+ * Initiate a deployment by requesting a presigned URL
15
+ *
16
+ * @param envConfig - Environment configuration with token and API URL
17
+ * @returns Deploy response with presigned URL
18
+ */
19
+ async function initiateDeploy(envConfig) {
20
+ const url = `${envConfig.KETRICS_API_URL}/tenants/${envConfig.KETRICS_TENANT_ID}/applications/${envConfig.KETRICS_APPLICATION_ID}/deploy`;
21
+ console.log("Initiating deploy to URL:", url);
22
+ try {
23
+ const response = await axios_1.default.post(url, {}, {
24
+ headers: {
25
+ Authorization: `Bearer ${envConfig.KETRICS_TOKEN}`,
26
+ "Content-Type": "application/json",
27
+ },
28
+ timeout: 30000, // 30 second timeout
29
+ });
30
+ return response.data;
31
+ }
32
+ catch (error) {
33
+ if (axios_1.default.isAxiosError(error)) {
34
+ const axiosError = error;
35
+ if (axiosError.response) {
36
+ const status = axiosError.response.status;
37
+ const data = axiosError.response.data;
38
+ switch (status) {
39
+ case 401:
40
+ throw new Error("Authentication failed: Invalid or expired deployment token.\n" + "Please check your KETRICS_TOKEN in the .env file.");
41
+ case 403:
42
+ throw new Error("Authorization failed: Token does not have access to this application.\n" +
43
+ "Please verify KETRICS_TENANT_ID and KETRICS_APPLICATION_ID.");
44
+ case 404:
45
+ throw new Error("Application not found. Please verify KETRICS_APPLICATION_ID.");
46
+ default:
47
+ throw new Error(`API error (${status}): ${data?.message || data?.error || "Unknown error"}`);
48
+ }
49
+ }
50
+ else if (axiosError.request) {
51
+ throw new Error(`Network error: Could not connect to ${envConfig.KETRICS_API_URL}\n` + "Please check your internet connection and KETRICS_API_URL.");
52
+ }
53
+ }
54
+ throw error;
55
+ }
56
+ }
57
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/services/api-client.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;AAoBH,wCAiDC;AAnED,kDAA0C;AAY1C;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAAC,SAAoB;IACvD,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,eAAe,YAAY,SAAS,CAAC,iBAAiB,iBAAiB,SAAS,CAAC,sBAAsB,SAAS,CAAC;IAE1I,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,IAAI,CAC/B,GAAG,EACH,EAAE,EACF;YACE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,SAAS,CAAC,aAAa,EAAE;gBAClD,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,KAAK,EAAE,oBAAoB;SACrC,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,KAAqC,CAAC;YAEzD,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAEtC,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,GAAG;wBACN,MAAM,IAAI,KAAK,CAAC,+DAA+D,GAAG,mDAAmD,CAAC,CAAC;oBACzI,KAAK,GAAG;wBACN,MAAM,IAAI,KAAK,CACb,yEAAyE;4BACvE,6DAA6D,CAChE,CAAC;oBACJ,KAAK,GAAG;wBACN,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;oBAClF;wBACE,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,MAAM,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;gBACjG,CAAC;YACH,CAAC;iBAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,uCAAuC,SAAS,CAAC,eAAe,IAAI,GAAG,4DAA4D,CACpI,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Build Service
3
+ *
4
+ * Handles building frontend and backend applications before deployment.
5
+ */
6
+ /**
7
+ * Build validation result
8
+ */
9
+ export interface BuildValidation {
10
+ valid: boolean;
11
+ errors: string[];
12
+ }
13
+ /**
14
+ * Validate that a directory exists and has node_modules
15
+ */
16
+ export declare function validateBuildDirectory(dir: string, name: string): BuildValidation;
17
+ /**
18
+ * Run npm build in a directory
19
+ */
20
+ export declare function runBuild(dir: string, name: string): void;
21
+ /**
22
+ * Get the dist directory path for a build
23
+ */
24
+ export declare function getDistPath(dir: string): string;
25
+ /**
26
+ * Check if dist directory exists after build
27
+ */
28
+ export declare function validateDistDirectory(dir: string, name: string): void;
29
+ /**
30
+ * Build result with paths
31
+ */
32
+ export interface BuildResult {
33
+ frontendDistPath: string;
34
+ backendDistPath: string;
35
+ }
36
+ /**
37
+ * Build both frontend and backend
38
+ */
39
+ export declare function buildAll(projectDir: string): BuildResult;
40
+ //# sourceMappingURL=build-service.d.ts.map