kibela-api-client 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 (84) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +274 -0
  3. package/bin/kibela.js +2 -0
  4. package/dist/cli/_error-handler.d.ts +9 -0
  5. package/dist/cli/_error-handler.d.ts.map +1 -0
  6. package/dist/cli/_error-handler.js +77 -0
  7. package/dist/cli/_error-handler.js.map +1 -0
  8. package/dist/cli/_validators.d.ts +44 -0
  9. package/dist/cli/_validators.d.ts.map +1 -0
  10. package/dist/cli/_validators.js +70 -0
  11. package/dist/cli/_validators.js.map +1 -0
  12. package/dist/cli/commands/config.d.ts +3 -0
  13. package/dist/cli/commands/config.d.ts.map +1 -0
  14. package/dist/cli/commands/config.js +81 -0
  15. package/dist/cli/commands/config.js.map +1 -0
  16. package/dist/cli/commands/groups.d.ts +3 -0
  17. package/dist/cli/commands/groups.d.ts.map +1 -0
  18. package/dist/cli/commands/groups.js +57 -0
  19. package/dist/cli/commands/groups.js.map +1 -0
  20. package/dist/cli/commands/notes.d.ts +3 -0
  21. package/dist/cli/commands/notes.d.ts.map +1 -0
  22. package/dist/cli/commands/notes.js +223 -0
  23. package/dist/cli/commands/notes.js.map +1 -0
  24. package/dist/cli/commands/stats.d.ts +3 -0
  25. package/dist/cli/commands/stats.d.ts.map +1 -0
  26. package/dist/cli/commands/stats.js +71 -0
  27. package/dist/cli/commands/stats.js.map +1 -0
  28. package/dist/cli/commands/test.d.ts +3 -0
  29. package/dist/cli/commands/test.d.ts.map +1 -0
  30. package/dist/cli/commands/test.js +19 -0
  31. package/dist/cli/commands/test.js.map +1 -0
  32. package/dist/cli/commands/users.d.ts +3 -0
  33. package/dist/cli/commands/users.d.ts.map +1 -0
  34. package/dist/cli/commands/users.js +77 -0
  35. package/dist/cli/commands/users.js.map +1 -0
  36. package/dist/cli/config.d.ts +19 -0
  37. package/dist/cli/config.d.ts.map +1 -0
  38. package/dist/cli/config.js +93 -0
  39. package/dist/cli/config.js.map +1 -0
  40. package/dist/cli/index.d.ts +3 -0
  41. package/dist/cli/index.d.ts.map +1 -0
  42. package/dist/cli/index.js +19 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/cli/utils.d.ts +11 -0
  45. package/dist/cli/utils.d.ts.map +1 -0
  46. package/dist/cli/utils.js +62 -0
  47. package/dist/cli/utils.js.map +1 -0
  48. package/dist/client/index.d.ts +9 -0
  49. package/dist/client/index.d.ts.map +1 -0
  50. package/dist/client/index.js +33 -0
  51. package/dist/client/index.js.map +1 -0
  52. package/dist/index.d.ts +15 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +39 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/queries/groups.d.ts +3 -0
  57. package/dist/queries/groups.d.ts.map +1 -0
  58. package/dist/queries/groups.js +36 -0
  59. package/dist/queries/groups.js.map +1 -0
  60. package/dist/queries/notes.d.ts +7 -0
  61. package/dist/queries/notes.d.ts.map +1 -0
  62. package/dist/queries/notes.js +188 -0
  63. package/dist/queries/notes.js.map +1 -0
  64. package/dist/queries/users.d.ts +3 -0
  65. package/dist/queries/users.d.ts.map +1 -0
  66. package/dist/queries/users.js +42 -0
  67. package/dist/queries/users.js.map +1 -0
  68. package/dist/resources/groups.d.ts +13 -0
  69. package/dist/resources/groups.d.ts.map +1 -0
  70. package/dist/resources/groups.js +38 -0
  71. package/dist/resources/groups.js.map +1 -0
  72. package/dist/resources/notes.d.ts +23 -0
  73. package/dist/resources/notes.d.ts.map +1 -0
  74. package/dist/resources/notes.js +55 -0
  75. package/dist/resources/notes.js.map +1 -0
  76. package/dist/resources/users.d.ts +13 -0
  77. package/dist/resources/users.d.ts.map +1 -0
  78. package/dist/resources/users.js +38 -0
  79. package/dist/resources/users.js.map +1 -0
  80. package/dist/types/index.d.ts +70 -0
  81. package/dist/types/index.d.ts.map +1 -0
  82. package/dist/types/index.js +3 -0
  83. package/dist/types/index.js.map +1 -0
  84. package/package.json +61 -0
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ MIT License
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,274 @@
1
+ # kibela-api-client
2
+
3
+ [![npm version](https://img.shields.io/npm/v/kibela-api-client.svg)](https://www.npmjs.com/package/kibela-api-client)
4
+ [![npm downloads](https://img.shields.io/npm/dm/kibela-api-client.svg)](https://www.npmjs.com/package/kibela-api-client)
5
+ [![npm downloads total](https://img.shields.io/npm/dt/kibela-api-client.svg)](https://www.npmjs.com/package/kibela-api-client)
6
+ [![Bundle Size](https://img.shields.io/bundlephobia/minzip/kibela-api-client)](https://bundlephobia.com/package/kibela-api-client)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
+ [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
9
+ [![Node version](https://img.shields.io/node/v/kibela-api-client.svg)](https://nodejs.org)
10
+
11
+ A modern TypeScript client for the Kibela API with CLI support.
12
+
13
+ ## Features
14
+
15
+ - 🚀 **Type-safe**: Full TypeScript support with complete type definitions
16
+ - 🔧 **CLI Tool**: Powerful command-line interface for common operations
17
+ - 🔐 **Secure**: API key management with environment variable support
18
+ - 📝 **Complete API Coverage**: Notes, users, groups, and more
19
+ - ⚡ **Lightweight**: Minimal dependencies, optimized bundle size
20
+ - 🌐 **GraphQL**: Direct GraphQL API integration
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ # npm
26
+ npm install kibela-api-client
27
+
28
+ # yarn
29
+ yarn add kibela-api-client
30
+
31
+ # pnpm
32
+ pnpm add kibela-api-client
33
+
34
+ # Global CLI installation
35
+ npm install -g kibela-api-client
36
+ ```
37
+
38
+ ## Quick Start
39
+
40
+ ### As a Library
41
+
42
+ ```typescript
43
+ import { createClient } from 'kibela-api-client';
44
+
45
+ // Create client instance
46
+ const kibela = createClient({
47
+ team: 'your-team-name',
48
+ token: process.env.KIBELA_API_KEY
49
+ });
50
+
51
+ // Create a note
52
+ const note = await kibela.notes.create({
53
+ title: 'Meeting Notes',
54
+ content: '# Today\'s Topics\n\n- Project updates\n- Next steps',
55
+ coediting: true,
56
+ groupIds: ['group-id']
57
+ });
58
+
59
+ // Search notes
60
+ const results = await kibela.notes.search('project update');
61
+
62
+ // Get current user
63
+ const user = await kibela.users.getCurrentUser();
64
+ ```
65
+
66
+ ### CLI Usage
67
+
68
+ #### Configuration
69
+
70
+ The CLI supports multiple configuration methods with the following priority:
71
+
72
+ 1. Config file (`~/.kibela/config.json`)
73
+ 2. Environment variables
74
+ 3. `.env` file in current directory
75
+
76
+ ```bash
77
+ # Interactive setup
78
+ kibela config
79
+
80
+ # Set credentials directly
81
+ kibela config --team your-team --token your-api-token
82
+
83
+ # Using environment variables
84
+ export KIBELA_TEAM=your-team
85
+ export KIBELA_API_KEY=your-api-token
86
+
87
+ # Or use .env file
88
+ echo "KIBELA_TEAM=your-team" >> .env
89
+ echo "KIBELA_API_KEY=your-api-token" >> .env
90
+ ```
91
+
92
+ #### Commands
93
+
94
+ ##### Notes Management
95
+
96
+ ```bash
97
+ # List recent notes
98
+ kibela notes list
99
+
100
+ # Search notes
101
+ kibela notes list --search "keyword" --limit 20
102
+
103
+ # Create a new note
104
+ kibela notes create --title "Title" --content "Content"
105
+
106
+ # Get a specific note
107
+ kibela notes get <note-id>
108
+
109
+ # Update a note
110
+ kibela notes update <note-id> --title "New Title" --content "New Content"
111
+
112
+ # Delete a note
113
+ kibela notes delete <note-id>
114
+ ```
115
+
116
+ ##### Workspace Information
117
+
118
+ ```bash
119
+ # List all groups
120
+ kibela groups
121
+ kibela groups --all # Show all groups without pagination
122
+
123
+ # List users
124
+ kibela users list
125
+ kibela users list --all # Show all users
126
+
127
+ # Get current user info
128
+ kibela users me
129
+ ```
130
+
131
+ ## API Reference
132
+
133
+ ### Client Creation
134
+
135
+ ```typescript
136
+ const kibela = createClient({
137
+ team: string, // Your Kibela team name
138
+ token: string // Your API token
139
+ });
140
+ ```
141
+
142
+ ### Notes API
143
+
144
+ ```typescript
145
+ // Create a note
146
+ kibela.notes.create({
147
+ title: string,
148
+ content: string,
149
+ coediting?: boolean,
150
+ groupIds?: string[],
151
+ draft?: boolean
152
+ })
153
+
154
+ // Update a note
155
+ kibela.notes.update(id: string, {
156
+ title?: string,
157
+ content?: string,
158
+ coediting?: boolean,
159
+ groupIds?: string[],
160
+ draft?: boolean
161
+ })
162
+
163
+ // Delete a note
164
+ kibela.notes.delete(id: string)
165
+
166
+ // Get a note by ID
167
+ kibela.notes.get(id: string)
168
+
169
+ // List notes with pagination
170
+ kibela.notes.list({
171
+ first?: number,
172
+ after?: string,
173
+ orderBy?: {
174
+ field: 'CONTENT_UPDATED_AT' | 'PUBLISHED_AT',
175
+ direction: 'ASC' | 'DESC'
176
+ }
177
+ })
178
+
179
+ // Search notes
180
+ kibela.notes.search(query: string, {
181
+ first?: number,
182
+ after?: string
183
+ })
184
+ ```
185
+
186
+ ### Groups API
187
+
188
+ ```typescript
189
+ // List groups
190
+ kibela.groups.list({
191
+ first?: number,
192
+ after?: string
193
+ })
194
+
195
+ // Get a group by ID
196
+ kibela.groups.get(id: string)
197
+
198
+ // Get all groups (no pagination)
199
+ kibela.groups.getAll()
200
+ ```
201
+
202
+ ### Users API
203
+
204
+ ```typescript
205
+ // List users
206
+ kibela.users.list({
207
+ first?: number,
208
+ after?: string
209
+ })
210
+
211
+ // Get current user
212
+ kibela.users.getCurrentUser()
213
+
214
+ // Get all users (no pagination)
215
+ kibela.users.getAll()
216
+ ```
217
+
218
+ ## Environment Variables
219
+
220
+ - `KIBELA_TEAM`: Your Kibela team name
221
+ - `KIBELA_API_KEY` or `KIBELA_TOKEN`: Your API token
222
+
223
+ ## Security
224
+
225
+ - API tokens are never logged or displayed in full
226
+ - Tokens are masked in CLI output (shows only first 4 and last 4 characters)
227
+ - Support for `.env` files for local development
228
+ - Secure storage in user home directory for CLI configuration
229
+
230
+ ## Error Handling
231
+
232
+ The library provides detailed error messages with specific error codes:
233
+
234
+ ```typescript
235
+ try {
236
+ await kibela.notes.create({ title: '', content: '' });
237
+ } catch (error) {
238
+ if (error.code === 'AUTH_ERROR') {
239
+ // Handle authentication error
240
+ } else if (error.code === 'VALIDATION_ERROR') {
241
+ // Handle validation error
242
+ }
243
+ }
244
+ ```
245
+
246
+ ## Development
247
+
248
+ ```bash
249
+ # Install dependencies
250
+ npm install
251
+
252
+ # Build the project
253
+ npm run build
254
+
255
+ # Run CLI in development
256
+ npm run dev
257
+
258
+ # Run tests
259
+ npm test
260
+ ```
261
+
262
+ ## Contributing
263
+
264
+ Contributions are welcome! Please feel free to submit a Pull Request.
265
+
266
+ 1. Fork the repository
267
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
268
+ 3. Commit your changes (`git commit -m 'Add some amazing feature'`)
269
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
270
+ 5. Open a Pull Request
271
+
272
+ ## License
273
+
274
+ MIT
package/bin/kibela.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/cli/index.js');
@@ -0,0 +1,9 @@
1
+ export declare class KibelaError extends Error {
2
+ code?: string | undefined;
3
+ details?: any | undefined;
4
+ constructor(message: string, code?: string | undefined, details?: any | undefined);
5
+ }
6
+ export declare function handleGraphQLError(error: any): never;
7
+ export declare function displayError(error: Error | KibelaError): void;
8
+ export declare function wrapAsyncCommand(fn: Function): (...args: any[]) => Promise<void>;
9
+ //# sourceMappingURL=_error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_error-handler.d.ts","sourceRoot":"","sources":["../../src/cli/_error-handler.ts"],"names":[],"mappings":"AAGA,qBAAa,WAAY,SAAQ,KAAK;IAG3B,IAAI,CAAC,EAAE,MAAM;IACb,OAAO,CAAC,EAAE,GAAG;gBAFpB,OAAO,EAAE,MAAM,EACR,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,GAAG,YAAA;CAKvB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,CAsDpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CAiB7D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,IAC7B,GAAG,MAAM,GAAG,EAAE,mBAW7B"}
@@ -0,0 +1,77 @@
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.KibelaError = void 0;
7
+ exports.handleGraphQLError = handleGraphQLError;
8
+ exports.displayError = displayError;
9
+ exports.wrapAsyncCommand = wrapAsyncCommand;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ class KibelaError extends Error {
12
+ constructor(message, code, details) {
13
+ super(message);
14
+ this.code = code;
15
+ this.details = details;
16
+ this.name = 'KibelaError';
17
+ }
18
+ }
19
+ exports.KibelaError = KibelaError;
20
+ function handleGraphQLError(error) {
21
+ if (error.response?.errors) {
22
+ const errors = error.response.errors;
23
+ const messages = errors.map(e => e.message).join('\n');
24
+ // Check for specific error types
25
+ if (messages.includes('authentication') || messages.includes('unauthorized')) {
26
+ throw new KibelaError('Authentication failed. Please check your API token.', 'AUTH_ERROR', errors);
27
+ }
28
+ if (messages.includes('not found')) {
29
+ throw new KibelaError('Resource not found. Please check the ID and try again.', 'NOT_FOUND', errors);
30
+ }
31
+ if (messages.includes('permission') || messages.includes('forbidden')) {
32
+ throw new KibelaError('Permission denied. You may not have access to this resource.', 'PERMISSION_ERROR', errors);
33
+ }
34
+ throw new KibelaError(messages, 'GRAPHQL_ERROR', errors);
35
+ }
36
+ // Network errors
37
+ if (error.code === 'ENOTFOUND') {
38
+ throw new KibelaError('Could not connect to Kibela. Please check your team name and internet connection.', 'NETWORK_ERROR');
39
+ }
40
+ if (error.code === 'ETIMEDOUT') {
41
+ throw new KibelaError('Request timed out. Please try again.', 'TIMEOUT_ERROR');
42
+ }
43
+ // Generic error
44
+ throw new KibelaError(error.message || 'An unexpected error occurred', 'UNKNOWN_ERROR', error);
45
+ }
46
+ function displayError(error) {
47
+ console.error(chalk_1.default.red('✖'), chalk_1.default.bold('Error:'), error.message);
48
+ if (error instanceof KibelaError) {
49
+ if (error.code === 'AUTH_ERROR') {
50
+ console.error(chalk_1.default.dim('\nPlease run "kibela config" to update your credentials.'));
51
+ }
52
+ else if (error.code === 'NETWORK_ERROR') {
53
+ console.error(chalk_1.default.dim('\nCheck your internet connection and team name.'));
54
+ }
55
+ if (process.env.DEBUG && error.details) {
56
+ console.error(chalk_1.default.dim('\nDebug details:'));
57
+ console.error(error.details);
58
+ }
59
+ }
60
+ process.exit(1);
61
+ }
62
+ function wrapAsyncCommand(fn) {
63
+ return async (...args) => {
64
+ try {
65
+ await fn(...args);
66
+ }
67
+ catch (error) {
68
+ if (error instanceof Error) {
69
+ displayError(error);
70
+ }
71
+ else {
72
+ displayError(new Error(String(error)));
73
+ }
74
+ }
75
+ };
76
+ }
77
+ //# sourceMappingURL=_error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_error-handler.js","sourceRoot":"","sources":["../../src/cli/_error-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ export declare const ConfigSchema: z.ZodObject<{
3
+ team: z.ZodString;
4
+ token: z.ZodString;
5
+ }, z.core.$strip>;
6
+ export declare const CreateNoteInputSchema: z.ZodObject<{
7
+ title: z.ZodString;
8
+ content: z.ZodString;
9
+ coediting: z.ZodOptional<z.ZodBoolean>;
10
+ groupIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
11
+ draft: z.ZodOptional<z.ZodBoolean>;
12
+ }, z.core.$strip>;
13
+ export declare const UpdateNoteInputSchema: z.ZodObject<{
14
+ title: z.ZodOptional<z.ZodString>;
15
+ content: z.ZodOptional<z.ZodString>;
16
+ coediting: z.ZodOptional<z.ZodBoolean>;
17
+ groupIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
18
+ draft: z.ZodOptional<z.ZodBoolean>;
19
+ }, z.core.$strip>;
20
+ export declare const EnvSchema: z.ZodObject<{
21
+ KIBELA_TEAM: z.ZodOptional<z.ZodString>;
22
+ KIBELA_TOKEN: z.ZodOptional<z.ZodString>;
23
+ KIBELA_API_KEY: z.ZodOptional<z.ZodString>;
24
+ }, z.core.$strip>;
25
+ export declare const NoteResponseSchema: z.ZodObject<{
26
+ id: z.ZodString;
27
+ title: z.ZodString;
28
+ content: z.ZodString;
29
+ url: z.ZodString;
30
+ }, z.core.$strip>;
31
+ export declare const ErrorResponseSchema: z.ZodObject<{
32
+ errors: z.ZodArray<z.ZodObject<{
33
+ message: z.ZodString;
34
+ extensions: z.ZodOptional<z.ZodObject<{
35
+ code: z.ZodOptional<z.ZodString>;
36
+ }, z.core.$strip>>;
37
+ }, z.core.$strip>>;
38
+ }, z.core.$strip>;
39
+ export declare function validateConfig(team?: string, token?: string): {
40
+ isValid: boolean;
41
+ error?: string;
42
+ };
43
+ export declare function sanitizeToken(token: string): string;
44
+ //# sourceMappingURL=_validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_validators.d.ts","sourceRoot":"","sources":["../../src/cli/_validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AAGH,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;iBAQhC,CAAC;AAGH,eAAO,MAAM,SAAS;;;;iBAMpB,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;iBAO9B,CAAC;AAGH,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAYlG;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKnD"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorResponseSchema = exports.NoteResponseSchema = exports.EnvSchema = exports.UpdateNoteInputSchema = exports.CreateNoteInputSchema = exports.ConfigSchema = void 0;
4
+ exports.validateConfig = validateConfig;
5
+ exports.sanitizeToken = sanitizeToken;
6
+ const zod_1 = require("zod");
7
+ // Configuration validation
8
+ exports.ConfigSchema = zod_1.z.object({
9
+ team: zod_1.z.string().min(1, 'Team name is required'),
10
+ token: zod_1.z.string().min(1, 'API token is required')
11
+ });
12
+ // Note input validation
13
+ exports.CreateNoteInputSchema = zod_1.z.object({
14
+ title: zod_1.z.string().min(1, 'Title is required'),
15
+ content: zod_1.z.string().min(1, 'Content is required'),
16
+ coediting: zod_1.z.boolean().optional(),
17
+ groupIds: zod_1.z.array(zod_1.z.string()).optional(),
18
+ draft: zod_1.z.boolean().optional()
19
+ });
20
+ exports.UpdateNoteInputSchema = zod_1.z.object({
21
+ title: zod_1.z.string().min(1).optional(),
22
+ content: zod_1.z.string().min(1).optional(),
23
+ coediting: zod_1.z.boolean().optional(),
24
+ groupIds: zod_1.z.array(zod_1.z.string()).optional(),
25
+ draft: zod_1.z.boolean().optional()
26
+ }).refine(data => data.title || data.content, {
27
+ message: 'At least one field (title or content) must be provided'
28
+ });
29
+ // Environment variable validation
30
+ exports.EnvSchema = zod_1.z.object({
31
+ KIBELA_TEAM: zod_1.z.string().optional(),
32
+ KIBELA_TOKEN: zod_1.z.string().optional(),
33
+ KIBELA_API_KEY: zod_1.z.string().optional()
34
+ }).refine(data => !data.KIBELA_TOKEN || !data.KIBELA_API_KEY || data.KIBELA_TOKEN === data.KIBELA_API_KEY, {
35
+ message: 'Both KIBELA_TOKEN and KIBELA_API_KEY are set with different values. Please use only one.'
36
+ });
37
+ // API response validation
38
+ exports.NoteResponseSchema = zod_1.z.object({
39
+ id: zod_1.z.string(),
40
+ title: zod_1.z.string(),
41
+ content: zod_1.z.string(),
42
+ url: zod_1.z.string()
43
+ });
44
+ exports.ErrorResponseSchema = zod_1.z.object({
45
+ errors: zod_1.z.array(zod_1.z.object({
46
+ message: zod_1.z.string(),
47
+ extensions: zod_1.z.object({
48
+ code: zod_1.z.string().optional()
49
+ }).optional()
50
+ }))
51
+ });
52
+ // Validation helpers
53
+ function validateConfig(team, token) {
54
+ const result = exports.ConfigSchema.safeParse({
55
+ team: team || '',
56
+ token: token || ''
57
+ });
58
+ if (!result.success) {
59
+ const errors = result.error.issues.map((issue) => issue.message).join(', ');
60
+ return { isValid: false, error: errors };
61
+ }
62
+ return { isValid: true };
63
+ }
64
+ function sanitizeToken(token) {
65
+ if (token.length <= 8) {
66
+ return '****';
67
+ }
68
+ return `${token.slice(0, 4)}...${token.slice(-4)}`;
69
+ }
70
+ //# sourceMappingURL=_validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_validators.js","sourceRoot":"","sources":["../../src/cli/_validators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const configCommand: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,aAAa,SA0ErB,CAAC"}
@@ -0,0 +1,81 @@
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.configCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const prompts_1 = __importDefault(require("prompts"));
9
+ const config_1 = require("../config");
10
+ const utils_1 = require("../utils");
11
+ const _error_handler_1 = require("../_error-handler");
12
+ exports.configCommand = new commander_1.Command('config')
13
+ .description('Configure Kibela API settings')
14
+ .option('-t, --team <team>', 'Set team name')
15
+ .option('-k, --token <token>', 'Set API token')
16
+ .option('--show', 'Show current configuration')
17
+ .option('--clear', 'Clear all configuration')
18
+ .action((0, _error_handler_1.wrapAsyncCommand)(async (options) => {
19
+ if (options.show) {
20
+ const config = config_1.ConfigManager.load();
21
+ if (config.team || config.token) {
22
+ (0, utils_1.info)('Current configuration:');
23
+ console.log(` Team: ${config.team || '(not set)'}`);
24
+ console.log(` Token: ${config.token ? (0, utils_1.displayToken)(config.token) : '(not set)'}`);
25
+ }
26
+ else {
27
+ (0, utils_1.info)('No configuration found.');
28
+ }
29
+ return;
30
+ }
31
+ if (options.clear) {
32
+ const response = await (0, prompts_1.default)({
33
+ type: 'confirm',
34
+ name: 'confirm',
35
+ message: 'Are you sure you want to clear all configuration?',
36
+ initial: false
37
+ });
38
+ if (response.confirm) {
39
+ config_1.ConfigManager.clear();
40
+ (0, utils_1.success)('Configuration cleared.');
41
+ }
42
+ return;
43
+ }
44
+ if (options.team) {
45
+ config_1.ConfigManager.set('team', options.team);
46
+ (0, utils_1.success)(`Team set to: ${options.team}`);
47
+ }
48
+ if (options.token) {
49
+ config_1.ConfigManager.set('token', options.token);
50
+ (0, utils_1.success)('API token saved.');
51
+ }
52
+ if (!options.team && !options.token) {
53
+ const currentConfig = config_1.ConfigManager.load();
54
+ const questions = [
55
+ {
56
+ type: 'text',
57
+ name: 'team',
58
+ message: 'Enter your Kibela team name:',
59
+ initial: currentConfig.team || '',
60
+ validate: (value) => value.length > 0 || 'Team name is required'
61
+ },
62
+ {
63
+ type: 'password',
64
+ name: 'token',
65
+ message: 'Enter your Kibela API token:',
66
+ validate: (value) => value.length > 0 || 'API token is required'
67
+ }
68
+ ];
69
+ const response = await (0, prompts_1.default)(questions);
70
+ if (response.team && response.token) {
71
+ config_1.ConfigManager.set('team', response.team);
72
+ config_1.ConfigManager.set('token', response.token);
73
+ (0, utils_1.success)('Configuration saved successfully!');
74
+ (0, utils_1.info)(`You can now use the Kibela CLI with team: ${response.team}`);
75
+ }
76
+ else {
77
+ (0, utils_1.error)('Configuration cancelled.');
78
+ }
79
+ }
80
+ }));
81
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const groupsCommand: Command;
3
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAgDtB,CAAC"}