@itznexus/itznexus-cli 1.143.0 → 1.145.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/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 +181 -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/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/package.json +1 -1
- package/dist/commands/api/seo-shared.js.map +0 -1
|
@@ -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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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { handleError } from "../../lib/format.js";
|
|
5
|
+
import { compact, done, nullable, readJsonObject, readJsonRows, toInt, } from "../../lib/command-helpers.js";
|
|
6
|
+
import { CHANNELS, printDroppedDrafts, } from "./outreach-shared.js";
|
|
7
|
+
const DRAFT_FILE = "JSON object {subject?, body, gmailDraftId?, gmailThreadId?, checks: [{check, passed: true, detail?}]} (email: the Gmail draft id, plus the subject and thread id on step 1; linkedin: none of them)";
|
|
8
|
+
function withDraftOptions(cmd, withThread) {
|
|
9
|
+
cmd
|
|
10
|
+
.option("--subject <text>", 'Email subject ("null" for none)')
|
|
11
|
+
.option("--body <text>", "Message body as drafted")
|
|
12
|
+
.option("--gmail-draft-id <id>", "Gmail draft id (email)");
|
|
13
|
+
if (withThread) {
|
|
14
|
+
cmd.option("--gmail-thread-id <id>", "Gmail thread id (email)");
|
|
15
|
+
}
|
|
16
|
+
return cmd;
|
|
17
|
+
}
|
|
18
|
+
// Flags win over the file, field by field.
|
|
19
|
+
function draftPayload(opts) {
|
|
20
|
+
return {
|
|
21
|
+
...(opts.file ? readJsonObject(opts.file) : {}),
|
|
22
|
+
...compact({
|
|
23
|
+
subject: nullable(opts.subject),
|
|
24
|
+
body: opts.body,
|
|
25
|
+
gmailDraftId: opts.gmailDraftId,
|
|
26
|
+
gmailThreadId: opts.gmailThreadId,
|
|
27
|
+
}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function stepNumber(n) {
|
|
31
|
+
return toInt(n, "n");
|
|
32
|
+
}
|
|
33
|
+
const createCmd = withDraftOptions(new Command("create")
|
|
34
|
+
.description("Enroll a prospect in a sequence with step 1's draft (checks all passed); refused past the daily message-1 cap")
|
|
35
|
+
.requiredOption("--prospect-id <id>", "Prospect id")
|
|
36
|
+
.requiredOption("--sequence <ref>", "Sequence slug or id")
|
|
37
|
+
.requiredOption("--channel <channel>", CHANNELS)
|
|
38
|
+
.requiredOption("--file <path>", `Step 1 draft: ${DRAFT_FILE}; flags win`), true)
|
|
39
|
+
.option("--json", "Output as JSON")
|
|
40
|
+
.action(async (opts) => {
|
|
41
|
+
try {
|
|
42
|
+
const data = await api.post("/outreach/enrollments", {
|
|
43
|
+
prospectId: opts.prospectId,
|
|
44
|
+
sequence: opts.sequence,
|
|
45
|
+
channel: opts.channel,
|
|
46
|
+
step: draftPayload(opts),
|
|
47
|
+
});
|
|
48
|
+
done(data, opts, `Enrollment created: ${data.id} (${data.status})`);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
handleError(err);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
const stepCreate = withDraftOptions(new Command("create")
|
|
55
|
+
.description("Record the next step's draft once its day has come (checks all passed)")
|
|
56
|
+
.argument("<enrollmentId>", "Enrollment id")
|
|
57
|
+
.argument("<n>", "Step number (the next one)")
|
|
58
|
+
.requiredOption("--file <path>", `Step draft: ${DRAFT_FILE}; flags win`), true)
|
|
59
|
+
.option("--json", "Output as JSON")
|
|
60
|
+
.action(async (enrollmentId, n, opts) => {
|
|
61
|
+
try {
|
|
62
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps`, { n: stepNumber(n), ...draftPayload(opts) });
|
|
63
|
+
done(data, opts, `Step ${data.n} drafted`);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
handleError(err);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
const stepUpdate = withDraftOptions(new Command("update")
|
|
70
|
+
.description("Revise a drafted step (new checks replace the old ones)")
|
|
71
|
+
.argument("<enrollmentId>", "Enrollment id")
|
|
72
|
+
.argument("<n>", "Step number")
|
|
73
|
+
.option("--file <path>", "JSON object {subject?, body?, gmailDraftId?, checks?: [{check, passed: true, detail?}]}; flags win"), false)
|
|
74
|
+
.option("--json", "Output as JSON")
|
|
75
|
+
.action(async (enrollmentId, n, opts) => {
|
|
76
|
+
try {
|
|
77
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}`, draftPayload(opts));
|
|
78
|
+
done(data, opts, `Step ${data.n} updated`);
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
handleError(err);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
const stepSent = new Command("sent")
|
|
85
|
+
.description("Tick a LinkedIn step as sent (email steps are marked sent by the thread import)")
|
|
86
|
+
.argument("<enrollmentId>", "Enrollment id")
|
|
87
|
+
.argument("<n>", "Step number")
|
|
88
|
+
.option("--sent-at <iso>", "When it was sent (defaults to now)")
|
|
89
|
+
.option("--json", "Output as JSON")
|
|
90
|
+
.action(async (enrollmentId, n, opts) => {
|
|
91
|
+
try {
|
|
92
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}/sent`, compact({ sentAt: opts.sentAt }));
|
|
93
|
+
done(data, opts, `Step ${data.n} sent`);
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
handleError(err);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const stepDrop = new Command("drop")
|
|
100
|
+
.description("Mark a drafted step dropped once its Gmail draft was deleted instead of sent (import the thread first: a sent draft stops resolving too)")
|
|
101
|
+
.argument("<enrollmentId>", "Enrollment id")
|
|
102
|
+
.argument("<n>", "Step number")
|
|
103
|
+
.option("--json", "Output as JSON")
|
|
104
|
+
.action(async (enrollmentId, n, opts) => {
|
|
105
|
+
try {
|
|
106
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}/drop`, {});
|
|
107
|
+
done(data, opts, `Step ${data.n} dropped`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
handleError(err);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
const stepCommand = new Command("step")
|
|
114
|
+
.description("An enrollment's steps: draft the next one, revise a draft, tick a LinkedIn send, drop a draft")
|
|
115
|
+
.addCommand(stepCreate)
|
|
116
|
+
.addCommand(stepUpdate)
|
|
117
|
+
.addCommand(stepSent)
|
|
118
|
+
.addCommand(stepDrop);
|
|
119
|
+
const messagesCmd = new Command("messages")
|
|
120
|
+
.description("Import an enrollment's thread (idempotent on the Gmail message id); new messages move the enrollment (sent, reply, bounce)")
|
|
121
|
+
.argument("<enrollmentId>", "Enrollment id")
|
|
122
|
+
.requiredOption("--file <path>", "JSON array (or {messages}) of {channel?: email | linkedin, gmailMessageId? (email), direction: out | in, kind: ours | reply | bounce | auto-reply, fromAddress?, toAddress?, subject?, bodyText?, sentAt}; a LinkedIn row is a reply pasted by hand")
|
|
123
|
+
.option("--json", "Output as JSON")
|
|
124
|
+
.action(async (enrollmentId, opts) => {
|
|
125
|
+
try {
|
|
126
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/messages`, {
|
|
127
|
+
messages: readJsonRows(opts.file, "messages"),
|
|
128
|
+
});
|
|
129
|
+
const moves = data.transitions.length
|
|
130
|
+
? `; ${data.transitions.join(", ")}`
|
|
131
|
+
: "";
|
|
132
|
+
done(data, opts, `${data.inserted} new messages${moves}; enrollment ${data.enrollment.status}`);
|
|
133
|
+
if (!opts.json)
|
|
134
|
+
printDroppedDrafts(data.droppedDrafts);
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
handleError(err);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
const linkedinCmd = new Command("linkedin")
|
|
141
|
+
.description("Tick the LinkedIn touch beside an email sequence: the connection request (no note), its acceptance, the message written for it, the message sent")
|
|
142
|
+
.argument("<enrollmentId>", "Enrollment id (an email sequence)")
|
|
143
|
+
.option("--requested", "The connection request went out")
|
|
144
|
+
.option("--connected", "The connection was accepted")
|
|
145
|
+
.option("--message <text>", "The message to send now that it is accepted")
|
|
146
|
+
.option("--message-file <path>", "The message, read from a text file")
|
|
147
|
+
.option("--message-sent", "The message went out")
|
|
148
|
+
.option("--at <iso>", "When it happened (defaults to now)")
|
|
149
|
+
.option("--json", "Output as JSON")
|
|
150
|
+
.action(async (enrollmentId, opts) => {
|
|
151
|
+
try {
|
|
152
|
+
const message = opts.messageFile
|
|
153
|
+
? fs.readFileSync(opts.messageFile, "utf-8").trim()
|
|
154
|
+
: opts.message;
|
|
155
|
+
const data = await api.post(`/outreach/enrollments/${enrollmentId}/linkedin-touch`, compact({
|
|
156
|
+
requested: opts.requested,
|
|
157
|
+
connected: opts.connected,
|
|
158
|
+
message,
|
|
159
|
+
messageSent: opts.messageSent,
|
|
160
|
+
at: opts.at,
|
|
161
|
+
}));
|
|
162
|
+
const state = data.linkedinMessageSentAt
|
|
163
|
+
? "message sent"
|
|
164
|
+
: data.linkedinMessage
|
|
165
|
+
? "message written"
|
|
166
|
+
: data.linkedinConnectedAt
|
|
167
|
+
? "connected"
|
|
168
|
+
: "requested";
|
|
169
|
+
done(data, opts, `LinkedIn touch: ${state}`);
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
handleError(err);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
export const outreachEnrollmentWriteCommands = [
|
|
176
|
+
createCmd,
|
|
177
|
+
stepCommand,
|
|
178
|
+
messagesCmd,
|
|
179
|
+
linkedinCmd,
|
|
180
|
+
];
|
|
181
|
+
//# sourceMappingURL=outreach-enrollment-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outreach-enrollment-writes.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-enrollment-writes.ts"],"names":[],"mappings":"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"}
|