@invinite-org/invinite-data-cli 2.0.0 → 4.0.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/README.md +341 -374
- package/claude-plugin/.claude-plugin/plugin.json +1 -1
- package/claude-plugin/agents/invinite-data.md +59 -28
- package/claude-plugin/commands/analyze-earnings-call.md +15 -14
- package/claude-plugin/commands/analyze-filing.md +8 -7
- package/claude-plugin/commands/compare-companies.md +5 -5
- package/claude-plugin/commands/financial-research.md +9 -9
- package/claude-plugin/commands/ownership-review.md +6 -6
- package/claude-plugin/skills/invinite-data-cli/SKILL.md +466 -570
- package/dist/bin/invd.js +11 -2
- package/dist/bin/invd.js.map +1 -1
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +48 -29
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client/api-client.d.ts +24 -24
- package/dist/src/client/api-client.js +52 -70
- package/dist/src/client/api-client.js.map +1 -1
- package/dist/src/client/pagination.d.ts +12 -11
- package/dist/src/client/pagination.js +47 -56
- package/dist/src/client/pagination.js.map +1 -1
- package/dist/src/commands/agent-setup.d.ts +21 -0
- package/dist/src/commands/agent-setup.js +112 -0
- package/dist/src/commands/agent-setup.js.map +1 -0
- package/dist/src/commands/api.d.ts +27 -0
- package/dist/src/commands/api.js +180 -0
- package/dist/src/commands/api.js.map +1 -0
- package/dist/src/commands/auth.d.ts +37 -0
- package/dist/src/commands/auth.js +336 -0
- package/dist/src/commands/auth.js.map +1 -0
- package/dist/src/commands/completion.d.ts +7 -0
- package/dist/src/commands/completion.js +115 -0
- package/dist/src/commands/completion.js.map +1 -0
- package/dist/src/commands/config.d.ts +4 -0
- package/dist/src/commands/config.js +85 -48
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/plugin.d.ts +8 -0
- package/dist/src/commands/plugin.js +8 -10
- package/dist/src/commands/plugin.js.map +1 -1
- package/dist/src/config/auth.d.ts +17 -1
- package/dist/src/config/auth.js +50 -36
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config-manager.d.ts +56 -4
- package/dist/src/config/config-manager.js +173 -29
- package/dist/src/config/config-manager.js.map +1 -1
- package/dist/src/config/toml.d.ts +7 -0
- package/dist/src/config/toml.js +79 -0
- package/dist/src/config/toml.js.map +1 -0
- package/dist/src/examples.d.ts +22 -0
- package/dist/src/examples.js +56 -0
- package/dist/src/examples.js.map +1 -0
- package/dist/src/generated/cli-manifest.json +5583 -4916
- package/dist/src/hand-written-commands.d.ts +11 -41
- package/dist/src/hand-written-commands.js +7 -17
- package/dist/src/hand-written-commands.js.map +1 -1
- package/dist/src/output/jq.d.ts +15 -0
- package/dist/src/output/jq.js +234 -0
- package/dist/src/output/jq.js.map +1 -0
- package/dist/src/output/options.d.ts +29 -0
- package/dist/src/output/options.js +72 -0
- package/dist/src/output/options.js.map +1 -0
- package/dist/src/output/render.d.ts +54 -0
- package/dist/src/output/render.js +160 -0
- package/dist/src/output/render.js.map +1 -0
- package/dist/src/shared/errors.d.ts +59 -15
- package/dist/src/shared/errors.js +126 -38
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/prompt.d.ts +10 -0
- package/dist/src/shared/prompt.js +24 -0
- package/dist/src/shared/prompt.js.map +1 -0
- package/dist/src/shared/spinner.js +2 -1
- package/dist/src/shared/spinner.js.map +1 -1
- package/dist/src/spec-commands.d.ts +14 -6
- package/dist/src/spec-commands.js +454 -174
- package/dist/src/spec-commands.js.map +1 -1
- package/dist/src/spec-flags.d.ts +11 -6
- package/dist/src/spec-flags.js +14 -7
- package/dist/src/spec-flags.js.map +1 -1
- package/dist/src/spec-manifest.d.ts +416 -116
- package/dist/src/spec-manifest.js +44 -13
- package/dist/src/spec-manifest.js.map +1 -1
- package/dist/src/update-notifier.d.ts +9 -0
- package/dist/src/update-notifier.js +63 -0
- package/dist/src/update-notifier.js.map +1 -0
- package/package.json +2 -3
- package/dist/src/client/earnings-live.d.ts +0 -194
- package/dist/src/client/earnings-live.js +0 -300
- package/dist/src/client/earnings-live.js.map +0 -1
- package/dist/src/client/news-live.d.ts +0 -72
- package/dist/src/client/news-live.js +0 -120
- package/dist/src/client/news-live.js.map +0 -1
- package/dist/src/client/pdf.d.ts +0 -15
- package/dist/src/client/pdf.js +0 -15
- package/dist/src/client/pdf.js.map +0 -1
- package/dist/src/client/websocket-client.d.ts +0 -19
- package/dist/src/client/websocket-client.js +0 -174
- package/dist/src/client/websocket-client.js.map +0 -1
- package/dist/src/commands/earnings.d.ts +0 -16
- package/dist/src/commands/earnings.js +0 -464
- package/dist/src/commands/earnings.js.map +0 -1
- package/dist/src/commands/login.d.ts +0 -15
- package/dist/src/commands/login.js +0 -249
- package/dist/src/commands/login.js.map +0 -1
- package/dist/src/commands/news.d.ts +0 -2
- package/dist/src/commands/news.js +0 -69
- package/dist/src/commands/news.js.map +0 -1
- package/dist/src/commands/sec.d.ts +0 -47
- package/dist/src/commands/sec.js +0 -191
- package/dist/src/commands/sec.js.map +0 -1
- package/dist/src/commands/ws.d.ts +0 -33
- package/dist/src/commands/ws.js +0 -116
- package/dist/src/commands/ws.js.map +0 -1
- package/dist/src/formatters/json-formatter.d.ts +0 -1
- package/dist/src/formatters/json-formatter.js +0 -4
- package/dist/src/formatters/json-formatter.js.map +0 -1
- package/dist/src/formatters/table-formatter.d.ts +0 -4
- package/dist/src/formatters/table-formatter.js +0 -73
- package/dist/src/formatters/table-formatter.js.map +0 -1
- package/dist/src/formatters/time.d.ts +0 -2
- package/dist/src/formatters/time.js +0 -14
- package/dist/src/formatters/time.js.map +0 -1
- package/dist/src/shared/output.d.ts +0 -3
- package/dist/src/shared/output.js +0 -13
- package/dist/src/shared/output.js.map +0 -1
- package/dist/src/shared/readiness.d.ts +0 -4
- package/dist/src/shared/readiness.js +0 -60
- package/dist/src/shared/readiness.js.map +0 -1
- package/dist/src/shared/types.d.ts +0 -11
- package/dist/src/shared/types.js +0 -2
- package/dist/src/shared/types.js.map +0 -1
|
@@ -1,464 +0,0 @@
|
|
|
1
|
-
import { Option } from 'commander';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import { apiGet } from '../client/api-client.js';
|
|
5
|
-
import { downloadToFile, ensureDir, extensionFor, writeTextFile } from '../client/download.js';
|
|
6
|
-
import { printPdfUrl, savePdf } from '../client/pdf.js';
|
|
7
|
-
import { fetchAllPages } from '../client/pagination.js';
|
|
8
|
-
import { apiErrorHint, withErrorHandling } from '../shared/errors.js';
|
|
9
|
-
import { output } from '../shared/output.js';
|
|
10
|
-
import { setJsonMode } from '../shared/spinner.js';
|
|
11
|
-
import { formatJson } from '../formatters/json-formatter.js';
|
|
12
|
-
import { formatKeyValue, formatTable, printPaginationHint } from '../formatters/table-formatter.js';
|
|
13
|
-
import { formatMs } from '../formatters/time.js';
|
|
14
|
-
/**
|
|
15
|
-
* The hand-written `invd earnings` commands: each writes a file or renders text, so none is one REST call plus one
|
|
16
|
-
* view (`src/hand-written-commands.ts` rosters them). Every other `earnings` action is generated from the manifest
|
|
17
|
-
* and attached to the same group (`src/spec-commands.ts`).
|
|
18
|
-
*/
|
|
19
|
-
const BASE = '/v1/earnings-calls';
|
|
20
|
-
/** IDA's `event_type` values (the spec's enum on the selector operations). */
|
|
21
|
-
const EVENT_TYPES = ['earnings_call', 'investor_day', 'conference', 'agm', 'other'];
|
|
22
|
-
/**
|
|
23
|
-
* The event selector, as the generated commands spell it (the spec's query parameters): `--event-id`, or `-i` with
|
|
24
|
-
* `--year` + `--quarter` or `--date`. An incomplete selector is the API's own 400.
|
|
25
|
-
*/
|
|
26
|
-
function selectorOptions(cmd) {
|
|
27
|
-
return cmd
|
|
28
|
-
.option('--event-id <event_id>', 'Event ID (wins over the other selectors)')
|
|
29
|
-
.option('-i, --identifier <ticker>', 'Ticker or CIK (with --year + --quarter, or --date)')
|
|
30
|
-
.option('--year <n>', 'Fiscal year of the call (with --quarter)')
|
|
31
|
-
.option('--quarter <n>', 'Fiscal quarter of the call (with --year)')
|
|
32
|
-
.option('--date <date>', 'Day of the call (YYYY-MM-DD): a calendar day in New York time (America/New_York); a call without a confirmed time is listed on its announced date')
|
|
33
|
-
.addOption(new Option('--event-type <type>', 'Event type of the selected call').choices(EVENT_TYPES));
|
|
34
|
-
}
|
|
35
|
-
function selectorParams(opts) {
|
|
36
|
-
return {
|
|
37
|
-
event_id: opts.eventId,
|
|
38
|
-
identifier: opts.identifier,
|
|
39
|
-
year: opts.year,
|
|
40
|
-
quarter: opts.quarter,
|
|
41
|
-
date: opts.date,
|
|
42
|
-
event_type: opts.eventType,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const run = (fn) => withErrorHandling(fn, apiErrorHint);
|
|
46
|
-
/** `--all`: follows `next_url` and concatenates the `documents` pages. */
|
|
47
|
-
async function allDocuments(data, all) {
|
|
48
|
-
if (!all)
|
|
49
|
-
return data;
|
|
50
|
-
return fetchAllPages(data, page => page.next_url, (accumulated, page) => ({
|
|
51
|
-
...page,
|
|
52
|
-
documents: [...accumulated.documents, ...page.documents],
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
function eventLine(event) {
|
|
56
|
-
if (!event)
|
|
57
|
-
return '';
|
|
58
|
-
const day = event.conference_date ?? event.scheduled_at ?? '';
|
|
59
|
-
// A non-earnings event (investor day, conference, AGM) by its type and title.
|
|
60
|
-
const kind = event.event_type && event.event_type !== 'earnings_call'
|
|
61
|
-
? [event.event_type.replaceAll('_', ' '), event.event_title].filter(Boolean).join(': ')
|
|
62
|
-
: undefined;
|
|
63
|
-
return [event.symbol ?? event.cik, event.company_name, kind, day].filter(Boolean).join(' · ');
|
|
64
|
-
}
|
|
65
|
-
function printSaved(saved) {
|
|
66
|
-
console.log(chalk.green(`Saved ${saved.path} (${saved.bytes.toLocaleString('en-US')} bytes)`));
|
|
67
|
-
}
|
|
68
|
-
function speakerName(turn) {
|
|
69
|
-
return turn.name ?? `Speaker ${turn.speaker_label}`;
|
|
70
|
-
}
|
|
71
|
-
/** "Q&A starts at m:ss" for the transcript header; undefined without a Q&A boundary. */
|
|
72
|
-
export function qaStartLine(qaStartMs) {
|
|
73
|
-
return typeof qaStartMs === 'number' ? `Q&A starts at ${formatMs(qaStartMs)}` : undefined;
|
|
74
|
-
}
|
|
75
|
-
/** Plain-text rendering of a transcript `data` (console and `--output`); `words` stays JSON. */
|
|
76
|
-
export function transcriptText(data, format) {
|
|
77
|
-
if (typeof data === 'string')
|
|
78
|
-
return data;
|
|
79
|
-
if (format === 'words')
|
|
80
|
-
return JSON.stringify(data, null, 2);
|
|
81
|
-
if (format === 'sections') {
|
|
82
|
-
const sections = data;
|
|
83
|
-
return [
|
|
84
|
-
'## Prepared remarks', '', sections.prepared_remarks ?? '—', '',
|
|
85
|
-
'## Questions and answers', '', sections.questions_and_answers ?? '—',
|
|
86
|
-
].join('\n');
|
|
87
|
-
}
|
|
88
|
-
return data
|
|
89
|
-
.map(turn => `${turn.start_ms === null || turn.start_ms === undefined ? '' : `[${formatMs(turn.start_ms)}] `}${speakerName(turn)}: ${turn.text}`)
|
|
90
|
-
.join('\n\n');
|
|
91
|
-
}
|
|
92
|
-
/** `documents --output`: the warning for a document without a download URL. */
|
|
93
|
-
export function skippedDocumentWarning(doc) {
|
|
94
|
-
const source = doc.source_url ? `; source: ${doc.source_url}` : '';
|
|
95
|
-
return `Not saved: ${doc.kind} ${doc.document_id} has no download URL${source}`;
|
|
96
|
-
}
|
|
97
|
-
/** The document tree's spine folders (IDA `ASSET_GROUP_CATEGORIES`), for `--category` help. */
|
|
98
|
-
export const DOCUMENT_TREE_CATEGORIES = 'earnings, events, reports, presentations, governance, esg, shareholder, other';
|
|
99
|
-
/** `company-documents --output`: `<year | undated>-<kind>-<document_id>.<ext>` (the public shape has no content hash). */
|
|
100
|
-
export function companyDocumentFileName(doc) {
|
|
101
|
-
return `${doc.year ?? 'undated'}-${doc.kind}-${doc.document_id}.${extensionFor(doc.content_type)}`;
|
|
102
|
-
}
|
|
103
|
-
/** Plain text of a pages JSON (`{ pages: [{ n, title, text }] }`); anything else → empty string. */
|
|
104
|
-
export function pagesText(pagesJson) {
|
|
105
|
-
const pages = pagesJson?.pages;
|
|
106
|
-
if (!Array.isArray(pages))
|
|
107
|
-
return '';
|
|
108
|
-
return pages
|
|
109
|
-
.map((page, index) => {
|
|
110
|
-
const n = typeof page?.n === 'number' ? page.n : index + 1;
|
|
111
|
-
const title = typeof page?.title === 'string' && page.title.trim() ? ` · ${page.title}` : '';
|
|
112
|
-
return `## Page ${n}${title}\n\n${typeof page?.text === 'string' ? page.text : ''}`;
|
|
113
|
-
})
|
|
114
|
-
.join('\n\n');
|
|
115
|
-
}
|
|
116
|
-
export function registerEarningsCommands(program) {
|
|
117
|
-
const earnings = program.commands.find(command => command.name() === 'earnings') ?? program.command('earnings');
|
|
118
|
-
const globalOpts = () => {
|
|
119
|
-
const opts = program.opts();
|
|
120
|
-
if (opts.json)
|
|
121
|
-
setJsonMode(true);
|
|
122
|
-
return opts;
|
|
123
|
-
};
|
|
124
|
-
const selectorCommand = (name, description) => selectorOptions(earnings.command(name).description(description));
|
|
125
|
-
// ── Transcript ─────────────────────────────────────────────────────
|
|
126
|
-
selectorCommand('transcript', 'Transcript of a call')
|
|
127
|
-
.addOption(new Option('--format <format>', 'Transcript format').choices(['speakers', 'text', 'words', 'sections', 'cleaned']))
|
|
128
|
-
// Not `--version`: the root program's `-V, --version` is recognised after subcommands too.
|
|
129
|
-
.option('--transcript-version <n>', 'A specific published version (see `invd earnings versions`)')
|
|
130
|
-
.option('--as-of <iso>', 'The version current at this instant (ISO 8601)')
|
|
131
|
-
.option('-o, --output <file>', 'Save the transcript to a file')
|
|
132
|
-
.option('--pdf', 'Print the URL of the branded PDF of this version')
|
|
133
|
-
.option('--pdf-out <file>', 'Save the branded PDF of this version (e.g. call.pdf)')
|
|
134
|
-
.option('--force', 'Overwrite an existing --output or --pdf-out file')
|
|
135
|
-
.action(run(async (cmdOpts) => {
|
|
136
|
-
const opts = globalOpts();
|
|
137
|
-
const data = await apiGet({
|
|
138
|
-
path: `${BASE}/transcript`,
|
|
139
|
-
params: { ...selectorParams(cmdOpts), format: cmdOpts.format, version: cmdOpts.transcriptVersion, as_of: cmdOpts.asOf },
|
|
140
|
-
});
|
|
141
|
-
const text = transcriptText(data.data, data.format);
|
|
142
|
-
const savedPdf = await savePdf(data.pdf, { pdfOut: cmdOpts.pdfOut, force: cmdOpts.force }, 'Downloading transcript PDF...');
|
|
143
|
-
const saved = cmdOpts.output ? await writeTextFile(cmdOpts.output, text, { force: cmdOpts.force }) : undefined;
|
|
144
|
-
output(data, opts, () => {
|
|
145
|
-
if (cmdOpts.pdf && !savedPdf && !saved) {
|
|
146
|
-
printPdfUrl(data.pdf);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
console.log(chalk.bold(`\n${eventLine(data.event)} · version ${data.version} (${data.version_kind}) · ${data.published_at}\n`));
|
|
150
|
-
const qaStart = qaStartLine(data.qa_start_ms);
|
|
151
|
-
if (qaStart)
|
|
152
|
-
console.log(chalk.dim(`${qaStart}\n`));
|
|
153
|
-
if (savedPdf)
|
|
154
|
-
printSaved(savedPdf);
|
|
155
|
-
if (saved)
|
|
156
|
-
printSaved(saved);
|
|
157
|
-
if (saved || savedPdf)
|
|
158
|
-
return;
|
|
159
|
-
if (data.format === 'words') {
|
|
160
|
-
console.log(chalk.yellow('The words format is JSON only; use --json to pipe it.\n'));
|
|
161
|
-
formatJson(data.data);
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
console.log(text);
|
|
165
|
-
});
|
|
166
|
-
}));
|
|
167
|
-
selectorCommand('press-release', 'Results press release of a call')
|
|
168
|
-
.option('--body', 'Include the release text')
|
|
169
|
-
.option('-o, --output <file>', 'Save the release text to a file')
|
|
170
|
-
.option('--force', 'Overwrite an existing --output file')
|
|
171
|
-
.action(run(async (cmdOpts) => {
|
|
172
|
-
const opts = globalOpts();
|
|
173
|
-
const data = await apiGet({
|
|
174
|
-
path: `${BASE}/press-release`,
|
|
175
|
-
params: { ...selectorParams(cmdOpts), include: cmdOpts.body || cmdOpts.output ? 'body' : undefined },
|
|
176
|
-
});
|
|
177
|
-
let saved;
|
|
178
|
-
if (cmdOpts.output) {
|
|
179
|
-
if (!data.body_text)
|
|
180
|
-
throw new Error('The press release has no text to save');
|
|
181
|
-
saved = await writeTextFile(cmdOpts.output, data.body_text, { force: cmdOpts.force });
|
|
182
|
-
}
|
|
183
|
-
output(data, opts, () => {
|
|
184
|
-
console.log(chalk.bold(`\n${data.title ?? 'Press release'}\n`));
|
|
185
|
-
formatKeyValue({
|
|
186
|
-
published_at: data.published_at,
|
|
187
|
-
origin: data.origin,
|
|
188
|
-
url: data.url,
|
|
189
|
-
accession_number: data.accession_number,
|
|
190
|
-
trust_tier: data.trust_tier,
|
|
191
|
-
});
|
|
192
|
-
if (data.participants?.length) {
|
|
193
|
-
console.log(chalk.bold('\nParticipants\n'));
|
|
194
|
-
formatTable(data.participants, ['name', 'title', 'role']);
|
|
195
|
-
}
|
|
196
|
-
if (saved)
|
|
197
|
-
printSaved(saved);
|
|
198
|
-
if (cmdOpts.body && data.body_text)
|
|
199
|
-
console.log(`\n${data.body_text}`);
|
|
200
|
-
});
|
|
201
|
-
}));
|
|
202
|
-
// ── Media ──────────────────────────────────────────────────────────
|
|
203
|
-
selectorCommand('audio', 'Call recording (permanent URL, or --output to save it)')
|
|
204
|
-
.option('-o, --output <file>', 'Save the recording (e.g. call.mp3)')
|
|
205
|
-
.option('--force', 'Overwrite an existing --output file')
|
|
206
|
-
.action(run(async (cmdOpts) => {
|
|
207
|
-
const opts = globalOpts();
|
|
208
|
-
const data = await apiGet({ path: `${BASE}/audio`, params: selectorParams(cmdOpts) });
|
|
209
|
-
const saved = cmdOpts.output
|
|
210
|
-
? await downloadToFile(data.url, cmdOpts.output, { force: cmdOpts.force, spinnerText: 'Downloading audio...' })
|
|
211
|
-
: undefined;
|
|
212
|
-
output(data, opts, () => {
|
|
213
|
-
console.log(chalk.bold(`\n${eventLine(data.event)} · audio\n`));
|
|
214
|
-
formatKeyValue({
|
|
215
|
-
duration: formatMs(data.duration_seconds === null ? null : data.duration_seconds * 1000),
|
|
216
|
-
bytes: data.bytes,
|
|
217
|
-
codec: data.codec,
|
|
218
|
-
capture_path: data.capture_path,
|
|
219
|
-
...(saved ? {} : { url: data.url }),
|
|
220
|
-
});
|
|
221
|
-
if (saved)
|
|
222
|
-
printSaved(saved);
|
|
223
|
-
});
|
|
224
|
-
}));
|
|
225
|
-
selectorCommand('slides', 'Slide deck (permanent URL, or --output to save the PDF)')
|
|
226
|
-
.option('--markdown', "Include each page's extracted text")
|
|
227
|
-
.option('--pages <range>', 'Page or range, e.g. 3 or 1-5')
|
|
228
|
-
.option('-o, --output <file>', 'Save the deck PDF (e.g. deck.pdf)')
|
|
229
|
-
.option('--force', 'Overwrite an existing --output file')
|
|
230
|
-
.action(run(async (cmdOpts) => {
|
|
231
|
-
const opts = globalOpts();
|
|
232
|
-
const data = await apiGet({
|
|
233
|
-
path: `${BASE}/slides`,
|
|
234
|
-
params: { ...selectorParams(cmdOpts), include: cmdOpts.markdown ? 'markdown' : undefined, pages: cmdOpts.pages },
|
|
235
|
-
});
|
|
236
|
-
let saved;
|
|
237
|
-
if (cmdOpts.output) {
|
|
238
|
-
if (!data.deck?.url)
|
|
239
|
-
throw new Error('No slide deck to save for this call');
|
|
240
|
-
saved = await downloadToFile(data.deck.url, cmdOpts.output, { force: cmdOpts.force, spinnerText: 'Downloading deck...' });
|
|
241
|
-
}
|
|
242
|
-
output(data, opts, () => {
|
|
243
|
-
console.log(chalk.bold(`\n${eventLine(data.event)} · slides\n`));
|
|
244
|
-
if (data.deck) {
|
|
245
|
-
formatKeyValue({
|
|
246
|
-
pages: data.deck.pages,
|
|
247
|
-
origin: data.deck.origin,
|
|
248
|
-
source_url: data.deck.source_url,
|
|
249
|
-
trust_tier: data.deck.trust_tier,
|
|
250
|
-
...(saved ? {} : { url: data.deck.url }),
|
|
251
|
-
});
|
|
252
|
-
}
|
|
253
|
-
if (saved)
|
|
254
|
-
printSaved(saved);
|
|
255
|
-
console.log();
|
|
256
|
-
formatTable(data.slides ?? [], ['page', 'title']);
|
|
257
|
-
if (cmdOpts.markdown) {
|
|
258
|
-
for (const slide of data.slides ?? []) {
|
|
259
|
-
if (slide.markdown)
|
|
260
|
-
console.log(`\n${chalk.bold(`Page ${slide.page}`)}\n${slide.markdown}`);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
});
|
|
264
|
-
}));
|
|
265
|
-
selectorCommand('documents', 'Investor documents of a call (CFO commentary, data sheets, letters, filings)')
|
|
266
|
-
.option('--kind <list>', 'Kinds, comma-separated (cfo_commentary, financial_data, shareholder_letter, fact_sheet, company_transcript, sec_filing, infographic, other)')
|
|
267
|
-
.option('--category <list>', `Document-tree categories, comma-separated (${DOCUMENT_TREE_CATEGORIES})`)
|
|
268
|
-
.option('--group <path>', 'Document-tree folder or a parent of it, e.g. earnings/fy2027/q2 or earnings')
|
|
269
|
-
.option('--body', 'Include the extracted text')
|
|
270
|
-
.option('-l, --limit <n>', 'Max results (1-100)')
|
|
271
|
-
.option('--offset <n>', 'Offset')
|
|
272
|
-
.option('-o, --output <dir>', 'Save every document into this directory as <kind>-<document_id>.<ext>; one without a download URL (link-only sec_filing) is reported on stderr, exit 1 only when none could be saved')
|
|
273
|
-
.option('--force', 'Overwrite existing files in --output')
|
|
274
|
-
.action(run(async (cmdOpts) => {
|
|
275
|
-
const opts = globalOpts();
|
|
276
|
-
const data = await allDocuments(await apiGet({
|
|
277
|
-
path: `${BASE}/documents`,
|
|
278
|
-
params: {
|
|
279
|
-
...selectorParams(cmdOpts),
|
|
280
|
-
kind: cmdOpts.kind,
|
|
281
|
-
category: cmdOpts.category,
|
|
282
|
-
group: cmdOpts.group,
|
|
283
|
-
include: cmdOpts.body ? 'body' : undefined,
|
|
284
|
-
limit: cmdOpts.limit,
|
|
285
|
-
offset: cmdOpts.offset,
|
|
286
|
-
},
|
|
287
|
-
}), opts.all);
|
|
288
|
-
const saved = [];
|
|
289
|
-
const skipped = [];
|
|
290
|
-
if (cmdOpts.output) {
|
|
291
|
-
const dir = await ensureDir(cmdOpts.output);
|
|
292
|
-
for (const doc of data.documents) {
|
|
293
|
-
if (!doc.url) {
|
|
294
|
-
// Link-only rows (sec_filing) and failed downloads carry no download URL: say so, never skip silently.
|
|
295
|
-
skipped.push(doc);
|
|
296
|
-
console.error(chalk.yellow(skippedDocumentWarning(doc)));
|
|
297
|
-
continue;
|
|
298
|
-
}
|
|
299
|
-
const file = join(dir, `${doc.kind}-${doc.document_id}.${extensionFor(doc.content_type)}`);
|
|
300
|
-
const { path, bytes } = await downloadToFile(doc.url, file, { force: cmdOpts.force, spinnerText: `Downloading ${doc.kind}...` });
|
|
301
|
-
saved.push({ document_id: doc.document_id, kind: doc.kind, path, bytes });
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
output(data, opts, () => {
|
|
305
|
-
console.log(chalk.bold(`\n${eventLine(data.event)} · documents\n`));
|
|
306
|
-
// `filing_date`: the EDGAR filing date of a sec_filing link (empty for every other kind).
|
|
307
|
-
formatTable(data.documents, ['kind', 'group', 'title', 'filing_date', 'content_type', 'bytes', 'pages', 'trust_tier', 'origin', 'document_id']);
|
|
308
|
-
if (cmdOpts.output) {
|
|
309
|
-
console.log(chalk.bold('\nSaved\n'));
|
|
310
|
-
formatTable(saved, ['document_id', 'kind', 'path', 'bytes']);
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
const linked = data.documents.filter(doc => doc.url);
|
|
314
|
-
if (linked.length)
|
|
315
|
-
console.log(chalk.bold('\nURLs\n'));
|
|
316
|
-
for (const doc of linked)
|
|
317
|
-
console.log(` ${doc.document_id} ${doc.url}`);
|
|
318
|
-
}
|
|
319
|
-
if (cmdOpts.body) {
|
|
320
|
-
for (const doc of data.documents.filter(doc => doc.body_text)) {
|
|
321
|
-
console.log(`\n${chalk.bold(doc.title ?? doc.kind)}\n${doc.body_text}`);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
printPaginationHint(data.next_url);
|
|
325
|
-
});
|
|
326
|
-
if (cmdOpts.output) {
|
|
327
|
-
// stderr, like the per-document warnings, so `--json` output stays parseable.
|
|
328
|
-
if (skipped.length)
|
|
329
|
-
console.error(chalk.yellow(`${saved.length} of ${data.documents.length} documents saved; ${skipped.length} skipped (no download URL)`));
|
|
330
|
-
if (saved.length === 0 && data.documents.length > 0) {
|
|
331
|
-
throw new Error(`None of the ${data.documents.length} documents could be downloaded`);
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}));
|
|
335
|
-
// ── Company documents (IR library) ─────────────────────────────────
|
|
336
|
-
earnings
|
|
337
|
-
.command('company-documents')
|
|
338
|
-
.description("A company's IR documents (annual reports, proxy, ESG, investor-day decks, letters, webcast pages); --include calls adds every earnings call's documents")
|
|
339
|
-
.requiredOption('-i, --identifier <ticker>', 'Ticker or CIK')
|
|
340
|
-
.option('--section <list>', 'IR sections, comma-separated (quarterly_results, events_archive, presentations_archive, annual_reports, proxy, sec_filings, press_releases, esg, governance, faq, other)')
|
|
341
|
-
.option('--kind <list>', 'Kinds, comma-separated (annual_report, proxy_statement, esg_report, investor_day_deck, conference_presentation, shareholder_letter, fact_sheet, webcast, cfo_commentary, sec_filing, …)')
|
|
342
|
-
.option('--year <n>', 'Year the document belongs to')
|
|
343
|
-
.option('--period <period>', 'Period within the year (Q1-Q4, H1, H2, FY)')
|
|
344
|
-
.option('--category <list>', `Document-tree categories, comma-separated (${DOCUMENT_TREE_CATEGORIES})`)
|
|
345
|
-
.option('--group <path>', 'Document-tree folder or a parent of it, e.g. earnings/fy2027/q2, esg or shareholder/tax')
|
|
346
|
-
.option('--fiscal-year <n>', 'Only the earnings folders of this fiscal year (earnings/fy<YYYY>/…)')
|
|
347
|
-
.option('--fiscal-quarter <n>', 'Only the earnings folders of this fiscal quarter (1-4)')
|
|
348
|
-
.option('--event-id <event_id>', 'Only the documents of this event (investor day, conference, AGM; with --include calls also an earnings call)')
|
|
349
|
-
.option('--include <list>', "Extra rows: calls = every earnings call's documents in the same list (source: call)")
|
|
350
|
-
.option('-l, --limit <n>', 'Max results (1-100)')
|
|
351
|
-
.option('--offset <n>', 'Offset')
|
|
352
|
-
.option('-o, --output <dir>', 'Save every stored file into this directory as <year>-<kind>-<document_id>.<ext>; a link-only row (webcast) is reported on stderr, exit 1 only when none could be saved')
|
|
353
|
-
.option('--force', 'Overwrite existing files in --output')
|
|
354
|
-
.action(run(async (cmdOpts) => {
|
|
355
|
-
const opts = globalOpts();
|
|
356
|
-
const data = await allDocuments(await apiGet({
|
|
357
|
-
path: `${BASE}/company-documents`,
|
|
358
|
-
params: {
|
|
359
|
-
identifier: cmdOpts.identifier,
|
|
360
|
-
section: cmdOpts.section,
|
|
361
|
-
kind: cmdOpts.kind,
|
|
362
|
-
year: cmdOpts.year,
|
|
363
|
-
period: cmdOpts.period,
|
|
364
|
-
category: cmdOpts.category,
|
|
365
|
-
group: cmdOpts.group,
|
|
366
|
-
fiscal_year: cmdOpts.fiscalYear,
|
|
367
|
-
fiscal_quarter: cmdOpts.fiscalQuarter,
|
|
368
|
-
event_id: cmdOpts.eventId,
|
|
369
|
-
include: cmdOpts.include,
|
|
370
|
-
limit: cmdOpts.limit,
|
|
371
|
-
offset: cmdOpts.offset,
|
|
372
|
-
},
|
|
373
|
-
}), opts.all);
|
|
374
|
-
const saved = [];
|
|
375
|
-
const skipped = [];
|
|
376
|
-
if (cmdOpts.output) {
|
|
377
|
-
const dir = await ensureDir(cmdOpts.output);
|
|
378
|
-
for (const doc of data.documents) {
|
|
379
|
-
if (!doc.url) {
|
|
380
|
-
// Link-only rows (webcast replay pages) carry no download URL: say so, never skip silently.
|
|
381
|
-
skipped.push(doc);
|
|
382
|
-
console.error(chalk.yellow(skippedDocumentWarning(doc)));
|
|
383
|
-
continue;
|
|
384
|
-
}
|
|
385
|
-
const { path, bytes } = await downloadToFile(doc.url, join(dir, companyDocumentFileName(doc)), {
|
|
386
|
-
force: cmdOpts.force,
|
|
387
|
-
spinnerText: `Downloading ${doc.kind}...`,
|
|
388
|
-
});
|
|
389
|
-
saved.push({ document_id: doc.document_id, kind: doc.kind, path, bytes });
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
output(data, opts, () => {
|
|
393
|
-
console.log(chalk.bold(`\n${data.company?.symbol ?? cmdOpts.identifier} (${data.company?.cik ?? ''}) IR documents\n`));
|
|
394
|
-
console.log(chalk.dim('Company-published material, shown as published.\n'));
|
|
395
|
-
// `filing_date`: the EDGAR filing date of a call's sec_filing link (`--include calls`), never the call's day.
|
|
396
|
-
formatTable(data.documents, ['document_id', 'source', 'kind', 'group', 'section', 'year', 'period', 'title', 'filing_date', 'pages']);
|
|
397
|
-
if (cmdOpts.output) {
|
|
398
|
-
console.log(chalk.bold('\nSaved\n'));
|
|
399
|
-
formatTable(saved, ['document_id', 'kind', 'path', 'bytes']);
|
|
400
|
-
}
|
|
401
|
-
printPaginationHint(data.next_url);
|
|
402
|
-
});
|
|
403
|
-
if (cmdOpts.output) {
|
|
404
|
-
if (skipped.length)
|
|
405
|
-
console.error(chalk.yellow(`${saved.length} of ${data.documents.length} documents saved; ${skipped.length} skipped (no download URL)`));
|
|
406
|
-
if (saved.length === 0 && data.documents.length > 0) {
|
|
407
|
-
throw new Error(`None of the ${data.documents.length} documents could be downloaded`);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
}));
|
|
411
|
-
earnings
|
|
412
|
-
.command('document')
|
|
413
|
-
.description('One company IR document (metadata and permanent URLs, or --pages for its text)')
|
|
414
|
-
.requiredOption('--document-id <document_id>', 'Document ID (from company-documents or document-search)')
|
|
415
|
-
.option('--pages', 'Print the per-page text')
|
|
416
|
-
.option('-o, --output <file>', 'Save the file (or, with --pages, the text)')
|
|
417
|
-
.option('--force', 'Overwrite an existing --output file')
|
|
418
|
-
.action(run(async (cmdOpts) => {
|
|
419
|
-
const opts = globalOpts();
|
|
420
|
-
const data = await apiGet({
|
|
421
|
-
path: `${BASE}/company-documents/${encodeURIComponent(cmdOpts.documentId)}`,
|
|
422
|
-
params: { include: cmdOpts.pages ? 'pages' : undefined },
|
|
423
|
-
});
|
|
424
|
-
const doc = data.document;
|
|
425
|
-
let text;
|
|
426
|
-
if (cmdOpts.pages) {
|
|
427
|
-
// Inline up to 2 MB; else the public pages file (a permanent URL: plain GET, no Authorization header).
|
|
428
|
-
let pagesJson = doc.pages_json;
|
|
429
|
-
if (pagesJson === undefined && doc.pages_url) {
|
|
430
|
-
const response = await fetch(doc.pages_url);
|
|
431
|
-
if (!response.ok)
|
|
432
|
-
throw new Error(`Fetching the page text failed with status ${response.status}`);
|
|
433
|
-
pagesJson = await response.json();
|
|
434
|
-
// `--json` then carries the text too, as with the inline answer.
|
|
435
|
-
doc.pages_json = pagesJson;
|
|
436
|
-
}
|
|
437
|
-
text = pagesText(pagesJson);
|
|
438
|
-
if (!text)
|
|
439
|
-
throw new Error('No text extracted for this document yet');
|
|
440
|
-
}
|
|
441
|
-
let saved;
|
|
442
|
-
if (cmdOpts.output) {
|
|
443
|
-
if (text !== undefined) {
|
|
444
|
-
saved = await writeTextFile(cmdOpts.output, text, { force: cmdOpts.force });
|
|
445
|
-
}
|
|
446
|
-
else {
|
|
447
|
-
if (!doc.url)
|
|
448
|
-
throw new Error(`No stored file for this document; source: ${doc.source_url}`);
|
|
449
|
-
saved = await downloadToFile(doc.url, cmdOpts.output, { force: cmdOpts.force, spinnerText: `Downloading ${doc.kind}...` });
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
output(data, opts, () => {
|
|
453
|
-
console.log(chalk.bold(`\n${doc.title ?? doc.kind} · ${data.company?.symbol ?? ''}\n`));
|
|
454
|
-
// The metadata without the inline text; a saved file prints its path instead of the URLs.
|
|
455
|
-
const hidden = new Set(saved ? ['pages_json', 'url', 'pages_url'] : ['pages_json']);
|
|
456
|
-
formatKeyValue(Object.fromEntries(Object.entries(doc).filter(([key]) => !hidden.has(key))));
|
|
457
|
-
if (saved)
|
|
458
|
-
printSaved(saved);
|
|
459
|
-
else if (text !== undefined)
|
|
460
|
-
console.log(`\n${text}`);
|
|
461
|
-
});
|
|
462
|
-
}));
|
|
463
|
-
}
|
|
464
|
-
//# sourceMappingURL=earnings.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"earnings.js","sourceRoot":"","sources":["../../../src/commands/earnings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
type ExchangeData = {
|
|
3
|
-
key: string;
|
|
4
|
-
keyHint: string;
|
|
5
|
-
label: string;
|
|
6
|
-
};
|
|
7
|
-
export type LoginDependencies = {
|
|
8
|
-
fetch: typeof fetch;
|
|
9
|
-
openBrowser: (url: string) => Promise<void>;
|
|
10
|
-
timeoutMs: number;
|
|
11
|
-
};
|
|
12
|
-
export declare function login(dependencies?: LoginDependencies): Promise<ExchangeData>;
|
|
13
|
-
export declare function logout(dependencies?: Pick<LoginDependencies, 'fetch'>): Promise<void>;
|
|
14
|
-
export declare function registerLoginCommands(program: Command): void;
|
|
15
|
-
export {};
|