@hasna/connectors 0.3.16 → 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/bin/index.js +71 -1
- package/bin/mcp.js +71 -1
- package/bin/serve.js +70 -0
- package/connectors/connect-asana/.env.example +11 -0
- package/connectors/connect-asana/CLAUDE.md +128 -0
- package/connectors/connect-asana/README.md +193 -0
- package/connectors/connect-asana/package.json +52 -0
- package/connectors/connect-asana/src/api/client.ts +119 -0
- package/connectors/connect-asana/src/api/index.ts +319 -0
- package/connectors/connect-asana/src/cli/index.ts +731 -0
- package/connectors/connect-asana/src/index.ts +19 -0
- package/connectors/connect-asana/src/types/index.ts +270 -0
- package/connectors/connect-asana/src/utils/config.ts +171 -0
- package/connectors/connect-asana/src/utils/output.ts +119 -0
- package/connectors/connect-asana/tsconfig.json +16 -0
- package/connectors/connect-clickup/.env.example +11 -0
- package/connectors/connect-clickup/CLAUDE.md +128 -0
- package/connectors/connect-clickup/README.md +193 -0
- package/connectors/connect-clickup/package.json +52 -0
- package/connectors/connect-clickup/src/api/client.ts +116 -0
- package/connectors/connect-clickup/src/api/index.ts +400 -0
- package/connectors/connect-clickup/src/cli/index.ts +625 -0
- package/connectors/connect-clickup/src/index.ts +19 -0
- package/connectors/connect-clickup/src/types/index.ts +591 -0
- package/connectors/connect-clickup/src/utils/config.ts +157 -0
- package/connectors/connect-clickup/src/utils/output.ts +119 -0
- package/connectors/connect-clickup/tsconfig.json +16 -0
- package/connectors/connect-confluence/.env.example +11 -0
- package/connectors/connect-confluence/CLAUDE.md +272 -0
- package/connectors/connect-confluence/README.md +193 -0
- package/connectors/connect-confluence/package.json +53 -0
- package/connectors/connect-confluence/scripts/release.ts +179 -0
- package/connectors/connect-confluence/src/api/client.ts +213 -0
- package/connectors/connect-confluence/src/api/example.ts +48 -0
- package/connectors/connect-confluence/src/api/index.ts +51 -0
- package/connectors/connect-confluence/src/cli/index.ts +254 -0
- package/connectors/connect-confluence/src/index.ts +103 -0
- package/connectors/connect-confluence/src/types/index.ts +237 -0
- package/connectors/connect-confluence/src/utils/auth.ts +274 -0
- package/connectors/connect-confluence/src/utils/bulk.ts +212 -0
- package/connectors/connect-confluence/src/utils/config.ts +326 -0
- package/connectors/connect-confluence/src/utils/output.ts +175 -0
- package/connectors/connect-confluence/src/utils/settings.ts +114 -0
- package/connectors/connect-confluence/src/utils/storage.ts +198 -0
- package/connectors/connect-confluence/tsconfig.json +16 -0
- package/connectors/connect-jira/.env.example +11 -0
- package/connectors/connect-jira/CLAUDE.md +128 -0
- package/connectors/connect-jira/README.md +193 -0
- package/connectors/connect-jira/package.json +53 -0
- package/connectors/connect-jira/src/api/client.ts +131 -0
- package/connectors/connect-jira/src/api/index.ts +266 -0
- package/connectors/connect-jira/src/cli/index.ts +653 -0
- package/connectors/connect-jira/src/index.ts +23 -0
- package/connectors/connect-jira/src/types/index.ts +448 -0
- package/connectors/connect-jira/src/utils/config.ts +179 -0
- package/connectors/connect-jira/src/utils/output.ts +119 -0
- package/connectors/connect-jira/tsconfig.json +16 -0
- package/connectors/connect-linear/CLAUDE.md +88 -0
- package/connectors/connect-linear/README.md +201 -0
- package/connectors/connect-linear/package.json +45 -0
- package/connectors/connect-linear/src/api/client.ts +62 -0
- package/connectors/connect-linear/src/api/index.ts +46 -0
- package/connectors/connect-linear/src/api/issues.ts +247 -0
- package/connectors/connect-linear/src/api/projects.ts +179 -0
- package/connectors/connect-linear/src/api/teams.ts +125 -0
- package/connectors/connect-linear/src/api/users.ts +112 -0
- package/connectors/connect-linear/src/cli/index.ts +560 -0
- package/connectors/connect-linear/src/index.ts +27 -0
- package/connectors/connect-linear/src/types/index.ts +275 -0
- package/connectors/connect-linear/src/utils/config.ts +249 -0
- package/connectors/connect-linear/src/utils/output.ts +119 -0
- package/connectors/connect-linear/tsconfig.json +16 -0
- package/connectors/connect-slack/.env.example +7 -0
- package/connectors/connect-slack/CLAUDE.md +69 -0
- package/connectors/connect-slack/README.md +150 -0
- package/connectors/connect-slack/package.json +44 -0
- package/connectors/connect-slack/src/api/channels.ts +112 -0
- package/connectors/connect-slack/src/api/client.ts +97 -0
- package/connectors/connect-slack/src/api/index.ts +42 -0
- package/connectors/connect-slack/src/api/messages.ts +127 -0
- package/connectors/connect-slack/src/api/users.ts +110 -0
- package/connectors/connect-slack/src/cli/index.ts +494 -0
- package/connectors/connect-slack/src/index.ts +21 -0
- package/connectors/connect-slack/src/types/index.ts +263 -0
- package/connectors/connect-slack/src/utils/config.ts +297 -0
- package/connectors/connect-slack/src/utils/output.ts +119 -0
- package/connectors/connect-slack/tsconfig.json +16 -0
- package/connectors/connect-telegram/.env.example +2 -0
- package/connectors/connect-telegram/package.json +49 -0
- package/connectors/connect-todoist/.env.example +11 -0
- package/connectors/connect-todoist/CLAUDE.md +104 -0
- package/connectors/connect-todoist/README.md +193 -0
- package/connectors/connect-todoist/package.json +52 -0
- package/connectors/connect-todoist/src/api/client.ts +117 -0
- package/connectors/connect-todoist/src/api/index.ts +188 -0
- package/connectors/connect-todoist/src/cli/index.ts +990 -0
- package/connectors/connect-todoist/src/index.ts +21 -0
- package/connectors/connect-todoist/src/types/index.ts +240 -0
- package/connectors/connect-todoist/src/utils/config.ts +157 -0
- package/connectors/connect-todoist/src/utils/output.ts +119 -0
- package/connectors/connect-todoist/tsconfig.json +16 -0
- package/connectors/connect-trello/.env.example +11 -0
- package/connectors/connect-trello/CLAUDE.md +128 -0
- package/connectors/connect-trello/README.md +193 -0
- package/connectors/connect-trello/package.json +53 -0
- package/connectors/connect-trello/src/api/client.ts +128 -0
- package/connectors/connect-trello/src/api/index.ts +278 -0
- package/connectors/connect-trello/src/cli/index.ts +737 -0
- package/connectors/connect-trello/src/index.ts +21 -0
- package/connectors/connect-trello/src/types/index.ts +314 -0
- package/connectors/connect-trello/src/utils/config.ts +182 -0
- package/connectors/connect-trello/src/utils/output.ts +119 -0
- package/connectors/connect-trello/tsconfig.json +16 -0
- package/connectors/connect-whatsapp/.env.example +11 -0
- package/connectors/connect-whatsapp/CLAUDE.md +113 -0
- package/connectors/connect-whatsapp/README.md +193 -0
- package/connectors/connect-whatsapp/package.json +53 -0
- package/connectors/connect-whatsapp/src/api/client.ts +133 -0
- package/connectors/connect-whatsapp/src/api/index.ts +365 -0
- package/connectors/connect-whatsapp/src/cli/index.ts +686 -0
- package/connectors/connect-whatsapp/src/index.ts +25 -0
- package/connectors/connect-whatsapp/src/types/index.ts +502 -0
- package/connectors/connect-whatsapp/src/utils/config.ts +179 -0
- package/connectors/connect-whatsapp/src/utils/output.ts +119 -0
- package/connectors/connect-whatsapp/tsconfig.json +16 -0
- package/dist/index.js +70 -0
- package/package.json +1 -1
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
// ClickUp Connector
|
|
2
|
+
// Workspaces, spaces, folders, lists, and tasks management
|
|
3
|
+
|
|
4
|
+
import { ClickUpClient } from './client';
|
|
5
|
+
import type {
|
|
6
|
+
ClickUpConfig,
|
|
7
|
+
User,
|
|
8
|
+
Workspace,
|
|
9
|
+
Space,
|
|
10
|
+
Folder,
|
|
11
|
+
List,
|
|
12
|
+
Task,
|
|
13
|
+
Comment,
|
|
14
|
+
Tag,
|
|
15
|
+
Checklist,
|
|
16
|
+
TimeEntry,
|
|
17
|
+
Goal,
|
|
18
|
+
Webhook,
|
|
19
|
+
CreateSpaceInput,
|
|
20
|
+
CreateFolderInput,
|
|
21
|
+
CreateListInput,
|
|
22
|
+
CreateTaskInput,
|
|
23
|
+
UpdateTaskInput,
|
|
24
|
+
CreateCommentInput,
|
|
25
|
+
CreateChecklistInput,
|
|
26
|
+
CreateChecklistItemInput,
|
|
27
|
+
CreateWebhookInput,
|
|
28
|
+
TasksResponse,
|
|
29
|
+
} from '../types';
|
|
30
|
+
|
|
31
|
+
export { ClickUpClient } from './client';
|
|
32
|
+
|
|
33
|
+
export class ClickUp {
|
|
34
|
+
private client: ClickUpClient;
|
|
35
|
+
|
|
36
|
+
constructor(config: ClickUpConfig) {
|
|
37
|
+
this.client = new ClickUpClient(config);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ============================================
|
|
41
|
+
// User Operations
|
|
42
|
+
// ============================================
|
|
43
|
+
|
|
44
|
+
async getAuthorizedUser(): Promise<User> {
|
|
45
|
+
const result = await this.client.get<{ user: User }>('/user');
|
|
46
|
+
return result.user;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ============================================
|
|
50
|
+
// Workspace (Team) Operations
|
|
51
|
+
// ============================================
|
|
52
|
+
|
|
53
|
+
async listWorkspaces(): Promise<Workspace[]> {
|
|
54
|
+
const result = await this.client.get<{ teams: Workspace[] }>('/team');
|
|
55
|
+
return result.teams;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// ============================================
|
|
59
|
+
// Space Operations
|
|
60
|
+
// ============================================
|
|
61
|
+
|
|
62
|
+
async listSpaces(teamId: string, options?: { archived?: boolean }): Promise<Space[]> {
|
|
63
|
+
const result = await this.client.get<{ spaces: Space[] }>(`/team/${teamId}/space`, {
|
|
64
|
+
archived: options?.archived,
|
|
65
|
+
});
|
|
66
|
+
return result.spaces;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async getSpace(spaceId: string): Promise<Space> {
|
|
70
|
+
return this.client.get<Space>(`/space/${spaceId}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async createSpace(teamId: string, input: CreateSpaceInput): Promise<Space> {
|
|
74
|
+
return this.client.post<Space>(`/team/${teamId}/space`, input);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async updateSpace(spaceId: string, input: Partial<CreateSpaceInput>): Promise<Space> {
|
|
78
|
+
return this.client.put<Space>(`/space/${spaceId}`, input);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async deleteSpace(spaceId: string): Promise<void> {
|
|
82
|
+
await this.client.delete(`/space/${spaceId}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// ============================================
|
|
86
|
+
// Folder Operations
|
|
87
|
+
// ============================================
|
|
88
|
+
|
|
89
|
+
async listFolders(spaceId: string, options?: { archived?: boolean }): Promise<Folder[]> {
|
|
90
|
+
const result = await this.client.get<{ folders: Folder[] }>(`/space/${spaceId}/folder`, {
|
|
91
|
+
archived: options?.archived,
|
|
92
|
+
});
|
|
93
|
+
return result.folders;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async getFolder(folderId: string): Promise<Folder> {
|
|
97
|
+
return this.client.get<Folder>(`/folder/${folderId}`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
async createFolder(spaceId: string, input: CreateFolderInput): Promise<Folder> {
|
|
101
|
+
return this.client.post<Folder>(`/space/${spaceId}/folder`, input);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
async updateFolder(folderId: string, input: CreateFolderInput): Promise<Folder> {
|
|
105
|
+
return this.client.put<Folder>(`/folder/${folderId}`, input);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
async deleteFolder(folderId: string): Promise<void> {
|
|
109
|
+
await this.client.delete(`/folder/${folderId}`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ============================================
|
|
113
|
+
// List Operations
|
|
114
|
+
// ============================================
|
|
115
|
+
|
|
116
|
+
async listLists(folderId: string, options?: { archived?: boolean }): Promise<List[]> {
|
|
117
|
+
const result = await this.client.get<{ lists: List[] }>(`/folder/${folderId}/list`, {
|
|
118
|
+
archived: options?.archived,
|
|
119
|
+
});
|
|
120
|
+
return result.lists;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
async listFolderlessLists(spaceId: string, options?: { archived?: boolean }): Promise<List[]> {
|
|
124
|
+
const result = await this.client.get<{ lists: List[] }>(`/space/${spaceId}/list`, {
|
|
125
|
+
archived: options?.archived,
|
|
126
|
+
});
|
|
127
|
+
return result.lists;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async getList(listId: string): Promise<List> {
|
|
131
|
+
return this.client.get<List>(`/list/${listId}`);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async createList(folderId: string, input: CreateListInput): Promise<List> {
|
|
135
|
+
return this.client.post<List>(`/folder/${folderId}/list`, input);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async createFolderlessList(spaceId: string, input: CreateListInput): Promise<List> {
|
|
139
|
+
return this.client.post<List>(`/space/${spaceId}/list`, input);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
async updateList(listId: string, input: Partial<CreateListInput>): Promise<List> {
|
|
143
|
+
return this.client.put<List>(`/list/${listId}`, input);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async deleteList(listId: string): Promise<void> {
|
|
147
|
+
await this.client.delete(`/list/${listId}`);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// ============================================
|
|
151
|
+
// Task Operations
|
|
152
|
+
// ============================================
|
|
153
|
+
|
|
154
|
+
async listTasks(listId: string, options?: {
|
|
155
|
+
archived?: boolean;
|
|
156
|
+
page?: number;
|
|
157
|
+
order_by?: string;
|
|
158
|
+
reverse?: boolean;
|
|
159
|
+
subtasks?: boolean;
|
|
160
|
+
statuses?: string[];
|
|
161
|
+
include_closed?: boolean;
|
|
162
|
+
assignees?: string[];
|
|
163
|
+
due_date_gt?: number;
|
|
164
|
+
due_date_lt?: number;
|
|
165
|
+
date_created_gt?: number;
|
|
166
|
+
date_created_lt?: number;
|
|
167
|
+
date_updated_gt?: number;
|
|
168
|
+
date_updated_lt?: number;
|
|
169
|
+
}): Promise<TasksResponse> {
|
|
170
|
+
return this.client.get<TasksResponse>(`/list/${listId}/task`, options);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
async getTask(taskId: string, options?: {
|
|
174
|
+
custom_task_ids?: boolean;
|
|
175
|
+
team_id?: string;
|
|
176
|
+
include_subtasks?: boolean;
|
|
177
|
+
}): Promise<Task> {
|
|
178
|
+
return this.client.get<Task>(`/task/${taskId}`, options);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
async createTask(listId: string, input: CreateTaskInput): Promise<Task> {
|
|
182
|
+
return this.client.post<Task>(`/list/${listId}/task`, input);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async updateTask(taskId: string, input: UpdateTaskInput, options?: {
|
|
186
|
+
custom_task_ids?: boolean;
|
|
187
|
+
team_id?: string;
|
|
188
|
+
}): Promise<Task> {
|
|
189
|
+
return this.client.put<Task>(`/task/${taskId}`, input, options);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async deleteTask(taskId: string, options?: {
|
|
193
|
+
custom_task_ids?: boolean;
|
|
194
|
+
team_id?: string;
|
|
195
|
+
}): Promise<void> {
|
|
196
|
+
await this.client.delete(`/task/${taskId}`, options);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ============================================
|
|
200
|
+
// Comment Operations
|
|
201
|
+
// ============================================
|
|
202
|
+
|
|
203
|
+
async listTaskComments(taskId: string, options?: {
|
|
204
|
+
custom_task_ids?: boolean;
|
|
205
|
+
team_id?: string;
|
|
206
|
+
start?: number;
|
|
207
|
+
start_id?: string;
|
|
208
|
+
}): Promise<Comment[]> {
|
|
209
|
+
const result = await this.client.get<{ comments: Comment[] }>(`/task/${taskId}/comment`, options);
|
|
210
|
+
return result.comments;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
async createTaskComment(taskId: string, input: CreateCommentInput, options?: {
|
|
214
|
+
custom_task_ids?: boolean;
|
|
215
|
+
team_id?: string;
|
|
216
|
+
}): Promise<Comment> {
|
|
217
|
+
return this.client.post<Comment>(`/task/${taskId}/comment`, input, options);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
async listListComments(listId: string): Promise<Comment[]> {
|
|
221
|
+
const result = await this.client.get<{ comments: Comment[] }>(`/list/${listId}/comment`);
|
|
222
|
+
return result.comments;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
async createListComment(listId: string, input: CreateCommentInput): Promise<Comment> {
|
|
226
|
+
return this.client.post<Comment>(`/list/${listId}/comment`, input);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
async updateComment(commentId: string, input: { comment_text: string; assignee?: number; resolved?: boolean }): Promise<Comment> {
|
|
230
|
+
return this.client.put<Comment>(`/comment/${commentId}`, input);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
async deleteComment(commentId: string): Promise<void> {
|
|
234
|
+
await this.client.delete(`/comment/${commentId}`);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// ============================================
|
|
238
|
+
// Tag Operations
|
|
239
|
+
// ============================================
|
|
240
|
+
|
|
241
|
+
async listSpaceTags(spaceId: string): Promise<Tag[]> {
|
|
242
|
+
const result = await this.client.get<{ tags: Tag[] }>(`/space/${spaceId}/tag`);
|
|
243
|
+
return result.tags;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
async createSpaceTag(spaceId: string, tag: { name: string; tag_fg?: string; tag_bg?: string }): Promise<Tag> {
|
|
247
|
+
return this.client.post<Tag>(`/space/${spaceId}/tag`, { tag });
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
async addTagToTask(taskId: string, tagName: string, options?: {
|
|
251
|
+
custom_task_ids?: boolean;
|
|
252
|
+
team_id?: string;
|
|
253
|
+
}): Promise<void> {
|
|
254
|
+
await this.client.post(`/task/${taskId}/tag/${tagName}`, {}, options);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
async removeTagFromTask(taskId: string, tagName: string, options?: {
|
|
258
|
+
custom_task_ids?: boolean;
|
|
259
|
+
team_id?: string;
|
|
260
|
+
}): Promise<void> {
|
|
261
|
+
await this.client.delete(`/task/${taskId}/tag/${tagName}`, options);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ============================================
|
|
265
|
+
// Checklist Operations
|
|
266
|
+
// ============================================
|
|
267
|
+
|
|
268
|
+
async createChecklist(taskId: string, input: CreateChecklistInput, options?: {
|
|
269
|
+
custom_task_ids?: boolean;
|
|
270
|
+
team_id?: string;
|
|
271
|
+
}): Promise<Checklist> {
|
|
272
|
+
const result = await this.client.post<{ checklist: Checklist }>(`/task/${taskId}/checklist`, input, options);
|
|
273
|
+
return result.checklist;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
async updateChecklist(checklistId: string, input: { name?: string; position?: number }): Promise<Checklist> {
|
|
277
|
+
const result = await this.client.put<{ checklist: Checklist }>(`/checklist/${checklistId}`, input);
|
|
278
|
+
return result.checklist;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
async deleteChecklist(checklistId: string): Promise<void> {
|
|
282
|
+
await this.client.delete(`/checklist/${checklistId}`);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async createChecklistItem(checklistId: string, input: CreateChecklistItemInput): Promise<Checklist> {
|
|
286
|
+
const result = await this.client.post<{ checklist: Checklist }>(`/checklist/${checklistId}/checklist_item`, input);
|
|
287
|
+
return result.checklist;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
async updateChecklistItem(checklistId: string, checklistItemId: string, input: {
|
|
291
|
+
name?: string;
|
|
292
|
+
assignee?: number | null;
|
|
293
|
+
resolved?: boolean;
|
|
294
|
+
parent?: string | null;
|
|
295
|
+
}): Promise<Checklist> {
|
|
296
|
+
const result = await this.client.put<{ checklist: Checklist }>(`/checklist/${checklistId}/checklist_item/${checklistItemId}`, input);
|
|
297
|
+
return result.checklist;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
async deleteChecklistItem(checklistId: string, checklistItemId: string): Promise<void> {
|
|
301
|
+
await this.client.delete(`/checklist/${checklistId}/checklist_item/${checklistItemId}`);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// ============================================
|
|
305
|
+
// Time Entry Operations
|
|
306
|
+
// ============================================
|
|
307
|
+
|
|
308
|
+
async listTimeEntries(teamId: string, options?: {
|
|
309
|
+
start_date?: number;
|
|
310
|
+
end_date?: number;
|
|
311
|
+
assignee?: number;
|
|
312
|
+
include_task_tags?: boolean;
|
|
313
|
+
include_location_names?: boolean;
|
|
314
|
+
space_id?: string;
|
|
315
|
+
folder_id?: string;
|
|
316
|
+
list_id?: string;
|
|
317
|
+
task_id?: string;
|
|
318
|
+
}): Promise<TimeEntry[]> {
|
|
319
|
+
const result = await this.client.get<{ data: TimeEntry[] }>(`/team/${teamId}/time_entries`, options);
|
|
320
|
+
return result.data;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
async getTimeEntry(teamId: string, timerId: string): Promise<TimeEntry> {
|
|
324
|
+
const result = await this.client.get<{ data: TimeEntry }>(`/team/${teamId}/time_entries/${timerId}`);
|
|
325
|
+
return result.data;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// ============================================
|
|
329
|
+
// Goal Operations
|
|
330
|
+
// ============================================
|
|
331
|
+
|
|
332
|
+
async listGoals(teamId: string, options?: { include_completed?: boolean }): Promise<Goal[]> {
|
|
333
|
+
const result = await this.client.get<{ goals: Goal[] }>(`/team/${teamId}/goal`, options);
|
|
334
|
+
return result.goals;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
async getGoal(goalId: string): Promise<Goal> {
|
|
338
|
+
const result = await this.client.get<{ goal: Goal }>(`/goal/${goalId}`);
|
|
339
|
+
return result.goal;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
async createGoal(teamId: string, input: {
|
|
343
|
+
name: string;
|
|
344
|
+
due_date: number;
|
|
345
|
+
description?: string;
|
|
346
|
+
multiple_owners?: boolean;
|
|
347
|
+
owners?: number[];
|
|
348
|
+
color?: string;
|
|
349
|
+
}): Promise<Goal> {
|
|
350
|
+
const result = await this.client.post<{ goal: Goal }>(`/team/${teamId}/goal`, input);
|
|
351
|
+
return result.goal;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
async updateGoal(goalId: string, input: {
|
|
355
|
+
name?: string;
|
|
356
|
+
due_date?: number;
|
|
357
|
+
description?: string;
|
|
358
|
+
color?: string;
|
|
359
|
+
add_owners?: number[];
|
|
360
|
+
rem_owners?: number[];
|
|
361
|
+
}): Promise<Goal> {
|
|
362
|
+
const result = await this.client.put<{ goal: Goal }>(`/goal/${goalId}`, input);
|
|
363
|
+
return result.goal;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
async deleteGoal(goalId: string): Promise<void> {
|
|
367
|
+
await this.client.delete(`/goal/${goalId}`);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// ============================================
|
|
371
|
+
// Webhook Operations
|
|
372
|
+
// ============================================
|
|
373
|
+
|
|
374
|
+
async listWebhooks(teamId: string): Promise<Webhook[]> {
|
|
375
|
+
const result = await this.client.get<{ webhooks: Webhook[] }>(`/team/${teamId}/webhook`);
|
|
376
|
+
return result.webhooks;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
async createWebhook(teamId: string, input: CreateWebhookInput): Promise<Webhook> {
|
|
380
|
+
const result = await this.client.post<{ webhook: Webhook }>(`/team/${teamId}/webhook`, input);
|
|
381
|
+
return result.webhook;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
async updateWebhook(webhookId: string, input: Partial<CreateWebhookInput>): Promise<Webhook> {
|
|
385
|
+
const result = await this.client.put<{ webhook: Webhook }>(`/webhook/${webhookId}`, input);
|
|
386
|
+
return result.webhook;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
async deleteWebhook(webhookId: string): Promise<void> {
|
|
390
|
+
await this.client.delete(`/webhook/${webhookId}`);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// ============================================
|
|
394
|
+
// Utility Methods
|
|
395
|
+
// ============================================
|
|
396
|
+
|
|
397
|
+
getClient(): ClickUpClient {
|
|
398
|
+
return this.client;
|
|
399
|
+
}
|
|
400
|
+
}
|