@devpad/api 1.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.
- package/README.md +149 -0
- package/dist/api-client.d.ts +337 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +407 -0
- package/dist/error-handlers.d.ts +55 -0
- package/dist/error-handlers.d.ts.map +1 -0
- package/dist/error-handlers.js +217 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +28 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/request.d.ts +41 -0
- package/dist/request.d.ts.map +1 -0
- package/dist/request.js +178 -0
- package/dist/result.d.ts +42 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +44 -0
- package/dist/tools.d.ts +84 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +425 -0
- package/package.json +67 -0
package/README.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# @devpad/api
|
|
2
|
+
|
|
3
|
+
TypeScript client library for the Devpad API - project and task management made simple.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @devpad/api
|
|
9
|
+
# or
|
|
10
|
+
yarn add @devpad/api
|
|
11
|
+
# or
|
|
12
|
+
bun add @devpad/api
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Quick Start
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import DevpadApiClient from '@devpad/api';
|
|
19
|
+
|
|
20
|
+
const client = new DevpadApiClient({
|
|
21
|
+
api_key: 'your-api-key-here',
|
|
22
|
+
base_url: 'https://devpad.tools/api/v0' // optional, defaults to localhost:4321
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Create a project
|
|
26
|
+
const project = await client.projects.create({
|
|
27
|
+
name: 'My New Project',
|
|
28
|
+
description: 'A project created via API',
|
|
29
|
+
visibility: 'private'
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// Create a task
|
|
33
|
+
const task = await client.tasks.create({
|
|
34
|
+
project_id: project.data.project_id,
|
|
35
|
+
title: 'Implement new feature',
|
|
36
|
+
description: 'Add user authentication',
|
|
37
|
+
status: 'pending',
|
|
38
|
+
priority: 'high',
|
|
39
|
+
tags: ['feature', 'auth']
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## API Reference
|
|
44
|
+
|
|
45
|
+
### DevpadApiClient
|
|
46
|
+
|
|
47
|
+
Main client class that provides access to all API endpoints.
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
const client = new DevpadApiClient({
|
|
51
|
+
api_key: string; // Required: Your Devpad API key
|
|
52
|
+
base_url?: string; // Optional: API base URL (defaults to localhost:4321/api/v0)
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Projects API
|
|
57
|
+
|
|
58
|
+
#### `client.projects.list()`
|
|
59
|
+
Get all projects for the authenticated user.
|
|
60
|
+
|
|
61
|
+
#### `client.projects.get(id: string)`
|
|
62
|
+
Get a specific project by ID.
|
|
63
|
+
|
|
64
|
+
#### `client.projects.getByName(name: string)`
|
|
65
|
+
Get a project by name.
|
|
66
|
+
|
|
67
|
+
#### `client.projects.create(data: ProjectCreate)`
|
|
68
|
+
Create a new project.
|
|
69
|
+
|
|
70
|
+
#### `client.projects.update(project_id: string, data: Partial<ProjectUpdate>)`
|
|
71
|
+
Update an existing project.
|
|
72
|
+
|
|
73
|
+
#### `client.projects.upsert(data: ProjectUpsert)`
|
|
74
|
+
Create or update a project (unified endpoint).
|
|
75
|
+
|
|
76
|
+
### Tasks API
|
|
77
|
+
|
|
78
|
+
#### `client.tasks.list(options?: { project_id?: string; tag_id?: string })`
|
|
79
|
+
Get tasks, optionally filtered by project or tag.
|
|
80
|
+
|
|
81
|
+
#### `client.tasks.get(id: string)`
|
|
82
|
+
Get a specific task by ID.
|
|
83
|
+
|
|
84
|
+
#### `client.tasks.getByProject(project_id: string)`
|
|
85
|
+
Get all tasks for a specific project.
|
|
86
|
+
|
|
87
|
+
#### `client.tasks.create(data: TaskCreate)`
|
|
88
|
+
Create a new task.
|
|
89
|
+
|
|
90
|
+
#### `client.tasks.update(task_id: string, data: Partial<TaskUpdate>)`
|
|
91
|
+
Update an existing task.
|
|
92
|
+
|
|
93
|
+
#### `client.tasks.upsert(data: TaskUpsert)`
|
|
94
|
+
Create or update a task (unified endpoint).
|
|
95
|
+
|
|
96
|
+
### Types
|
|
97
|
+
|
|
98
|
+
The library exports TypeScript types for all API operations:
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import {
|
|
102
|
+
ProjectType,
|
|
103
|
+
TaskType,
|
|
104
|
+
TagType,
|
|
105
|
+
ProjectCreate,
|
|
106
|
+
ProjectUpdate,
|
|
107
|
+
ProjectUpsert,
|
|
108
|
+
TaskCreate,
|
|
109
|
+
TaskUpdate,
|
|
110
|
+
TaskUpsert,
|
|
111
|
+
ApiResponse
|
|
112
|
+
} from '@devpad/api';
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Error Handling
|
|
116
|
+
|
|
117
|
+
The client throws typed errors for different failure scenarios:
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
import { ApiError, AuthenticationError, NetworkError } from '@devpad/api';
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
await client.projects.create({ name: 'Test Project' });
|
|
124
|
+
} catch (error) {
|
|
125
|
+
if (error instanceof AuthenticationError) {
|
|
126
|
+
console.error('Invalid API key');
|
|
127
|
+
} else if (error instanceof ApiError) {
|
|
128
|
+
console.error('API Error:', error.message, error.statusCode);
|
|
129
|
+
} else if (error instanceof NetworkError) {
|
|
130
|
+
console.error('Network Error:', error.message);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Authentication
|
|
136
|
+
|
|
137
|
+
To use this API client, you need a Devpad API key. You can generate one through the Devpad web interface at your account settings.
|
|
138
|
+
|
|
139
|
+
## Development
|
|
140
|
+
|
|
141
|
+
This package is built with TypeScript and uses Bun for development. The source code is available at [github.com/f0rbit/devpad](https://github.com/f0rbit/devpad).
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
MIT
|
|
146
|
+
|
|
147
|
+
## Support
|
|
148
|
+
|
|
149
|
+
For issues and feature requests, please visit the [GitHub repository](https://github.com/f0rbit/devpad/issues).
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import type { Project, ProjectConfig, SaveConfigRequest, TaskWithDetails, UpsertProject, UpsertTag, UpsertTodo, Milestone, Goal, HistoryAction, TagWithTypedColor, ApiKey } from "@devpad/schema";
|
|
2
|
+
import { type Result } from "./result";
|
|
3
|
+
/**
|
|
4
|
+
* Authentication mode for the API client
|
|
5
|
+
*/
|
|
6
|
+
export type AuthMode = "session" | "key";
|
|
7
|
+
/**
|
|
8
|
+
* API client with Result-wrapped operations for clean error handling
|
|
9
|
+
* All methods return Result<T, name> types with context-aware property names
|
|
10
|
+
*/
|
|
11
|
+
export declare class ApiClient {
|
|
12
|
+
private readonly clients;
|
|
13
|
+
private _api_key;
|
|
14
|
+
private _auth_mode;
|
|
15
|
+
constructor(options: {
|
|
16
|
+
base_url?: string;
|
|
17
|
+
api_key: string;
|
|
18
|
+
auth_mode?: AuthMode;
|
|
19
|
+
max_history_size?: number;
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Auth namespace with Result-wrapped operations
|
|
23
|
+
*/
|
|
24
|
+
readonly auth: {
|
|
25
|
+
/**
|
|
26
|
+
* Get current session information
|
|
27
|
+
*/
|
|
28
|
+
session: () => Promise<Result<{
|
|
29
|
+
authenticated: boolean;
|
|
30
|
+
user: any;
|
|
31
|
+
session: any;
|
|
32
|
+
}, "session">>;
|
|
33
|
+
/**
|
|
34
|
+
* Login (redirect to OAuth)
|
|
35
|
+
*/
|
|
36
|
+
login: () => Promise<Result<void, "result">>;
|
|
37
|
+
/**
|
|
38
|
+
* Logout
|
|
39
|
+
*/
|
|
40
|
+
logout: () => Promise<Result<void, "result">>;
|
|
41
|
+
/**
|
|
42
|
+
* API key management
|
|
43
|
+
*/
|
|
44
|
+
keys: {
|
|
45
|
+
/**
|
|
46
|
+
* List all API keys
|
|
47
|
+
*/
|
|
48
|
+
list: () => Promise<Result<ApiKey[], "keys">>;
|
|
49
|
+
/**
|
|
50
|
+
* Generate a new API key
|
|
51
|
+
*/
|
|
52
|
+
create: (name?: string) => Promise<Result<{
|
|
53
|
+
message: string;
|
|
54
|
+
key: string;
|
|
55
|
+
}, "key">>;
|
|
56
|
+
/**
|
|
57
|
+
* Revoke an API key
|
|
58
|
+
*/
|
|
59
|
+
revoke: (key_id: string) => Promise<Result<{
|
|
60
|
+
message: string;
|
|
61
|
+
success: boolean;
|
|
62
|
+
}, "result">>;
|
|
63
|
+
/**
|
|
64
|
+
* Remove an API key (alias for revoke)
|
|
65
|
+
*/
|
|
66
|
+
remove: (key_id: string) => Promise<Result<{
|
|
67
|
+
message: string;
|
|
68
|
+
success: boolean;
|
|
69
|
+
}, "result">>;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Projects namespace with Result-wrapped operations
|
|
74
|
+
*/
|
|
75
|
+
readonly projects: {
|
|
76
|
+
/**
|
|
77
|
+
* List projects with optional filtering
|
|
78
|
+
*/
|
|
79
|
+
list: (filters?: {
|
|
80
|
+
private?: boolean;
|
|
81
|
+
}) => Promise<Result<Project[], "projects">>;
|
|
82
|
+
/**
|
|
83
|
+
* Get project map
|
|
84
|
+
*/
|
|
85
|
+
map: (filters?: {
|
|
86
|
+
private?: boolean;
|
|
87
|
+
}) => Promise<Result<Record<string, Project>, "project_map">>;
|
|
88
|
+
/**
|
|
89
|
+
* Get project by ID
|
|
90
|
+
*/
|
|
91
|
+
find: (id: string) => Promise<Result<Project | null, "project">>;
|
|
92
|
+
/**
|
|
93
|
+
* Get project by name
|
|
94
|
+
*/
|
|
95
|
+
getByName: (name: string) => Promise<Result<Project, "project">>;
|
|
96
|
+
/**
|
|
97
|
+
* Get project by ID (throws if not found)
|
|
98
|
+
*/
|
|
99
|
+
getById: (id: string) => Promise<Result<Project, "project">>;
|
|
100
|
+
/**
|
|
101
|
+
* Create a new project
|
|
102
|
+
*/
|
|
103
|
+
create: (data: Omit<UpsertProject, "id">) => Promise<Result<Project, "project">>;
|
|
104
|
+
/**
|
|
105
|
+
* Update an existing project
|
|
106
|
+
*/
|
|
107
|
+
update: (idOrData: string | UpsertProject, changes?: Partial<Omit<UpsertProject, "id" | "project_id">>) => Promise<Result<Project, "project">>;
|
|
108
|
+
/**
|
|
109
|
+
* Project configuration operations
|
|
110
|
+
*/
|
|
111
|
+
config: {
|
|
112
|
+
/**
|
|
113
|
+
* Get project configuration
|
|
114
|
+
*/
|
|
115
|
+
load: (project_id: string) => Promise<Result<ProjectConfig | null, "config">>;
|
|
116
|
+
/**
|
|
117
|
+
* Save project configuration
|
|
118
|
+
*/
|
|
119
|
+
save: (request: SaveConfigRequest) => Promise<Result<void, "result">>;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Scanning operations
|
|
123
|
+
*/
|
|
124
|
+
scan: {
|
|
125
|
+
/**
|
|
126
|
+
* Update scan status
|
|
127
|
+
*/
|
|
128
|
+
updateStatus: (project_id: string, data: any) => Promise<Result<void, "result">>;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Get project history
|
|
132
|
+
*/
|
|
133
|
+
history: (project_id: string) => Promise<Result<any[], "history">>;
|
|
134
|
+
/**
|
|
135
|
+
* Legacy methods (keeping for compatibility)
|
|
136
|
+
*/
|
|
137
|
+
upsert: (data: UpsertProject) => Promise<Result<Project, "project">>;
|
|
138
|
+
/**
|
|
139
|
+
* Fetch project specification from GitHub
|
|
140
|
+
*/
|
|
141
|
+
specification: (project_id: string) => Promise<Result<string, "specification">>;
|
|
142
|
+
/**
|
|
143
|
+
* Delete project (soft delete)
|
|
144
|
+
*/
|
|
145
|
+
deleteProject: (project: Project) => Promise<Result<void, "result">>;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Milestones namespace with Result-wrapped operations
|
|
149
|
+
*/
|
|
150
|
+
readonly milestones: {
|
|
151
|
+
/**
|
|
152
|
+
* List milestones for authenticated user
|
|
153
|
+
*/
|
|
154
|
+
list: () => Promise<Result<Milestone[], "milestones">>;
|
|
155
|
+
/**
|
|
156
|
+
* Get milestones by project ID
|
|
157
|
+
*/
|
|
158
|
+
getByProject: (project_id: string) => Promise<Result<Milestone[], "milestones">>;
|
|
159
|
+
/**
|
|
160
|
+
* Get milestone by ID
|
|
161
|
+
*/
|
|
162
|
+
find: (id: string) => Promise<Result<Milestone | null, "milestone">>;
|
|
163
|
+
/**
|
|
164
|
+
* Create new milestone
|
|
165
|
+
*/
|
|
166
|
+
create: (data: {
|
|
167
|
+
project_id: string;
|
|
168
|
+
name: string;
|
|
169
|
+
description?: string;
|
|
170
|
+
target_time?: string;
|
|
171
|
+
target_version?: string;
|
|
172
|
+
}) => Promise<Result<Milestone, "milestone">>;
|
|
173
|
+
/**
|
|
174
|
+
* Update milestone
|
|
175
|
+
*/
|
|
176
|
+
update: (id: string, data: {
|
|
177
|
+
name?: string;
|
|
178
|
+
description?: string;
|
|
179
|
+
target_time?: string;
|
|
180
|
+
target_version?: string;
|
|
181
|
+
}) => Promise<Result<Milestone, "milestone">>;
|
|
182
|
+
/**
|
|
183
|
+
* Delete milestone (soft delete)
|
|
184
|
+
*/
|
|
185
|
+
delete: (id: string) => Promise<Result<{
|
|
186
|
+
success: boolean;
|
|
187
|
+
message: string;
|
|
188
|
+
}, "result">>;
|
|
189
|
+
/**
|
|
190
|
+
* Get goals for a milestone
|
|
191
|
+
*/
|
|
192
|
+
goals: (id: string) => Promise<Result<Goal[], "goals">>;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Goals namespace with Result-wrapped operations
|
|
196
|
+
*/
|
|
197
|
+
readonly goals: {
|
|
198
|
+
/**
|
|
199
|
+
* List goals for authenticated user
|
|
200
|
+
*/
|
|
201
|
+
list: () => Promise<Result<Goal[], "goals">>;
|
|
202
|
+
/**
|
|
203
|
+
* Get goal by ID
|
|
204
|
+
*/
|
|
205
|
+
find: (id: string) => Promise<Result<Goal | null, "goal">>;
|
|
206
|
+
/**
|
|
207
|
+
* Create new goal
|
|
208
|
+
*/
|
|
209
|
+
create: (data: {
|
|
210
|
+
milestone_id: string;
|
|
211
|
+
name: string;
|
|
212
|
+
description?: string;
|
|
213
|
+
target_time?: string;
|
|
214
|
+
}) => Promise<Result<Goal, "goal">>;
|
|
215
|
+
/**
|
|
216
|
+
* Update goal
|
|
217
|
+
*/
|
|
218
|
+
update: (id: string, data: {
|
|
219
|
+
name?: string;
|
|
220
|
+
description?: string;
|
|
221
|
+
target_time?: string;
|
|
222
|
+
}) => Promise<Result<Goal, "goal">>;
|
|
223
|
+
/**
|
|
224
|
+
* Delete goal (soft delete)
|
|
225
|
+
*/
|
|
226
|
+
delete: (id: string) => Promise<Result<{
|
|
227
|
+
success: boolean;
|
|
228
|
+
message: string;
|
|
229
|
+
}, "result">>;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Tasks namespace with Result-wrapped operations
|
|
233
|
+
*/
|
|
234
|
+
readonly tasks: {
|
|
235
|
+
/**
|
|
236
|
+
* List tasks with optional filtering
|
|
237
|
+
*/
|
|
238
|
+
list: (filters?: {
|
|
239
|
+
project_id?: string;
|
|
240
|
+
tag_id?: string;
|
|
241
|
+
}) => Promise<Result<TaskWithDetails[], "tasks">>;
|
|
242
|
+
/**
|
|
243
|
+
* Get task by ID
|
|
244
|
+
*/
|
|
245
|
+
find: (id: string) => Promise<Result<TaskWithDetails | null, "task">>;
|
|
246
|
+
/**
|
|
247
|
+
* Get tasks by project ID
|
|
248
|
+
*/
|
|
249
|
+
getByProject: (project_id: string) => Promise<Result<TaskWithDetails[], "tasks">>;
|
|
250
|
+
/**
|
|
251
|
+
* Create a new task
|
|
252
|
+
*/
|
|
253
|
+
create: (data: Omit<UpsertTodo, "id"> & {
|
|
254
|
+
tags?: UpsertTag[];
|
|
255
|
+
}) => Promise<Result<TaskWithDetails, "task">>;
|
|
256
|
+
/**
|
|
257
|
+
* Update an existing task
|
|
258
|
+
*/
|
|
259
|
+
update: (id: string, changes: Partial<Omit<UpsertTodo, "id">> & {
|
|
260
|
+
tags?: UpsertTag[];
|
|
261
|
+
}) => Promise<Result<TaskWithDetails, "task">>;
|
|
262
|
+
/**
|
|
263
|
+
* Upsert task (create or update)
|
|
264
|
+
*/
|
|
265
|
+
upsert: (data: UpsertTodo & {
|
|
266
|
+
tags?: UpsertTag[];
|
|
267
|
+
}) => Promise<Result<TaskWithDetails, "task">>;
|
|
268
|
+
/**
|
|
269
|
+
* Save tags for tasks
|
|
270
|
+
*/
|
|
271
|
+
saveTags: (data: any) => Promise<Result<void, "result">>;
|
|
272
|
+
/**
|
|
273
|
+
* Delete task (soft delete)
|
|
274
|
+
*/
|
|
275
|
+
deleteTask: (task: TaskWithDetails) => Promise<Result<void, "result">>;
|
|
276
|
+
/**
|
|
277
|
+
* Task history operations
|
|
278
|
+
*/
|
|
279
|
+
history: {
|
|
280
|
+
/**
|
|
281
|
+
* Get task history by task ID
|
|
282
|
+
*/
|
|
283
|
+
get: (task_id: string) => Promise<Result<HistoryAction[], "history">>;
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
/**
|
|
287
|
+
* Tags namespace with Result-wrapped operations
|
|
288
|
+
*/
|
|
289
|
+
readonly tags: {
|
|
290
|
+
/**
|
|
291
|
+
* List tags for authenticated user
|
|
292
|
+
*/
|
|
293
|
+
list: () => Promise<Result<TagWithTypedColor[], "tags">>;
|
|
294
|
+
};
|
|
295
|
+
/**
|
|
296
|
+
* GitHub namespace with Result-wrapped operations
|
|
297
|
+
*/
|
|
298
|
+
readonly github: {
|
|
299
|
+
/**
|
|
300
|
+
* List repositories for authenticated user
|
|
301
|
+
*/
|
|
302
|
+
repos: () => Promise<Result<any[], "repos">>;
|
|
303
|
+
/**
|
|
304
|
+
* List branches for a GitHub repository
|
|
305
|
+
*/
|
|
306
|
+
branches: (owner: string, repo: string) => Promise<Result<any[], "branches">>;
|
|
307
|
+
};
|
|
308
|
+
/**
|
|
309
|
+
* User namespace with Result-wrapped operations
|
|
310
|
+
*/
|
|
311
|
+
readonly user: {
|
|
312
|
+
/**
|
|
313
|
+
* Get user activity history
|
|
314
|
+
*/
|
|
315
|
+
history: () => Promise<Result<any[], "history">>;
|
|
316
|
+
/**
|
|
317
|
+
* Update user preferences
|
|
318
|
+
*/
|
|
319
|
+
preferences: (data: {
|
|
320
|
+
id: string;
|
|
321
|
+
task_view: string;
|
|
322
|
+
}) => Promise<Result<any, "result">>;
|
|
323
|
+
};
|
|
324
|
+
/**
|
|
325
|
+
* Get request history for debugging
|
|
326
|
+
*/
|
|
327
|
+
history(): import("@devpad/schema").BufferedQueue<import("./request").RequestHistoryEntry>;
|
|
328
|
+
/**
|
|
329
|
+
* Get the API key
|
|
330
|
+
*/
|
|
331
|
+
getApiKey(): string;
|
|
332
|
+
/**
|
|
333
|
+
* Get the authentication mode
|
|
334
|
+
*/
|
|
335
|
+
getAuthMode(): AuthMode;
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|