@itznexus/itznexus-cli 1.142.0 → 1.144.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/project-stack.d.ts +2 -0
- package/dist/commands/agents/project-stack.js +101 -0
- package/dist/commands/agents/project-stack.js.map +1 -0
- package/dist/commands/api/outreach-catalog.d.ts +2 -0
- package/dist/commands/api/outreach-catalog.js +167 -0
- package/dist/commands/api/outreach-catalog.js.map +1 -0
- package/dist/commands/api/outreach-companies.d.ts +2 -0
- package/dist/commands/api/outreach-companies.js +93 -0
- package/dist/commands/api/outreach-companies.js.map +1 -0
- package/dist/commands/api/outreach-company-writes.d.ts +2 -0
- package/dist/commands/api/outreach-company-writes.js +101 -0
- package/dist/commands/api/outreach-company-writes.js.map +1 -0
- package/dist/commands/api/outreach-enrollment-writes.d.ts +2 -0
- package/dist/commands/api/outreach-enrollment-writes.js +144 -0
- package/dist/commands/api/outreach-enrollment-writes.js.map +1 -0
- package/dist/commands/api/outreach-enrollments.d.ts +2 -0
- package/dist/commands/api/outreach-enrollments.js +92 -0
- package/dist/commands/api/outreach-enrollments.js.map +1 -0
- package/dist/commands/api/outreach-prospect-writes.d.ts +2 -0
- package/dist/commands/api/outreach-prospect-writes.js +139 -0
- package/dist/commands/api/outreach-prospect-writes.js.map +1 -0
- package/dist/commands/api/outreach-prospects.d.ts +2 -0
- package/dist/commands/api/outreach-prospects.js +96 -0
- package/dist/commands/api/outreach-prospects.js.map +1 -0
- package/dist/commands/api/outreach-settings.d.ts +2 -0
- package/dist/commands/api/outreach-settings.js +193 -0
- package/dist/commands/api/outreach-settings.js.map +1 -0
- package/dist/commands/api/outreach-shared.d.ts +24 -0
- package/dist/commands/api/outreach-shared.js +34 -0
- package/dist/commands/api/outreach-shared.js.map +1 -0
- package/dist/commands/api/outreach-signals.d.ts +2 -0
- package/dist/commands/api/outreach-signals.js +80 -0
- package/dist/commands/api/outreach-signals.js.map +1 -0
- package/dist/commands/api/outreach.d.ts +2 -0
- package/dist/commands/api/outreach.js +21 -0
- package/dist/commands/api/outreach.js.map +1 -0
- package/dist/commands/api/projects.js +2 -0
- package/dist/commands/api/projects.js.map +1 -1
- package/dist/commands/api/seo-backlinks.js +1 -1
- package/dist/commands/api/seo-backlinks.js.map +1 -1
- package/dist/commands/api/seo-catalog.js +1 -1
- package/dist/commands/api/seo-catalog.js.map +1 -1
- package/dist/commands/api/seo-changes.js +1 -1
- package/dist/commands/api/seo-changes.js.map +1 -1
- package/dist/commands/api/seo-data.js +1 -1
- package/dist/commands/api/seo-data.js.map +1 -1
- package/dist/commands/api/seo-keyword-writes.js +1 -1
- package/dist/commands/api/seo-keyword-writes.js.map +1 -1
- package/dist/commands/api/seo-keywords.js +1 -1
- package/dist/commands/api/seo-keywords.js.map +1 -1
- package/dist/commands/api/seo-offers.js +1 -1
- package/dist/commands/api/seo-offers.js.map +1 -1
- package/dist/commands/api/seo-page-writes.js +1 -1
- package/dist/commands/api/seo-page-writes.js.map +1 -1
- package/dist/commands/api/seo-pages.js +1 -1
- package/dist/commands/api/seo-pages.js.map +1 -1
- package/dist/commands/api/seo-settings.js +1 -1
- package/dist/commands/api/seo-settings.js.map +1 -1
- package/dist/commands/api/seo-site.js +1 -1
- package/dist/commands/api/seo-site.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/{commands/api/seo-shared.d.ts → lib/command-helpers.d.ts} +1 -1
- package/dist/{commands/api/seo-shared.js → lib/command-helpers.js} +8 -8
- package/dist/lib/command-helpers.js.map +1 -0
- package/dist/lib/stack/driver.d.ts +14 -0
- package/dist/lib/stack/driver.js +228 -0
- package/dist/lib/stack/driver.js.map +1 -0
- package/dist/lib/stack/manifest.d.ts +28 -0
- package/dist/lib/stack/manifest.js +182 -0
- package/dist/lib/stack/manifest.js.map +1 -0
- package/dist/lib/stack/processes.d.ts +11 -0
- package/dist/lib/stack/processes.js +139 -0
- package/dist/lib/stack/processes.js.map +1 -0
- package/dist/lib/stack/registry.d.ts +24 -0
- package/dist/lib/stack/registry.js +37 -0
- package/dist/lib/stack/registry.js.map +1 -0
- package/package.json +3 -2
- package/dist/commands/api/seo-shared.js.map +0 -1
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { handleError } from "../../lib/format.js";
|
|
4
|
+
import { downStack, restartService, serviceLog, stackStatus, upStack, } from "../../lib/stack/driver.js";
|
|
5
|
+
// Local driver for a project's dev stack, declared as the ```yaml stack
|
|
6
|
+
// block of its DEVELOPMENT.md. Runs inside the project folder. Sessions
|
|
7
|
+
// bring the stack up and never take it down: the worker does, on idle,
|
|
8
|
+
// after a failed run, and at boot.
|
|
9
|
+
function printRows(rows) {
|
|
10
|
+
for (const r of rows) {
|
|
11
|
+
const state = r.kind === "run"
|
|
12
|
+
? chalk.dim("one-shot")
|
|
13
|
+
: r.kind === "up"
|
|
14
|
+
? r.ready === null
|
|
15
|
+
? chalk.dim("up")
|
|
16
|
+
: r.ready
|
|
17
|
+
? chalk.green("ready")
|
|
18
|
+
: chalk.red("not ready")
|
|
19
|
+
: !r.alive
|
|
20
|
+
? chalk.red("down")
|
|
21
|
+
: r.ready
|
|
22
|
+
? chalk.green("ready")
|
|
23
|
+
: chalk.yellow("starting");
|
|
24
|
+
const pid = r.pid ? chalk.dim(` pid ${r.pid}`) : "";
|
|
25
|
+
console.log(`${r.name.padEnd(14)} ${state}${pid}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const upCommand = new Command("up")
|
|
29
|
+
.description("Bring the stack up from the manifest (safe to repeat: installs when a lockfile moved, re-runs one-shot steps, leaves ready services alone, wipes the data when the branch moved)")
|
|
30
|
+
.option("--json", "Output as JSON")
|
|
31
|
+
.action(async (opts) => {
|
|
32
|
+
try {
|
|
33
|
+
const rows = await upStack(process.cwd());
|
|
34
|
+
if (opts.json)
|
|
35
|
+
console.log(JSON.stringify(rows, null, 2));
|
|
36
|
+
else
|
|
37
|
+
printRows(rows);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
handleError(err);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const downCommand = new Command("down")
|
|
44
|
+
.description("Take the stack down (a human act, or the worker's: sessions never call it)")
|
|
45
|
+
.option("--wipe", "Also drop the data, through the manifest's wipe commands")
|
|
46
|
+
.action(async (opts) => {
|
|
47
|
+
try {
|
|
48
|
+
const was = await downStack(process.cwd(), opts.wipe === true);
|
|
49
|
+
if (!was)
|
|
50
|
+
console.log("no stack recorded for this folder");
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
handleError(err);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
const statusCommand = new Command("status")
|
|
57
|
+
.description("Probe every service of the manifest")
|
|
58
|
+
.option("--json", "Output as JSON")
|
|
59
|
+
.action(async (opts) => {
|
|
60
|
+
try {
|
|
61
|
+
const rows = await stackStatus(process.cwd());
|
|
62
|
+
if (opts.json)
|
|
63
|
+
console.log(JSON.stringify(rows, null, 2));
|
|
64
|
+
else
|
|
65
|
+
printRows(rows);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
handleError(err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
const restartCommand = new Command("restart")
|
|
72
|
+
.description("Restart one long-lived service (after a change a watcher cannot pick up)")
|
|
73
|
+
.argument("<service>", "Service name from the manifest")
|
|
74
|
+
.action(async (service) => {
|
|
75
|
+
try {
|
|
76
|
+
await restartService(process.cwd(), service);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
handleError(err);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
const logsCommand = new Command("logs")
|
|
83
|
+
.description("Print the tail of one service's log")
|
|
84
|
+
.argument("<service>", "Service name from the manifest")
|
|
85
|
+
.option("-n, --lines <n>", "Lines to print", "80")
|
|
86
|
+
.action((service, opts) => {
|
|
87
|
+
try {
|
|
88
|
+
process.stdout.write(serviceLog(process.cwd(), service, Number(opts.lines)) + "\n");
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
handleError(err);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
export const stackCommand = new Command("stack")
|
|
95
|
+
.description("Drive the project's local dev stack from the yaml stack block of its DEVELOPMENT.md (run inside the project folder)")
|
|
96
|
+
.addCommand(upCommand)
|
|
97
|
+
.addCommand(downCommand)
|
|
98
|
+
.addCommand(statusCommand)
|
|
99
|
+
.addCommand(restartCommand)
|
|
100
|
+
.addCommand(logsCommand);
|
|
101
|
+
//# sourceMappingURL=project-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-stack.js","sourceRoot":"","sources":["../../../src/commands/agents/project-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { handleError, printDetail, printList } from "../../lib/format.js";
|
|
5
|
+
import { compact, done, nullable, printJson, readJsonObject, toInt, } from "../../lib/command-helpers.js";
|
|
6
|
+
import { LANGUAGES, SIGNALS } from "./outreach-shared.js";
|
|
7
|
+
function archiveCommand(base, noun, arg, about) {
|
|
8
|
+
return new Command("archive")
|
|
9
|
+
.description(`Archive a ${noun} (never deleted; history keeps it)`)
|
|
10
|
+
.argument(`<${arg}>`, about)
|
|
11
|
+
.option("--json", "Output as JSON")
|
|
12
|
+
.action(async (ref, opts) => {
|
|
13
|
+
try {
|
|
14
|
+
const data = await api.post(`${base}/${encodeURIComponent(ref)}/archive`, {});
|
|
15
|
+
done(data, opts, `Archived ${noun} ${ref}`);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
handleError(err);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function optionalInt(value, name) {
|
|
23
|
+
return value !== undefined ? toInt(value, name) : undefined;
|
|
24
|
+
}
|
|
25
|
+
const marketList = new Command("list")
|
|
26
|
+
.description("List markets (a country plus the language we write in)")
|
|
27
|
+
.option("--json", "Output as JSON")
|
|
28
|
+
.action(async (opts) => {
|
|
29
|
+
try {
|
|
30
|
+
const data = await api.get("/outreach/markets");
|
|
31
|
+
printList(data, [
|
|
32
|
+
{ key: "code", label: "Code", width: 5 },
|
|
33
|
+
{ key: "name", label: "Name", width: 16 },
|
|
34
|
+
{ key: "language", label: "Lang", width: 5 },
|
|
35
|
+
{ key: "countryCode", label: "Country", width: 8 },
|
|
36
|
+
{ key: "position", label: "Pos.", width: 5 },
|
|
37
|
+
{ key: "archivedAt", label: "Archived", width: 24 },
|
|
38
|
+
], opts);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
handleError(err);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
const marketSet = new Command("set")
|
|
45
|
+
.description("Create or update a market keyed by code (name, country code and language required on create)")
|
|
46
|
+
.argument("<code>", "Lowercase ISO 3166-1 alpha-2 code (lu, fr)")
|
|
47
|
+
.option("--name <name>", "Display name (Luxembourg)")
|
|
48
|
+
.option("--country-code <code>", "ISO 3166-1 alpha-2 country code (LU)")
|
|
49
|
+
.option("--language <lang>", `Outreach language: ${LANGUAGES}`)
|
|
50
|
+
.option("--position <n>", "Sort position")
|
|
51
|
+
.option("--json", "Output as JSON")
|
|
52
|
+
.action(async (code, opts) => {
|
|
53
|
+
try {
|
|
54
|
+
const data = await api.post("/outreach/markets", compact({
|
|
55
|
+
code,
|
|
56
|
+
name: opts.name,
|
|
57
|
+
countryCode: opts.countryCode,
|
|
58
|
+
language: opts.language,
|
|
59
|
+
position: optionalInt(opts.position, "position"),
|
|
60
|
+
}));
|
|
61
|
+
done(data, opts, `Market set: ${code}`);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
handleError(err);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const marketCommand = new Command("market")
|
|
68
|
+
.description("Markets prospected, each with the language we write in")
|
|
69
|
+
.addCommand(marketList)
|
|
70
|
+
.addCommand(marketSet)
|
|
71
|
+
.addCommand(archiveCommand("/outreach/markets", "market", "code", "Market code"));
|
|
72
|
+
const sequenceList = new Command("list")
|
|
73
|
+
.description("List sequences in position order")
|
|
74
|
+
.option("--json", "Output as JSON")
|
|
75
|
+
.action(async (opts) => {
|
|
76
|
+
try {
|
|
77
|
+
const data = await api.get("/outreach/sequences");
|
|
78
|
+
printList(data.map((s) => ({
|
|
79
|
+
...s,
|
|
80
|
+
days: s.steps.map((step) => step.dayOffset).join("/"),
|
|
81
|
+
})), [
|
|
82
|
+
{ key: "slug", label: "Slug", width: 16 },
|
|
83
|
+
{ key: "name", label: "Name", width: 24 },
|
|
84
|
+
{ key: "language", label: "Lang", width: 4 },
|
|
85
|
+
{ key: "signal", label: "Signal", width: 12 },
|
|
86
|
+
{ key: "days", label: "Step days", width: 10 },
|
|
87
|
+
{ key: "archivedAt", label: "Archived", width: 24 },
|
|
88
|
+
{ key: "id", label: "Id", width: 36 },
|
|
89
|
+
], opts);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
handleError(err);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const sequenceGet = new Command("get")
|
|
96
|
+
.description("Show a sequence with every step's day, kind, subject and body")
|
|
97
|
+
.argument("<ref>", "Sequence slug or id")
|
|
98
|
+
.option("--json", "Output as JSON")
|
|
99
|
+
.action(async (ref, opts) => {
|
|
100
|
+
try {
|
|
101
|
+
const data = await api.get(`/outreach/sequences/${encodeURIComponent(ref)}`);
|
|
102
|
+
if (opts.json) {
|
|
103
|
+
printJson(data);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
printDetail(data, [
|
|
107
|
+
{ key: "slug", label: "Slug" },
|
|
108
|
+
{ key: "name", label: "Name" },
|
|
109
|
+
{ key: "language", label: "Language" },
|
|
110
|
+
{ key: "signal", label: "Signal" },
|
|
111
|
+
{ key: "stopLine", label: "Stop line" },
|
|
112
|
+
{ key: "notes", label: "Notes" },
|
|
113
|
+
{ key: "position", label: "Position" },
|
|
114
|
+
{ key: "archivedAt", label: "Archived" },
|
|
115
|
+
{ key: "id", label: "Id" },
|
|
116
|
+
], opts);
|
|
117
|
+
for (const step of data.steps) {
|
|
118
|
+
console.log(chalk.cyan(`\n ${step.n}. ${step.kind}, day ${step.dayOffset}`));
|
|
119
|
+
if (step.subject)
|
|
120
|
+
console.log(` Subject: ${step.subject}`);
|
|
121
|
+
console.log(step.body ? ` ${step.body}` : chalk.dim(" (no body)"));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
handleError(err);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const sequenceSet = new Command("set")
|
|
129
|
+
.description("Create or update a sequence keyed by slug (name, language, steps and stop line required on create)")
|
|
130
|
+
.argument("<slug>", "Sequence slug, kebab-case")
|
|
131
|
+
.option("--name <name>", "Display name")
|
|
132
|
+
.option("--language <lang>", LANGUAGES)
|
|
133
|
+
.option("--signal <signal>", `${SIGNALS} ("null" for any signal)`)
|
|
134
|
+
.option("--stop-line <text>", "The line telling the prospect how to stop us")
|
|
135
|
+
.option("--notes <text>", 'Notes ("null" to clear)')
|
|
136
|
+
.option("--position <n>", "Sort position")
|
|
137
|
+
.option("--file <path>", "JSON object with any of the fields above (camelCase) plus steps [{dayOffset, kind: message-1 | follow-up | final, subject?, body?}] (step 1 is message-1 on day 0, later steps on later days, final last and with a body); flags win")
|
|
138
|
+
.option("--json", "Output as JSON")
|
|
139
|
+
.action(async (slug, opts) => {
|
|
140
|
+
try {
|
|
141
|
+
const fromFile = opts.file ? readJsonObject(opts.file) : {};
|
|
142
|
+
const data = await api.post("/outreach/sequences", {
|
|
143
|
+
...fromFile,
|
|
144
|
+
...compact({
|
|
145
|
+
slug,
|
|
146
|
+
name: opts.name,
|
|
147
|
+
language: opts.language,
|
|
148
|
+
signal: nullable(opts.signal),
|
|
149
|
+
stopLine: opts.stopLine,
|
|
150
|
+
notes: nullable(opts.notes),
|
|
151
|
+
position: optionalInt(opts.position, "position"),
|
|
152
|
+
}),
|
|
153
|
+
});
|
|
154
|
+
done(data, opts, `Sequence set: ${data.slug} (${data.id})`);
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
handleError(err);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
const sequenceCommand = new Command("sequence")
|
|
161
|
+
.description("Message sequences: step days, kinds and template texts")
|
|
162
|
+
.addCommand(sequenceList)
|
|
163
|
+
.addCommand(sequenceGet)
|
|
164
|
+
.addCommand(sequenceSet)
|
|
165
|
+
.addCommand(archiveCommand("/outreach/sequences", "sequence", "ref", "Sequence slug or id"));
|
|
166
|
+
export const outreachCatalogCommands = [marketCommand, sequenceCommand];
|
|
167
|
+
//# sourceMappingURL=outreach-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outreach-catalog.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { handleError, printDetail } from "../../lib/format.js";
|
|
5
|
+
import { printJson, qs } from "../../lib/command-helpers.js";
|
|
6
|
+
import { outreachCompanyWriteCommands } from "./outreach-company-writes.js";
|
|
7
|
+
import { fullName, printPage, withPageOptions, } from "./outreach-shared.js";
|
|
8
|
+
const listCmd = withPageOptions(new Command("list")
|
|
9
|
+
.description("List companies with their prospect count, last updated first")
|
|
10
|
+
.option("--status <status>", "candidate | qualified | dropped | off-limits")
|
|
11
|
+
.option("--market <code>", "Market code")
|
|
12
|
+
.option("--profiled <bool>", "true: profile written | false: still to profile")
|
|
13
|
+
.option("--q <text>", "Name or domain contains")).action(async (opts) => {
|
|
14
|
+
try {
|
|
15
|
+
await printPage(`/outreach/companies${qs({
|
|
16
|
+
status: opts.status,
|
|
17
|
+
marketCode: opts.market,
|
|
18
|
+
profiled: opts.profiled,
|
|
19
|
+
q: opts.q,
|
|
20
|
+
page: opts.page,
|
|
21
|
+
pageSize: opts.pageSize,
|
|
22
|
+
})}`, [
|
|
23
|
+
{ key: "name", label: "Name", width: 28 },
|
|
24
|
+
{ key: "domain", label: "Domain", width: 24 },
|
|
25
|
+
{ key: "marketCode", label: "Mkt", width: 3 },
|
|
26
|
+
{ key: "state", label: "Status", width: 22 },
|
|
27
|
+
{ key: "profiled", label: "Profiled", width: 8 },
|
|
28
|
+
{ key: "prospectCount", label: "Prosp.", width: 6 },
|
|
29
|
+
{ key: "id", label: "Id", width: 36 },
|
|
30
|
+
], opts, (c) => ({
|
|
31
|
+
...c,
|
|
32
|
+
state: c.dropReason ? `${c.status} (${c.dropReason})` : c.status,
|
|
33
|
+
profiled: c.profiledAt ? "yes" : null,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
handleError(err);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const getCmd = new Command("get")
|
|
41
|
+
.description("Show a company with its profile, prospects and signal hits")
|
|
42
|
+
.argument("<id>", "Company id")
|
|
43
|
+
.option("--json", "Output as JSON")
|
|
44
|
+
.action(async (id, opts) => {
|
|
45
|
+
try {
|
|
46
|
+
const data = await api.get(`/outreach/companies/${id}`);
|
|
47
|
+
if (opts.json) {
|
|
48
|
+
printJson(data);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
printDetail(data, [
|
|
52
|
+
{ key: "name", label: "Name" },
|
|
53
|
+
{ key: "domain", label: "Domain" },
|
|
54
|
+
{ key: "website", label: "Website" },
|
|
55
|
+
{ key: "marketCode", label: "Market" },
|
|
56
|
+
{ key: "status", label: "Status" },
|
|
57
|
+
{ key: "dropReason", label: "Drop reason" },
|
|
58
|
+
{ key: "optedOutAt", label: "Opted out" },
|
|
59
|
+
{ key: "registrationId", label: "Registration id" },
|
|
60
|
+
{ key: "legalForm", label: "Legal form" },
|
|
61
|
+
{ key: "activityCode", label: "Activity code" },
|
|
62
|
+
{ key: "headcountBand", label: "Headcount band" },
|
|
63
|
+
{ key: "foundedOn", label: "Founded on" },
|
|
64
|
+
{ key: "linkedinUrl", label: "LinkedIn" },
|
|
65
|
+
{ key: "need", label: "Need" },
|
|
66
|
+
{ key: "profiledAt", label: "Profiled" },
|
|
67
|
+
{ key: "notes", label: "Notes" },
|
|
68
|
+
{ key: "id", label: "Id" },
|
|
69
|
+
], opts);
|
|
70
|
+
for (const [key, facts] of Object.entries(data.profile ?? {})) {
|
|
71
|
+
for (const f of facts) {
|
|
72
|
+
console.log(` ${chalk.cyan(key)} ${f.value} ${chalk.dim(f.url)}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const p of data.prospects) {
|
|
76
|
+
console.log(` prospect ${p.status.padEnd(13)} ${fullName(p.firstName, p.lastName)}${p.role ? `, ${p.role}` : ""} ${chalk.dim(p.id)}`);
|
|
77
|
+
}
|
|
78
|
+
for (const s of data.signals) {
|
|
79
|
+
console.log(` signal ${s.status.padEnd(13)} ${s.signal} (${s.source}) ${s.title ?? s.url} ${chalk.dim(s.id)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
handleError(err);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
export const outreachCompanyCommand = new Command("company")
|
|
87
|
+
.description("Companies prospected: identity, profile with sourced facts, qualification status")
|
|
88
|
+
.addCommand(listCmd)
|
|
89
|
+
.addCommand(getCmd);
|
|
90
|
+
for (const cmd of outreachCompanyWriteCommands) {
|
|
91
|
+
outreachCompanyCommand.addCommand(cmd);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=outreach-companies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outreach-companies.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-companies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { api } from "../../lib/api.js";
|
|
3
|
+
import { handleError } from "../../lib/format.js";
|
|
4
|
+
import { compact, done, nullable, readJsonObject, } from "../../lib/command-helpers.js";
|
|
5
|
+
function withFieldOptions(cmd) {
|
|
6
|
+
return cmd
|
|
7
|
+
.option("--domain <domain>", 'Domain or URL, stored as the bare host ("null" to clear)')
|
|
8
|
+
.option("--website <url>", 'Website URL ("null" to clear)')
|
|
9
|
+
.option("--market <code>", 'Market code ("null" to clear)')
|
|
10
|
+
.option("--registration-id <id>", 'Registry number (SIREN, RCS) ("null" to clear)')
|
|
11
|
+
.option("--legal-form <form>", 'Legal form (SAS, SARL) ("null" to clear)')
|
|
12
|
+
.option("--activity-code <code>", 'Activity code (NAF/NACE) ("null" to clear)')
|
|
13
|
+
.option("--headcount-band <band>", 'Headcount band as the registry states it ("null" to clear)')
|
|
14
|
+
.option("--founded-on <date>", 'Founding date, YYYY-MM-DD ("null" to clear)')
|
|
15
|
+
.option("--linkedin-url <url>", 'Company LinkedIn page ("null" to clear)')
|
|
16
|
+
.option("--notes <text>", 'Notes ("null" to clear)');
|
|
17
|
+
}
|
|
18
|
+
function fieldPayload(opts) {
|
|
19
|
+
return compact({
|
|
20
|
+
domain: nullable(opts.domain),
|
|
21
|
+
website: nullable(opts.website),
|
|
22
|
+
marketCode: nullable(opts.market),
|
|
23
|
+
registrationId: nullable(opts.registrationId),
|
|
24
|
+
legalForm: nullable(opts.legalForm),
|
|
25
|
+
activityCode: nullable(opts.activityCode),
|
|
26
|
+
headcountBand: nullable(opts.headcountBand),
|
|
27
|
+
foundedOn: nullable(opts.foundedOn),
|
|
28
|
+
linkedinUrl: nullable(opts.linkedinUrl),
|
|
29
|
+
notes: nullable(opts.notes),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const createCmd = withFieldOptions(new Command("create")
|
|
33
|
+
.description("Create a company (refused with the existing companyId when the domain is already known)")
|
|
34
|
+
.requiredOption("--name <name>", "Company name"))
|
|
35
|
+
.option("--json", "Output as JSON")
|
|
36
|
+
.action(async (opts) => {
|
|
37
|
+
try {
|
|
38
|
+
const data = await api.post("/outreach/companies", {
|
|
39
|
+
name: opts.name,
|
|
40
|
+
...fieldPayload(opts),
|
|
41
|
+
});
|
|
42
|
+
done(data, opts, `Company created: ${data.name} (${data.id})`);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
handleError(err);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const updateCmd = withFieldOptions(new Command("update")
|
|
49
|
+
.description("Update a company's identity fields (profile and status have their own commands)")
|
|
50
|
+
.argument("<id>", "Company id")
|
|
51
|
+
.option("--name <name>", "Company name"))
|
|
52
|
+
.option("--json", "Output as JSON")
|
|
53
|
+
.action(async (id, opts) => {
|
|
54
|
+
try {
|
|
55
|
+
const data = await api.post(`/outreach/companies/${id}`, {
|
|
56
|
+
...compact({ name: opts.name }),
|
|
57
|
+
...fieldPayload(opts),
|
|
58
|
+
});
|
|
59
|
+
done(data, opts, `Company updated: ${data.name}`);
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
handleError(err);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const profileCmd = new Command("profile")
|
|
66
|
+
.description("Write a company's profile and need (replaces the previous profile, stamps profiledAt)")
|
|
67
|
+
.argument("<id>", "Company id")
|
|
68
|
+
.requiredOption("--file <path>", "JSON object {profile, need}: profile maps techHolder | headcount | product | milestone | stack | news to [{value, url, quote}] (1 to 20 facts each), need is text up to 500 characters")
|
|
69
|
+
.option("--need <text>", "The company's need, overrides the file's")
|
|
70
|
+
.option("--json", "Output as JSON")
|
|
71
|
+
.action(async (id, opts) => {
|
|
72
|
+
try {
|
|
73
|
+
const data = await api.post(`/outreach/companies/${id}/profile`, { ...readJsonObject(opts.file), ...compact({ need: opts.need }) });
|
|
74
|
+
done(data, opts, `Profile written: ${data.name}`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
handleError(err);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const statusCmd = new Command("status")
|
|
81
|
+
.description("Move a company to candidate, qualified (needs a profile), dropped or off-limits (both with a reason)")
|
|
82
|
+
.argument("<id>", "Company id")
|
|
83
|
+
.argument("<status>", "candidate | qualified | dropped | off-limits")
|
|
84
|
+
.option("--reason <text>", "Why (required for dropped and off-limits)")
|
|
85
|
+
.option("--json", "Output as JSON")
|
|
86
|
+
.action(async (id, status, opts) => {
|
|
87
|
+
try {
|
|
88
|
+
const data = await api.post(`/outreach/companies/${id}/status`, compact({ status, reason: opts.reason }));
|
|
89
|
+
done(data, opts, `Company ${data.name}: ${data.status}`);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
handleError(err);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
export const outreachCompanyWriteCommands = [
|
|
96
|
+
createCmd,
|
|
97
|
+
updateCmd,
|
|
98
|
+
profileCmd,
|
|
99
|
+
statusCmd,
|
|
100
|
+
];
|
|
101
|
+
//# sourceMappingURL=outreach-company-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outreach-company-writes.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-company-writes.ts"],"names":[],"mappings":"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"}
|