@keplog/cli 0.2.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 (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +495 -0
  3. package/bin/keplog +2 -0
  4. package/dist/commands/delete.d.ts +3 -0
  5. package/dist/commands/delete.d.ts.map +1 -0
  6. package/dist/commands/delete.js +158 -0
  7. package/dist/commands/delete.js.map +1 -0
  8. package/dist/commands/init.d.ts +3 -0
  9. package/dist/commands/init.d.ts.map +1 -0
  10. package/dist/commands/init.js +131 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/commands/issues.d.ts +3 -0
  13. package/dist/commands/issues.d.ts.map +1 -0
  14. package/dist/commands/issues.js +543 -0
  15. package/dist/commands/issues.js.map +1 -0
  16. package/dist/commands/list.d.ts +3 -0
  17. package/dist/commands/list.d.ts.map +1 -0
  18. package/dist/commands/list.js +104 -0
  19. package/dist/commands/list.js.map +1 -0
  20. package/dist/commands/releases.d.ts +3 -0
  21. package/dist/commands/releases.d.ts.map +1 -0
  22. package/dist/commands/releases.js +100 -0
  23. package/dist/commands/releases.js.map +1 -0
  24. package/dist/commands/upload.d.ts +3 -0
  25. package/dist/commands/upload.d.ts.map +1 -0
  26. package/dist/commands/upload.js +76 -0
  27. package/dist/commands/upload.js.map +1 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +28 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/lib/config.d.ts +57 -0
  33. package/dist/lib/config.d.ts.map +1 -0
  34. package/dist/lib/config.js +155 -0
  35. package/dist/lib/config.js.map +1 -0
  36. package/dist/lib/uploader.d.ts +11 -0
  37. package/dist/lib/uploader.d.ts.map +1 -0
  38. package/dist/lib/uploader.js +171 -0
  39. package/dist/lib/uploader.js.map +1 -0
  40. package/jest.config.js +16 -0
  41. package/package.json +58 -0
  42. package/src/commands/delete.ts +186 -0
  43. package/src/commands/init.ts +137 -0
  44. package/src/commands/issues.ts +695 -0
  45. package/src/commands/list.ts +124 -0
  46. package/src/commands/releases.ts +122 -0
  47. package/src/commands/upload.ts +76 -0
  48. package/src/index.ts +31 -0
  49. package/src/lib/config.ts +138 -0
  50. package/src/lib/uploader.ts +168 -0
  51. package/tests/README.md +380 -0
  52. package/tests/config.test.ts +397 -0
  53. package/tests/uploader.test.ts +524 -0
  54. package/tsconfig.json +20 -0
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.listCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const config_js_1 = require("../lib/config.js");
11
+ exports.listCommand = new commander_1.Command('list')
12
+ .description('List uploaded source maps for a specific release')
13
+ .option('-r, --release <version>', 'Release version to list source maps for')
14
+ .option('-p, --project-id <id>', 'Project ID (overrides config)')
15
+ .option('-k, --api-key <key>', 'API key (overrides config)')
16
+ .option('-u, --api-url <url>', 'API URL (overrides config)')
17
+ .action(async (options) => {
18
+ try {
19
+ // Read config from file (priority: local > global > env)
20
+ const config = config_js_1.ConfigManager.getConfig();
21
+ const release = options.release || process.env.KEPLOG_RELEASE;
22
+ const projectId = options.projectId || config.projectId;
23
+ const apiKey = options.apiKey || config.apiKey;
24
+ const apiUrl = options.apiUrl || config.apiUrl || 'https://api.keplog.com';
25
+ // Validate required parameters
26
+ if (!projectId) {
27
+ console.error(chalk_1.default.red('\n✗ Error: Project ID is required\n'));
28
+ console.log('Options:');
29
+ console.log(' 1. Run: keplog init (recommended)');
30
+ console.log(' 2. Use flag: --project-id=<your-project-id>');
31
+ console.log(' 3. Set env: KEPLOG_PROJECT_ID=<your-project-id>\n');
32
+ process.exit(1);
33
+ }
34
+ if (!apiKey) {
35
+ console.error(chalk_1.default.red('\n✗ Error: API key is required\n'));
36
+ console.log('Options:');
37
+ console.log(' 1. Run: keplog init (recommended)');
38
+ console.log(' 2. Use flag: --api-key=<your-api-key>');
39
+ console.log(' 3. Set env: KEPLOG_API_KEY=<your-api-key>\n');
40
+ process.exit(1);
41
+ }
42
+ if (!release) {
43
+ console.error(chalk_1.default.red('\n✗ Error: Release version is required\n'));
44
+ console.log('Options:');
45
+ console.log(' 1. Use flag: --release=v1.0.0');
46
+ console.log(' 2. Set env: KEPLOG_RELEASE=v1.0.0\n');
47
+ process.exit(1);
48
+ }
49
+ console.log(chalk_1.default.bold.cyan('\n📁 Keplog Source Maps - List\n'));
50
+ console.log(`Release: ${chalk_1.default.green(release)}`);
51
+ console.log(`Project ID: ${chalk_1.default.gray(projectId)}`);
52
+ console.log(`API URL: ${chalk_1.default.gray(apiUrl)}\n`);
53
+ const spinner = (0, ora_1.default)('Fetching source maps...').start();
54
+ // Fetch source maps from API
55
+ const url = `${apiUrl}/api/v1/cli/projects/${projectId}/sourcemaps?release=${encodeURIComponent(release)}`;
56
+ const response = await fetch(url, {
57
+ method: 'GET',
58
+ headers: {
59
+ 'X-API-Key': apiKey,
60
+ },
61
+ });
62
+ if (!response.ok) {
63
+ const error = await response.json();
64
+ spinner.fail(chalk_1.default.red('Failed to fetch source maps'));
65
+ console.error(chalk_1.default.red(`\n✗ Error: ${error.error || 'Unknown error'}\n`));
66
+ process.exit(1);
67
+ }
68
+ const data = await response.json();
69
+ spinner.succeed(chalk_1.default.green('Source maps fetched'));
70
+ // Display results
71
+ console.log(chalk_1.default.bold(`\n📦 Source Maps for ${chalk_1.default.cyan(data.release)}`));
72
+ console.log(chalk_1.default.gray(`Found ${data.count} file${data.count !== 1 ? 's' : ''}\n`));
73
+ if (data.count === 0) {
74
+ console.log(chalk_1.default.yellow('No source maps found for this release.\n'));
75
+ console.log(chalk_1.default.gray('Upload source maps using: keplog upload --release=' + release + '\n'));
76
+ return;
77
+ }
78
+ // Calculate total size
79
+ let totalSize = 0;
80
+ for (const file of data.source_maps) {
81
+ totalSize += file.Size;
82
+ }
83
+ // Display files
84
+ for (const file of data.source_maps) {
85
+ const size = formatFileSize(file.Size);
86
+ const date = new Date(file.UploadedAt).toLocaleString();
87
+ console.log(`${chalk_1.default.green('✓')} ${chalk_1.default.white(file.Filename.padEnd(40))} ${chalk_1.default.gray(size.padEnd(12))} ${chalk_1.default.dim(date)}`);
88
+ }
89
+ console.log(chalk_1.default.gray(`\nTotal: ${data.count} files (${formatFileSize(totalSize)})\n`));
90
+ }
91
+ catch (error) {
92
+ console.error(chalk_1.default.red(`\n✗ Error: ${error.message}\n`));
93
+ process.exit(1);
94
+ }
95
+ });
96
+ function formatFileSize(bytes) {
97
+ if (bytes === 0)
98
+ return '0 B';
99
+ const k = 1024;
100
+ const sizes = ['B', 'KB', 'MB', 'GB'];
101
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
102
+ return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;
103
+ }
104
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const releasesCommand: Command;
3
+ //# sourceMappingURL=releases.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releases.d.ts","sourceRoot":"","sources":["../../src/commands/releases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,eAAe,SAgGxB,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.releasesCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const ora_1 = __importDefault(require("ora"));
10
+ const config_js_1 = require("../lib/config.js");
11
+ exports.releasesCommand = new commander_1.Command('releases')
12
+ .description('List all releases with uploaded source maps')
13
+ .option('-p, --project-id <id>', 'Project ID (overrides config)')
14
+ .option('-k, --api-key <key>', 'API key (overrides config)')
15
+ .option('-u, --api-url <url>', 'API URL (overrides config)')
16
+ .action(async (options) => {
17
+ try {
18
+ // Read config from file (priority: local > global > env)
19
+ const config = config_js_1.ConfigManager.getConfig();
20
+ const projectId = options.projectId || config.projectId;
21
+ const apiKey = options.apiKey || config.apiKey;
22
+ const apiUrl = options.apiUrl || config.apiUrl || 'https://api.keplog.com';
23
+ // Validate required parameters
24
+ if (!projectId) {
25
+ console.error(chalk_1.default.red('\n✗ Error: Project ID is required\n'));
26
+ console.log('Options:');
27
+ console.log(' 1. Run: keplog init (recommended)');
28
+ console.log(' 2. Use flag: --project-id=<your-project-id>');
29
+ console.log(' 3. Set env: KEPLOG_PROJECT_ID=<your-project-id>\n');
30
+ process.exit(1);
31
+ }
32
+ if (!apiKey) {
33
+ console.error(chalk_1.default.red('\n✗ Error: API key is required\n'));
34
+ console.log('Options:');
35
+ console.log(' 1. Run: keplog init (recommended)');
36
+ console.log(' 2. Use flag: --api-key=<your-api-key>');
37
+ console.log(' 3. Set env: KEPLOG_API_KEY=<your-api-key>\n');
38
+ process.exit(1);
39
+ }
40
+ console.log(chalk_1.default.bold.cyan('\n📦 Keplog Releases\n'));
41
+ console.log(`Project ID: ${chalk_1.default.gray(projectId)}`);
42
+ console.log(`API URL: ${chalk_1.default.gray(apiUrl)}\n`);
43
+ const spinner = (0, ora_1.default)('Fetching releases...').start();
44
+ // Fetch releases from API
45
+ const url = `${apiUrl}/api/v1/cli/projects/${projectId}/sourcemaps/releases`;
46
+ const response = await fetch(url, {
47
+ method: 'GET',
48
+ headers: {
49
+ 'X-API-Key': apiKey,
50
+ },
51
+ });
52
+ if (!response.ok) {
53
+ const error = await response.json();
54
+ spinner.fail(chalk_1.default.red('Failed to fetch releases'));
55
+ console.error(chalk_1.default.red(`\n✗ Error: ${error.error || 'Unknown error'}\n`));
56
+ process.exit(1);
57
+ }
58
+ const data = await response.json();
59
+ spinner.succeed(chalk_1.default.green('Releases fetched'));
60
+ // Display results
61
+ console.log(chalk_1.default.bold(`\n📋 Releases with Source Maps`));
62
+ console.log(chalk_1.default.gray(`Found ${data.count} release${data.count !== 1 ? 's' : ''}\n`));
63
+ if (data.count === 0) {
64
+ console.log(chalk_1.default.yellow('No releases found.\n'));
65
+ console.log(chalk_1.default.gray('Upload source maps using: keplog upload --release=v1.0.0 --files="dist/**/*.map"\n'));
66
+ return;
67
+ }
68
+ // Calculate total size across all releases
69
+ let totalSize = 0;
70
+ let totalFiles = 0;
71
+ for (const release of data.releases) {
72
+ totalSize += release.TotalSize;
73
+ totalFiles += release.FileCount;
74
+ }
75
+ // Display releases
76
+ for (const release of data.releases) {
77
+ const size = formatFileSize(release.TotalSize);
78
+ const date = new Date(release.LastModified).toLocaleDateString();
79
+ const fileText = `${release.FileCount} file${release.FileCount !== 1 ? 's' : ''}`;
80
+ console.log(`${chalk_1.default.cyan(release.Release.padEnd(30))} ` +
81
+ `${chalk_1.default.gray(fileText.padEnd(12))} ` +
82
+ `${chalk_1.default.yellow(size.padEnd(12))} ` +
83
+ `${chalk_1.default.dim(date)}`);
84
+ }
85
+ console.log(chalk_1.default.gray(`\nTotal: ${data.count} releases, ${totalFiles} files (${formatFileSize(totalSize)})\n`));
86
+ }
87
+ catch (error) {
88
+ console.error(chalk_1.default.red(`\n✗ Error: ${error.message}\n`));
89
+ process.exit(1);
90
+ }
91
+ });
92
+ function formatFileSize(bytes) {
93
+ if (bytes === 0)
94
+ return '0 B';
95
+ const k = 1024;
96
+ const sizes = ['B', 'KB', 'MB', 'GB'];
97
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
98
+ return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;
99
+ }
100
+ //# sourceMappingURL=releases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"releases.js","sourceRoot":"","sources":["../../src/commands/releases.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAsB;AACtB,gDAAiD;AAcpC,QAAA,eAAe,GAAG,IAAI,mBAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,uBAAuB,EAAE,+BAA+B,CAAC;KAChE,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;KAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,yDAAyD;QACzD,MAAM,MAAM,GAAG,yBAAa,CAAC,SAAS,EAAE,CAAC;QAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,wBAAwB,CAAC;QAE3E,+BAA+B;QAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAe,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,0BAA0B;QAC1B,MAAM,GAAG,GAAG,GAAG,MAAM,wBAAwB,SAAS,sBAAsB,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;aACpB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,KAAK,IAAI,eAAe,IAAI,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAsB,CAAC;QACvD,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAEjD,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAEvF,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oFAAoF,CAAC,CAAC,CAAC;YAC9G,OAAO;QACT,CAAC;QAED,2CAA2C;QAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;YAC/B,UAAU,IAAI,OAAO,CAAC,SAAS,CAAC;QAClC,CAAC;QAED,mBAAmB;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACjE,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,SAAS,QAAQ,OAAO,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAElF,OAAO,CAAC,GAAG,CACT,GAAG,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;gBAC5C,GAAG,eAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;gBACrC,GAAG,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG;gBACnC,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CACrB,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,cAAc,UAAU,WAAW,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const uploadCommand: Command;
3
+ //# sourceMappingURL=upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAsEtB,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.uploadCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const uploader_1 = require("../lib/uploader");
9
+ const config_1 = require("../lib/config");
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ exports.uploadCommand = new commander_1.Command('upload')
12
+ .description('Upload source maps for a specific release')
13
+ .option('-r, --release <version>', 'Release version (e.g., v1.0.0)')
14
+ .option('-f, --files <patterns...>', 'Source map file patterns (supports glob)')
15
+ .option('-p, --project-id <id>', 'Project ID (overrides config)')
16
+ .option('-k, --api-key <key>', 'API Key (overrides config)')
17
+ .option('-u, --api-url <url>', 'API URL (overrides config)')
18
+ .option('-v, --verbose', 'Verbose output')
19
+ .action(async (options) => {
20
+ try {
21
+ // Read config from file (priority: local > global > env)
22
+ const config = config_1.ConfigManager.getConfig();
23
+ // Validate required options
24
+ const release = options.release;
25
+ const files = options.files || [];
26
+ const projectId = options.projectId || config.projectId;
27
+ const apiKey = options.apiKey || config.apiKey;
28
+ const apiUrl = options.apiUrl || config.apiUrl || 'https://api.keplog.com';
29
+ const verbose = options.verbose || false;
30
+ if (!release) {
31
+ console.error(chalk_1.default.red('❌ Error: --release is required'));
32
+ console.log(chalk_1.default.gray('\nExample:'));
33
+ console.log(chalk_1.default.gray(' keplog upload --release=v1.0.0 --files="dist/**/*.map"'));
34
+ process.exit(1);
35
+ }
36
+ if (!files || files.length === 0) {
37
+ console.error(chalk_1.default.red('❌ Error: --files is required'));
38
+ console.log(chalk_1.default.gray('\nExample:'));
39
+ console.log(chalk_1.default.gray(' keplog upload --release=v1.0.0 --files="dist/**/*.map"'));
40
+ process.exit(1);
41
+ }
42
+ if (!projectId) {
43
+ console.error(chalk_1.default.red('❌ Error: Project ID is required'));
44
+ console.log(chalk_1.default.gray('\nOptions:'));
45
+ console.log(chalk_1.default.gray(' 1. Run: keplog init (recommended)'));
46
+ console.log(chalk_1.default.gray(' 2. Use flag: --project-id=<your-project-id>'));
47
+ console.log(chalk_1.default.gray(' 3. Set env: KEPLOG_PROJECT_ID=<your-project-id>'));
48
+ process.exit(1);
49
+ }
50
+ if (!apiKey) {
51
+ console.error(chalk_1.default.red('❌ Error: API Key is required'));
52
+ console.log(chalk_1.default.gray('\nOptions:'));
53
+ console.log(chalk_1.default.gray(' 1. Run: keplog init (recommended)'));
54
+ console.log(chalk_1.default.gray(' 2. Use flag: --api-key=<your-api-key>'));
55
+ console.log(chalk_1.default.gray(' 3. Set env: KEPLOG_API_KEY=<your-api-key>'));
56
+ process.exit(1);
57
+ }
58
+ // Upload source maps
59
+ await (0, uploader_1.uploadSourceMaps)({
60
+ release,
61
+ filePatterns: files,
62
+ projectId,
63
+ apiKey,
64
+ apiUrl,
65
+ verbose,
66
+ });
67
+ }
68
+ catch (error) {
69
+ console.error(chalk_1.default.red(`\n❌ Error: ${error.message}`));
70
+ if (error.stack && process.env.DEBUG) {
71
+ console.error(chalk_1.default.gray(error.stack));
72
+ }
73
+ process.exit(1);
74
+ }
75
+ });
76
+ //# sourceMappingURL=upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const init_js_1 = require("./commands/init.js");
6
+ const upload_js_1 = require("./commands/upload.js");
7
+ const list_js_1 = require("./commands/list.js");
8
+ const delete_js_1 = require("./commands/delete.js");
9
+ const releases_js_1 = require("./commands/releases.js");
10
+ const issues_js_1 = require("./commands/issues.js");
11
+ const dotenv_1 = require("dotenv");
12
+ // Load environment variables from .env file
13
+ (0, dotenv_1.config)();
14
+ const program = new commander_1.Command();
15
+ program
16
+ .name('keplog')
17
+ .description('Official Keplog CLI for error tracking and source map management')
18
+ .version('1.0.0');
19
+ // Add commands
20
+ program.addCommand(init_js_1.initCommand);
21
+ program.addCommand(upload_js_1.uploadCommand);
22
+ program.addCommand(list_js_1.listCommand);
23
+ program.addCommand(delete_js_1.deleteCommand);
24
+ program.addCommand(releases_js_1.releasesCommand);
25
+ program.addCommand(issues_js_1.issuesCommand);
26
+ // Parse command line arguments
27
+ program.parse(process.argv);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,gDAAiD;AACjD,oDAAqD;AACrD,gDAAiD;AACjD,oDAAqD;AACrD,wDAAyD;AACzD,oDAAqD;AACrD,mCAAgC;AAEhC,4CAA4C;AAC5C,IAAA,eAAM,GAAE,CAAC;AAET,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,qBAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,6BAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,yBAAa,CAAC,CAAC;AAElC,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,57 @@
1
+ export interface KeplogConfig {
2
+ projectId?: string;
3
+ apiKey?: string;
4
+ apiUrl?: string;
5
+ projectName?: string;
6
+ }
7
+ /**
8
+ * Config Manager for Keplog CLI
9
+ *
10
+ * Priority order:
11
+ * 1. Local .keplog.json (project-specific)
12
+ * 2. Global ~/.keplogrc (user-level)
13
+ * 3. Environment variables (KEPLOG_PROJECT_ID, KEPLOG_API_KEY)
14
+ */
15
+ export declare class ConfigManager {
16
+ /**
17
+ * Find the nearest .keplog.json file by walking up the directory tree
18
+ */
19
+ private static findLocalConfigPath;
20
+ /**
21
+ * Read configuration from local or global config file
22
+ */
23
+ static readConfig(): KeplogConfig;
24
+ /**
25
+ * Write configuration to local .keplog.json file
26
+ */
27
+ static writeLocalConfig(config: KeplogConfig, dir?: string): void;
28
+ /**
29
+ * Write configuration to global ~/.keplogrc file
30
+ */
31
+ static writeGlobalConfig(config: KeplogConfig): void;
32
+ /**
33
+ * Get configuration with priority: local > global > env vars
34
+ */
35
+ static getConfig(): KeplogConfig;
36
+ /**
37
+ * Check if local config exists in current directory or parent directories
38
+ */
39
+ static hasLocalConfig(): boolean;
40
+ /**
41
+ * Check if global config exists
42
+ */
43
+ static hasGlobalConfig(): boolean;
44
+ /**
45
+ * Get the path of the local config file (if it exists)
46
+ */
47
+ static getLocalConfigPath(): string | null;
48
+ /**
49
+ * Delete local config
50
+ */
51
+ static deleteLocalConfig(dir?: string): void;
52
+ /**
53
+ * Delete global config
54
+ */
55
+ static deleteGlobalConfig(): void;
56
+ }
57
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD;;;;;;;GAOG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAelC;;OAEG;IACH,MAAM,CAAC,UAAU,IAAI,YAAY;IAyBjC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,GAAE,MAAsB,GAAG,IAAI;IAKhF;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAIpD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,YAAY;IAWhC;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,OAAO;IAIhC;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,OAAO;IAIjC;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,MAAM,GAAG,IAAI;IAI1C;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,IAAI;IAO3D;;OAEG;IACH,MAAM,CAAC,kBAAkB,IAAI,IAAI;CAKlC"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConfigManager = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os_1 = require("os");
40
+ const CONFIG_FILENAME = '.keplog.json';
41
+ const GLOBAL_CONFIG_PATH = path.join((0, os_1.homedir)(), '.keplogrc');
42
+ /**
43
+ * Config Manager for Keplog CLI
44
+ *
45
+ * Priority order:
46
+ * 1. Local .keplog.json (project-specific)
47
+ * 2. Global ~/.keplogrc (user-level)
48
+ * 3. Environment variables (KEPLOG_PROJECT_ID, KEPLOG_API_KEY)
49
+ */
50
+ class ConfigManager {
51
+ /**
52
+ * Find the nearest .keplog.json file by walking up the directory tree
53
+ */
54
+ static findLocalConfigPath(startDir = process.cwd()) {
55
+ let currentDir = startDir;
56
+ const root = path.parse(currentDir).root;
57
+ while (currentDir !== root) {
58
+ const configPath = path.join(currentDir, CONFIG_FILENAME);
59
+ if (fs.existsSync(configPath)) {
60
+ return configPath;
61
+ }
62
+ currentDir = path.dirname(currentDir);
63
+ }
64
+ return null;
65
+ }
66
+ /**
67
+ * Read configuration from local or global config file
68
+ */
69
+ static readConfig() {
70
+ // Try local config first
71
+ const localConfigPath = this.findLocalConfigPath();
72
+ if (localConfigPath) {
73
+ try {
74
+ const content = fs.readFileSync(localConfigPath, 'utf-8');
75
+ return JSON.parse(content);
76
+ }
77
+ catch (error) {
78
+ console.warn(`Warning: Failed to read config from ${localConfigPath}`);
79
+ }
80
+ }
81
+ // Try global config
82
+ if (fs.existsSync(GLOBAL_CONFIG_PATH)) {
83
+ try {
84
+ const content = fs.readFileSync(GLOBAL_CONFIG_PATH, 'utf-8');
85
+ return JSON.parse(content);
86
+ }
87
+ catch (error) {
88
+ console.warn(`Warning: Failed to read global config from ${GLOBAL_CONFIG_PATH}`);
89
+ }
90
+ }
91
+ return {};
92
+ }
93
+ /**
94
+ * Write configuration to local .keplog.json file
95
+ */
96
+ static writeLocalConfig(config, dir = process.cwd()) {
97
+ const configPath = path.join(dir, CONFIG_FILENAME);
98
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
99
+ }
100
+ /**
101
+ * Write configuration to global ~/.keplogrc file
102
+ */
103
+ static writeGlobalConfig(config) {
104
+ fs.writeFileSync(GLOBAL_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');
105
+ }
106
+ /**
107
+ * Get configuration with priority: local > global > env vars
108
+ */
109
+ static getConfig() {
110
+ const fileConfig = this.readConfig();
111
+ return {
112
+ projectId: fileConfig.projectId || process.env.KEPLOG_PROJECT_ID,
113
+ apiKey: fileConfig.apiKey || process.env.KEPLOG_API_KEY,
114
+ apiUrl: fileConfig.apiUrl || process.env.KEPLOG_API_URL || 'https://api.keplog.com',
115
+ projectName: fileConfig.projectName,
116
+ };
117
+ }
118
+ /**
119
+ * Check if local config exists in current directory or parent directories
120
+ */
121
+ static hasLocalConfig() {
122
+ return this.findLocalConfigPath() !== null;
123
+ }
124
+ /**
125
+ * Check if global config exists
126
+ */
127
+ static hasGlobalConfig() {
128
+ return fs.existsSync(GLOBAL_CONFIG_PATH);
129
+ }
130
+ /**
131
+ * Get the path of the local config file (if it exists)
132
+ */
133
+ static getLocalConfigPath() {
134
+ return this.findLocalConfigPath();
135
+ }
136
+ /**
137
+ * Delete local config
138
+ */
139
+ static deleteLocalConfig(dir = process.cwd()) {
140
+ const configPath = path.join(dir, CONFIG_FILENAME);
141
+ if (fs.existsSync(configPath)) {
142
+ fs.unlinkSync(configPath);
143
+ }
144
+ }
145
+ /**
146
+ * Delete global config
147
+ */
148
+ static deleteGlobalConfig() {
149
+ if (fs.existsSync(GLOBAL_CONFIG_PATH)) {
150
+ fs.unlinkSync(GLOBAL_CONFIG_PATH);
151
+ }
152
+ }
153
+ }
154
+ exports.ConfigManager = ConfigManager;
155
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ interface UploadOptions {
2
+ release: string;
3
+ filePatterns: string[];
4
+ projectId: string;
5
+ apiKey: string;
6
+ apiUrl: string;
7
+ verbose: boolean;
8
+ }
9
+ export declare function uploadSourceMaps(options: UploadOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/lib/uploader.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAUD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsI5E"}