@itznexus/itznexus-cli 1.3.0 → 1.5.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/dist/commands/agents/claude.d.ts +2 -0
- package/dist/commands/agents/claude.js +85 -0
- package/dist/commands/agents/claude.js.map +1 -0
- package/dist/commands/api/audit-logs.d.ts +2 -0
- package/dist/commands/api/audit-logs.js +66 -0
- package/dist/commands/api/audit-logs.js.map +1 -0
- package/dist/commands/{auth.js → api/auth.js} +2 -10
- package/dist/commands/api/auth.js.map +1 -0
- package/dist/commands/api/claude-events.d.ts +2 -0
- package/dist/commands/api/claude-events.js +104 -0
- package/dist/commands/api/claude-events.js.map +1 -0
- package/dist/commands/api/files.d.ts +2 -0
- package/dist/commands/api/files.js +166 -0
- package/dist/commands/api/files.js.map +1 -0
- package/dist/commands/api/folders.d.ts +2 -0
- package/dist/commands/api/folders.js +153 -0
- package/dist/commands/api/folders.js.map +1 -0
- package/dist/commands/api/github-accounts.d.ts +2 -0
- package/dist/commands/api/github-accounts.js +99 -0
- package/dist/commands/api/github-accounts.js.map +1 -0
- package/dist/commands/api/gmail-accounts.d.ts +2 -0
- package/dist/commands/api/gmail-accounts.js +117 -0
- package/dist/commands/api/gmail-accounts.js.map +1 -0
- package/dist/commands/{health.js → api/health.js} +2 -2
- package/dist/commands/api/health.js.map +1 -0
- package/dist/commands/{interaction.js → api/interactions.js} +6 -13
- package/dist/commands/api/interactions.js.map +1 -0
- package/dist/commands/api/jobs.d.ts +2 -0
- package/dist/commands/api/jobs.js +90 -0
- package/dist/commands/api/jobs.js.map +1 -0
- package/dist/commands/{lead.js → api/leads.js} +119 -27
- package/dist/commands/api/leads.js.map +1 -0
- package/dist/commands/{organization.js → api/organizations.js} +31 -41
- package/dist/commands/api/organizations.js.map +1 -0
- package/dist/commands/{page.js → api/pages.js} +62 -19
- package/dist/commands/api/pages.js.map +1 -0
- package/dist/commands/{person.js → api/persons.js} +67 -47
- package/dist/commands/api/persons.js.map +1 -0
- package/dist/commands/{pipeline.js → api/pipelines.js} +3 -3
- package/dist/commands/api/pipelines.js.map +1 -0
- package/dist/commands/api/projects.js +357 -0
- package/dist/commands/api/projects.js.map +1 -0
- package/dist/commands/api/repositories.d.ts +2 -0
- package/dist/commands/api/repositories.js +118 -0
- package/dist/commands/api/repositories.js.map +1 -0
- package/dist/commands/api/settings.d.ts +2 -0
- package/dist/commands/api/settings.js +79 -0
- package/dist/commands/api/settings.js.map +1 -0
- package/dist/commands/{sprint.js → api/sprints.js} +37 -22
- package/dist/commands/api/sprints.js.map +1 -0
- package/dist/commands/{task.js → api/tasks.js} +78 -19
- package/dist/commands/api/tasks.js.map +1 -0
- package/dist/commands/api/upwork-job-notifications.d.ts +2 -0
- package/dist/commands/api/upwork-job-notifications.js +85 -0
- package/dist/commands/api/upwork-job-notifications.js.map +1 -0
- package/dist/commands/api/users.js +224 -0
- package/dist/commands/api/users.js.map +1 -0
- package/dist/commands/api/website-scrapes.d.ts +2 -0
- package/dist/commands/api/website-scrapes.js +118 -0
- package/dist/commands/api/website-scrapes.js.map +1 -0
- package/dist/commands/api/youtube-productions.d.ts +2 -0
- package/dist/commands/api/youtube-productions.js +521 -0
- package/dist/commands/api/youtube-productions.js.map +1 -0
- package/dist/commands/api/youtube-videos.d.ts +2 -0
- package/dist/commands/api/youtube-videos.js +111 -0
- package/dist/commands/api/youtube-videos.js.map +1 -0
- package/dist/index.js +97 -39
- package/dist/index.js.map +1 -1
- package/dist/lib/claude/normalize-events.d.ts +19 -0
- package/dist/lib/claude/normalize-events.js +158 -0
- package/dist/lib/claude/normalize-events.js.map +1 -0
- package/package.json +1 -1
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/health.js.map +0 -1
- package/dist/commands/interaction.js.map +0 -1
- package/dist/commands/lead.js.map +0 -1
- package/dist/commands/organization.js.map +0 -1
- package/dist/commands/page.js.map +0 -1
- package/dist/commands/person.js.map +0 -1
- package/dist/commands/pipeline.js.map +0 -1
- package/dist/commands/project.js +0 -151
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/sprint.js.map +0 -1
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/user.js +0 -58
- package/dist/commands/user.js.map +0 -1
- /package/dist/commands/{auth.d.ts → api/auth.d.ts} +0 -0
- /package/dist/commands/{health.d.ts → api/health.d.ts} +0 -0
- /package/dist/commands/{interaction.d.ts → api/interactions.d.ts} +0 -0
- /package/dist/commands/{lead.d.ts → api/leads.d.ts} +0 -0
- /package/dist/commands/{organization.d.ts → api/organizations.d.ts} +0 -0
- /package/dist/commands/{page.d.ts → api/pages.d.ts} +0 -0
- /package/dist/commands/{person.d.ts → api/persons.d.ts} +0 -0
- /package/dist/commands/{pipeline.d.ts → api/pipelines.d.ts} +0 -0
- /package/dist/commands/{project.d.ts → api/projects.d.ts} +0 -0
- /package/dist/commands/{sprint.d.ts → api/sprints.d.ts} +0 -0
- /package/dist/commands/{task.d.ts → api/tasks.d.ts} +0 -0
- /package/dist/commands/{user.d.ts → api/users.d.ts} +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import { api } from "
|
|
4
|
-
import { printList, printDetail, handleError } from "
|
|
5
|
-
// --- list ---
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { printList, printDetail, handleError } from "../../lib/format.js";
|
|
6
5
|
const listCommand = new Command("list")
|
|
7
6
|
.description("List all leads")
|
|
8
7
|
.option("--pipeline <pipeline>", "Filter by pipeline (default, upwork)")
|
|
@@ -38,7 +37,26 @@ const listCommand = new Command("list")
|
|
|
38
37
|
handleError(err);
|
|
39
38
|
}
|
|
40
39
|
});
|
|
41
|
-
|
|
40
|
+
const statsCommand = new Command("stats")
|
|
41
|
+
.description("Get lead funnel statistics")
|
|
42
|
+
.option("--pipeline <pipeline>", "Filter by pipeline")
|
|
43
|
+
.option("--days <n>", "Window in days", parseInt)
|
|
44
|
+
.option("--json", "Output as JSON")
|
|
45
|
+
.action(async (opts) => {
|
|
46
|
+
try {
|
|
47
|
+
const params = new URLSearchParams();
|
|
48
|
+
if (opts.pipeline)
|
|
49
|
+
params.set("pipeline", opts.pipeline);
|
|
50
|
+
if (opts.days != null)
|
|
51
|
+
params.set("days", String(opts.days));
|
|
52
|
+
const qs = params.toString();
|
|
53
|
+
const data = await api.get(`/leads/stats${qs ? `?${qs}` : ""}`);
|
|
54
|
+
console.log(JSON.stringify(data, null, 2));
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
handleError(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
42
60
|
const getCommand = new Command("get")
|
|
43
61
|
.description("Get lead details")
|
|
44
62
|
.argument("<id>", "Lead ID")
|
|
@@ -79,7 +97,6 @@ const getCommand = new Command("get")
|
|
|
79
97
|
handleError(err);
|
|
80
98
|
}
|
|
81
99
|
});
|
|
82
|
-
// --- create ---
|
|
83
100
|
const createCommand = new Command("create")
|
|
84
101
|
.description("Create a new lead")
|
|
85
102
|
.requiredOption("--title <title>", "Lead title")
|
|
@@ -92,9 +109,7 @@ const createCommand = new Command("create")
|
|
|
92
109
|
.option("--json", "Output as JSON")
|
|
93
110
|
.action(async (opts) => {
|
|
94
111
|
try {
|
|
95
|
-
const payload = {
|
|
96
|
-
title: opts.title,
|
|
97
|
-
};
|
|
112
|
+
const payload = { title: opts.title };
|
|
98
113
|
if (opts.sourceChannel !== undefined)
|
|
99
114
|
payload.sourceChannel = opts.sourceChannel;
|
|
100
115
|
if (opts.sourceChannelId !== undefined)
|
|
@@ -112,14 +127,13 @@ const createCommand = new Command("create")
|
|
|
112
127
|
console.log(JSON.stringify(data, null, 2));
|
|
113
128
|
}
|
|
114
129
|
else {
|
|
115
|
-
console.log(chalk.green("
|
|
130
|
+
console.log(chalk.green("✓"), `Lead created: ${chalk.bold(data.title)} (${data.id})`);
|
|
116
131
|
}
|
|
117
132
|
}
|
|
118
133
|
catch (err) {
|
|
119
134
|
handleError(err);
|
|
120
135
|
}
|
|
121
136
|
});
|
|
122
|
-
// --- update ---
|
|
123
137
|
const updateCommand = new Command("update")
|
|
124
138
|
.description("Update a lead")
|
|
125
139
|
.argument("<id>", "Lead ID")
|
|
@@ -150,34 +164,77 @@ const updateCommand = new Command("update")
|
|
|
150
164
|
console.log(JSON.stringify(data, null, 2));
|
|
151
165
|
}
|
|
152
166
|
else {
|
|
153
|
-
console.log(chalk.green("
|
|
167
|
+
console.log(chalk.green("✓"), `Lead updated: ${chalk.bold(data.title)}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
handleError(err);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
const titleCommand = new Command("title")
|
|
175
|
+
.description("Update lead title")
|
|
176
|
+
.argument("<id>", "Lead ID")
|
|
177
|
+
.argument("<title>", "New title")
|
|
178
|
+
.option("--json", "Output as JSON")
|
|
179
|
+
.action(async (id, title, opts) => {
|
|
180
|
+
try {
|
|
181
|
+
const data = await api.post(`/leads/${id}/title`, { title });
|
|
182
|
+
if (opts.json) {
|
|
183
|
+
console.log(JSON.stringify(data, null, 2));
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
console.log(chalk.green("✓"), "Lead title updated");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
handleError(err);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
const descriptionCommand = new Command("description")
|
|
194
|
+
.description("Update lead description")
|
|
195
|
+
.argument("<id>", "Lead ID")
|
|
196
|
+
.argument("<description>", 'New description ("null" to clear)')
|
|
197
|
+
.option("--json", "Output as JSON")
|
|
198
|
+
.action(async (id, description, opts) => {
|
|
199
|
+
try {
|
|
200
|
+
const value = description === "null" ? null : description;
|
|
201
|
+
const data = await api.post(`/leads/${id}/description`, {
|
|
202
|
+
description: value,
|
|
203
|
+
});
|
|
204
|
+
if (opts.json) {
|
|
205
|
+
console.log(JSON.stringify(data, null, 2));
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
console.log(chalk.green("✓"), "Lead description updated");
|
|
154
209
|
}
|
|
155
210
|
}
|
|
156
211
|
catch (err) {
|
|
157
212
|
handleError(err);
|
|
158
213
|
}
|
|
159
214
|
});
|
|
160
|
-
// --- status ---
|
|
161
215
|
const statusCommand = new Command("status")
|
|
162
216
|
.description("Update lead status")
|
|
163
217
|
.argument("<id>", "Lead ID")
|
|
164
218
|
.argument("<status>", "New status")
|
|
219
|
+
.option("--reason <text>", "Reason for status change")
|
|
165
220
|
.option("--json", "Output as JSON")
|
|
166
221
|
.action(async (id, status, opts) => {
|
|
167
222
|
try {
|
|
168
|
-
const
|
|
223
|
+
const payload = { status };
|
|
224
|
+
if (opts.reason !== undefined)
|
|
225
|
+
payload.reason = opts.reason;
|
|
226
|
+
const data = await api.post(`/leads/${id}/status`, payload);
|
|
169
227
|
if (opts.json) {
|
|
170
228
|
console.log(JSON.stringify(data, null, 2));
|
|
171
229
|
}
|
|
172
230
|
else {
|
|
173
|
-
console.log(chalk.green("
|
|
231
|
+
console.log(chalk.green("✓"), `Lead status updated to ${chalk.bold(status)}`);
|
|
174
232
|
}
|
|
175
233
|
}
|
|
176
234
|
catch (err) {
|
|
177
235
|
handleError(err);
|
|
178
236
|
}
|
|
179
237
|
});
|
|
180
|
-
// --- archive ---
|
|
181
238
|
const archiveCommand = new Command("archive")
|
|
182
239
|
.description("Archive a lead")
|
|
183
240
|
.argument("<id>", "Lead ID")
|
|
@@ -191,14 +248,13 @@ const archiveCommand = new Command("archive")
|
|
|
191
248
|
console.log(JSON.stringify(data, null, 2));
|
|
192
249
|
}
|
|
193
250
|
else {
|
|
194
|
-
console.log(chalk.green("
|
|
251
|
+
console.log(chalk.green("✓"), "Lead archived");
|
|
195
252
|
}
|
|
196
253
|
}
|
|
197
254
|
catch (err) {
|
|
198
255
|
handleError(err);
|
|
199
256
|
}
|
|
200
257
|
});
|
|
201
|
-
// --- unarchive ---
|
|
202
258
|
const unarchiveCommand = new Command("unarchive")
|
|
203
259
|
.description("Unarchive a lead")
|
|
204
260
|
.argument("<id>", "Lead ID")
|
|
@@ -212,14 +268,13 @@ const unarchiveCommand = new Command("unarchive")
|
|
|
212
268
|
console.log(JSON.stringify(data, null, 2));
|
|
213
269
|
}
|
|
214
270
|
else {
|
|
215
|
-
console.log(chalk.green("
|
|
271
|
+
console.log(chalk.green("✓"), "Lead unarchived");
|
|
216
272
|
}
|
|
217
273
|
}
|
|
218
274
|
catch (err) {
|
|
219
275
|
handleError(err);
|
|
220
276
|
}
|
|
221
277
|
});
|
|
222
|
-
// --- metadata ---
|
|
223
278
|
const metadataCommand = new Command("metadata")
|
|
224
279
|
.description("Update lead metadata")
|
|
225
280
|
.argument("<id>", "Lead ID")
|
|
@@ -228,21 +283,54 @@ const metadataCommand = new Command("metadata")
|
|
|
228
283
|
.action(async (id, jsonStr, opts) => {
|
|
229
284
|
try {
|
|
230
285
|
const metadata = jsonStr === "null" ? null : JSON.parse(jsonStr);
|
|
231
|
-
const data = await api.post(`/leads/${id}/metadata`, {
|
|
232
|
-
metadata,
|
|
233
|
-
});
|
|
286
|
+
const data = await api.post(`/leads/${id}/metadata`, { metadata });
|
|
234
287
|
if (opts.json) {
|
|
235
288
|
console.log(JSON.stringify(data, null, 2));
|
|
236
289
|
}
|
|
237
290
|
else {
|
|
238
|
-
console.log(chalk.green("
|
|
291
|
+
console.log(chalk.green("✓"), "Lead metadata updated");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
catch (err) {
|
|
295
|
+
handleError(err);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
const rateCommand = new Command("rate")
|
|
299
|
+
.description("Queue a job to rate this lead")
|
|
300
|
+
.argument("<id>", "Lead ID")
|
|
301
|
+
.option("--json", "Output as JSON")
|
|
302
|
+
.action(async (id, opts) => {
|
|
303
|
+
try {
|
|
304
|
+
const job = await api.post(`/leads/${id}/rate`, {});
|
|
305
|
+
if (opts.json) {
|
|
306
|
+
console.log(JSON.stringify(job, null, 2));
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
console.log(chalk.green("✓"), `Rate job queued: ${chalk.bold(job.id)} [${job.status}]`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
handleError(err);
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
const proposalCommand = new Command("proposal")
|
|
317
|
+
.description("Queue a job to draft a proposal for this lead")
|
|
318
|
+
.argument("<id>", "Lead ID")
|
|
319
|
+
.option("--json", "Output as JSON")
|
|
320
|
+
.action(async (id, opts) => {
|
|
321
|
+
try {
|
|
322
|
+
const job = await api.post(`/leads/${id}/proposal`, {});
|
|
323
|
+
if (opts.json) {
|
|
324
|
+
console.log(JSON.stringify(job, null, 2));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
console.log(chalk.green("✓"), `Proposal job queued: ${chalk.bold(job.id)} [${job.status}]`);
|
|
239
328
|
}
|
|
240
329
|
}
|
|
241
330
|
catch (err) {
|
|
242
331
|
handleError(err);
|
|
243
332
|
}
|
|
244
333
|
});
|
|
245
|
-
// --- delete ---
|
|
246
334
|
const deleteCommand = new Command("delete")
|
|
247
335
|
.description("Delete a lead")
|
|
248
336
|
.argument("<id>", "Lead ID")
|
|
@@ -254,23 +342,27 @@ const deleteCommand = new Command("delete")
|
|
|
254
342
|
console.log(JSON.stringify({ deleted: true, id }));
|
|
255
343
|
}
|
|
256
344
|
else {
|
|
257
|
-
console.log(chalk.green("
|
|
345
|
+
console.log(chalk.green("✓"), "Lead deleted");
|
|
258
346
|
}
|
|
259
347
|
}
|
|
260
348
|
catch (err) {
|
|
261
349
|
handleError(err);
|
|
262
350
|
}
|
|
263
351
|
});
|
|
264
|
-
// --- parent ---
|
|
265
352
|
export const leadCommand = new Command("lead")
|
|
266
353
|
.description("Manage leads")
|
|
267
354
|
.addCommand(listCommand)
|
|
355
|
+
.addCommand(statsCommand)
|
|
268
356
|
.addCommand(getCommand)
|
|
269
357
|
.addCommand(createCommand)
|
|
270
358
|
.addCommand(updateCommand)
|
|
359
|
+
.addCommand(titleCommand)
|
|
360
|
+
.addCommand(descriptionCommand)
|
|
271
361
|
.addCommand(statusCommand)
|
|
272
362
|
.addCommand(archiveCommand)
|
|
273
363
|
.addCommand(unarchiveCommand)
|
|
274
364
|
.addCommand(metadataCommand)
|
|
365
|
+
.addCommand(rateCommand)
|
|
366
|
+
.addCommand(proposalCommand)
|
|
275
367
|
.addCommand(deleteCommand);
|
|
276
|
-
//# sourceMappingURL=
|
|
368
|
+
//# sourceMappingURL=leads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"leads.js","sourceRoot":"","sources":["../../../src/commands/api/leads.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import { api } from "
|
|
4
|
-
import { printList, printDetail, handleError } from "
|
|
5
|
-
// --- list ---
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { printList, printDetail, handleError } from "../../lib/format.js";
|
|
6
5
|
const listCommand = new Command("list")
|
|
7
6
|
.description("List all organizations")
|
|
8
7
|
.option("--search <query>", "Search by name")
|
|
@@ -26,7 +25,6 @@ const listCommand = new Command("list")
|
|
|
26
25
|
handleError(err);
|
|
27
26
|
}
|
|
28
27
|
});
|
|
29
|
-
// --- get ---
|
|
30
28
|
const getCommand = new Command("get")
|
|
31
29
|
.description("Get organization details")
|
|
32
30
|
.argument("<id>", "Organization ID")
|
|
@@ -43,7 +41,6 @@ const getCommand = new Command("get")
|
|
|
43
41
|
{ key: "id", label: "ID" },
|
|
44
42
|
{ key: "address", label: "Address" },
|
|
45
43
|
{ key: "website", label: "Website" },
|
|
46
|
-
{ key: "notes", label: "Notes" },
|
|
47
44
|
{ key: "createdAt", label: "Created" },
|
|
48
45
|
{ key: "updatedAt", label: "Updated" },
|
|
49
46
|
], opts);
|
|
@@ -59,13 +56,11 @@ const getCommand = new Command("get")
|
|
|
59
56
|
handleError(err);
|
|
60
57
|
}
|
|
61
58
|
});
|
|
62
|
-
// --- create ---
|
|
63
59
|
const createCommand = new Command("create")
|
|
64
60
|
.description("Create a new organization")
|
|
65
61
|
.requiredOption("--name <name>", "Organization name")
|
|
66
62
|
.option("--address <address>", "Address")
|
|
67
63
|
.option("--website <url>", "Website URL")
|
|
68
|
-
.option("--notes <notes>", "Notes (markdown)")
|
|
69
64
|
.option("--json", "Output as JSON")
|
|
70
65
|
.action(async (opts) => {
|
|
71
66
|
try {
|
|
@@ -73,7 +68,6 @@ const createCommand = new Command("create")
|
|
|
73
68
|
name: opts.name,
|
|
74
69
|
address: opts.address,
|
|
75
70
|
website: opts.website,
|
|
76
|
-
notes: opts.notes,
|
|
77
71
|
});
|
|
78
72
|
if (opts.json) {
|
|
79
73
|
console.log(JSON.stringify(data, null, 2));
|
|
@@ -86,20 +80,22 @@ const createCommand = new Command("create")
|
|
|
86
80
|
handleError(err);
|
|
87
81
|
}
|
|
88
82
|
});
|
|
89
|
-
// --- update ---
|
|
90
83
|
const updateCommand = new Command("update")
|
|
91
84
|
.description("Update an organization")
|
|
92
85
|
.argument("<id>", "Organization ID")
|
|
93
86
|
.option("--name <name>", "Organization name")
|
|
94
87
|
.option("--address <address>", "Address")
|
|
95
88
|
.option("--website <url>", "Website URL")
|
|
96
|
-
.option("--notes <notes>", "Notes (markdown)")
|
|
97
89
|
.option("--json", "Output as JSON")
|
|
98
90
|
.action(async (id, opts) => {
|
|
99
91
|
try {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
92
|
+
const payload = {};
|
|
93
|
+
if (opts.name !== undefined)
|
|
94
|
+
payload.name = opts.name;
|
|
95
|
+
if (opts.address !== undefined)
|
|
96
|
+
payload.address = opts.address;
|
|
97
|
+
if (opts.website !== undefined)
|
|
98
|
+
payload.website = opts.website;
|
|
103
99
|
const data = await api.post(`/organizations/${id}`, payload);
|
|
104
100
|
if (opts.json) {
|
|
105
101
|
console.log(JSON.stringify(data, null, 2));
|
|
@@ -112,29 +108,6 @@ const updateCommand = new Command("update")
|
|
|
112
108
|
handleError(err);
|
|
113
109
|
}
|
|
114
110
|
});
|
|
115
|
-
// --- notes ---
|
|
116
|
-
const notesCommand = new Command("notes")
|
|
117
|
-
.description("Update organization notes")
|
|
118
|
-
.argument("<id>", "Organization ID")
|
|
119
|
-
.option("--notes <notes>", "Notes (markdown), omit to clear")
|
|
120
|
-
.option("--json", "Output as JSON")
|
|
121
|
-
.action(async (id, opts) => {
|
|
122
|
-
try {
|
|
123
|
-
const data = await api.post(`/organizations/${id}/notes`, {
|
|
124
|
-
notes: opts.notes ?? null,
|
|
125
|
-
});
|
|
126
|
-
if (opts.json) {
|
|
127
|
-
console.log(JSON.stringify(data, null, 2));
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
console.log(chalk.green("✓"), opts.notes ? "Notes updated" : "Notes cleared");
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
catch (err) {
|
|
134
|
-
handleError(err);
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
// --- delete ---
|
|
138
111
|
const deleteCommand = new Command("delete")
|
|
139
112
|
.description("Delete an organization")
|
|
140
113
|
.argument("<id>", "Organization ID")
|
|
@@ -153,7 +126,6 @@ const deleteCommand = new Command("delete")
|
|
|
153
126
|
handleError(err);
|
|
154
127
|
}
|
|
155
128
|
});
|
|
156
|
-
// --- link-person ---
|
|
157
129
|
const linkPersonCommand = new Command("link-person")
|
|
158
130
|
.description("Link a person to this organization")
|
|
159
131
|
.argument("<id>", "Organization ID")
|
|
@@ -177,7 +149,26 @@ const linkPersonCommand = new Command("link-person")
|
|
|
177
149
|
handleError(err);
|
|
178
150
|
}
|
|
179
151
|
});
|
|
180
|
-
|
|
152
|
+
const updatePersonRoleCommand = new Command("update-person-role")
|
|
153
|
+
.description("Update a linked person's role")
|
|
154
|
+
.argument("<id>", "Organization ID")
|
|
155
|
+
.requiredOption("--person <personId>", "Person ID")
|
|
156
|
+
.option("--role <role>", "New role (omit to clear)")
|
|
157
|
+
.option("--json", "Output as JSON")
|
|
158
|
+
.action(async (id, opts) => {
|
|
159
|
+
try {
|
|
160
|
+
const data = await api.post(`/organizations/${id}/persons/${opts.person}`, { role: opts.role ?? null });
|
|
161
|
+
if (opts.json) {
|
|
162
|
+
console.log(JSON.stringify(data, null, 2));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
console.log(chalk.green("✓"), "Role updated");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
handleError(err);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
181
172
|
const unlinkPersonCommand = new Command("unlink-person")
|
|
182
173
|
.description("Unlink a person from this organization")
|
|
183
174
|
.argument("<id>", "Organization ID")
|
|
@@ -197,15 +188,14 @@ const unlinkPersonCommand = new Command("unlink-person")
|
|
|
197
188
|
handleError(err);
|
|
198
189
|
}
|
|
199
190
|
});
|
|
200
|
-
// --- parent ---
|
|
201
191
|
export const organizationCommand = new Command("organization")
|
|
202
192
|
.description("Manage organizations")
|
|
203
193
|
.addCommand(listCommand)
|
|
204
194
|
.addCommand(getCommand)
|
|
205
195
|
.addCommand(createCommand)
|
|
206
196
|
.addCommand(updateCommand)
|
|
207
|
-
.addCommand(notesCommand)
|
|
208
197
|
.addCommand(deleteCommand)
|
|
209
198
|
.addCommand(linkPersonCommand)
|
|
199
|
+
.addCommand(updatePersonRoleCommand)
|
|
210
200
|
.addCommand(unlinkPersonCommand);
|
|
211
|
-
//# sourceMappingURL=
|
|
201
|
+
//# sourceMappingURL=organizations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../../src/commands/api/organizations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import chalk from "chalk";
|
|
3
|
-
import { api } from "
|
|
4
|
-
import { printList, printDetail, handleError } from "
|
|
5
|
-
// --- list ---
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { printList, printDetail, handleError } from "../../lib/format.js";
|
|
6
5
|
const listCommand = new Command("list")
|
|
7
6
|
.description("List pages")
|
|
8
7
|
.option("--project <projectId>", "Filter by project")
|
|
9
8
|
.option("--lead <leadId>", "Filter by lead")
|
|
10
9
|
.option("--organization <organizationId>", "Filter by organization")
|
|
10
|
+
.option("--folder <folderId>", "Filter by folder")
|
|
11
11
|
.option("--json", "Output as JSON")
|
|
12
12
|
.action(async (opts) => {
|
|
13
13
|
try {
|
|
@@ -18,6 +18,8 @@ const listCommand = new Command("list")
|
|
|
18
18
|
params.set("leadId", opts.lead);
|
|
19
19
|
if (opts.organization)
|
|
20
20
|
params.set("organizationId", opts.organization);
|
|
21
|
+
if (opts.folder)
|
|
22
|
+
params.set("folderId", opts.folder);
|
|
21
23
|
const qs = params.toString();
|
|
22
24
|
const data = await api.get(`/pages${qs ? `?${qs}` : ""}`);
|
|
23
25
|
printList(data, [
|
|
@@ -30,7 +32,6 @@ const listCommand = new Command("list")
|
|
|
30
32
|
handleError(err);
|
|
31
33
|
}
|
|
32
34
|
});
|
|
33
|
-
// --- get ---
|
|
34
35
|
const getCommand = new Command("get")
|
|
35
36
|
.description("Get a page")
|
|
36
37
|
.argument("<id>", "Page ID")
|
|
@@ -45,6 +46,7 @@ const getCommand = new Command("get")
|
|
|
45
46
|
printDetail(data, [
|
|
46
47
|
{ key: "id", label: "ID" },
|
|
47
48
|
{ key: "title", label: "Title" },
|
|
49
|
+
{ key: "folderId", label: "Folder" },
|
|
48
50
|
{ key: "createdAt", label: "Created" },
|
|
49
51
|
{ key: "updatedAt", label: "Updated" },
|
|
50
52
|
], opts);
|
|
@@ -57,7 +59,6 @@ const getCommand = new Command("get")
|
|
|
57
59
|
handleError(err);
|
|
58
60
|
}
|
|
59
61
|
});
|
|
60
|
-
// --- create ---
|
|
61
62
|
const createCommand = new Command("create")
|
|
62
63
|
.description("Create a page")
|
|
63
64
|
.requiredOption("--title <title>", "Page title")
|
|
@@ -65,12 +66,11 @@ const createCommand = new Command("create")
|
|
|
65
66
|
.option("--project <projectId>", "Link to project")
|
|
66
67
|
.option("--lead <leadId>", "Link to lead")
|
|
67
68
|
.option("--organization <organizationId>", "Link to organization")
|
|
69
|
+
.option("--folder <folderId>", "Place inside this folder")
|
|
68
70
|
.option("--json", "Output as JSON")
|
|
69
71
|
.action(async (opts) => {
|
|
70
72
|
try {
|
|
71
|
-
const payload = {
|
|
72
|
-
title: opts.title,
|
|
73
|
-
};
|
|
73
|
+
const payload = { title: opts.title };
|
|
74
74
|
if (opts.body)
|
|
75
75
|
payload.body = opts.body;
|
|
76
76
|
if (opts.project)
|
|
@@ -79,6 +79,8 @@ const createCommand = new Command("create")
|
|
|
79
79
|
payload.leadId = opts.lead;
|
|
80
80
|
if (opts.organization)
|
|
81
81
|
payload.organizationId = opts.organization;
|
|
82
|
+
if (opts.folder)
|
|
83
|
+
payload.folderId = opts.folder;
|
|
82
84
|
const data = await api.post("/pages", payload);
|
|
83
85
|
if (opts.json) {
|
|
84
86
|
console.log(JSON.stringify(data, null, 2));
|
|
@@ -91,8 +93,7 @@ const createCommand = new Command("create")
|
|
|
91
93
|
handleError(err);
|
|
92
94
|
}
|
|
93
95
|
});
|
|
94
|
-
|
|
95
|
-
const updateTitleCommand = new Command("update-title")
|
|
96
|
+
const titleCommand = new Command("title")
|
|
96
97
|
.description("Update page title")
|
|
97
98
|
.argument("<id>", "Page ID")
|
|
98
99
|
.argument("<title>", "New title")
|
|
@@ -111,8 +112,7 @@ const updateTitleCommand = new Command("update-title")
|
|
|
111
112
|
handleError(err);
|
|
112
113
|
}
|
|
113
114
|
});
|
|
114
|
-
|
|
115
|
-
const updateBodyCommand = new Command("update-body")
|
|
115
|
+
const bodyCommand = new Command("body")
|
|
116
116
|
.description("Update page body")
|
|
117
117
|
.argument("<id>", "Page ID")
|
|
118
118
|
.argument("<body>", "New body (markdown)")
|
|
@@ -124,14 +124,56 @@ const updateBodyCommand = new Command("update-body")
|
|
|
124
124
|
console.log(JSON.stringify(data, null, 2));
|
|
125
125
|
}
|
|
126
126
|
else {
|
|
127
|
-
console.log(chalk.green("✓"),
|
|
127
|
+
console.log(chalk.green("✓"), "Page body updated");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
handleError(err);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
const folderCommand = new Command("folder")
|
|
135
|
+
.description("Move page to a different folder")
|
|
136
|
+
.argument("<id>", "Page ID")
|
|
137
|
+
.argument("<folderId>", 'Target folder ID ("null" to remove from folder)')
|
|
138
|
+
.option("--json", "Output as JSON")
|
|
139
|
+
.action(async (id, folderId, opts) => {
|
|
140
|
+
try {
|
|
141
|
+
const value = folderId === "null" ? null : folderId;
|
|
142
|
+
const data = await api.post(`/pages/${id}/folder`, {
|
|
143
|
+
folderId: value,
|
|
144
|
+
});
|
|
145
|
+
if (opts.json) {
|
|
146
|
+
console.log(JSON.stringify(data, null, 2));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log(chalk.green("✓"), "Page moved");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
handleError(err);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
const reviseProposalCommand = new Command("revise-proposal")
|
|
157
|
+
.description("Queue a job to revise a proposal page")
|
|
158
|
+
.argument("<id>", "Page ID")
|
|
159
|
+
.argument("<instructions>", "Revision instructions")
|
|
160
|
+
.option("--json", "Output as JSON")
|
|
161
|
+
.action(async (id, instructions, opts) => {
|
|
162
|
+
try {
|
|
163
|
+
const job = await api.post(`/pages/${id}/revise-proposal`, {
|
|
164
|
+
instructions,
|
|
165
|
+
});
|
|
166
|
+
if (opts.json) {
|
|
167
|
+
console.log(JSON.stringify(job, null, 2));
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
console.log(chalk.green("✓"), `Revision job queued: ${chalk.bold(job.id)} [${job.status}]`);
|
|
128
171
|
}
|
|
129
172
|
}
|
|
130
173
|
catch (err) {
|
|
131
174
|
handleError(err);
|
|
132
175
|
}
|
|
133
176
|
});
|
|
134
|
-
// --- delete ---
|
|
135
177
|
const deleteCommand = new Command("delete")
|
|
136
178
|
.description("Delete a page")
|
|
137
179
|
.argument("<id>", "Page ID")
|
|
@@ -143,20 +185,21 @@ const deleteCommand = new Command("delete")
|
|
|
143
185
|
console.log(JSON.stringify({ id }, null, 2));
|
|
144
186
|
}
|
|
145
187
|
else {
|
|
146
|
-
console.log(chalk.green("✓"),
|
|
188
|
+
console.log(chalk.green("✓"), "Page deleted");
|
|
147
189
|
}
|
|
148
190
|
}
|
|
149
191
|
catch (err) {
|
|
150
192
|
handleError(err);
|
|
151
193
|
}
|
|
152
194
|
});
|
|
153
|
-
// --- page (parent) ---
|
|
154
195
|
export const pageCommand = new Command("page")
|
|
155
196
|
.description("Manage pages")
|
|
156
197
|
.addCommand(listCommand)
|
|
157
198
|
.addCommand(getCommand)
|
|
158
199
|
.addCommand(createCommand)
|
|
159
|
-
.addCommand(
|
|
160
|
-
.addCommand(
|
|
200
|
+
.addCommand(titleCommand)
|
|
201
|
+
.addCommand(bodyCommand)
|
|
202
|
+
.addCommand(folderCommand)
|
|
203
|
+
.addCommand(reviseProposalCommand)
|
|
161
204
|
.addCommand(deleteCommand);
|
|
162
|
-
//# sourceMappingURL=
|
|
205
|
+
//# sourceMappingURL=pages.js.map
|