@nathapp/koda-cli 0.0.1

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 (65) hide show
  1. package/dist/client.d.ts +9 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +23 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/commands/agent.d.ts +3 -0
  6. package/dist/commands/agent.d.ts.map +1 -0
  7. package/dist/commands/agent.js +91 -0
  8. package/dist/commands/agent.js.map +1 -0
  9. package/dist/commands/comment.d.ts +3 -0
  10. package/dist/commands/comment.d.ts.map +1 -0
  11. package/dist/commands/comment.js +57 -0
  12. package/dist/commands/comment.js.map +1 -0
  13. package/dist/commands/config.d.ts +14 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +20 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/kb.d.ts +3 -0
  18. package/dist/commands/kb.d.ts.map +1 -0
  19. package/dist/commands/kb.js +137 -0
  20. package/dist/commands/kb.js.map +1 -0
  21. package/dist/commands/label.d.ts +3 -0
  22. package/dist/commands/label.d.ts.map +1 -0
  23. package/dist/commands/label.js +105 -0
  24. package/dist/commands/label.js.map +1 -0
  25. package/dist/commands/login.d.ts +6 -0
  26. package/dist/commands/login.d.ts.map +1 -0
  27. package/dist/commands/login.js +26 -0
  28. package/dist/commands/login.js.map +1 -0
  29. package/dist/commands/project.d.ts +3 -0
  30. package/dist/commands/project.d.ts.map +1 -0
  31. package/dist/commands/project.js +148 -0
  32. package/dist/commands/project.js.map +1 -0
  33. package/dist/commands/ticket.d.ts +3 -0
  34. package/dist/commands/ticket.d.ts.map +1 -0
  35. package/dist/commands/ticket.js +538 -0
  36. package/dist/commands/ticket.js.map +1 -0
  37. package/dist/config.d.ts +9 -0
  38. package/dist/config.d.ts.map +1 -0
  39. package/dist/config.js +68 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/generated.d.ts +185 -0
  42. package/dist/generated.d.ts.map +1 -0
  43. package/dist/generated.js +119 -0
  44. package/dist/generated.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +135 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/utils/api.d.ts +10 -0
  50. package/dist/utils/api.d.ts.map +1 -0
  51. package/dist/utils/api.js +32 -0
  52. package/dist/utils/api.js.map +1 -0
  53. package/dist/utils/auth.d.ts +9 -0
  54. package/dist/utils/auth.d.ts.map +1 -0
  55. package/dist/utils/auth.js +14 -0
  56. package/dist/utils/auth.js.map +1 -0
  57. package/dist/utils/error.d.ts +14 -0
  58. package/dist/utils/error.d.ts.map +1 -0
  59. package/dist/utils/error.js +42 -0
  60. package/dist/utils/error.js.map +1 -0
  61. package/dist/utils/output.d.ts +28 -0
  62. package/dist/utils/output.d.ts.map +1 -0
  63. package/dist/utils/output.js +80 -0
  64. package/dist/utils/output.js.map +1 -0
  65. package/package.json +38 -0
@@ -0,0 +1,185 @@
1
+ import { AxiosInstance } from 'axios';
2
+ export interface Project {
3
+ id: string;
4
+ name: string;
5
+ key: string;
6
+ slug: string;
7
+ description?: string;
8
+ }
9
+ export interface Comment {
10
+ id: string;
11
+ body: string;
12
+ type: 'verification' | 'fix_report' | 'review' | 'general';
13
+ ticketId: string;
14
+ createdAt: string;
15
+ author?: {
16
+ id?: string;
17
+ name: string;
18
+ slug?: string;
19
+ };
20
+ }
21
+ export interface Agent {
22
+ id: string;
23
+ name: string;
24
+ slug: string;
25
+ apiKey: string;
26
+ }
27
+ type Wrapped<T> = {
28
+ ret: number;
29
+ data: T;
30
+ };
31
+ export declare class ProjectsService {
32
+ static list(client: AxiosInstance): Promise<Wrapped<{
33
+ items: Project[];
34
+ total: number;
35
+ }>>;
36
+ static show(client: AxiosInstance, slug: string): Promise<Wrapped<Project>>;
37
+ static create(client: AxiosInstance, data: {
38
+ name: string;
39
+ slug: string;
40
+ key: string;
41
+ description?: string;
42
+ }): Promise<Wrapped<Project>>;
43
+ static delete(client: AxiosInstance, slug: string): Promise<Wrapped<null>>;
44
+ }
45
+ export declare class CommentsService {
46
+ static add(client: AxiosInstance, projectSlug: string, ref: string, data: {
47
+ body: string;
48
+ type?: 'verification' | 'fix_report' | 'review' | 'general';
49
+ }): Promise<Wrapped<Comment>>;
50
+ }
51
+ export interface Ticket {
52
+ id: string;
53
+ number: number;
54
+ ref?: string;
55
+ projectId?: string;
56
+ projectKey?: string;
57
+ type: 'bug' | 'enhancement';
58
+ title: string;
59
+ description?: string;
60
+ status: string;
61
+ priority?: 'low' | 'medium' | 'high' | 'critical';
62
+ assignee?: {
63
+ id: string;
64
+ slug: string;
65
+ name: string;
66
+ } | null;
67
+ createdAt: string;
68
+ updatedAt?: string;
69
+ comments?: Comment[];
70
+ }
71
+ export declare class TicketsService {
72
+ static create(client: AxiosInstance, projectSlug: string, data: {
73
+ type: string;
74
+ title: string;
75
+ description?: string;
76
+ priority?: string;
77
+ }): Promise<Wrapped<Ticket>>;
78
+ static list(client: AxiosInstance, params: {
79
+ projectSlug: string;
80
+ status?: string;
81
+ type?: string;
82
+ priority?: string;
83
+ assignedTo?: string;
84
+ unassigned?: boolean;
85
+ limit?: number;
86
+ page?: number;
87
+ }): Promise<Wrapped<{
88
+ items: Ticket[];
89
+ total: number;
90
+ }>>;
91
+ static show(client: AxiosInstance, projectSlug: string, ref: string): Promise<Wrapped<Ticket>>;
92
+ static verify(client: AxiosInstance, projectSlug: string, ref: string, data: {
93
+ body: string;
94
+ type?: string;
95
+ }): Promise<Wrapped<Ticket>>;
96
+ static assign(client: AxiosInstance, projectSlug: string, ref: string, data: {
97
+ agentSlug: string;
98
+ }): Promise<Wrapped<Ticket>>;
99
+ static start(client: AxiosInstance, projectSlug: string, ref: string): Promise<Wrapped<Ticket>>;
100
+ static fix(client: AxiosInstance, projectSlug: string, ref: string, data: {
101
+ body: string;
102
+ type?: string;
103
+ gitRef?: string;
104
+ }): Promise<Wrapped<Ticket>>;
105
+ static verifyFix(client: AxiosInstance, projectSlug: string, ref: string, data: {
106
+ body: string;
107
+ type?: string;
108
+ status: string;
109
+ }): Promise<Wrapped<Ticket>>;
110
+ static close(client: AxiosInstance, projectSlug: string, ref: string): Promise<Wrapped<Ticket>>;
111
+ static reject(client: AxiosInstance, projectSlug: string, ref: string, data: {
112
+ body: string;
113
+ type?: string;
114
+ }): Promise<Wrapped<Ticket>>;
115
+ static update(client: AxiosInstance, projectSlug: string, ref: string, data: {
116
+ title?: string;
117
+ description?: string;
118
+ priority?: string;
119
+ }): Promise<Wrapped<Ticket>>;
120
+ static delete(client: AxiosInstance, projectSlug: string, ref: string): Promise<Wrapped<null>>;
121
+ }
122
+ export interface PickupResult {
123
+ ticket: Ticket;
124
+ matchScore: number;
125
+ matchedCapabilities: string[];
126
+ }
127
+ export declare class AgentService {
128
+ static me(client: AxiosInstance): Promise<Wrapped<Agent>>;
129
+ static pickup(client: AxiosInstance, agentSlug: string, projectSlug: string): Promise<Wrapped<PickupResult | null>>;
130
+ }
131
+ export interface KbSearchResult {
132
+ score: number;
133
+ ticketRef: string;
134
+ type: 'bug' | 'enhancement';
135
+ status: string;
136
+ labels: string[];
137
+ }
138
+ export interface KbSearchResponse {
139
+ verdict: 'RELEVANT' | 'PARTIAL' | 'NOT_FOUND';
140
+ confidence: number;
141
+ results: KbSearchResult[];
142
+ }
143
+ export interface KbDocument {
144
+ id: string;
145
+ source: string;
146
+ createdAt: string;
147
+ }
148
+ export interface KbAddResponse {
149
+ id: string;
150
+ source: string;
151
+ docCount: number;
152
+ }
153
+ export declare class KbService {
154
+ static search(client: AxiosInstance, projectSlug: string, query: string): Promise<Wrapped<KbSearchResponse>>;
155
+ static list(client: AxiosInstance, projectSlug: string): Promise<Wrapped<{
156
+ items: KbDocument[];
157
+ total: number;
158
+ }>>;
159
+ static add(client: AxiosInstance, projectSlug: string, data: {
160
+ content: string;
161
+ source: string;
162
+ }): Promise<Wrapped<KbAddResponse>>;
163
+ }
164
+ export interface Label {
165
+ id: string;
166
+ name: string;
167
+ color?: string;
168
+ projectId: string;
169
+ }
170
+ export declare class LabelsService {
171
+ static create(client: AxiosInstance, data: {
172
+ projectSlug: string;
173
+ name: string;
174
+ color?: string;
175
+ }): Promise<Wrapped<Label>>;
176
+ static list(client: AxiosInstance, projectSlug: string): Promise<Wrapped<{
177
+ items: Label[];
178
+ total: number;
179
+ }>>;
180
+ static delete(client: AxiosInstance, projectSlug: string, id: string): Promise<Wrapped<null>>;
181
+ static addToTicket(client: AxiosInstance, projectSlug: string, ref: string, labelId: string): Promise<Wrapped<null>>;
182
+ static removeFromTicket(client: AxiosInstance, projectSlug: string, ref: string, labelId: string): Promise<Wrapped<null>>;
183
+ }
184
+ export {};
185
+ //# sourceMappingURL=generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../src/generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ // This file is a stub - normally generated from OpenAPI spec
4
+ // In production, use: bun run generate
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LabelsService = exports.KbService = exports.AgentService = exports.TicketsService = exports.CommentsService = exports.ProjectsService = void 0;
7
+ class ProjectsService {
8
+ static async list(client) {
9
+ return client.get('/projects');
10
+ }
11
+ static async show(client, slug) {
12
+ return client.get(`/projects/${slug}`);
13
+ }
14
+ static async create(client, data) {
15
+ return client.post('/projects', data);
16
+ }
17
+ static async delete(client, slug) {
18
+ return client.delete(`/projects/${slug}`);
19
+ }
20
+ }
21
+ exports.ProjectsService = ProjectsService;
22
+ class CommentsService {
23
+ static async add(client, projectSlug, ref, data) {
24
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/comments`, data);
25
+ }
26
+ }
27
+ exports.CommentsService = CommentsService;
28
+ class TicketsService {
29
+ static async create(client, projectSlug, data) {
30
+ return client.post(`/projects/${projectSlug}/tickets`, data);
31
+ }
32
+ static async list(client, params) {
33
+ const { projectSlug, ...rest } = params;
34
+ return client.get(`/projects/${projectSlug}/tickets`, { params: rest });
35
+ }
36
+ static async show(client, projectSlug, ref) {
37
+ return client.get(`/projects/${projectSlug}/tickets/${ref}`);
38
+ }
39
+ static async verify(client, projectSlug, ref, data) {
40
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/verify`, data);
41
+ }
42
+ static async assign(client, projectSlug, ref, data) {
43
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/assign`, data);
44
+ }
45
+ static async start(client, projectSlug, ref) {
46
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/start`);
47
+ }
48
+ static async fix(client, projectSlug, ref, data) {
49
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/fix`, data);
50
+ }
51
+ static async verifyFix(client, projectSlug, ref, data) {
52
+ const approve = data.status === 'closed';
53
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/verify-fix?approve=${approve}`, data);
54
+ }
55
+ static async close(client, projectSlug, ref) {
56
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/close`);
57
+ }
58
+ static async reject(client, projectSlug, ref, data) {
59
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/reject`, data);
60
+ }
61
+ static async update(client, projectSlug, ref, data) {
62
+ return client.patch(`/projects/${projectSlug}/tickets/${ref}`, data);
63
+ }
64
+ static async delete(client, projectSlug, ref) {
65
+ return client.delete(`/projects/${projectSlug}/tickets/${ref}`);
66
+ }
67
+ }
68
+ exports.TicketsService = TicketsService;
69
+ class AgentService {
70
+ static async me(client) {
71
+ return client.get('/agents/me');
72
+ }
73
+ static async pickup(client, agentSlug, projectSlug) {
74
+ return client.get(`/agents/${agentSlug}/pickup`, { params: { project: projectSlug } });
75
+ }
76
+ }
77
+ exports.AgentService = AgentService;
78
+ class KbService {
79
+ static async search(client, projectSlug, query) {
80
+ // API: POST /api/projects/{slug}/kb/search with { query }
81
+ const resp = await client.post(`/projects/${projectSlug}/kb/search`, { query });
82
+ return { ret: 0, data: resp };
83
+ }
84
+ static async list(client, projectSlug) {
85
+ // API: GET /api/projects/{slug}/kb/documents
86
+ const resp = await client.get(`/projects/${projectSlug}/kb/documents`);
87
+ return { ret: 0, data: resp };
88
+ }
89
+ static async add(client, projectSlug, data) {
90
+ // API: POST /api/projects/{slug}/kb/documents with { source, sourceId, content }
91
+ const sourceId = data.source; // use filename as sourceId
92
+ const resp = await client.post(`/projects/${projectSlug}/kb/documents`, {
93
+ source: data.source,
94
+ sourceId,
95
+ content: data.content,
96
+ });
97
+ return { ret: 0, data: resp };
98
+ }
99
+ }
100
+ exports.KbService = KbService;
101
+ class LabelsService {
102
+ static async create(client, data) {
103
+ return client.post(`/projects/${data.projectSlug}/labels`, { name: data.name, color: data.color });
104
+ }
105
+ static async list(client, projectSlug) {
106
+ return client.get(`/projects/${projectSlug}/labels`);
107
+ }
108
+ static async delete(client, projectSlug, id) {
109
+ return client.delete(`/projects/${projectSlug}/labels/${id}`);
110
+ }
111
+ static async addToTicket(client, projectSlug, ref, labelId) {
112
+ return client.post(`/projects/${projectSlug}/tickets/${ref}/labels`, { labelId });
113
+ }
114
+ static async removeFromTicket(client, projectSlug, ref, labelId) {
115
+ return client.delete(`/projects/${projectSlug}/tickets/${ref}/labels/${labelId}`);
116
+ }
117
+ }
118
+ exports.LabelsService = LabelsService;
119
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../src/generated.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,135 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const login_1 = require("./commands/login");
8
+ const config_1 = require("./commands/config");
9
+ const project_1 = require("./commands/project");
10
+ const ticket_1 = require("./commands/ticket");
11
+ const comment_1 = require("./commands/comment");
12
+ const agent_1 = require("./commands/agent");
13
+ const label_1 = require("./commands/label");
14
+ const kb_1 = require("./commands/kb");
15
+ // Read package.json to get version
16
+ let version = '0.1.0';
17
+ try {
18
+ const packageJsonPath = (0, path_1.join)(__dirname, '../package.json');
19
+ const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
20
+ version = packageJson.version;
21
+ }
22
+ catch {
23
+ // Use default version if package.json not found
24
+ }
25
+ const program = new commander_1.Command();
26
+ program
27
+ .name('koda')
28
+ .description('CLI for Koda — dev ticket tracker')
29
+ .version(version);
30
+ // Login command
31
+ program
32
+ .command('login')
33
+ .description('Save API credentials locally')
34
+ .requiredOption('--api-key <key>', 'API key for authentication')
35
+ .option('--api-url <url>', 'API URL (default: http://localhost:3100/api)')
36
+ .action(async (options) => {
37
+ try {
38
+ const result = await (0, login_1.loginCommand)(options.apiKey, options.apiUrl, {});
39
+ console.log(result.message);
40
+ process.exit(0);
41
+ }
42
+ catch (error) {
43
+ const errorMessage = error instanceof Error ? error.message : String(error);
44
+ console.error(`Error: ${errorMessage}`);
45
+ process.exit(2);
46
+ }
47
+ });
48
+ // Config command
49
+ program
50
+ .command('config')
51
+ .description('Manage configuration')
52
+ .addCommand(new commander_1.Command('show')
53
+ .description('Display current configuration')
54
+ .action(() => {
55
+ try {
56
+ const config = (0, config_1.configShow)();
57
+ console.log('API Key: ' + config.apiKey);
58
+ console.log('API URL: ' + (config.apiUrl || '(not set)'));
59
+ process.exit(0);
60
+ }
61
+ catch (error) {
62
+ const errorMessage = error instanceof Error ? error.message : String(error);
63
+ console.error(`Error: ${errorMessage}`);
64
+ process.exit(2);
65
+ }
66
+ }))
67
+ .addCommand(new commander_1.Command('set')
68
+ .description('Update configuration')
69
+ .option('--api-key <key>', 'API key')
70
+ .option('--api-url <url>', 'API URL')
71
+ .action((options) => {
72
+ try {
73
+ if (!options.apiKey && !options.apiUrl) {
74
+ throw new Error('Must provide at least one option: --api-key or --api-url');
75
+ }
76
+ const result = (0, config_1.configSet)({
77
+ apiKey: options.apiKey,
78
+ apiUrl: options.apiUrl,
79
+ });
80
+ console.log(result.message);
81
+ process.exit(0);
82
+ }
83
+ catch (error) {
84
+ const errorMessage = error instanceof Error ? error.message : String(error);
85
+ console.error(`Error: ${errorMessage}`);
86
+ process.exit(2);
87
+ }
88
+ }));
89
+ // Version command
90
+ program
91
+ .command('version')
92
+ .description('Print CLI version')
93
+ .action(() => {
94
+ console.log(version);
95
+ process.exit(0);
96
+ });
97
+ // Project command
98
+ (0, project_1.projectCommand)(program);
99
+ // Ticket command
100
+ (0, ticket_1.ticketCommand)(program);
101
+ // Comment command
102
+ (0, comment_1.commentCommand)(program);
103
+ // Agent command
104
+ (0, agent_1.agentCommand)(program);
105
+ // Label command
106
+ (0, label_1.labelCommand)(program);
107
+ // KB command
108
+ (0, kb_1.kbCommand)(program);
109
+ // Global error handling for uncaught exceptions
110
+ process.on('uncaughtException', (error) => {
111
+ console.error('Uncaught Exception:', error.message);
112
+ process.exit(1);
113
+ });
114
+ // Global error handling for unhandled promise rejections
115
+ process.on('unhandledRejection', (reason) => {
116
+ const message = reason instanceof Error ? reason.message : String(reason);
117
+ console.error('Unhandled Rejection:', message);
118
+ process.exit(1);
119
+ });
120
+ // Graceful shutdown on SIGINT (Ctrl+C)
121
+ process.on('SIGINT', () => {
122
+ console.log('\nShutting down gracefully...');
123
+ process.exit(0);
124
+ });
125
+ // Graceful shutdown on SIGTERM (kill signal)
126
+ process.on('SIGTERM', () => {
127
+ console.log('\nShutting down gracefully...');
128
+ process.exit(0);
129
+ });
130
+ program.parse(process.argv);
131
+ // Show help if no command provided
132
+ if (!process.argv.slice(2).length) {
133
+ program.outputHelp();
134
+ }
135
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface ApiEnvelope<T> {
2
+ ret: number;
3
+ data: T;
4
+ }
5
+ export declare function unwrap<T>(response: ApiEnvelope<T>): T;
6
+ export declare function unwrap<T>(response: {
7
+ data: ApiEnvelope<T>;
8
+ }): T;
9
+ export {};
10
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW,CAAC,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;CACT;AAwBD,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvD,wBAAgB,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unwrap = unwrap;
4
+ function isEnvelope(value) {
5
+ return (typeof value === 'object' &&
6
+ value !== null &&
7
+ 'ret' in value &&
8
+ typeof value.ret === 'number' &&
9
+ 'data' in value);
10
+ }
11
+ function toEnvelope(response) {
12
+ if (isEnvelope(response)) {
13
+ return response;
14
+ }
15
+ if (isEnvelope(response.data)) {
16
+ return response.data;
17
+ }
18
+ return { ret: -1, data: undefined };
19
+ }
20
+ function unwrap(response) {
21
+ const envelope = toEnvelope(response);
22
+ if (envelope.ret !== 0) {
23
+ const err = new Error(`exception.${envelope.ret}`);
24
+ err.response = {
25
+ status: 400, // Treat as validation/business error
26
+ data: { message: `exception.${envelope.ret}` }
27
+ };
28
+ throw err;
29
+ }
30
+ return envelope.data;
31
+ }
32
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/utils/api.ts"],"names":[],"mappings":";;AAoCA,wBAaC;AArCD,SAAS,UAAU,CAAI,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,IAAI,KAAK;QACd,OAAQ,KAA0B,CAAC,GAAG,KAAK,QAAQ;QACnD,MAAM,IAAI,KAAK,CAChB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAI,QAAmD;IACxE,IAAI,UAAU,CAAI,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,UAAU,CAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAc,EAAE,CAAC;AAC3C,CAAC;AAID,SAAgB,MAAM,CAAI,QAAmD;IAC3E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEtC,IAAI,QAAQ,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,GAAG,EAAE,CAAyB,CAAC;QAC3E,GAAG,CAAC,QAAQ,GAAG;YACb,MAAM,EAAE,GAAG,EAAE,qCAAqC;YAClD,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,QAAQ,CAAC,GAAG,EAAE,EAAE;SAC/C,CAAC;QACF,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface AuthResolution {
2
+ apiKey: string;
3
+ apiUrl: string;
4
+ }
5
+ export declare function resolveAuth(options: {
6
+ apiKey?: string;
7
+ apiUrl?: string;
8
+ }): AuthResolution;
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,cAAc,CAYjB"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveAuth = resolveAuth;
4
+ const config_1 = require("../config");
5
+ function resolveAuth(options) {
6
+ const config = (0, config_1.getConfig)();
7
+ const apiKey = options.apiKey || process.env.KODA_API_KEY || config.apiKey || '';
8
+ const apiUrl = options.apiUrl ||
9
+ process.env.KODA_API_URL ||
10
+ config.apiUrl ||
11
+ 'http://localhost:3100/api';
12
+ return { apiKey, apiUrl };
13
+ }
14
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/utils/auth.ts"],"names":[],"mappings":";;AAOA,kCAeC;AAtBD,sCAAsC;AAOtC,SAAgB,WAAW,CAAC,OAG3B;IACC,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEjF,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,MAAM,CAAC,MAAM;QACb,2BAA2B,CAAC;IAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface HandleApiErrorOpts {
2
+ notFoundMessage?: string;
3
+ }
4
+ /**
5
+ * Handle API errors and exit with appropriate code.
6
+ * Exit codes:
7
+ * - 1: general API error (5xx, unknown)
8
+ * - 2: auth error (401, 403)
9
+ * - 3: validation error (400)
10
+ * - 4: not found (404)
11
+ */
12
+ export declare function handleApiError(err: unknown, opts?: HandleApiErrorOpts): never;
13
+ export {};
14
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAYA,UAAU,kBAAkB;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,KAAK,CA+B7E"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleApiError = handleApiError;
4
+ const output_1 = require("./output");
5
+ /**
6
+ * Handle API errors and exit with appropriate code.
7
+ * Exit codes:
8
+ * - 1: general API error (5xx, unknown)
9
+ * - 2: auth error (401, 403)
10
+ * - 3: validation error (400)
11
+ * - 4: not found (404)
12
+ */
13
+ function handleApiError(err, opts) {
14
+ const apiError = err;
15
+ const status = apiError.response?.status;
16
+ let errorMessage = '';
17
+ if (apiError.response?.data?.message) {
18
+ errorMessage = apiError.response.data.message;
19
+ }
20
+ else if (apiError.message) {
21
+ errorMessage = apiError.message;
22
+ }
23
+ else {
24
+ errorMessage = 'Unknown error';
25
+ }
26
+ if (status === 401 || status === 403) {
27
+ (0, output_1.error)(errorMessage);
28
+ (0, output_1.error)('Check your API key: koda config set apiKey <key>');
29
+ process.exit(2);
30
+ }
31
+ if (status === 400) {
32
+ (0, output_1.error)(errorMessage);
33
+ process.exit(3);
34
+ }
35
+ if (status === 404) {
36
+ (0, output_1.error)(opts?.notFoundMessage ?? 'Not found');
37
+ process.exit(4);
38
+ }
39
+ (0, output_1.error)(errorMessage);
40
+ process.exit(1);
41
+ }
42
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":";;AAwBA,wCA+BC;AAvDD,qCAA+C;AAgB/C;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,GAAY,EAAE,IAAyB;IACpE,MAAM,QAAQ,GAAG,GAAuB,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAEzC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACrC,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;IAChD,CAAC;SAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5B,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,eAAe,CAAC;IACjC,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,IAAA,cAAU,EAAC,YAAY,CAAC,CAAC;QACzB,IAAA,cAAU,EAAC,kDAAkD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAA,cAAU,EAAC,YAAY,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,IAAA,cAAU,EAAC,IAAI,EAAE,eAAe,IAAI,WAAW,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAA,cAAU,EAAC,YAAY,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}