@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.
Files changed (79) hide show
  1. package/dist/commands/agents/project-stack.d.ts +2 -0
  2. package/dist/commands/agents/project-stack.js +101 -0
  3. package/dist/commands/agents/project-stack.js.map +1 -0
  4. package/dist/commands/api/outreach-catalog.d.ts +2 -0
  5. package/dist/commands/api/outreach-catalog.js +167 -0
  6. package/dist/commands/api/outreach-catalog.js.map +1 -0
  7. package/dist/commands/api/outreach-companies.d.ts +2 -0
  8. package/dist/commands/api/outreach-companies.js +93 -0
  9. package/dist/commands/api/outreach-companies.js.map +1 -0
  10. package/dist/commands/api/outreach-company-writes.d.ts +2 -0
  11. package/dist/commands/api/outreach-company-writes.js +101 -0
  12. package/dist/commands/api/outreach-company-writes.js.map +1 -0
  13. package/dist/commands/api/outreach-enrollment-writes.d.ts +2 -0
  14. package/dist/commands/api/outreach-enrollment-writes.js +144 -0
  15. package/dist/commands/api/outreach-enrollment-writes.js.map +1 -0
  16. package/dist/commands/api/outreach-enrollments.d.ts +2 -0
  17. package/dist/commands/api/outreach-enrollments.js +92 -0
  18. package/dist/commands/api/outreach-enrollments.js.map +1 -0
  19. package/dist/commands/api/outreach-prospect-writes.d.ts +2 -0
  20. package/dist/commands/api/outreach-prospect-writes.js +139 -0
  21. package/dist/commands/api/outreach-prospect-writes.js.map +1 -0
  22. package/dist/commands/api/outreach-prospects.d.ts +2 -0
  23. package/dist/commands/api/outreach-prospects.js +96 -0
  24. package/dist/commands/api/outreach-prospects.js.map +1 -0
  25. package/dist/commands/api/outreach-settings.d.ts +2 -0
  26. package/dist/commands/api/outreach-settings.js +193 -0
  27. package/dist/commands/api/outreach-settings.js.map +1 -0
  28. package/dist/commands/api/outreach-shared.d.ts +24 -0
  29. package/dist/commands/api/outreach-shared.js +34 -0
  30. package/dist/commands/api/outreach-shared.js.map +1 -0
  31. package/dist/commands/api/outreach-signals.d.ts +2 -0
  32. package/dist/commands/api/outreach-signals.js +80 -0
  33. package/dist/commands/api/outreach-signals.js.map +1 -0
  34. package/dist/commands/api/outreach.d.ts +2 -0
  35. package/dist/commands/api/outreach.js +21 -0
  36. package/dist/commands/api/outreach.js.map +1 -0
  37. package/dist/commands/api/projects.js +2 -0
  38. package/dist/commands/api/projects.js.map +1 -1
  39. package/dist/commands/api/seo-backlinks.js +1 -1
  40. package/dist/commands/api/seo-backlinks.js.map +1 -1
  41. package/dist/commands/api/seo-catalog.js +1 -1
  42. package/dist/commands/api/seo-catalog.js.map +1 -1
  43. package/dist/commands/api/seo-changes.js +1 -1
  44. package/dist/commands/api/seo-changes.js.map +1 -1
  45. package/dist/commands/api/seo-data.js +1 -1
  46. package/dist/commands/api/seo-data.js.map +1 -1
  47. package/dist/commands/api/seo-keyword-writes.js +1 -1
  48. package/dist/commands/api/seo-keyword-writes.js.map +1 -1
  49. package/dist/commands/api/seo-keywords.js +1 -1
  50. package/dist/commands/api/seo-keywords.js.map +1 -1
  51. package/dist/commands/api/seo-offers.js +1 -1
  52. package/dist/commands/api/seo-offers.js.map +1 -1
  53. package/dist/commands/api/seo-page-writes.js +1 -1
  54. package/dist/commands/api/seo-page-writes.js.map +1 -1
  55. package/dist/commands/api/seo-pages.js +1 -1
  56. package/dist/commands/api/seo-pages.js.map +1 -1
  57. package/dist/commands/api/seo-settings.js +1 -1
  58. package/dist/commands/api/seo-settings.js.map +1 -1
  59. package/dist/commands/api/seo-site.js +1 -1
  60. package/dist/commands/api/seo-site.js.map +1 -1
  61. package/dist/index.js +5 -0
  62. package/dist/index.js.map +1 -1
  63. package/dist/{commands/api/seo-shared.d.ts → lib/command-helpers.d.ts} +1 -1
  64. package/dist/{commands/api/seo-shared.js → lib/command-helpers.js} +8 -8
  65. package/dist/lib/command-helpers.js.map +1 -0
  66. package/dist/lib/stack/driver.d.ts +14 -0
  67. package/dist/lib/stack/driver.js +228 -0
  68. package/dist/lib/stack/driver.js.map +1 -0
  69. package/dist/lib/stack/manifest.d.ts +28 -0
  70. package/dist/lib/stack/manifest.js +182 -0
  71. package/dist/lib/stack/manifest.js.map +1 -0
  72. package/dist/lib/stack/processes.d.ts +11 -0
  73. package/dist/lib/stack/processes.js +139 -0
  74. package/dist/lib/stack/processes.js.map +1 -0
  75. package/dist/lib/stack/registry.d.ts +24 -0
  76. package/dist/lib/stack/registry.js +37 -0
  77. package/dist/lib/stack/registry.js.map +1 -0
  78. package/package.json +3 -2
  79. package/dist/commands/api/seo-shared.js.map +0 -1
@@ -0,0 +1,144 @@
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, readJsonRows, toInt, } from "../../lib/command-helpers.js";
5
+ import { CHANNELS, printDroppedDrafts, } from "./outreach-shared.js";
6
+ 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)";
7
+ function withDraftOptions(cmd, withThread) {
8
+ cmd
9
+ .option("--subject <text>", 'Email subject ("null" for none)')
10
+ .option("--body <text>", "Message body as drafted")
11
+ .option("--gmail-draft-id <id>", "Gmail draft id (email)");
12
+ if (withThread) {
13
+ cmd.option("--gmail-thread-id <id>", "Gmail thread id (email)");
14
+ }
15
+ return cmd;
16
+ }
17
+ // Flags win over the file, field by field.
18
+ function draftPayload(opts) {
19
+ return {
20
+ ...(opts.file ? readJsonObject(opts.file) : {}),
21
+ ...compact({
22
+ subject: nullable(opts.subject),
23
+ body: opts.body,
24
+ gmailDraftId: opts.gmailDraftId,
25
+ gmailThreadId: opts.gmailThreadId,
26
+ }),
27
+ };
28
+ }
29
+ function stepNumber(n) {
30
+ return toInt(n, "n");
31
+ }
32
+ const createCmd = withDraftOptions(new Command("create")
33
+ .description("Enroll a prospect in a sequence with step 1's draft (checks all passed); refused past the daily message-1 cap")
34
+ .requiredOption("--prospect-id <id>", "Prospect id")
35
+ .requiredOption("--sequence <ref>", "Sequence slug or id")
36
+ .requiredOption("--channel <channel>", CHANNELS)
37
+ .requiredOption("--file <path>", `Step 1 draft: ${DRAFT_FILE}; flags win`), true)
38
+ .option("--json", "Output as JSON")
39
+ .action(async (opts) => {
40
+ try {
41
+ const data = await api.post("/outreach/enrollments", {
42
+ prospectId: opts.prospectId,
43
+ sequence: opts.sequence,
44
+ channel: opts.channel,
45
+ step: draftPayload(opts),
46
+ });
47
+ done(data, opts, `Enrollment created: ${data.id} (${data.status})`);
48
+ }
49
+ catch (err) {
50
+ handleError(err);
51
+ }
52
+ });
53
+ const stepCreate = withDraftOptions(new Command("create")
54
+ .description("Record the next step's draft once its day has come (checks all passed)")
55
+ .argument("<enrollmentId>", "Enrollment id")
56
+ .argument("<n>", "Step number (the next one)")
57
+ .requiredOption("--file <path>", `Step draft: ${DRAFT_FILE}; flags win`), true)
58
+ .option("--json", "Output as JSON")
59
+ .action(async (enrollmentId, n, opts) => {
60
+ try {
61
+ const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps`, { n: stepNumber(n), ...draftPayload(opts) });
62
+ done(data, opts, `Step ${data.n} drafted`);
63
+ }
64
+ catch (err) {
65
+ handleError(err);
66
+ }
67
+ });
68
+ const stepUpdate = withDraftOptions(new Command("update")
69
+ .description("Revise a drafted step (new checks replace the old ones)")
70
+ .argument("<enrollmentId>", "Enrollment id")
71
+ .argument("<n>", "Step number")
72
+ .option("--file <path>", "JSON object {subject?, body?, gmailDraftId?, checks?: [{check, passed: true, detail?}]}; flags win"), false)
73
+ .option("--json", "Output as JSON")
74
+ .action(async (enrollmentId, n, opts) => {
75
+ try {
76
+ const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}`, draftPayload(opts));
77
+ done(data, opts, `Step ${data.n} updated`);
78
+ }
79
+ catch (err) {
80
+ handleError(err);
81
+ }
82
+ });
83
+ const stepSent = new Command("sent")
84
+ .description("Tick a LinkedIn step as sent (email steps are marked sent by the thread import)")
85
+ .argument("<enrollmentId>", "Enrollment id")
86
+ .argument("<n>", "Step number")
87
+ .option("--sent-at <iso>", "When it was sent (defaults to now)")
88
+ .option("--json", "Output as JSON")
89
+ .action(async (enrollmentId, n, opts) => {
90
+ try {
91
+ const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}/sent`, compact({ sentAt: opts.sentAt }));
92
+ done(data, opts, `Step ${data.n} sent`);
93
+ }
94
+ catch (err) {
95
+ handleError(err);
96
+ }
97
+ });
98
+ const stepDrop = new Command("drop")
99
+ .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)")
100
+ .argument("<enrollmentId>", "Enrollment id")
101
+ .argument("<n>", "Step number")
102
+ .option("--json", "Output as JSON")
103
+ .action(async (enrollmentId, n, opts) => {
104
+ try {
105
+ const data = await api.post(`/outreach/enrollments/${enrollmentId}/steps/${stepNumber(n)}/drop`, {});
106
+ done(data, opts, `Step ${data.n} dropped`);
107
+ }
108
+ catch (err) {
109
+ handleError(err);
110
+ }
111
+ });
112
+ const stepCommand = new Command("step")
113
+ .description("An enrollment's steps: draft the next one, revise a draft, tick a LinkedIn send, drop a draft")
114
+ .addCommand(stepCreate)
115
+ .addCommand(stepUpdate)
116
+ .addCommand(stepSent)
117
+ .addCommand(stepDrop);
118
+ const messagesCmd = new Command("messages")
119
+ .description("Import an enrollment's thread (idempotent on the Gmail message id); new messages move the enrollment (sent, reply, bounce)")
120
+ .argument("<enrollmentId>", "Enrollment id")
121
+ .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")
122
+ .option("--json", "Output as JSON")
123
+ .action(async (enrollmentId, opts) => {
124
+ try {
125
+ const data = await api.post(`/outreach/enrollments/${enrollmentId}/messages`, {
126
+ messages: readJsonRows(opts.file, "messages"),
127
+ });
128
+ const moves = data.transitions.length
129
+ ? `; ${data.transitions.join(", ")}`
130
+ : "";
131
+ done(data, opts, `${data.inserted} new messages${moves}; enrollment ${data.enrollment.status}`);
132
+ if (!opts.json)
133
+ printDroppedDrafts(data.droppedDrafts);
134
+ }
135
+ catch (err) {
136
+ handleError(err);
137
+ }
138
+ });
139
+ export const outreachEnrollmentWriteCommands = [
140
+ createCmd,
141
+ stepCommand,
142
+ messagesCmd,
143
+ ];
144
+ //# 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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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const outreachEnrollmentCommand: Command;
@@ -0,0 +1,92 @@
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 { outreachEnrollmentWriteCommands } from "./outreach-enrollment-writes.js";
7
+ import { CHANNELS, fullName, printPage, withPageOptions, } from "./outreach-shared.js";
8
+ const STATUSES = "drafting | running | replied | bounced | parked | stopped";
9
+ const listCmd = withPageOptions(new Command("list")
10
+ .description("List enrollments with their prospect, company and sequence, last updated first")
11
+ .option("--status <list>", `One status or several, comma-separated (drafting,running): ${STATUSES}`)
12
+ .option("--channel <channel>", CHANNELS)
13
+ .option("--prospect-id <id>", "Enrollments of one prospect")
14
+ .option("--due", "Only running enrollments whose next step's day has come and has no draft yet")
15
+ .option("--watched", "Only the email threads to read for replies (open sequences, plus completed ones inside the late-reply window)")).action(async (opts) => {
16
+ try {
17
+ await printPage(`/outreach/enrollments${qs({
18
+ status: opts.status,
19
+ channel: opts.channel,
20
+ prospectId: opts.prospectId,
21
+ due: opts.due ? "true" : undefined,
22
+ watched: opts.watched ? "true" : undefined,
23
+ page: opts.page,
24
+ pageSize: opts.pageSize,
25
+ })}`, [
26
+ { key: "prospect", label: "Prospect", width: 22 },
27
+ { key: "companyName", label: "Company", width: 22 },
28
+ { key: "sequenceSlug", label: "Sequence", width: 14 },
29
+ { key: "channel", label: "Channel", width: 8 },
30
+ { key: "state", label: "Status", width: 20 },
31
+ { key: "currentStep", label: "Step", width: 4 },
32
+ { key: "nextDueAt", label: "Next due", width: 24 },
33
+ { key: "id", label: "Id", width: 36 },
34
+ ], opts, (e) => ({
35
+ ...e,
36
+ prospect: fullName(e.prospectFirstName, e.prospectLastName),
37
+ state: e.stopReason ? `${e.status} (${e.stopReason})` : e.status,
38
+ }));
39
+ }
40
+ catch (err) {
41
+ handleError(err);
42
+ }
43
+ });
44
+ const getCmd = new Command("get")
45
+ .description("Show an enrollment with its prospect, steps and message thread")
46
+ .argument("<id>", "Enrollment id")
47
+ .option("--json", "Output as JSON")
48
+ .action(async (id, opts) => {
49
+ try {
50
+ const data = await api.get(`/outreach/enrollments/${id}`);
51
+ if (opts.json) {
52
+ printJson(data);
53
+ return;
54
+ }
55
+ printDetail({
56
+ ...data,
57
+ prospectLine: `${fullName(data.prospect.firstName, data.prospect.lastName)} (${data.prospect.id})`,
58
+ sequenceSlug: data.sequence?.slug,
59
+ }, [
60
+ { key: "prospectLine", label: "Prospect" },
61
+ { key: "sequenceSlug", label: "Sequence" },
62
+ { key: "channel", label: "Channel" },
63
+ { key: "status", label: "Status" },
64
+ { key: "stopReason", label: "Stop reason" },
65
+ { key: "currentStep", label: "Current step" },
66
+ { key: "gmailThreadId", label: "Gmail thread" },
67
+ { key: "startedAt", label: "Started" },
68
+ { key: "lastSentAt", label: "Last sent" },
69
+ { key: "nextDueAt", label: "Next due" },
70
+ { key: "stoppedAt", label: "Stopped" },
71
+ { key: "id", label: "Id" },
72
+ ], opts);
73
+ for (const s of data.steps) {
74
+ const when = s.bouncedAt ?? s.sentAt ?? s.draftedAt ?? "-";
75
+ console.log(` step ${s.n} ${s.status.padEnd(8)} ${when} ${s.subject ?? ""}${s.gmailDraftId ? chalk.dim(` draft ${s.gmailDraftId}`) : ""}`);
76
+ }
77
+ for (const m of data.messages) {
78
+ console.log(` ${m.direction === "in" ? "<-" : "->"} ${m.sentAt} ${m.channel} ${m.kind.padEnd(10)} ${m.subject ?? m.fromAddress ?? ""}`);
79
+ }
80
+ }
81
+ catch (err) {
82
+ handleError(err);
83
+ }
84
+ });
85
+ export const outreachEnrollmentCommand = new Command("enrollment")
86
+ .description("Enrollments: a prospect running a sequence on one channel, with its drafted steps and thread")
87
+ .addCommand(listCmd)
88
+ .addCommand(getCmd);
89
+ for (const cmd of outreachEnrollmentWriteCommands) {
90
+ outreachEnrollmentCommand.addCommand(cmd);
91
+ }
92
+ //# sourceMappingURL=outreach-enrollments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outreach-enrollments.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-enrollments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const outreachProspectWriteCommands: Command[];
@@ -0,0 +1,139 @@
1
+ import { Command } from "commander";
2
+ import { api } from "../../lib/api.js";
3
+ import { handleError } from "../../lib/format.js";
4
+ import { compact, csv, done, nullable, nullableInt, parseBool, } from "../../lib/command-helpers.js";
5
+ import { fullName, LANGUAGES, printDroppedDrafts, SIGNALS, } from "./outreach-shared.js";
6
+ function withPersonOptions(cmd) {
7
+ return cmd
8
+ .option("--last-name <name>", 'Last name ("null" to clear)')
9
+ .option("--role <role>", 'Role at the company ("null" to clear)')
10
+ .option("--linkedin-url <url>", 'LinkedIn profile URL ("null" to clear)');
11
+ }
12
+ function personPayload(opts) {
13
+ return compact({
14
+ lastName: nullable(opts.lastName),
15
+ role: nullable(opts.role),
16
+ linkedinUrl: nullable(opts.linkedinUrl),
17
+ });
18
+ }
19
+ function statusDone(data, opts, message) {
20
+ done(data, opts, message);
21
+ if (!opts.json)
22
+ printDroppedDrafts(data.droppedDrafts);
23
+ }
24
+ const createCmd = withPersonOptions(new Command("create")
25
+ .description("Create a prospect at a qualified company, with the signal and the evidence that produced it")
26
+ .requiredOption("--company-id <id>", "Company id (must be qualified)")
27
+ .requiredOption("--first-name <name>", "First name")
28
+ .requiredOption("--language <lang>", LANGUAGES)
29
+ .requiredOption("--signal <signal>", SIGNALS)
30
+ .requiredOption("--evidence-url <url>", "URL the evidence was read on")
31
+ .requiredOption("--evidence-quote <text>", "Quote that shows the signal")
32
+ .option("--signal-id <id>", "Signal hit the evidence comes from"))
33
+ .option("--json", "Output as JSON")
34
+ .action(async (opts) => {
35
+ try {
36
+ const data = await api.post("/outreach/prospects", {
37
+ companyId: opts.companyId,
38
+ firstName: opts.firstName,
39
+ ...personPayload(opts),
40
+ language: opts.language,
41
+ signal: opts.signal,
42
+ evidence: {
43
+ signalId: opts.signalId ?? null,
44
+ url: opts.evidenceUrl,
45
+ quote: opts.evidenceQuote,
46
+ },
47
+ });
48
+ done(data, opts, `Prospect created: ${fullName(data.firstName, data.lastName)} (${data.id})`);
49
+ }
50
+ catch (err) {
51
+ handleError(err);
52
+ }
53
+ });
54
+ const updateCmd = withPersonOptions(new Command("update")
55
+ .description("Update a prospect's person fields (email and status have their own commands)")
56
+ .argument("<id>", "Prospect id")
57
+ .option("--first-name <name>", "First name")
58
+ .option("--language <lang>", LANGUAGES))
59
+ .option("--json", "Output as JSON")
60
+ .action(async (id, opts) => {
61
+ try {
62
+ const data = await api.post(`/outreach/prospects/${id}`, {
63
+ ...compact({ firstName: opts.firstName, language: opts.language }),
64
+ ...personPayload(opts),
65
+ });
66
+ done(data, opts, `Prospect updated: ${fullName(data.firstName, data.lastName)}`);
67
+ }
68
+ catch (err) {
69
+ handleError(err);
70
+ }
71
+ });
72
+ const emailCmd = new Command("email")
73
+ .description("Record the find-then-verify result for a prospect's email; the API sets the prospect ready or linkedin-only")
74
+ .argument("<id>", "Prospect id")
75
+ .requiredOption("--email <email>", "Email address")
76
+ .requiredOption("--status <status>", "valid | invalid | accept-all | unknown")
77
+ .requiredOption("--provider <name>", "Verification provider (hunter)")
78
+ .option("--score <n>", 'Finder confidence score 0 to 100 ("null" for none)')
79
+ .option("--seen-on <list>", "Comma-separated places the address was seen: site | signature | registry | linkedin | finder")
80
+ .option("--pattern-confirmed <bool>", "The company's address pattern is confirmed: true | false")
81
+ .option("--verified-at <iso>", "When it was verified (defaults to now)")
82
+ .option("--json", "Output as JSON")
83
+ .action(async (id, opts) => {
84
+ try {
85
+ const data = await api.post(`/outreach/prospects/${id}/email`, {
86
+ email: opts.email,
87
+ status: opts.status,
88
+ provider: opts.provider,
89
+ ...compact({
90
+ score: nullableInt(opts.score, "score"),
91
+ seenOn: opts.seenOn !== undefined ? csv(opts.seenOn) : undefined,
92
+ patternConfirmed: opts.patternConfirmed !== undefined
93
+ ? parseBool(opts.patternConfirmed, "pattern-confirmed")
94
+ : undefined,
95
+ verifiedAt: opts.verifiedAt,
96
+ }),
97
+ });
98
+ done(data, opts, `Email recorded, prospect ${data.status}`);
99
+ }
100
+ catch (err) {
101
+ handleError(err);
102
+ }
103
+ });
104
+ const statusCmd = new Command("status")
105
+ .description("Park or drop a prospect; a running sequence stops and its unsent Gmail drafts come back to delete")
106
+ .argument("<id>", "Prospect id")
107
+ .argument("<status>", "parked | dropped")
108
+ .option("--json", "Output as JSON")
109
+ .action(async (id, status, opts) => {
110
+ try {
111
+ const data = await api.post(`/outreach/prospects/${id}/status`, { status });
112
+ statusDone(data, opts, `Prospect ${fullName(data.prospect.firstName, data.prospect.lastName)}: ${data.prospect.status}`);
113
+ }
114
+ catch (err) {
115
+ handleError(err);
116
+ }
117
+ });
118
+ const replyOutcomeCmd = new Command("reply-outcome")
119
+ .description("Close a replied prospect: not-a-lead, or said-no (opts out the prospect and the company)")
120
+ .argument("<id>", "Prospect id")
121
+ .argument("<outcome>", "not-a-lead | said-no")
122
+ .option("--json", "Output as JSON")
123
+ .action(async (id, outcome, opts) => {
124
+ try {
125
+ const data = await api.post(`/outreach/prospects/${id}/reply-outcome`, { outcome });
126
+ statusDone(data, opts, `Reply outcome ${outcome} recorded, prospect ${data.prospect.status}`);
127
+ }
128
+ catch (err) {
129
+ handleError(err);
130
+ }
131
+ });
132
+ export const outreachProspectWriteCommands = [
133
+ createCmd,
134
+ updateCmd,
135
+ emailCmd,
136
+ statusCmd,
137
+ replyOutcomeCmd,
138
+ ];
139
+ //# sourceMappingURL=outreach-prospect-writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outreach-prospect-writes.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-prospect-writes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const outreachProspectCommand: Command;
@@ -0,0 +1,96 @@
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 { outreachProspectWriteCommands } from "./outreach-prospect-writes.js";
7
+ import { fullName, LANGUAGES, printPage, SIGNALS, withPageOptions, } from "./outreach-shared.js";
8
+ const STATUSES = "new | ready | linkedin-only | enrolled | replied | bounced | parked | dropped";
9
+ const listCmd = withPageOptions(new Command("list")
10
+ .description("List prospects with their company and open enrollment, last updated first")
11
+ .option("--status <list>", `One status or several, comma-separated (ready,linkedin-only): ${STATUSES}`)
12
+ .option("--company-id <id>", "Prospects of one company")
13
+ .option("--signal <signal>", SIGNALS)
14
+ .option("--language <lang>", LANGUAGES)
15
+ .option("--q <text>", "Name, email or company name contains")).action(async (opts) => {
16
+ try {
17
+ await printPage(`/outreach/prospects${qs({
18
+ status: opts.status,
19
+ companyId: opts.companyId,
20
+ signal: opts.signal,
21
+ language: opts.language,
22
+ q: opts.q,
23
+ page: opts.page,
24
+ pageSize: opts.pageSize,
25
+ })}`, [
26
+ { key: "name", label: "Name", width: 22 },
27
+ { key: "companyName", label: "Company", width: 22 },
28
+ { key: "status", label: "Status", width: 13 },
29
+ { key: "signal", label: "Signal", width: 12 },
30
+ { key: "language", label: "Lang", width: 4 },
31
+ { key: "email", label: "Email", width: 30 },
32
+ { key: "enrollment", label: "Enrollment", width: 22 },
33
+ { key: "id", label: "Id", width: 36 },
34
+ ], opts, (p) => ({
35
+ ...p,
36
+ name: fullName(p.firstName, p.lastName),
37
+ enrollment: p.openEnrollment
38
+ ? `${p.openEnrollment.channel} ${p.openEnrollment.status} step ${p.openEnrollment.currentStep}`
39
+ : null,
40
+ }));
41
+ }
42
+ catch (err) {
43
+ handleError(err);
44
+ }
45
+ });
46
+ const getCmd = new Command("get")
47
+ .description("Show a prospect with its company, evidence and enrollments")
48
+ .argument("<id>", "Prospect id")
49
+ .option("--json", "Output as JSON")
50
+ .action(async (id, opts) => {
51
+ try {
52
+ const data = await api.get(`/outreach/prospects/${id}`);
53
+ if (opts.json) {
54
+ printJson(data);
55
+ return;
56
+ }
57
+ printDetail({
58
+ ...data,
59
+ name: fullName(data.firstName, data.lastName),
60
+ companyLine: `${data.company.name} (${data.company.status})`,
61
+ emailLine: data.email
62
+ ? `${data.email} (${data.emailStatus ?? "unverified"})`
63
+ : null,
64
+ evidenceLine: `${data.evidence.quote} ${chalk.dim(data.evidence.url)}`,
65
+ }, [
66
+ { key: "name", label: "Name" },
67
+ { key: "role", label: "Role" },
68
+ { key: "companyLine", label: "Company" },
69
+ { key: "status", label: "Status" },
70
+ { key: "language", label: "Language" },
71
+ { key: "signal", label: "Signal" },
72
+ { key: "evidenceLine", label: "Evidence" },
73
+ { key: "emailLine", label: "Email" },
74
+ { key: "emailProvider", label: "Email provider" },
75
+ { key: "emailScore", label: "Email score" },
76
+ { key: "linkedinUrl", label: "LinkedIn" },
77
+ { key: "parkedAt", label: "Parked" },
78
+ { key: "optedOutAt", label: "Opted out" },
79
+ { key: "id", label: "Id" },
80
+ ], opts);
81
+ for (const e of data.enrollments) {
82
+ console.log(` enrollment ${e.channel.padEnd(8)} ${e.status.padEnd(9)} ${e.sequence?.slug ?? "-"} step ${e.currentStep}${e.stopReason ? ` (${e.stopReason})` : ""} ${chalk.dim(e.id)}`);
83
+ }
84
+ }
85
+ catch (err) {
86
+ handleError(err);
87
+ }
88
+ });
89
+ export const outreachProspectCommand = new Command("prospect")
90
+ .description("Prospects: one person at a qualified company, with the signal, evidence and verified email")
91
+ .addCommand(listCmd)
92
+ .addCommand(getCmd);
93
+ for (const cmd of outreachProspectWriteCommands) {
94
+ outreachProspectCommand.addCommand(cmd);
95
+ }
96
+ //# sourceMappingURL=outreach-prospects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outreach-prospects.js","sourceRoot":"","sources":["../../../src/commands/api/outreach-prospects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const outreachSettingsCommands: Command[];