@critical-path/client 0.2.4 → 0.4.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.
- package/CHANGELOG.md +45 -0
- package/README.md +18 -0
- package/dist/index.d.ts +25 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +58 -0
- package/dist/index.test.js.map +1 -1
- package/package.json +2 -2
- package/src/index.test.ts +70 -0
- package/src/index.ts +81 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
# @critical-path/client
|
|
2
2
|
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 1811922: Add attachment URL validation against large data URIs, sanitize undefined properties in FirebaseStore, provide direct attachment upload routes & SDK methods, and introduce TaskActivityState for combined comment & attachment threads.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [1811922]
|
|
12
|
+
- @critical-path/core@0.8.0
|
|
13
|
+
|
|
14
|
+
## 0.3.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- a48a04a: Add threaded conversations, attachment metadata management, and storage adapters (S3 & Firebase Storage):
|
|
19
|
+
|
|
20
|
+
- **`@critical-path/core`**:
|
|
21
|
+
- Added `Attachment` entity, `CreateAttachmentInput`, `UploadFileInput`, and `FileStorageAdapter` contracts.
|
|
22
|
+
- Added `InMemoryFileStore`, duck-typed `S3StorageAdapter` (compatible with AWS SDK v3, v2, MinIO, and Cloudflare R2), and `FirebaseStorageAdapter` (compatible with Google Cloud Storage and Firebase Admin SDK).
|
|
23
|
+
- Extended `Comment` with `authorType` (`user`, `agent`, `system`) and `parentId` for threaded discussions.
|
|
24
|
+
- Implemented full comment and attachment repository methods across `InMemoryStore`, `SQLiteStore`, and `FirebaseStore`.
|
|
25
|
+
- Added engine operations for upload, presigning, and deleting attachments with domain events (`comment.*`, `attachment.*`) and webhooks.
|
|
26
|
+
|
|
27
|
+
- **`@critical-path/server`**:
|
|
28
|
+
- Added RESTful routes for comments (`GET/POST /tasks/:taskId/comments`, `GET/POST /comments`, `GET/PATCH/DELETE /comments/:id`).
|
|
29
|
+
- Added RESTful routes for attachments (`GET/POST /tasks/:taskId/attachments`, `GET/POST /attachments`, `GET/DELETE /attachments/:id`, `POST /attachments/presign`).
|
|
30
|
+
|
|
31
|
+
- **`@critical-path/client`**:
|
|
32
|
+
- Added SDK methods `getComments`, `getComment`, `addComment`, `updateComment`, `deleteComment`.
|
|
33
|
+
- Added SDK methods `getAttachments`, `getAttachment`, `createAttachment`, `deleteAttachment`, and `getPresignedAttachmentUploadUrl`.
|
|
34
|
+
|
|
35
|
+
- **`@critical-path/react`**:
|
|
36
|
+
- Added `useComments(taskId)` with reactive thread tree derivation (`threads` containing nested `replies`) and comment mutations.
|
|
37
|
+
- Added `useAttachments(filter)` with attachment creation and deletion.
|
|
38
|
+
|
|
39
|
+
- **`@critical-path/svelte`**:
|
|
40
|
+
- Added Svelte 5 Rune-based `CommentState` / `createCommentState(client, taskId)` with derived threaded hierarchy.
|
|
41
|
+
- Added Svelte 5 Rune-based `AttachmentState` / `createAttachmentState(client, filter)`.
|
|
42
|
+
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- Updated dependencies [a48a04a]
|
|
46
|
+
- @critical-path/core@0.7.0
|
|
47
|
+
|
|
3
48
|
## 0.2.4
|
|
4
49
|
|
|
5
50
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -41,6 +41,24 @@ const newTask = await client.createTask({
|
|
|
41
41
|
|
|
42
42
|
// Update task status
|
|
43
43
|
await client.updateTask(newTask.id, { status: 'in_progress' });
|
|
44
|
+
|
|
45
|
+
// Add threaded comment
|
|
46
|
+
const comment = await client.addComment({
|
|
47
|
+
taskId: newTask.id,
|
|
48
|
+
content: 'Initial implementation ready for review',
|
|
49
|
+
authorId: 'user_1',
|
|
50
|
+
authorType: 'user'
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Upload file directly or register storage attachment
|
|
54
|
+
const attachment = await client.uploadAttachmentFile({
|
|
55
|
+
filename: 'architecture.png',
|
|
56
|
+
data: fileBuffer,
|
|
57
|
+
mimeType: 'image/png',
|
|
58
|
+
taskId: newTask.id,
|
|
59
|
+
commentId: comment.id,
|
|
60
|
+
uploaderId: 'user_1'
|
|
61
|
+
});
|
|
44
62
|
```
|
|
45
63
|
|
|
46
64
|
---
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Project, Task, TaskDependencyGraph, Team, TaskContainer, Iteration, Activity, Comment, TimeEntry, Workflow } from '@critical-path/core';
|
|
1
|
+
import type { Project, Task, TaskDependencyGraph, Team, TaskContainer, Iteration, Activity, Comment, Attachment, PresignedUrlOptions, PresignedUploadResult, TimeEntry, Workflow } from '@critical-path/core';
|
|
2
2
|
export interface ClientOptions {
|
|
3
3
|
baseUrl: string;
|
|
4
4
|
headers?: Record<string, string>;
|
|
@@ -43,7 +43,31 @@ export declare class CriticalPathClient {
|
|
|
43
43
|
taskId?: string;
|
|
44
44
|
}): Promise<Activity[]>;
|
|
45
45
|
getComments(taskId: string): Promise<Comment[]>;
|
|
46
|
+
getComment(id: string): Promise<Comment>;
|
|
46
47
|
addComment(data: Omit<Comment, 'id' | 'createdAt' | 'updatedAt'>): Promise<Comment>;
|
|
48
|
+
updateComment(id: string, updates: Partial<Comment>): Promise<Comment>;
|
|
49
|
+
deleteComment(id: string): Promise<boolean>;
|
|
50
|
+
getAttachments(filter?: {
|
|
51
|
+
taskId?: string;
|
|
52
|
+
projectId?: string;
|
|
53
|
+
commentId?: string;
|
|
54
|
+
}): Promise<Attachment[]>;
|
|
55
|
+
getAttachment(id: string): Promise<Attachment>;
|
|
56
|
+
createAttachment(data: Omit<Attachment, 'id' | 'createdAt' | 'updatedAt'>): Promise<Attachment>;
|
|
57
|
+
uploadAttachmentFile(data: {
|
|
58
|
+
filename: string;
|
|
59
|
+
data: string | Uint8Array | ArrayBuffer;
|
|
60
|
+
mimeType?: string;
|
|
61
|
+
pathPrefix?: string;
|
|
62
|
+
taskId?: string;
|
|
63
|
+
projectId?: string;
|
|
64
|
+
commentId?: string;
|
|
65
|
+
uploaderId: string;
|
|
66
|
+
uploaderType?: 'user' | 'agent' | 'system';
|
|
67
|
+
metadata?: Record<string, unknown>;
|
|
68
|
+
}): Promise<Attachment>;
|
|
69
|
+
deleteAttachment(id: string): Promise<boolean>;
|
|
70
|
+
getPresignedAttachmentUploadUrl(options: PresignedUrlOptions): Promise<PresignedUploadResult>;
|
|
47
71
|
getTimeEntries(taskId: string): Promise<TimeEntry[]>;
|
|
48
72
|
logTime(data: Omit<TimeEntry, 'id' | 'loggedAt'>): Promise<TimeEntry>;
|
|
49
73
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -209,6 +209,10 @@ export class CriticalPathClient {
|
|
|
209
209
|
const res = await this.request(`/comments?taskId=${encodeURIComponent(taskId)}`);
|
|
210
210
|
return res.comments;
|
|
211
211
|
}
|
|
212
|
+
async getComment(id) {
|
|
213
|
+
const res = await this.request(`/comments/${encodeURIComponent(id)}`);
|
|
214
|
+
return res.comment;
|
|
215
|
+
}
|
|
212
216
|
async addComment(data) {
|
|
213
217
|
const res = await this.request('/comments', {
|
|
214
218
|
method: 'POST',
|
|
@@ -216,6 +220,63 @@ export class CriticalPathClient {
|
|
|
216
220
|
});
|
|
217
221
|
return res.comment;
|
|
218
222
|
}
|
|
223
|
+
async updateComment(id, updates) {
|
|
224
|
+
const res = await this.request(`/comments/${encodeURIComponent(id)}`, {
|
|
225
|
+
method: 'PATCH',
|
|
226
|
+
body: JSON.stringify(updates)
|
|
227
|
+
});
|
|
228
|
+
return res.comment;
|
|
229
|
+
}
|
|
230
|
+
async deleteComment(id) {
|
|
231
|
+
const res = await this.request(`/comments/${encodeURIComponent(id)}`, {
|
|
232
|
+
method: 'DELETE'
|
|
233
|
+
});
|
|
234
|
+
return res.success;
|
|
235
|
+
}
|
|
236
|
+
// Attachments
|
|
237
|
+
async getAttachments(filter) {
|
|
238
|
+
const params = new URLSearchParams();
|
|
239
|
+
if (filter?.taskId)
|
|
240
|
+
params.set('taskId', filter.taskId);
|
|
241
|
+
if (filter?.projectId)
|
|
242
|
+
params.set('projectId', filter.projectId);
|
|
243
|
+
if (filter?.commentId)
|
|
244
|
+
params.set('commentId', filter.commentId);
|
|
245
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
246
|
+
const res = await this.request(`/attachments${query}`);
|
|
247
|
+
return res.attachments;
|
|
248
|
+
}
|
|
249
|
+
async getAttachment(id) {
|
|
250
|
+
const res = await this.request(`/attachments/${encodeURIComponent(id)}`);
|
|
251
|
+
return res.attachment;
|
|
252
|
+
}
|
|
253
|
+
async createAttachment(data) {
|
|
254
|
+
const res = await this.request('/attachments', {
|
|
255
|
+
method: 'POST',
|
|
256
|
+
body: JSON.stringify(data)
|
|
257
|
+
});
|
|
258
|
+
return res.attachment;
|
|
259
|
+
}
|
|
260
|
+
async uploadAttachmentFile(data) {
|
|
261
|
+
const res = await this.request('/attachments/upload', {
|
|
262
|
+
method: 'POST',
|
|
263
|
+
body: JSON.stringify(data)
|
|
264
|
+
});
|
|
265
|
+
return res.attachment;
|
|
266
|
+
}
|
|
267
|
+
async deleteAttachment(id) {
|
|
268
|
+
const res = await this.request(`/attachments/${encodeURIComponent(id)}`, {
|
|
269
|
+
method: 'DELETE'
|
|
270
|
+
});
|
|
271
|
+
return res.success;
|
|
272
|
+
}
|
|
273
|
+
async getPresignedAttachmentUploadUrl(options) {
|
|
274
|
+
const res = await this.request('/attachments/presign', {
|
|
275
|
+
method: 'POST',
|
|
276
|
+
body: JSON.stringify(options)
|
|
277
|
+
});
|
|
278
|
+
return res.presigned;
|
|
279
|
+
}
|
|
219
280
|
// Time Entries
|
|
220
281
|
async getTimeEntries(taskId) {
|
|
221
282
|
const res = await this.request(`/time-entries?taskId=${encodeURIComponent(taskId)}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.test.js
CHANGED
|
@@ -38,5 +38,63 @@ describe('@critical-path/client Tests', () => {
|
|
|
38
38
|
const transitions = await client.getAllowedTaskTransitions('t1');
|
|
39
39
|
expect(transitions).toEqual(['in_progress', 'canceled']);
|
|
40
40
|
});
|
|
41
|
+
it('handles comments and attachments through client SDK methods', async () => {
|
|
42
|
+
const mockFetch = async (url, init) => {
|
|
43
|
+
const urlStr = url.toString();
|
|
44
|
+
const method = init?.method?.toUpperCase() || 'GET';
|
|
45
|
+
if (urlStr.includes('/comments?taskId=t1') && method === 'GET') {
|
|
46
|
+
return new Response(JSON.stringify({ comments: [{ id: 'c1', taskId: 't1', content: 'SDK Comment', authorId: 'u1', authorType: 'user' }] }), { status: 200 });
|
|
47
|
+
}
|
|
48
|
+
if (urlStr.endsWith('/comments') && method === 'POST') {
|
|
49
|
+
const body = JSON.parse(init?.body);
|
|
50
|
+
return new Response(JSON.stringify({ comment: { id: 'c2', ...body } }), { status: 201 });
|
|
51
|
+
}
|
|
52
|
+
if (urlStr.endsWith('/comments/c1') && method === 'PATCH') {
|
|
53
|
+
const body = JSON.parse(init?.body);
|
|
54
|
+
return new Response(JSON.stringify({ comment: { id: 'c1', content: body.content } }), { status: 200 });
|
|
55
|
+
}
|
|
56
|
+
if (urlStr.endsWith('/comments/c1') && method === 'DELETE') {
|
|
57
|
+
return new Response(JSON.stringify({ success: true }), { status: 200 });
|
|
58
|
+
}
|
|
59
|
+
if (urlStr.includes('/attachments?taskId=t1') && method === 'GET') {
|
|
60
|
+
return new Response(JSON.stringify({ attachments: [{ id: 'a1', filename: 'SDK Doc', mimeType: 'text/plain', sizeBytes: 50, url: 'https://cdn.example.com/a1' }] }), { status: 200 });
|
|
61
|
+
}
|
|
62
|
+
if (urlStr.endsWith('/attachments') && method === 'POST') {
|
|
63
|
+
const body = JSON.parse(init?.body);
|
|
64
|
+
return new Response(JSON.stringify({ attachment: { id: 'a2', ...body } }), { status: 201 });
|
|
65
|
+
}
|
|
66
|
+
if (urlStr.endsWith('/attachments/upload') && method === 'POST') {
|
|
67
|
+
const body = JSON.parse(init?.body);
|
|
68
|
+
return new Response(JSON.stringify({ attachment: { id: 'a_up', ...body, url: 'https://cdn.example.com/uploaded.png' } }), { status: 201 });
|
|
69
|
+
}
|
|
70
|
+
if (urlStr.endsWith('/attachments/a1') && method === 'DELETE') {
|
|
71
|
+
return new Response(JSON.stringify({ success: true }), { status: 200 });
|
|
72
|
+
}
|
|
73
|
+
return new Response(JSON.stringify({ error: 'Not found' }), { status: 404 });
|
|
74
|
+
};
|
|
75
|
+
const client = new CriticalPathClient({
|
|
76
|
+
baseUrl: 'http://localhost:3000/api/critical-path',
|
|
77
|
+
fetch: mockFetch
|
|
78
|
+
});
|
|
79
|
+
const comments = await client.getComments('t1');
|
|
80
|
+
expect(comments).toHaveLength(1);
|
|
81
|
+
expect(comments[0].content).toBe('SDK Comment');
|
|
82
|
+
const createdComment = await client.addComment({ taskId: 't1', content: 'New comment', authorId: 'u2', authorType: 'user' });
|
|
83
|
+
expect(createdComment.id).toBe('c2');
|
|
84
|
+
const updatedComment = await client.updateComment('c1', { content: 'Updated' });
|
|
85
|
+
expect(updatedComment.content).toBe('Updated');
|
|
86
|
+
const deletedComment = await client.deleteComment('c1');
|
|
87
|
+
expect(deletedComment).toBe(true);
|
|
88
|
+
const attachments = await client.getAttachments({ taskId: 't1' });
|
|
89
|
+
expect(attachments).toHaveLength(1);
|
|
90
|
+
expect(attachments[0].filename).toBe('SDK Doc');
|
|
91
|
+
const createdAtt = await client.createAttachment({ filename: 'file.txt', mimeType: 'text/plain', sizeBytes: 12, url: 'https://example.com/file.txt', uploaderId: 'u1' });
|
|
92
|
+
expect(createdAtt.id).toBe('a2');
|
|
93
|
+
const uploadedAtt = await client.uploadAttachmentFile({ filename: 'uploaded.png', data: 'base64data', uploaderId: 'u1' });
|
|
94
|
+
expect(uploadedAtt.id).toBe('a_up');
|
|
95
|
+
expect(uploadedAtt.url).toBe('https://cdn.example.com/uploaded.png');
|
|
96
|
+
const deletedAtt = await client.deleteAttachment('a1');
|
|
97
|
+
expect(deletedAtt).toBe(true);
|
|
98
|
+
});
|
|
41
99
|
});
|
|
42
100
|
//# sourceMappingURL=index.test.js.map
|
package/dist/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@critical-path/client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Type-safe JavaScript/TypeScript client SDK for consuming Critical Path API endpoints",
|
|
5
5
|
"author": "Jack James",
|
|
6
6
|
"license": "MIT",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@critical-path/core": "0.
|
|
21
|
+
"@critical-path/core": "0.8.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@types/node": "^24.0.0",
|
package/src/index.test.ts
CHANGED
|
@@ -45,4 +45,74 @@ describe('@critical-path/client Tests', () => {
|
|
|
45
45
|
const transitions = await client.getAllowedTaskTransitions('t1');
|
|
46
46
|
expect(transitions).toEqual(['in_progress', 'canceled']);
|
|
47
47
|
});
|
|
48
|
+
|
|
49
|
+
it('handles comments and attachments through client SDK methods', async () => {
|
|
50
|
+
const mockFetch = async (url: string | URL | Request, init?: RequestInit) => {
|
|
51
|
+
const urlStr = url.toString();
|
|
52
|
+
const method = init?.method?.toUpperCase() || 'GET';
|
|
53
|
+
|
|
54
|
+
if (urlStr.includes('/comments?taskId=t1') && method === 'GET') {
|
|
55
|
+
return new Response(JSON.stringify({ comments: [{ id: 'c1', taskId: 't1', content: 'SDK Comment', authorId: 'u1', authorType: 'user' }] }), { status: 200 });
|
|
56
|
+
}
|
|
57
|
+
if (urlStr.endsWith('/comments') && method === 'POST') {
|
|
58
|
+
const body = JSON.parse(init?.body as string);
|
|
59
|
+
return new Response(JSON.stringify({ comment: { id: 'c2', ...body } }), { status: 201 });
|
|
60
|
+
}
|
|
61
|
+
if (urlStr.endsWith('/comments/c1') && method === 'PATCH') {
|
|
62
|
+
const body = JSON.parse(init?.body as string);
|
|
63
|
+
return new Response(JSON.stringify({ comment: { id: 'c1', content: body.content } }), { status: 200 });
|
|
64
|
+
}
|
|
65
|
+
if (urlStr.endsWith('/comments/c1') && method === 'DELETE') {
|
|
66
|
+
return new Response(JSON.stringify({ success: true }), { status: 200 });
|
|
67
|
+
}
|
|
68
|
+
if (urlStr.includes('/attachments?taskId=t1') && method === 'GET') {
|
|
69
|
+
return new Response(JSON.stringify({ attachments: [{ id: 'a1', filename: 'SDK Doc', mimeType: 'text/plain', sizeBytes: 50, url: 'https://cdn.example.com/a1' }] }), { status: 200 });
|
|
70
|
+
}
|
|
71
|
+
if (urlStr.endsWith('/attachments') && method === 'POST') {
|
|
72
|
+
const body = JSON.parse(init?.body as string);
|
|
73
|
+
return new Response(JSON.stringify({ attachment: { id: 'a2', ...body } }), { status: 201 });
|
|
74
|
+
}
|
|
75
|
+
if (urlStr.endsWith('/attachments/upload') && method === 'POST') {
|
|
76
|
+
const body = JSON.parse(init?.body as string);
|
|
77
|
+
return new Response(JSON.stringify({ attachment: { id: 'a_up', ...body, url: 'https://cdn.example.com/uploaded.png' } }), { status: 201 });
|
|
78
|
+
}
|
|
79
|
+
if (urlStr.endsWith('/attachments/a1') && method === 'DELETE') {
|
|
80
|
+
return new Response(JSON.stringify({ success: true }), { status: 200 });
|
|
81
|
+
}
|
|
82
|
+
return new Response(JSON.stringify({ error: 'Not found' }), { status: 404 });
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const client = new CriticalPathClient({
|
|
86
|
+
baseUrl: 'http://localhost:3000/api/critical-path',
|
|
87
|
+
fetch: mockFetch as typeof fetch
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const comments = await client.getComments('t1');
|
|
91
|
+
expect(comments).toHaveLength(1);
|
|
92
|
+
expect(comments[0].content).toBe('SDK Comment');
|
|
93
|
+
|
|
94
|
+
const createdComment = await client.addComment({ taskId: 't1', content: 'New comment', authorId: 'u2', authorType: 'user' });
|
|
95
|
+
expect(createdComment.id).toBe('c2');
|
|
96
|
+
|
|
97
|
+
const updatedComment = await client.updateComment('c1', { content: 'Updated' });
|
|
98
|
+
expect(updatedComment.content).toBe('Updated');
|
|
99
|
+
|
|
100
|
+
const deletedComment = await client.deleteComment('c1');
|
|
101
|
+
expect(deletedComment).toBe(true);
|
|
102
|
+
|
|
103
|
+
const attachments = await client.getAttachments({ taskId: 't1' });
|
|
104
|
+
expect(attachments).toHaveLength(1);
|
|
105
|
+
expect(attachments[0].filename).toBe('SDK Doc');
|
|
106
|
+
|
|
107
|
+
const createdAtt = await client.createAttachment({ filename: 'file.txt', mimeType: 'text/plain', sizeBytes: 12, url: 'https://example.com/file.txt', uploaderId: 'u1' });
|
|
108
|
+
expect(createdAtt.id).toBe('a2');
|
|
109
|
+
|
|
110
|
+
const uploadedAtt = await client.uploadAttachmentFile({ filename: 'uploaded.png', data: 'base64data', uploaderId: 'u1' });
|
|
111
|
+
expect(uploadedAtt.id).toBe('a_up');
|
|
112
|
+
expect(uploadedAtt.url).toBe('https://cdn.example.com/uploaded.png');
|
|
113
|
+
|
|
114
|
+
const deletedAtt = await client.deleteAttachment('a1');
|
|
115
|
+
expect(deletedAtt).toBe(true);
|
|
116
|
+
});
|
|
48
117
|
});
|
|
118
|
+
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,9 @@ import type {
|
|
|
7
7
|
Iteration,
|
|
8
8
|
Activity,
|
|
9
9
|
Comment,
|
|
10
|
+
Attachment,
|
|
11
|
+
PresignedUrlOptions,
|
|
12
|
+
PresignedUploadResult,
|
|
10
13
|
TimeEntry,
|
|
11
14
|
Workflow
|
|
12
15
|
} from '@critical-path/core';
|
|
@@ -259,6 +262,11 @@ export class CriticalPathClient {
|
|
|
259
262
|
return res.comments;
|
|
260
263
|
}
|
|
261
264
|
|
|
265
|
+
async getComment(id: string): Promise<Comment> {
|
|
266
|
+
const res = await this.request<{ comment: Comment }>(`/comments/${encodeURIComponent(id)}`);
|
|
267
|
+
return res.comment;
|
|
268
|
+
}
|
|
269
|
+
|
|
262
270
|
async addComment(data: Omit<Comment, 'id' | 'createdAt' | 'updatedAt'>): Promise<Comment> {
|
|
263
271
|
const res = await this.request<{ comment: Comment }>('/comments', {
|
|
264
272
|
method: 'POST',
|
|
@@ -267,6 +275,79 @@ export class CriticalPathClient {
|
|
|
267
275
|
return res.comment;
|
|
268
276
|
}
|
|
269
277
|
|
|
278
|
+
async updateComment(id: string, updates: Partial<Comment>): Promise<Comment> {
|
|
279
|
+
const res = await this.request<{ comment: Comment }>(`/comments/${encodeURIComponent(id)}`, {
|
|
280
|
+
method: 'PATCH',
|
|
281
|
+
body: JSON.stringify(updates)
|
|
282
|
+
});
|
|
283
|
+
return res.comment;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
async deleteComment(id: string): Promise<boolean> {
|
|
287
|
+
const res = await this.request<{ success: boolean }>(`/comments/${encodeURIComponent(id)}`, {
|
|
288
|
+
method: 'DELETE'
|
|
289
|
+
});
|
|
290
|
+
return res.success;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Attachments
|
|
294
|
+
async getAttachments(filter?: { taskId?: string; projectId?: string; commentId?: string }): Promise<Attachment[]> {
|
|
295
|
+
const params = new URLSearchParams();
|
|
296
|
+
if (filter?.taskId) params.set('taskId', filter.taskId);
|
|
297
|
+
if (filter?.projectId) params.set('projectId', filter.projectId);
|
|
298
|
+
if (filter?.commentId) params.set('commentId', filter.commentId);
|
|
299
|
+
const query = params.toString() ? `?${params.toString()}` : '';
|
|
300
|
+
const res = await this.request<{ attachments: Attachment[] }>(`/attachments${query}`);
|
|
301
|
+
return res.attachments;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
async getAttachment(id: string): Promise<Attachment> {
|
|
305
|
+
const res = await this.request<{ attachment: Attachment }>(`/attachments/${encodeURIComponent(id)}`);
|
|
306
|
+
return res.attachment;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
async createAttachment(data: Omit<Attachment, 'id' | 'createdAt' | 'updatedAt'>): Promise<Attachment> {
|
|
310
|
+
const res = await this.request<{ attachment: Attachment }>('/attachments', {
|
|
311
|
+
method: 'POST',
|
|
312
|
+
body: JSON.stringify(data)
|
|
313
|
+
});
|
|
314
|
+
return res.attachment;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async uploadAttachmentFile(data: {
|
|
318
|
+
filename: string;
|
|
319
|
+
data: string | Uint8Array | ArrayBuffer;
|
|
320
|
+
mimeType?: string;
|
|
321
|
+
pathPrefix?: string;
|
|
322
|
+
taskId?: string;
|
|
323
|
+
projectId?: string;
|
|
324
|
+
commentId?: string;
|
|
325
|
+
uploaderId: string;
|
|
326
|
+
uploaderType?: 'user' | 'agent' | 'system';
|
|
327
|
+
metadata?: Record<string, unknown>;
|
|
328
|
+
}): Promise<Attachment> {
|
|
329
|
+
const res = await this.request<{ attachment: Attachment }>('/attachments/upload', {
|
|
330
|
+
method: 'POST',
|
|
331
|
+
body: JSON.stringify(data)
|
|
332
|
+
});
|
|
333
|
+
return res.attachment;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
async deleteAttachment(id: string): Promise<boolean> {
|
|
337
|
+
const res = await this.request<{ success: boolean }>(`/attachments/${encodeURIComponent(id)}`, {
|
|
338
|
+
method: 'DELETE'
|
|
339
|
+
});
|
|
340
|
+
return res.success;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
async getPresignedAttachmentUploadUrl(options: PresignedUrlOptions): Promise<PresignedUploadResult> {
|
|
344
|
+
const res = await this.request<{ presigned: PresignedUploadResult }>('/attachments/presign', {
|
|
345
|
+
method: 'POST',
|
|
346
|
+
body: JSON.stringify(options)
|
|
347
|
+
});
|
|
348
|
+
return res.presigned;
|
|
349
|
+
}
|
|
350
|
+
|
|
270
351
|
// Time Entries
|
|
271
352
|
async getTimeEntries(taskId: string): Promise<TimeEntry[]> {
|
|
272
353
|
const res = await this.request<{ timeEntries: TimeEntry[] }>(`/time-entries?taskId=${encodeURIComponent(taskId)}`);
|