nixelo 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -0
- package/dist/commands/apiKeys.d.ts +3 -0
- package/dist/commands/apiKeys.d.ts.map +1 -0
- package/dist/commands/apiKeys.js +200 -0
- package/dist/commands/apiKeys.js.map +1 -0
- package/dist/commands/auth.d.ts +7 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +201 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/automations.d.ts +3 -0
- package/dist/commands/automations.d.ts.map +1 -0
- package/dist/commands/automations.js +302 -0
- package/dist/commands/automations.js.map +1 -0
- package/dist/commands/commandTree.d.ts +10 -0
- package/dist/commands/commandTree.d.ts.map +1 -0
- package/dist/commands/commandTree.js +36 -0
- package/dist/commands/commandTree.js.map +1 -0
- package/dist/commands/completion.d.ts +6 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +101 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +133 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/documents.d.ts +3 -0
- package/dist/commands/documents.d.ts.map +1 -0
- package/dist/commands/documents.js +200 -0
- package/dist/commands/documents.js.map +1 -0
- package/dist/commands/fields.d.ts +3 -0
- package/dist/commands/fields.d.ts.map +1 -0
- package/dist/commands/fields.js +199 -0
- package/dist/commands/fields.js.map +1 -0
- package/dist/commands/filters.d.ts +3 -0
- package/dist/commands/filters.d.ts.map +1 -0
- package/dist/commands/filters.js +243 -0
- package/dist/commands/filters.js.map +1 -0
- package/dist/commands/global.d.ts +5 -0
- package/dist/commands/global.d.ts.map +1 -0
- package/dist/commands/global.js +42 -0
- package/dist/commands/global.js.map +1 -0
- package/dist/commands/index.d.ts +23 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +23 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/invites.d.ts +3 -0
- package/dist/commands/invites.d.ts.map +1 -0
- package/dist/commands/invites.js +113 -0
- package/dist/commands/invites.js.map +1 -0
- package/dist/commands/issues/filter.d.ts +19 -0
- package/dist/commands/issues/filter.d.ts.map +1 -0
- package/dist/commands/issues/filter.js +72 -0
- package/dist/commands/issues/filter.js.map +1 -0
- package/dist/commands/issues/options.d.ts +33 -0
- package/dist/commands/issues/options.d.ts.map +1 -0
- package/dist/commands/issues/options.js +68 -0
- package/dist/commands/issues/options.js.map +1 -0
- package/dist/commands/issues/output.d.ts +12 -0
- package/dist/commands/issues/output.d.ts.map +1 -0
- package/dist/commands/issues/output.js +285 -0
- package/dist/commands/issues/output.js.map +1 -0
- package/dist/commands/issues.d.ts +3 -0
- package/dist/commands/issues.d.ts.map +1 -0
- package/dist/commands/issues.js +483 -0
- package/dist/commands/issues.js.map +1 -0
- package/dist/commands/labels.d.ts +3 -0
- package/dist/commands/labels.d.ts.map +1 -0
- package/dist/commands/labels.js +222 -0
- package/dist/commands/labels.js.map +1 -0
- package/dist/commands/notifications.d.ts +3 -0
- package/dist/commands/notifications.d.ts.map +1 -0
- package/dist/commands/notifications.js +127 -0
- package/dist/commands/notifications.js.map +1 -0
- package/dist/commands/projects.d.ts +5 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +749 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/registerAll.d.ts +3 -0
- package/dist/commands/registerAll.d.ts.map +1 -0
- package/dist/commands/registerAll.js +54 -0
- package/dist/commands/registerAll.js.map +1 -0
- package/dist/commands/sprints.d.ts +3 -0
- package/dist/commands/sprints.d.ts.map +1 -0
- package/dist/commands/sprints.js +359 -0
- package/dist/commands/sprints.js.map +1 -0
- package/dist/commands/stats.d.ts +3 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +206 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/teams.d.ts +3 -0
- package/dist/commands/teams.d.ts.map +1 -0
- package/dist/commands/teams.js +435 -0
- package/dist/commands/teams.js.map +1 -0
- package/dist/commands/templates.d.ts +3 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +264 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/time.d.ts +3 -0
- package/dist/commands/time.d.ts.map +1 -0
- package/dist/commands/time.js +191 -0
- package/dist/commands/time.js.map +1 -0
- package/dist/commands/tokens.d.ts +3 -0
- package/dist/commands/tokens.d.ts.map +1 -0
- package/dist/commands/tokens.js +76 -0
- package/dist/commands/tokens.js.map +1 -0
- package/dist/commands/users.d.ts +5 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +160 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +17 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/webhooks.d.ts +3 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +407 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/commands/workspaces.d.ts +3 -0
- package/dist/commands/workspaces.d.ts.map +1 -0
- package/dist/commands/workspaces.js +424 -0
- package/dist/commands/workspaces.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +20 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +80 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/convex.d.ts +1243 -0
- package/dist/lib/convex.d.ts.map +1 -0
- package/dist/lib/convex.js +675 -0
- package/dist/lib/convex.js.map +1 -0
- package/dist/lib/options.d.ts +10 -0
- package/dist/lib/options.d.ts.map +1 -0
- package/dist/lib/options.js +79 -0
- package/dist/lib/options.js.map +1 -0
- package/dist/lib/output.d.ts +19 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +60 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/project-key.d.ts +5 -0
- package/dist/lib/project-key.d.ts.map +1 -0
- package/dist/lib/project-key.js +56 -0
- package/dist/lib/project-key.js.map +1 -0
- package/dist/lib/prompt.d.ts +5 -0
- package/dist/lib/prompt.d.ts.map +1 -0
- package/dist/lib/prompt.js +28 -0
- package/dist/lib/prompt.js.map +1 -0
- package/dist/lib/user-picker.d.ts +4 -0
- package/dist/lib/user-picker.d.ts.map +1 -0
- package/dist/lib/user-picker.js +57 -0
- package/dist/lib/user-picker.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,675 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convex HTTP API client for nixelo CLI.
|
|
3
|
+
*
|
|
4
|
+
* Calls the Convex deployment's HTTP action endpoints with CLI token auth.
|
|
5
|
+
*/
|
|
6
|
+
import { loadToken } from "./auth.js";
|
|
7
|
+
export const CLI_API_PATHS = {
|
|
8
|
+
auth: "api/cli/auth",
|
|
9
|
+
tokens: "api/cli/tokens",
|
|
10
|
+
tokenRevoke: "api/cli/tokens/revoke",
|
|
11
|
+
whoami: "api/cli/whoami",
|
|
12
|
+
user: "api/cli/user",
|
|
13
|
+
usersSearch: "api/cli/users/search",
|
|
14
|
+
usersStats: "api/cli/users/stats",
|
|
15
|
+
invites: "api/cli/invites",
|
|
16
|
+
inviteResend: "api/cli/invites/resend",
|
|
17
|
+
inviteRevoke: "api/cli/invites/revoke",
|
|
18
|
+
apiKeys: "api/cli/apikeys",
|
|
19
|
+
apiKeyRevoke: "api/cli/apikeys/revoke",
|
|
20
|
+
apiKeyRotate: "api/cli/apikeys/rotate",
|
|
21
|
+
apiKeyUsage: "api/cli/apikeys/usage",
|
|
22
|
+
automations: "api/cli/automations",
|
|
23
|
+
automationRemove: "api/cli/automations/remove",
|
|
24
|
+
automationUpdate: "api/cli/automations/update",
|
|
25
|
+
documents: "api/cli/documents",
|
|
26
|
+
document: "api/cli/document",
|
|
27
|
+
documentSearch: "api/cli/documents/search",
|
|
28
|
+
documentTree: "api/cli/documents/tree",
|
|
29
|
+
customFields: "api/cli/fields",
|
|
30
|
+
time: "api/cli/time",
|
|
31
|
+
timeSummary: "api/cli/time/summary",
|
|
32
|
+
templates: "api/cli/templates",
|
|
33
|
+
statsCycleTime: "api/cli/stats/cycle-time",
|
|
34
|
+
statsOrg: "api/cli/stats/org",
|
|
35
|
+
statsProject: "api/cli/stats/project",
|
|
36
|
+
savedFilters: "api/cli/filters",
|
|
37
|
+
savedFilterFavorite: "api/cli/filters/favorite",
|
|
38
|
+
savedFilterRemove: "api/cli/filters/remove",
|
|
39
|
+
savedFilterUpdate: "api/cli/filters/update",
|
|
40
|
+
notifications: "api/cli/notifications",
|
|
41
|
+
notificationDismiss: "api/cli/notifications/dismiss",
|
|
42
|
+
issues: "api/cli/issues",
|
|
43
|
+
issuesBulkAssign: "api/cli/issues/bulk/assign",
|
|
44
|
+
issuesBulkDate: "api/cli/issues/bulk/date",
|
|
45
|
+
issuesBulkLabels: "api/cli/issues/bulk/labels",
|
|
46
|
+
issuesBulkLifecycle: "api/cli/issues/bulk/lifecycle",
|
|
47
|
+
issuesBulkPriority: "api/cli/issues/bulk/priority",
|
|
48
|
+
issuesBulkSprint: "api/cli/issues/bulk/sprint",
|
|
49
|
+
issuesBulkStatus: "api/cli/issues/bulk/status",
|
|
50
|
+
issue: "api/cli/issue",
|
|
51
|
+
issueUpdate: "api/cli/issue/update",
|
|
52
|
+
issueMove: "api/cli/issue/move",
|
|
53
|
+
issueDelete: "api/cli/issue/delete",
|
|
54
|
+
issueArchive: "api/cli/issue/archive",
|
|
55
|
+
issueRestore: "api/cli/issue/restore",
|
|
56
|
+
issueSubtasks: "api/cli/issue/subtasks",
|
|
57
|
+
issueSimilar: "api/cli/issue/similar",
|
|
58
|
+
issueComments: "api/cli/issue/comments",
|
|
59
|
+
issueComment: "api/cli/issue/comment",
|
|
60
|
+
issueActivity: "api/cli/issue/activity",
|
|
61
|
+
projects: "api/cli/projects",
|
|
62
|
+
project: "api/cli/project",
|
|
63
|
+
projectUpdate: "api/cli/project/update",
|
|
64
|
+
projectDelete: "api/cli/project/delete",
|
|
65
|
+
projectRestore: "api/cli/project/restore",
|
|
66
|
+
projectWorkflow: "api/cli/project/workflow",
|
|
67
|
+
projectWorkflowSet: "api/cli/project/workflow/set",
|
|
68
|
+
projectWorkflowReorder: "api/cli/project/workflow/reorder",
|
|
69
|
+
projectMembers: "api/cli/project/members",
|
|
70
|
+
projectMemberAdd: "api/cli/project/member/add",
|
|
71
|
+
projectMemberRemove: "api/cli/project/member/remove",
|
|
72
|
+
projectMemberRole: "api/cli/project/member/role",
|
|
73
|
+
projectStats: "api/cli/project/stats",
|
|
74
|
+
sprints: "api/cli/sprints",
|
|
75
|
+
sprint: "api/cli/sprint",
|
|
76
|
+
sprintStart: "api/cli/sprint/start",
|
|
77
|
+
sprintUpdate: "api/cli/sprint/update",
|
|
78
|
+
sprintComplete: "api/cli/sprint/complete",
|
|
79
|
+
sprintBurndown: "api/cli/sprint/burndown",
|
|
80
|
+
statsSprint: "api/cli/stats/sprint",
|
|
81
|
+
statsTeam: "api/cli/stats/team",
|
|
82
|
+
labels: "api/cli/labels",
|
|
83
|
+
labelUpdate: "api/cli/label/update",
|
|
84
|
+
labelRemove: "api/cli/label/remove",
|
|
85
|
+
teams: "api/cli/teams",
|
|
86
|
+
team: "api/cli/team",
|
|
87
|
+
teamUpdate: "api/cli/team/update",
|
|
88
|
+
teamDelete: "api/cli/team/delete",
|
|
89
|
+
teamRestore: "api/cli/team/restore",
|
|
90
|
+
teamMemberAdd: "api/cli/team/member/add",
|
|
91
|
+
teamMemberRemove: "api/cli/team/member/remove",
|
|
92
|
+
teamMemberRole: "api/cli/team/member/role",
|
|
93
|
+
workspaces: "api/cli/workspaces",
|
|
94
|
+
workspace: "api/cli/workspace",
|
|
95
|
+
workspaceUpdate: "api/cli/workspace/update",
|
|
96
|
+
workspaceArchive: "api/cli/workspace/archive",
|
|
97
|
+
workspaceDelete: "api/cli/workspace/delete",
|
|
98
|
+
workspaceMembers: "api/cli/workspace/members",
|
|
99
|
+
workspaceMemberAdd: "api/cli/workspace/member/add",
|
|
100
|
+
workspaceMemberRemove: "api/cli/workspace/member/remove",
|
|
101
|
+
workspaceMemberRole: "api/cli/workspace/member/role",
|
|
102
|
+
webhooks: "api/cli/webhooks",
|
|
103
|
+
webhookUpdate: "api/cli/webhook/update",
|
|
104
|
+
webhookDelete: "api/cli/webhook/delete",
|
|
105
|
+
webhookTest: "api/cli/webhook/test",
|
|
106
|
+
webhookExecutions: "api/cli/webhook/executions",
|
|
107
|
+
webhookRetry: "api/cli/webhook/retry"
|
|
108
|
+
};
|
|
109
|
+
function getConvexSiteUrl() {
|
|
110
|
+
return process.env.NIXELO_SITE_URL ?? "https://rightful-flamingo-217.convex.site";
|
|
111
|
+
}
|
|
112
|
+
export function buildCliApiUrl(path) {
|
|
113
|
+
return new URL(path, `${getConvexSiteUrl().replace(/\/+$/, "")}/`).toString();
|
|
114
|
+
}
|
|
115
|
+
async function request(method, path, body) {
|
|
116
|
+
const token = await loadToken();
|
|
117
|
+
if (!token) {
|
|
118
|
+
throw new Error("Not authenticated. Run `npx nixelo login` first.");
|
|
119
|
+
}
|
|
120
|
+
const url = buildCliApiUrl(path);
|
|
121
|
+
const response = await fetch(url, {
|
|
122
|
+
method,
|
|
123
|
+
headers: {
|
|
124
|
+
Authorization: `Bearer ${token}`,
|
|
125
|
+
"Content-Type": "application/json"
|
|
126
|
+
},
|
|
127
|
+
body: body ? JSON.stringify(body) : undefined
|
|
128
|
+
});
|
|
129
|
+
if (!response.ok) {
|
|
130
|
+
if (response.status === 401) {
|
|
131
|
+
throw new Error("Token expired or invalid. Run `npx nixelo login` to re-authenticate.");
|
|
132
|
+
}
|
|
133
|
+
if (response.status === 403) {
|
|
134
|
+
throw new Error("Insufficient permissions for this operation.");
|
|
135
|
+
}
|
|
136
|
+
const text = await response.text();
|
|
137
|
+
throw new Error(`API error ${response.status}: ${text}`);
|
|
138
|
+
}
|
|
139
|
+
return (await response.json());
|
|
140
|
+
}
|
|
141
|
+
export function isCliAuthenticationError(error) {
|
|
142
|
+
return (error instanceof Error &&
|
|
143
|
+
(error.message.includes("Not authenticated") ||
|
|
144
|
+
error.message.includes("Token expired or invalid")));
|
|
145
|
+
}
|
|
146
|
+
export function isCliPermissionError(error) {
|
|
147
|
+
return error instanceof Error && error.message === "Insufficient permissions for this operation.";
|
|
148
|
+
}
|
|
149
|
+
export async function listTokens() {
|
|
150
|
+
return request("GET", CLI_API_PATHS.tokens);
|
|
151
|
+
}
|
|
152
|
+
export async function revokeToken(tokenId) {
|
|
153
|
+
return request("POST", CLI_API_PATHS.tokenRevoke, { tokenId });
|
|
154
|
+
}
|
|
155
|
+
export async function getCurrentUser() {
|
|
156
|
+
return request("GET", CLI_API_PATHS.whoami);
|
|
157
|
+
}
|
|
158
|
+
export async function searchUsers(query, limit) {
|
|
159
|
+
const params = new URLSearchParams({ q: query });
|
|
160
|
+
if (limit !== undefined)
|
|
161
|
+
params.set("limit", String(limit));
|
|
162
|
+
return request("GET", `${CLI_API_PATHS.usersSearch}?${params}`);
|
|
163
|
+
}
|
|
164
|
+
export async function getUser(reference) {
|
|
165
|
+
return request("GET", `${CLI_API_PATHS.user}?${new URLSearchParams({ ref: reference })}`);
|
|
166
|
+
}
|
|
167
|
+
export async function getUserStats() {
|
|
168
|
+
return request("GET", CLI_API_PATHS.usersStats);
|
|
169
|
+
}
|
|
170
|
+
export async function listInvites(limit) {
|
|
171
|
+
const params = new URLSearchParams();
|
|
172
|
+
if (limit !== undefined)
|
|
173
|
+
params.set("limit", String(limit));
|
|
174
|
+
const query = params.size > 0 ? `?${params}` : "";
|
|
175
|
+
return request("GET", `${CLI_API_PATHS.invites}${query}`);
|
|
176
|
+
}
|
|
177
|
+
export async function listApiKeys(limit) {
|
|
178
|
+
const query = limit === undefined ? "" : `?limit=${encodeURIComponent(String(limit))}`;
|
|
179
|
+
return request("GET", `${CLI_API_PATHS.apiKeys}${query}`);
|
|
180
|
+
}
|
|
181
|
+
export async function generateApiKey(input) {
|
|
182
|
+
return request("POST", CLI_API_PATHS.apiKeys, input);
|
|
183
|
+
}
|
|
184
|
+
export async function revokeApiKey(keyId) {
|
|
185
|
+
return request("POST", CLI_API_PATHS.apiKeyRevoke, { keyId });
|
|
186
|
+
}
|
|
187
|
+
export async function rotateApiKey(keyId) {
|
|
188
|
+
return request("POST", CLI_API_PATHS.apiKeyRotate, { keyId });
|
|
189
|
+
}
|
|
190
|
+
export async function getApiKeyUsage(keyId) {
|
|
191
|
+
return request("GET", `${CLI_API_PATHS.apiKeyUsage}?id=${encodeURIComponent(keyId)}`);
|
|
192
|
+
}
|
|
193
|
+
export async function listAutomationRules(projectKey, options = {}) {
|
|
194
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
195
|
+
if (options.limit)
|
|
196
|
+
params.set("limit", String(options.limit));
|
|
197
|
+
return request("GET", `${CLI_API_PATHS.automations}?${params.toString()}`);
|
|
198
|
+
}
|
|
199
|
+
export async function createAutomationRule(input) {
|
|
200
|
+
return request("POST", CLI_API_PATHS.automations, input);
|
|
201
|
+
}
|
|
202
|
+
export async function updateAutomationRule(id, input) {
|
|
203
|
+
return request("POST", CLI_API_PATHS.automationUpdate, { id, ...input });
|
|
204
|
+
}
|
|
205
|
+
export async function removeAutomationRule(id) {
|
|
206
|
+
return request("POST", CLI_API_PATHS.automationRemove, { id });
|
|
207
|
+
}
|
|
208
|
+
export async function listSavedFilters(projectKey, options = {}) {
|
|
209
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
210
|
+
if (options.limit !== undefined)
|
|
211
|
+
params.set("limit", String(options.limit));
|
|
212
|
+
return request("GET", `${CLI_API_PATHS.savedFilters}?${params.toString()}`);
|
|
213
|
+
}
|
|
214
|
+
export async function createSavedFilter(input) {
|
|
215
|
+
return request("POST", CLI_API_PATHS.savedFilters, input);
|
|
216
|
+
}
|
|
217
|
+
export async function updateSavedFilter(id, input) {
|
|
218
|
+
return request("POST", CLI_API_PATHS.savedFilterUpdate, { id, ...input });
|
|
219
|
+
}
|
|
220
|
+
export async function removeSavedFilter(id) {
|
|
221
|
+
return request("POST", CLI_API_PATHS.savedFilterRemove, { id });
|
|
222
|
+
}
|
|
223
|
+
export async function toggleSavedFilterFavorite(id) {
|
|
224
|
+
return request("POST", CLI_API_PATHS.savedFilterFavorite, { id });
|
|
225
|
+
}
|
|
226
|
+
export async function listNotifications(options = {}) {
|
|
227
|
+
const params = new URLSearchParams();
|
|
228
|
+
if (options.limit !== undefined)
|
|
229
|
+
params.set("limit", String(options.limit));
|
|
230
|
+
if (options.unread !== undefined)
|
|
231
|
+
params.set("unread", String(options.unread));
|
|
232
|
+
const query = params.size > 0 ? `?${params}` : "";
|
|
233
|
+
return request("GET", `${CLI_API_PATHS.notifications}${query}`);
|
|
234
|
+
}
|
|
235
|
+
export async function markNotificationRead(id) {
|
|
236
|
+
return request("POST", CLI_API_PATHS.notifications, { id });
|
|
237
|
+
}
|
|
238
|
+
export async function dismissNotification(id) {
|
|
239
|
+
return request("POST", CLI_API_PATHS.notificationDismiss, { id });
|
|
240
|
+
}
|
|
241
|
+
export const CUSTOM_FIELD_TYPE_VALUES = [
|
|
242
|
+
"text",
|
|
243
|
+
"number",
|
|
244
|
+
"select",
|
|
245
|
+
"multiselect",
|
|
246
|
+
"multiemail",
|
|
247
|
+
"date",
|
|
248
|
+
"checkbox",
|
|
249
|
+
"url",
|
|
250
|
+
"user"
|
|
251
|
+
];
|
|
252
|
+
export async function listCustomFields(projectKey, options = {}) {
|
|
253
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
254
|
+
if (options.limit !== undefined)
|
|
255
|
+
params.set("limit", String(options.limit));
|
|
256
|
+
return request("GET", `${CLI_API_PATHS.customFields}?${params.toString()}`);
|
|
257
|
+
}
|
|
258
|
+
export async function createCustomField(input) {
|
|
259
|
+
return request("POST", CLI_API_PATHS.customFields, input);
|
|
260
|
+
}
|
|
261
|
+
export async function updateCustomField(input) {
|
|
262
|
+
return request("PATCH", CLI_API_PATHS.customFields, input);
|
|
263
|
+
}
|
|
264
|
+
export async function removeCustomField(id) {
|
|
265
|
+
return request("DELETE", CLI_API_PATHS.customFields, { id });
|
|
266
|
+
}
|
|
267
|
+
export async function startTimeEntry(input) {
|
|
268
|
+
return request("POST", CLI_API_PATHS.time, input);
|
|
269
|
+
}
|
|
270
|
+
export async function stopTimeEntry(id) {
|
|
271
|
+
return request("PATCH", CLI_API_PATHS.time, { id });
|
|
272
|
+
}
|
|
273
|
+
export async function listTimeEntries(options) {
|
|
274
|
+
const params = new URLSearchParams();
|
|
275
|
+
if (options.endDate !== undefined)
|
|
276
|
+
params.set("end", String(options.endDate));
|
|
277
|
+
if (options.issue)
|
|
278
|
+
params.set("issue", options.issue);
|
|
279
|
+
if (options.limit !== undefined)
|
|
280
|
+
params.set("limit", String(options.limit));
|
|
281
|
+
if (options.project)
|
|
282
|
+
params.set("project", options.project);
|
|
283
|
+
if (options.startDate !== undefined)
|
|
284
|
+
params.set("start", String(options.startDate));
|
|
285
|
+
return request("GET", `${CLI_API_PATHS.time}?${params.toString()}`);
|
|
286
|
+
}
|
|
287
|
+
export async function summarizeTimeEntries(options) {
|
|
288
|
+
const params = new URLSearchParams();
|
|
289
|
+
if (options.endDate !== undefined)
|
|
290
|
+
params.set("end", String(options.endDate));
|
|
291
|
+
if (options.project)
|
|
292
|
+
params.set("project", options.project);
|
|
293
|
+
if (options.startDate !== undefined)
|
|
294
|
+
params.set("start", String(options.startDate));
|
|
295
|
+
return request("GET", `${CLI_API_PATHS.timeSummary}?${params.toString()}`);
|
|
296
|
+
}
|
|
297
|
+
export const ISSUE_TEMPLATE_TYPE_VALUES = ["task", "bug", "story", "epic"];
|
|
298
|
+
export const ISSUE_TEMPLATE_PRIORITY_VALUES = [
|
|
299
|
+
"lowest",
|
|
300
|
+
"low",
|
|
301
|
+
"medium",
|
|
302
|
+
"high",
|
|
303
|
+
"highest"
|
|
304
|
+
];
|
|
305
|
+
export async function listIssueTemplates(projectKey, options = {}) {
|
|
306
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
307
|
+
if (options.limit !== undefined)
|
|
308
|
+
params.set("limit", String(options.limit));
|
|
309
|
+
if (options.type)
|
|
310
|
+
params.set("type", options.type);
|
|
311
|
+
return request("GET", `${CLI_API_PATHS.templates}?${params.toString()}`);
|
|
312
|
+
}
|
|
313
|
+
export async function createIssueTemplate(input) {
|
|
314
|
+
return request("POST", CLI_API_PATHS.templates, input);
|
|
315
|
+
}
|
|
316
|
+
export async function updateIssueTemplate(id, updates) {
|
|
317
|
+
return request("PATCH", CLI_API_PATHS.templates, { id, ...updates });
|
|
318
|
+
}
|
|
319
|
+
export async function removeIssueTemplate(id) {
|
|
320
|
+
return request("DELETE", CLI_API_PATHS.templates, { id });
|
|
321
|
+
}
|
|
322
|
+
export async function sendInvite(email, role) {
|
|
323
|
+
return request("POST", CLI_API_PATHS.invites, { email, role });
|
|
324
|
+
}
|
|
325
|
+
export async function revokeInvite(inviteId) {
|
|
326
|
+
return request("POST", CLI_API_PATHS.inviteRevoke, { inviteId });
|
|
327
|
+
}
|
|
328
|
+
export async function resendInvite(inviteId) {
|
|
329
|
+
return request("POST", CLI_API_PATHS.inviteResend, { inviteId });
|
|
330
|
+
}
|
|
331
|
+
export async function listIssues(options = {}) {
|
|
332
|
+
const params = new URLSearchParams();
|
|
333
|
+
if (options.project)
|
|
334
|
+
params.set("project", options.project);
|
|
335
|
+
if (options.status)
|
|
336
|
+
params.set("status", options.status);
|
|
337
|
+
if (options.priority)
|
|
338
|
+
params.set("priority", options.priority);
|
|
339
|
+
if (options.search)
|
|
340
|
+
params.set("search", options.search);
|
|
341
|
+
if (options.label)
|
|
342
|
+
params.set("label", options.label);
|
|
343
|
+
if (options.sprintId)
|
|
344
|
+
params.set("sprint", options.sprintId);
|
|
345
|
+
if (options.epic)
|
|
346
|
+
params.set("epic", options.epic);
|
|
347
|
+
if (options.type)
|
|
348
|
+
params.set("type", options.type);
|
|
349
|
+
if (options.assignee)
|
|
350
|
+
params.set("assignee", options.assignee);
|
|
351
|
+
if (options.limit)
|
|
352
|
+
params.set("limit", String(options.limit));
|
|
353
|
+
const qs = params.toString();
|
|
354
|
+
return request("GET", `${CLI_API_PATHS.issues}${qs ? `?${qs}` : ""}`);
|
|
355
|
+
}
|
|
356
|
+
export async function bulkUpdateIssueStatus(keys, status) {
|
|
357
|
+
return request("POST", CLI_API_PATHS.issuesBulkStatus, { keys, status });
|
|
358
|
+
}
|
|
359
|
+
export async function bulkUpdateIssuePriority(keys, priority) {
|
|
360
|
+
return request("POST", CLI_API_PATHS.issuesBulkPriority, { keys, priority });
|
|
361
|
+
}
|
|
362
|
+
export async function bulkUpdateIssueDate(keys, field, value) {
|
|
363
|
+
return request("POST", CLI_API_PATHS.issuesBulkDate, { keys, field, value });
|
|
364
|
+
}
|
|
365
|
+
export async function bulkIssueLifecycle(keys, action) {
|
|
366
|
+
return request("POST", CLI_API_PATHS.issuesBulkLifecycle, { keys, action });
|
|
367
|
+
}
|
|
368
|
+
export async function bulkAssignIssues(keys, assignee) {
|
|
369
|
+
return request("POST", CLI_API_PATHS.issuesBulkAssign, { keys, assignee });
|
|
370
|
+
}
|
|
371
|
+
export async function bulkUpdateIssueLabels(keys, action, labels) {
|
|
372
|
+
return request("POST", CLI_API_PATHS.issuesBulkLabels, { keys, action, labels });
|
|
373
|
+
}
|
|
374
|
+
export async function bulkMoveIssuesToSprint(keys, sprint) {
|
|
375
|
+
return request("POST", CLI_API_PATHS.issuesBulkSprint, { keys, sprint });
|
|
376
|
+
}
|
|
377
|
+
export async function listSprints(projectKey, options = {}) {
|
|
378
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
379
|
+
if (options.limit)
|
|
380
|
+
params.set("limit", String(options.limit));
|
|
381
|
+
return request("GET", `${CLI_API_PATHS.sprints}?${params.toString()}`);
|
|
382
|
+
}
|
|
383
|
+
export async function getSprint(id) {
|
|
384
|
+
return request("GET", `${CLI_API_PATHS.sprint}?id=${encodeURIComponent(id)}`);
|
|
385
|
+
}
|
|
386
|
+
export async function createSprint(input) {
|
|
387
|
+
return request("POST", CLI_API_PATHS.sprints, input);
|
|
388
|
+
}
|
|
389
|
+
export async function startSprint(id, options = {}) {
|
|
390
|
+
return request("POST", CLI_API_PATHS.sprintStart, { sprintId: id, ...options });
|
|
391
|
+
}
|
|
392
|
+
export async function updateSprint(id, input) {
|
|
393
|
+
return request("POST", CLI_API_PATHS.sprintUpdate, { sprintId: id, ...input });
|
|
394
|
+
}
|
|
395
|
+
export async function completeSprint(id, input = {}) {
|
|
396
|
+
return request("POST", CLI_API_PATHS.sprintComplete, { sprintId: id, ...input });
|
|
397
|
+
}
|
|
398
|
+
export async function getSprintBurndown(id) {
|
|
399
|
+
return request("GET", `${CLI_API_PATHS.sprintBurndown}?id=${encodeURIComponent(id)}`);
|
|
400
|
+
}
|
|
401
|
+
export async function listDocuments(options = {}) {
|
|
402
|
+
const params = new URLSearchParams();
|
|
403
|
+
if (options.workspace !== undefined)
|
|
404
|
+
params.set("workspace", options.workspace);
|
|
405
|
+
if (options.team !== undefined)
|
|
406
|
+
params.set("team", options.team);
|
|
407
|
+
if (options.project !== undefined)
|
|
408
|
+
params.set("project", options.project);
|
|
409
|
+
if (options.limit !== undefined)
|
|
410
|
+
params.set("limit", String(options.limit));
|
|
411
|
+
const query = params.size > 0 ? `?${params.toString()}` : "";
|
|
412
|
+
return request("GET", `${CLI_API_PATHS.documents}${query}`);
|
|
413
|
+
}
|
|
414
|
+
export async function getDocument(id) {
|
|
415
|
+
const params = new URLSearchParams({ id });
|
|
416
|
+
return request("GET", `${CLI_API_PATHS.document}?${params.toString()}`);
|
|
417
|
+
}
|
|
418
|
+
export async function searchDocuments(query, options = {}) {
|
|
419
|
+
const params = new URLSearchParams({ q: query });
|
|
420
|
+
if (options.workspace !== undefined)
|
|
421
|
+
params.set("workspace", options.workspace);
|
|
422
|
+
if (options.team !== undefined)
|
|
423
|
+
params.set("team", options.team);
|
|
424
|
+
if (options.project !== undefined)
|
|
425
|
+
params.set("project", options.project);
|
|
426
|
+
if (options.limit !== undefined)
|
|
427
|
+
params.set("limit", String(options.limit));
|
|
428
|
+
return request("GET", `${CLI_API_PATHS.documentSearch}?${params.toString()}`);
|
|
429
|
+
}
|
|
430
|
+
export async function getDocumentTree(options = {}) {
|
|
431
|
+
const params = new URLSearchParams();
|
|
432
|
+
if (options.workspace !== undefined)
|
|
433
|
+
params.set("workspace", options.workspace);
|
|
434
|
+
if (options.team !== undefined)
|
|
435
|
+
params.set("team", options.team);
|
|
436
|
+
if (options.project !== undefined)
|
|
437
|
+
params.set("project", options.project);
|
|
438
|
+
if (options.limit !== undefined)
|
|
439
|
+
params.set("limit", String(options.limit));
|
|
440
|
+
const query = params.size > 0 ? `?${params.toString()}` : "";
|
|
441
|
+
return request("GET", `${CLI_API_PATHS.documentTree}${query}`);
|
|
442
|
+
}
|
|
443
|
+
export async function listProjects() {
|
|
444
|
+
return request("GET", CLI_API_PATHS.projects);
|
|
445
|
+
}
|
|
446
|
+
export async function getProject(key) {
|
|
447
|
+
const params = new URLSearchParams({ project: key });
|
|
448
|
+
return request("GET", `${CLI_API_PATHS.project}?${params.toString()}`);
|
|
449
|
+
}
|
|
450
|
+
export async function createProject(options) {
|
|
451
|
+
return request("POST", CLI_API_PATHS.projects, options);
|
|
452
|
+
}
|
|
453
|
+
export async function updateProject(key, options) {
|
|
454
|
+
return request("POST", CLI_API_PATHS.projectUpdate, { projectKey: key, ...options });
|
|
455
|
+
}
|
|
456
|
+
export async function deleteProject(key) {
|
|
457
|
+
return request("POST", CLI_API_PATHS.projectDelete, { projectKey: key });
|
|
458
|
+
}
|
|
459
|
+
export async function restoreProject(key) {
|
|
460
|
+
return request("POST", CLI_API_PATHS.projectRestore, { projectKey: key });
|
|
461
|
+
}
|
|
462
|
+
export async function listProjectWorkflow(key) {
|
|
463
|
+
const params = new URLSearchParams({ project: key });
|
|
464
|
+
return request("GET", `${CLI_API_PATHS.projectWorkflow}?${params.toString()}`);
|
|
465
|
+
}
|
|
466
|
+
export async function setProjectWorkflow(key, options) {
|
|
467
|
+
return request("POST", CLI_API_PATHS.projectWorkflowSet, { projectKey: key, ...options });
|
|
468
|
+
}
|
|
469
|
+
export async function reorderProjectWorkflow(key, options) {
|
|
470
|
+
return request("POST", CLI_API_PATHS.projectWorkflowReorder, { projectKey: key, ...options });
|
|
471
|
+
}
|
|
472
|
+
export async function listProjectMembers(key, options = {}) {
|
|
473
|
+
const params = new URLSearchParams({ project: key });
|
|
474
|
+
if (options.limit)
|
|
475
|
+
params.set("limit", String(options.limit));
|
|
476
|
+
return request("GET", `${CLI_API_PATHS.projectMembers}?${params.toString()}`);
|
|
477
|
+
}
|
|
478
|
+
export async function addProjectMember(options) {
|
|
479
|
+
return request("POST", CLI_API_PATHS.projectMemberAdd, options);
|
|
480
|
+
}
|
|
481
|
+
export async function removeProjectMember(options) {
|
|
482
|
+
return request("POST", CLI_API_PATHS.projectMemberRemove, options);
|
|
483
|
+
}
|
|
484
|
+
export async function updateProjectMemberRole(options) {
|
|
485
|
+
return request("POST", CLI_API_PATHS.projectMemberRole, options);
|
|
486
|
+
}
|
|
487
|
+
export async function getProjectStats(key) {
|
|
488
|
+
const params = new URLSearchParams({ project: key });
|
|
489
|
+
return request("GET", `${CLI_API_PATHS.projectStats}?${params.toString()}`);
|
|
490
|
+
}
|
|
491
|
+
export async function getStatsProject(key) {
|
|
492
|
+
const params = new URLSearchParams({ project: key });
|
|
493
|
+
return request("GET", `${CLI_API_PATHS.statsProject}?${params.toString()}`);
|
|
494
|
+
}
|
|
495
|
+
export async function getStatsCycleTime(projectKey, options = {}) {
|
|
496
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
497
|
+
if (options.limit !== undefined)
|
|
498
|
+
params.set("limit", String(options.limit));
|
|
499
|
+
return request("GET", `${CLI_API_PATHS.statsCycleTime}?${params.toString()}`);
|
|
500
|
+
}
|
|
501
|
+
export async function getStatsOrg() {
|
|
502
|
+
return request("GET", CLI_API_PATHS.statsOrg);
|
|
503
|
+
}
|
|
504
|
+
export async function getStatsSprint(id) {
|
|
505
|
+
return request("GET", `${CLI_API_PATHS.statsSprint}?id=${encodeURIComponent(id)}`);
|
|
506
|
+
}
|
|
507
|
+
export async function getStatsTeam(slug) {
|
|
508
|
+
const params = new URLSearchParams({ team: slug });
|
|
509
|
+
return request("GET", `${CLI_API_PATHS.statsTeam}?${params.toString()}`);
|
|
510
|
+
}
|
|
511
|
+
export async function listLabels(projectKey, options = {}) {
|
|
512
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
513
|
+
if (options.limit)
|
|
514
|
+
params.set("limit", String(options.limit));
|
|
515
|
+
return request("GET", `${CLI_API_PATHS.labels}?${params.toString()}`);
|
|
516
|
+
}
|
|
517
|
+
export async function createLabel(options) {
|
|
518
|
+
return request("POST", CLI_API_PATHS.labels, options);
|
|
519
|
+
}
|
|
520
|
+
export async function updateLabel(id, options) {
|
|
521
|
+
return request("POST", CLI_API_PATHS.labelUpdate, { id, ...options });
|
|
522
|
+
}
|
|
523
|
+
export async function removeLabel(id) {
|
|
524
|
+
return request("POST", CLI_API_PATHS.labelRemove, { id });
|
|
525
|
+
}
|
|
526
|
+
export async function listTeams(options = {}) {
|
|
527
|
+
const params = new URLSearchParams();
|
|
528
|
+
if (options.limit)
|
|
529
|
+
params.set("limit", String(options.limit));
|
|
530
|
+
const qs = params.toString();
|
|
531
|
+
return request("GET", `${CLI_API_PATHS.teams}${qs ? `?${qs}` : ""}`);
|
|
532
|
+
}
|
|
533
|
+
export async function getTeam(slug, options = {}) {
|
|
534
|
+
const params = new URLSearchParams({ slug });
|
|
535
|
+
if (options.memberLimit)
|
|
536
|
+
params.set("limit", String(options.memberLimit));
|
|
537
|
+
return request("GET", `${CLI_API_PATHS.team}?${params.toString()}`);
|
|
538
|
+
}
|
|
539
|
+
export async function createTeam(options) {
|
|
540
|
+
return request("POST", CLI_API_PATHS.teams, options);
|
|
541
|
+
}
|
|
542
|
+
export async function updateTeam(slug, options) {
|
|
543
|
+
return request("POST", CLI_API_PATHS.teamUpdate, { slug, ...options });
|
|
544
|
+
}
|
|
545
|
+
export async function deleteTeam(slug) {
|
|
546
|
+
return request("POST", CLI_API_PATHS.teamDelete, { slug });
|
|
547
|
+
}
|
|
548
|
+
export async function restoreTeam(slug) {
|
|
549
|
+
return request("POST", CLI_API_PATHS.teamRestore, { slug });
|
|
550
|
+
}
|
|
551
|
+
export async function addTeamMember(options) {
|
|
552
|
+
return request("POST", CLI_API_PATHS.teamMemberAdd, options);
|
|
553
|
+
}
|
|
554
|
+
export async function removeTeamMember(options) {
|
|
555
|
+
return request("POST", CLI_API_PATHS.teamMemberRemove, options);
|
|
556
|
+
}
|
|
557
|
+
export async function updateTeamMemberRole(options) {
|
|
558
|
+
return request("POST", CLI_API_PATHS.teamMemberRole, options);
|
|
559
|
+
}
|
|
560
|
+
export async function listWorkspaces(options = {}) {
|
|
561
|
+
const params = new URLSearchParams();
|
|
562
|
+
if (options.limit)
|
|
563
|
+
params.set("limit", String(options.limit));
|
|
564
|
+
const qs = params.toString();
|
|
565
|
+
return request("GET", `${CLI_API_PATHS.workspaces}${qs ? `?${qs}` : ""}`);
|
|
566
|
+
}
|
|
567
|
+
export async function getWorkspace(slug, options = {}) {
|
|
568
|
+
const params = new URLSearchParams({ slug });
|
|
569
|
+
if (options.limit)
|
|
570
|
+
params.set("limit", String(options.limit));
|
|
571
|
+
return request("GET", `${CLI_API_PATHS.workspace}?${params.toString()}`);
|
|
572
|
+
}
|
|
573
|
+
export async function createWorkspace(options) {
|
|
574
|
+
return request("POST", CLI_API_PATHS.workspaces, options);
|
|
575
|
+
}
|
|
576
|
+
export async function updateWorkspace(slug, options) {
|
|
577
|
+
return request("POST", CLI_API_PATHS.workspaceUpdate, { slug, ...options });
|
|
578
|
+
}
|
|
579
|
+
export async function archiveWorkspace(slug) {
|
|
580
|
+
return request("POST", CLI_API_PATHS.workspaceArchive, { slug });
|
|
581
|
+
}
|
|
582
|
+
export async function deleteWorkspace(slug) {
|
|
583
|
+
return request("POST", CLI_API_PATHS.workspaceDelete, { slug });
|
|
584
|
+
}
|
|
585
|
+
export async function listWorkspaceMembers(slug, options = {}) {
|
|
586
|
+
const params = new URLSearchParams({ slug });
|
|
587
|
+
if (options.limit)
|
|
588
|
+
params.set("limit", String(options.limit));
|
|
589
|
+
return request("GET", `${CLI_API_PATHS.workspaceMembers}?${params.toString()}`);
|
|
590
|
+
}
|
|
591
|
+
export async function addWorkspaceMember(options) {
|
|
592
|
+
return request("POST", CLI_API_PATHS.workspaceMemberAdd, options);
|
|
593
|
+
}
|
|
594
|
+
export async function removeWorkspaceMember(options) {
|
|
595
|
+
return request("POST", CLI_API_PATHS.workspaceMemberRemove, options);
|
|
596
|
+
}
|
|
597
|
+
export async function updateWorkspaceMemberRole(options) {
|
|
598
|
+
return request("POST", CLI_API_PATHS.workspaceMemberRole, options);
|
|
599
|
+
}
|
|
600
|
+
export async function listWebhooks(projectKey, options = {}) {
|
|
601
|
+
const params = new URLSearchParams({ project: projectKey });
|
|
602
|
+
if (options.limit)
|
|
603
|
+
params.set("limit", String(options.limit));
|
|
604
|
+
return request("GET", `${CLI_API_PATHS.webhooks}?${params.toString()}`);
|
|
605
|
+
}
|
|
606
|
+
export async function createWebhook(options) {
|
|
607
|
+
return request("POST", CLI_API_PATHS.webhooks, options);
|
|
608
|
+
}
|
|
609
|
+
export async function updateWebhook(id, options) {
|
|
610
|
+
return request("POST", CLI_API_PATHS.webhookUpdate, { id, ...options });
|
|
611
|
+
}
|
|
612
|
+
export async function deleteWebhook(id) {
|
|
613
|
+
return request("POST", CLI_API_PATHS.webhookDelete, { id });
|
|
614
|
+
}
|
|
615
|
+
export async function testWebhook(id) {
|
|
616
|
+
return request("POST", CLI_API_PATHS.webhookTest, { id });
|
|
617
|
+
}
|
|
618
|
+
export async function listWebhookExecutions(id, options = {}) {
|
|
619
|
+
const params = new URLSearchParams({ id });
|
|
620
|
+
if (options.limit)
|
|
621
|
+
params.set("limit", String(options.limit));
|
|
622
|
+
return request("GET", `${CLI_API_PATHS.webhookExecutions}?${params.toString()}`);
|
|
623
|
+
}
|
|
624
|
+
export async function retryWebhookExecution(id) {
|
|
625
|
+
return request("POST", CLI_API_PATHS.webhookRetry, { id });
|
|
626
|
+
}
|
|
627
|
+
export async function createIssue(options) {
|
|
628
|
+
return request("POST", CLI_API_PATHS.issues, options);
|
|
629
|
+
}
|
|
630
|
+
export async function getIssue(key) {
|
|
631
|
+
return request("GET", `${CLI_API_PATHS.issue}?key=${encodeURIComponent(key)}`);
|
|
632
|
+
}
|
|
633
|
+
export async function updateIssue(key, options) {
|
|
634
|
+
return request("POST", CLI_API_PATHS.issueUpdate, { key, ...options });
|
|
635
|
+
}
|
|
636
|
+
export async function moveIssue(key, options) {
|
|
637
|
+
return request("POST", CLI_API_PATHS.issueMove, { key, ...options });
|
|
638
|
+
}
|
|
639
|
+
export async function deleteIssue(key) {
|
|
640
|
+
return request("POST", CLI_API_PATHS.issueDelete, { key });
|
|
641
|
+
}
|
|
642
|
+
export async function archiveIssue(key) {
|
|
643
|
+
return request("POST", CLI_API_PATHS.issueArchive, { key });
|
|
644
|
+
}
|
|
645
|
+
export async function restoreIssue(key) {
|
|
646
|
+
return request("POST", CLI_API_PATHS.issueRestore, { key });
|
|
647
|
+
}
|
|
648
|
+
export async function listIssueSubtasks(key, options = {}) {
|
|
649
|
+
const params = new URLSearchParams({ key });
|
|
650
|
+
if (options.limit)
|
|
651
|
+
params.set("limit", String(options.limit));
|
|
652
|
+
return request("GET", `${CLI_API_PATHS.issueSubtasks}?${params.toString()}`);
|
|
653
|
+
}
|
|
654
|
+
export async function listSimilarIssues(key, options = {}) {
|
|
655
|
+
const params = new URLSearchParams({ key });
|
|
656
|
+
if (options.limit)
|
|
657
|
+
params.set("limit", String(options.limit));
|
|
658
|
+
return request("GET", `${CLI_API_PATHS.issueSimilar}?${params.toString()}`);
|
|
659
|
+
}
|
|
660
|
+
export async function listIssueComments(key, options = {}) {
|
|
661
|
+
const params = new URLSearchParams({ key });
|
|
662
|
+
if (options.limit)
|
|
663
|
+
params.set("limit", String(options.limit));
|
|
664
|
+
return request("GET", `${CLI_API_PATHS.issueComments}?${params.toString()}`);
|
|
665
|
+
}
|
|
666
|
+
export async function addIssueComment(key, body) {
|
|
667
|
+
return request("POST", CLI_API_PATHS.issueComment, { key, body });
|
|
668
|
+
}
|
|
669
|
+
export async function listIssueActivity(key, options = {}) {
|
|
670
|
+
const params = new URLSearchParams({ key });
|
|
671
|
+
if (options.limit)
|
|
672
|
+
params.set("limit", String(options.limit));
|
|
673
|
+
return request("GET", `${CLI_API_PATHS.issueActivity}?${params.toString()}`);
|
|
674
|
+
}
|
|
675
|
+
//# sourceMappingURL=convex.js.map
|