@invinite-org/invinite-data-cli 0.1.19
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 +693 -0
- package/claude-plugin/.claude-plugin/plugin.json +11 -0
- package/claude-plugin/agents/invinite-data.md +46 -0
- package/claude-plugin/commands/financial-research.md +69 -0
- package/claude-plugin/skills/invinite-data-cli/SKILL.md +251 -0
- package/dist/bin/invd.d.ts +2 -0
- package/dist/bin/invd.js +5 -0
- package/dist/bin/invd.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +47 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/client/api-client.d.ts +6 -0
- package/dist/src/client/api-client.js +40 -0
- package/dist/src/client/api-client.js.map +1 -0
- package/dist/src/client/pagination.d.ts +3 -0
- package/dist/src/client/pagination.js +27 -0
- package/dist/src/client/pagination.js.map +1 -0
- package/dist/src/client/websocket-client.d.ts +1 -0
- package/dist/src/client/websocket-client.js +57 -0
- package/dist/src/client/websocket-client.js.map +1 -0
- package/dist/src/commands/company.d.ts +2 -0
- package/dist/src/commands/company.js +220 -0
- package/dist/src/commands/company.js.map +1 -0
- package/dist/src/commands/config.d.ts +2 -0
- package/dist/src/commands/config.js +56 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/filings.d.ts +2 -0
- package/dist/src/commands/filings.js +139 -0
- package/dist/src/commands/filings.js.map +1 -0
- package/dist/src/commands/financials.d.ts +2 -0
- package/dist/src/commands/financials.js +162 -0
- package/dist/src/commands/financials.js.map +1 -0
- package/dist/src/commands/health.d.ts +2 -0
- package/dist/src/commands/health.js +18 -0
- package/dist/src/commands/health.js.map +1 -0
- package/dist/src/commands/insider-trades.d.ts +2 -0
- package/dist/src/commands/insider-trades.js +56 -0
- package/dist/src/commands/insider-trades.js.map +1 -0
- package/dist/src/commands/ipos.d.ts +2 -0
- package/dist/src/commands/ipos.js +42 -0
- package/dist/src/commands/ipos.js.map +1 -0
- package/dist/src/commands/market.d.ts +2 -0
- package/dist/src/commands/market.js +34 -0
- package/dist/src/commands/market.js.map +1 -0
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +39 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/metrics.d.ts +2 -0
- package/dist/src/commands/metrics.js +158 -0
- package/dist/src/commands/metrics.js.map +1 -0
- package/dist/src/commands/ownership.d.ts +2 -0
- package/dist/src/commands/ownership.js +152 -0
- package/dist/src/commands/ownership.js.map +1 -0
- package/dist/src/commands/plugin.d.ts +2 -0
- package/dist/src/commands/plugin.js +303 -0
- package/dist/src/commands/plugin.js.map +1 -0
- package/dist/src/commands/segments.d.ts +2 -0
- package/dist/src/commands/segments.js +64 -0
- package/dist/src/commands/segments.js.map +1 -0
- package/dist/src/commands/ws.d.ts +2 -0
- package/dist/src/commands/ws.js +14 -0
- package/dist/src/commands/ws.js.map +1 -0
- package/dist/src/config/auth.d.ts +2 -0
- package/dist/src/config/auth.js +70 -0
- package/dist/src/config/auth.js.map +1 -0
- package/dist/src/config/config-manager.d.ts +6 -0
- package/dist/src/config/config-manager.js +37 -0
- package/dist/src/config/config-manager.js.map +1 -0
- package/dist/src/formatters/json-formatter.d.ts +1 -0
- package/dist/src/formatters/json-formatter.js +4 -0
- package/dist/src/formatters/json-formatter.js.map +1 -0
- package/dist/src/formatters/table-formatter.d.ts +3 -0
- package/dist/src/formatters/table-formatter.js +63 -0
- package/dist/src/formatters/table-formatter.js.map +1 -0
- package/dist/src/formatters/tree-formatter.d.ts +11 -0
- package/dist/src/formatters/tree-formatter.js +30 -0
- package/dist/src/formatters/tree-formatter.js.map +1 -0
- package/dist/src/shared/errors.d.ts +6 -0
- package/dist/src/shared/errors.js +32 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/options.d.ts +13 -0
- package/dist/src/shared/options.js +14 -0
- package/dist/src/shared/options.js.map +1 -0
- package/dist/src/shared/output.d.ts +3 -0
- package/dist/src/shared/output.js +13 -0
- package/dist/src/shared/output.js.map +1 -0
- package/dist/src/shared/spinner.d.ts +3 -0
- package/dist/src/shared/spinner.js +12 -0
- package/dist/src/shared/spinner.js.map +1 -0
- package/dist/src/shared/types.d.ts +11 -0
- package/dist/src/shared/types.js +2 -0
- package/dist/src/shared/types.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
const RUNTIMES = {
|
|
7
|
+
claude: {
|
|
8
|
+
label: 'Claude Code',
|
|
9
|
+
globalDir: path.join(os.homedir(), '.claude'),
|
|
10
|
+
localDir: '.claude',
|
|
11
|
+
install(sourceDir, targetDir) {
|
|
12
|
+
copyFile(path.join(sourceDir, 'skills/invinite-data-cli/SKILL.md'), path.join(targetDir, 'skills/invinite-data-cli/SKILL.md'));
|
|
13
|
+
copyFile(path.join(sourceDir, 'agents/invinite-data.md'), path.join(targetDir, 'agents/invinite-data.md'));
|
|
14
|
+
copyFile(path.join(sourceDir, 'commands/financial-research.md'), path.join(targetDir, 'commands/financial-research.md'));
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
opencode: {
|
|
18
|
+
label: 'OpenCode',
|
|
19
|
+
globalDir: path.join(os.homedir(), '.config/opencode'),
|
|
20
|
+
localDir: null,
|
|
21
|
+
install(sourceDir, targetDir) {
|
|
22
|
+
const skillContent = fs.readFileSync(path.join(sourceDir, 'skills/invinite-data-cli/SKILL.md'), 'utf-8');
|
|
23
|
+
const transformed = transformForOpenCode(skillContent);
|
|
24
|
+
writeFile(path.join(targetDir, 'command/invinite-data-cli.md'), transformed);
|
|
25
|
+
const agentContent = fs.readFileSync(path.join(sourceDir, 'agents/invinite-data.md'), 'utf-8');
|
|
26
|
+
const transformedAgent = transformAgentForOpenCode(agentContent);
|
|
27
|
+
writeFile(path.join(targetDir, 'agents/invinite-data.md'), transformedAgent);
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
codex: {
|
|
31
|
+
label: 'Codex',
|
|
32
|
+
globalDir: path.join(os.homedir(), '.codex'),
|
|
33
|
+
localDir: '.codex',
|
|
34
|
+
install(sourceDir, targetDir) {
|
|
35
|
+
const skillContent = fs.readFileSync(path.join(sourceDir, 'skills/invinite-data-cli/SKILL.md'), 'utf-8');
|
|
36
|
+
writeFile(path.join(targetDir, 'skills/invinite-data-cli/SKILL.md'), transformForCodex(skillContent));
|
|
37
|
+
const cmdContent = fs.readFileSync(path.join(sourceDir, 'commands/financial-research.md'), 'utf-8');
|
|
38
|
+
writeFile(path.join(targetDir, 'skills/invinite-financial-research/SKILL.md'), transformForCodex(cmdContent));
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
copilot: {
|
|
42
|
+
label: 'Copilot',
|
|
43
|
+
globalDir: path.join(os.homedir(), '.github'),
|
|
44
|
+
localDir: '.github',
|
|
45
|
+
install(sourceDir, targetDir) {
|
|
46
|
+
const skillContent = fs.readFileSync(path.join(sourceDir, 'skills/invinite-data-cli/SKILL.md'), 'utf-8');
|
|
47
|
+
writeFile(path.join(targetDir, 'skills/invinite-data-cli/SKILL.md'), transformForCopilot(skillContent));
|
|
48
|
+
const cmdContent = fs.readFileSync(path.join(sourceDir, 'commands/financial-research.md'), 'utf-8');
|
|
49
|
+
writeFile(path.join(targetDir, 'skills/invinite-financial-research/SKILL.md'), transformForCopilot(cmdContent));
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const INSTALLED_PATHS = {
|
|
54
|
+
claude: [
|
|
55
|
+
'skills/invinite-data-cli/SKILL.md',
|
|
56
|
+
'agents/invinite-data.md',
|
|
57
|
+
'commands/financial-research.md',
|
|
58
|
+
],
|
|
59
|
+
opencode: [
|
|
60
|
+
'command/invinite-data-cli.md',
|
|
61
|
+
'agents/invinite-data.md',
|
|
62
|
+
],
|
|
63
|
+
codex: [
|
|
64
|
+
'skills/invinite-data-cli/SKILL.md',
|
|
65
|
+
'skills/invinite-financial-research/SKILL.md',
|
|
66
|
+
],
|
|
67
|
+
copilot: [
|
|
68
|
+
'skills/invinite-data-cli/SKILL.md',
|
|
69
|
+
'skills/invinite-financial-research/SKILL.md',
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
// --- Frontmatter transformations ---
|
|
73
|
+
function transformFrontmatter(content, transform) {
|
|
74
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n/);
|
|
75
|
+
if (!match)
|
|
76
|
+
return content;
|
|
77
|
+
const attrs = {};
|
|
78
|
+
for (const line of match[1].split('\n')) {
|
|
79
|
+
const idx = line.indexOf(':');
|
|
80
|
+
if (idx > 0) {
|
|
81
|
+
attrs[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const newAttrs = transform(attrs);
|
|
85
|
+
if (!newAttrs)
|
|
86
|
+
return content.slice(match[0].length);
|
|
87
|
+
const yaml = Object.entries(newAttrs)
|
|
88
|
+
.map(([k, v]) => `${k}: ${v}`)
|
|
89
|
+
.join('\n');
|
|
90
|
+
return `---\n${yaml}\n---\n${content.slice(match[0].length)}`;
|
|
91
|
+
}
|
|
92
|
+
function transformForOpenCode(content) {
|
|
93
|
+
return transformFrontmatter(content, (attrs) => {
|
|
94
|
+
const result = {};
|
|
95
|
+
if (attrs.description)
|
|
96
|
+
result.description = attrs.description;
|
|
97
|
+
if (attrs['allowed-tools']) {
|
|
98
|
+
result.tools = attrs['allowed-tools'].replace(/^Bash\(/, 'shell(');
|
|
99
|
+
}
|
|
100
|
+
return result;
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function transformAgentForOpenCode(content) {
|
|
104
|
+
return transformFrontmatter(content, (attrs) => {
|
|
105
|
+
const result = {};
|
|
106
|
+
if (attrs.name)
|
|
107
|
+
result.name = attrs.name;
|
|
108
|
+
if (attrs.description)
|
|
109
|
+
result.description = attrs.description;
|
|
110
|
+
if (attrs.tools) {
|
|
111
|
+
result.tools = attrs.tools.replace(/Bash\(/g, 'shell(');
|
|
112
|
+
}
|
|
113
|
+
if (attrs.model)
|
|
114
|
+
result.model = attrs.model;
|
|
115
|
+
return result;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function transformForCodex(content) {
|
|
119
|
+
return transformFrontmatter(content, (attrs) => {
|
|
120
|
+
const result = {};
|
|
121
|
+
if (attrs.name)
|
|
122
|
+
result.name = attrs.name;
|
|
123
|
+
if (attrs.description)
|
|
124
|
+
result.description = attrs.description;
|
|
125
|
+
return result;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
function transformForCopilot(content) {
|
|
129
|
+
return transformFrontmatter(content, (attrs) => {
|
|
130
|
+
const result = {};
|
|
131
|
+
if (attrs.name)
|
|
132
|
+
result.name = attrs.name;
|
|
133
|
+
if (attrs.description)
|
|
134
|
+
result.description = attrs.description;
|
|
135
|
+
return result;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// --- File utilities ---
|
|
139
|
+
function copyFile(src, dest) {
|
|
140
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
141
|
+
fs.copyFileSync(src, dest);
|
|
142
|
+
}
|
|
143
|
+
function writeFile(dest, content) {
|
|
144
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
145
|
+
fs.writeFileSync(dest, content, 'utf-8');
|
|
146
|
+
}
|
|
147
|
+
function removeFile(filePath) {
|
|
148
|
+
try {
|
|
149
|
+
fs.unlinkSync(filePath);
|
|
150
|
+
// Clean up empty parent directories
|
|
151
|
+
let dir = path.dirname(filePath);
|
|
152
|
+
while (dir !== path.dirname(dir)) {
|
|
153
|
+
const entries = fs.readdirSync(dir);
|
|
154
|
+
if (entries.length > 0)
|
|
155
|
+
break;
|
|
156
|
+
fs.rmdirSync(dir);
|
|
157
|
+
dir = path.dirname(dir);
|
|
158
|
+
}
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function getPackageRoot() {
|
|
166
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
167
|
+
// dist/src/commands/plugin.js → package root (3 levels up)
|
|
168
|
+
return path.resolve(path.dirname(thisFile), '..', '..', '..');
|
|
169
|
+
}
|
|
170
|
+
function getSourceDir() {
|
|
171
|
+
return path.join(getPackageRoot(), 'claude-plugin');
|
|
172
|
+
}
|
|
173
|
+
// --- Command registration ---
|
|
174
|
+
export function registerPluginCommands(program) {
|
|
175
|
+
const pluginCmd = program
|
|
176
|
+
.command('plugin')
|
|
177
|
+
.description('Install or uninstall AI coding tool plugins');
|
|
178
|
+
pluginCmd
|
|
179
|
+
.command('install')
|
|
180
|
+
.description('Install the Invinite plugin for AI coding tools')
|
|
181
|
+
.option('--claude', 'Install for Claude Code')
|
|
182
|
+
.option('--opencode', 'Install for OpenCode')
|
|
183
|
+
.option('--codex', 'Install for Codex')
|
|
184
|
+
.option('--copilot', 'Install for Copilot')
|
|
185
|
+
.option('--all', 'Install for all supported runtimes')
|
|
186
|
+
.option('-g, --global', 'Install globally (user home)')
|
|
187
|
+
.option('-l, --local', 'Install locally (current directory)')
|
|
188
|
+
.action(async (opts) => {
|
|
189
|
+
let runtimes = resolveRuntimes(opts);
|
|
190
|
+
let scope = resolveScope(opts);
|
|
191
|
+
if (!runtimes || !scope) {
|
|
192
|
+
const answers = await promptInteractive(runtimes, scope);
|
|
193
|
+
runtimes = answers.runtimes;
|
|
194
|
+
scope = answers.scope;
|
|
195
|
+
}
|
|
196
|
+
const sourceDir = getSourceDir();
|
|
197
|
+
if (!fs.existsSync(sourceDir)) {
|
|
198
|
+
console.error(chalk.red('Plugin source files not found. Make sure the package is installed correctly.'));
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
for (const runtime of runtimes) {
|
|
202
|
+
const config = RUNTIMES[runtime];
|
|
203
|
+
const targetDir = scope === 'global' ? config.globalDir : config.localDir;
|
|
204
|
+
if (!targetDir) {
|
|
205
|
+
console.log(chalk.yellow(` ${config.label} does not support ${scope} install, skipping.`));
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const resolvedTarget = scope === 'local' ? path.resolve(process.cwd(), targetDir) : targetDir;
|
|
209
|
+
config.install(sourceDir, resolvedTarget);
|
|
210
|
+
console.log(chalk.green(` ✓ ${config.label}`) + chalk.dim(` → ${resolvedTarget}`));
|
|
211
|
+
}
|
|
212
|
+
console.log(chalk.bold('\nPlugin installed successfully.'));
|
|
213
|
+
});
|
|
214
|
+
pluginCmd
|
|
215
|
+
.command('uninstall')
|
|
216
|
+
.description('Uninstall the Invinite plugin from AI coding tools')
|
|
217
|
+
.option('--claude', 'Uninstall from Claude Code')
|
|
218
|
+
.option('--opencode', 'Uninstall from OpenCode')
|
|
219
|
+
.option('--codex', 'Uninstall from Codex')
|
|
220
|
+
.option('--copilot', 'Uninstall from Copilot')
|
|
221
|
+
.option('--all', 'Uninstall from all supported runtimes')
|
|
222
|
+
.option('-g, --global', 'Uninstall globally (user home)')
|
|
223
|
+
.option('-l, --local', 'Uninstall locally (current directory)')
|
|
224
|
+
.action(async (opts) => {
|
|
225
|
+
let runtimes = resolveRuntimes(opts);
|
|
226
|
+
let scope = resolveScope(opts);
|
|
227
|
+
if (!runtimes || !scope) {
|
|
228
|
+
const answers = await promptInteractive(runtimes, scope);
|
|
229
|
+
runtimes = answers.runtimes;
|
|
230
|
+
scope = answers.scope;
|
|
231
|
+
}
|
|
232
|
+
for (const runtime of runtimes) {
|
|
233
|
+
const config = RUNTIMES[runtime];
|
|
234
|
+
const targetDir = scope === 'global' ? config.globalDir : config.localDir;
|
|
235
|
+
if (!targetDir) {
|
|
236
|
+
console.log(chalk.yellow(` ${config.label} does not support ${scope} uninstall, skipping.`));
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const resolvedTarget = scope === 'local' ? path.resolve(process.cwd(), targetDir) : targetDir;
|
|
240
|
+
const paths = INSTALLED_PATHS[runtime];
|
|
241
|
+
let removed = 0;
|
|
242
|
+
for (const rel of paths) {
|
|
243
|
+
if (removeFile(path.join(resolvedTarget, rel)))
|
|
244
|
+
removed++;
|
|
245
|
+
}
|
|
246
|
+
if (removed > 0) {
|
|
247
|
+
console.log(chalk.green(` ✓ ${config.label}`) + chalk.dim(` — removed ${removed} file(s) from ${resolvedTarget}`));
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
console.log(chalk.dim(` ${config.label} — nothing to remove`));
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
console.log(chalk.bold('\nPlugin uninstalled.'));
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
// --- Helpers ---
|
|
257
|
+
function resolveRuntimes(opts) {
|
|
258
|
+
if (opts.all)
|
|
259
|
+
return Object.keys(RUNTIMES);
|
|
260
|
+
const selected = Object.keys(RUNTIMES).filter((r) => opts[r]);
|
|
261
|
+
return selected.length > 0 ? selected : null;
|
|
262
|
+
}
|
|
263
|
+
function resolveScope(opts) {
|
|
264
|
+
if (opts.global)
|
|
265
|
+
return 'global';
|
|
266
|
+
if (opts.local)
|
|
267
|
+
return 'local';
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
async function promptInteractive(runtimes, scope) {
|
|
271
|
+
const { default: Enquirer } = await import('enquirer');
|
|
272
|
+
const enquirer = new Enquirer();
|
|
273
|
+
if (!runtimes) {
|
|
274
|
+
const response = await enquirer.prompt({
|
|
275
|
+
type: 'multiselect',
|
|
276
|
+
name: 'runtimes',
|
|
277
|
+
message: 'Which runtimes do you want to install for?',
|
|
278
|
+
choices: Object.entries(RUNTIMES).map(([key, cfg]) => ({
|
|
279
|
+
name: key,
|
|
280
|
+
message: cfg.label,
|
|
281
|
+
})),
|
|
282
|
+
});
|
|
283
|
+
runtimes = response.runtimes;
|
|
284
|
+
if (runtimes.length === 0) {
|
|
285
|
+
console.log(chalk.yellow('No runtimes selected.'));
|
|
286
|
+
process.exit(0);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (!scope) {
|
|
290
|
+
const response = await enquirer.prompt({
|
|
291
|
+
type: 'select',
|
|
292
|
+
name: 'scope',
|
|
293
|
+
message: 'Install globally or locally?',
|
|
294
|
+
choices: [
|
|
295
|
+
{ name: 'global', message: 'Global (user home)' },
|
|
296
|
+
{ name: 'local', message: 'Local (current directory)' },
|
|
297
|
+
],
|
|
298
|
+
});
|
|
299
|
+
scope = response.scope;
|
|
300
|
+
}
|
|
301
|
+
return { runtimes, scope };
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { apiGet } from '../client/api-client.js';
|
|
2
|
+
import { fetchAllPages } from '../client/pagination.js';
|
|
3
|
+
import { withErrorHandling } from '../shared/errors.js';
|
|
4
|
+
import { output } from '../shared/output.js';
|
|
5
|
+
import { formatTable, printPaginationHint } from '../formatters/table-formatter.js';
|
|
6
|
+
import { setJsonMode } from '../shared/spinner.js';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
export function registerSegmentsCommands(program) {
|
|
9
|
+
const segments = program
|
|
10
|
+
.command('segments')
|
|
11
|
+
.description('Segmented financials');
|
|
12
|
+
segments
|
|
13
|
+
.command('list')
|
|
14
|
+
.description('Fetch segmented financial data')
|
|
15
|
+
.requiredOption('-i, --identifier <ticker>', 'Ticker or CIK')
|
|
16
|
+
.requiredOption('-p, --period <type>', 'Fiscal period type')
|
|
17
|
+
.option('--segment-id <id>', 'Filter by segment ID')
|
|
18
|
+
.option('--detailed', 'Include detailed metadata')
|
|
19
|
+
.option('-s, --sort <dir>', 'Sort direction', 'desc')
|
|
20
|
+
.option('-l, --limit <n>', 'Max results', '10')
|
|
21
|
+
.option('--offset <n>', 'Offset', '0')
|
|
22
|
+
.action(withErrorHandling(async (cmdOpts) => {
|
|
23
|
+
const opts = program.opts();
|
|
24
|
+
if (opts.json)
|
|
25
|
+
setJsonMode(true);
|
|
26
|
+
const path = cmdOpts.detailed ? '/v1/segmented-financials/detailed' : '/v1/segmented-financials';
|
|
27
|
+
let data = await apiGet({
|
|
28
|
+
path,
|
|
29
|
+
params: {
|
|
30
|
+
identifier: cmdOpts.identifier,
|
|
31
|
+
fiscal_period_type: cmdOpts.period,
|
|
32
|
+
segment_id: cmdOpts.segmentId,
|
|
33
|
+
sort: cmdOpts.sort,
|
|
34
|
+
limit: cmdOpts.limit,
|
|
35
|
+
offset: cmdOpts.offset,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (opts.all) {
|
|
39
|
+
data = await fetchAllPages(data, d => d.companies?.[0]?.next_url, (acc, page) => ({
|
|
40
|
+
companies: acc.companies.map((c, i) => ({
|
|
41
|
+
...c,
|
|
42
|
+
periods: [...c.periods, ...(page.companies[i]?.periods || [])],
|
|
43
|
+
next_url: page.companies[i]?.next_url,
|
|
44
|
+
})),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
output(data, opts, () => {
|
|
48
|
+
for (const c of data.companies) {
|
|
49
|
+
console.log(chalk.bold(`\n${c.ticker} (${c.cik})`));
|
|
50
|
+
for (const period of c.periods) {
|
|
51
|
+
console.log(chalk.cyan(`\n ${period.fiscal_period_type} FY${period.fiscal_year} Q${period.fiscal_quarter} (CY${period.calendar_year} Q${period.calendar_quarter}, ending ${period.period_end})`));
|
|
52
|
+
for (const [metricId, segments] of Object.entries(period.facts)) {
|
|
53
|
+
console.log(chalk.dim(` ${metricId}:`));
|
|
54
|
+
formatTable(segments, cmdOpts.detailed
|
|
55
|
+
? ['segment_id', 'value', 'axis', 'member', 'metric', 'accession_number']
|
|
56
|
+
: ['segment_id', 'value', 'axis', 'member']);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
printPaginationHint(c.next_url);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=segments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segments.js","sourceRoot":"","sources":["../../../src/commands/segments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { connectWebSocket } from '../client/websocket-client.js';
|
|
2
|
+
import { withErrorHandling } from '../shared/errors.js';
|
|
3
|
+
export function registerWsCommands(program) {
|
|
4
|
+
const ws = program
|
|
5
|
+
.command('ws')
|
|
6
|
+
.description('WebSocket streaming');
|
|
7
|
+
ws
|
|
8
|
+
.command('listen')
|
|
9
|
+
.description('Listen to real-time SEC filing stream')
|
|
10
|
+
.action(withErrorHandling(async () => {
|
|
11
|
+
await connectWebSocket();
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/commands/ws.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO;SACf,OAAO,CAAC,IAAI,CAAC;SACb,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAEtC,EAAE;SACC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,iBAAiB,CAAC,KAAK,IAAI,EAAE;QACnC,MAAM,gBAAgB,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { getStoredApiKey, setStoredApiKey } from './config-manager.js';
|
|
4
|
+
async function tryKeytar() {
|
|
5
|
+
try {
|
|
6
|
+
// Dynamic import - keytar is optional
|
|
7
|
+
const mod = await Function('return import("keytar")')();
|
|
8
|
+
return mod;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function readDotEnvKey() {
|
|
15
|
+
try {
|
|
16
|
+
const content = readFileSync(join(process.cwd(), '.env'), 'utf-8');
|
|
17
|
+
for (const line of content.split('\n')) {
|
|
18
|
+
const trimmed = line.trim();
|
|
19
|
+
if (trimmed.startsWith('#') || !trimmed)
|
|
20
|
+
continue;
|
|
21
|
+
const match = trimmed.match(/^INVINITE_DATA_API_KEY\s*=\s*(.+)$/);
|
|
22
|
+
if (match) {
|
|
23
|
+
let value = match[1].trim();
|
|
24
|
+
// Strip surrounding quotes
|
|
25
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
26
|
+
value = value.slice(1, -1);
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// .env file not found or unreadable — that's fine
|
|
34
|
+
}
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const SERVICE = 'invinite-data-cli';
|
|
38
|
+
const ACCOUNT = 'api-key';
|
|
39
|
+
export async function getApiKey() {
|
|
40
|
+
// 1. Environment variable (highest priority)
|
|
41
|
+
const envKey = process.env.INVINITE_DATA_API_KEY;
|
|
42
|
+
if (envKey)
|
|
43
|
+
return envKey;
|
|
44
|
+
// 2. .env file in current working directory
|
|
45
|
+
const dotEnvKey = readDotEnvKey();
|
|
46
|
+
if (dotEnvKey)
|
|
47
|
+
return dotEnvKey;
|
|
48
|
+
// 3. OS keychain via keytar
|
|
49
|
+
const keytar = await tryKeytar();
|
|
50
|
+
if (keytar) {
|
|
51
|
+
const keychainKey = await keytar.getPassword(SERVICE, ACCOUNT);
|
|
52
|
+
if (keychainKey)
|
|
53
|
+
return keychainKey;
|
|
54
|
+
}
|
|
55
|
+
// 4. Conf fallback
|
|
56
|
+
const storedKey = getStoredApiKey();
|
|
57
|
+
if (storedKey)
|
|
58
|
+
return storedKey;
|
|
59
|
+
throw new Error('No API key configured. Set INVINITE_DATA_API_KEY in your environment or .env file, or run: invd config set-key');
|
|
60
|
+
}
|
|
61
|
+
export async function setApiKey(key) {
|
|
62
|
+
const keytar = await tryKeytar();
|
|
63
|
+
if (keytar) {
|
|
64
|
+
await keytar.setPassword(SERVICE, ACCOUNT, key);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
setStoredApiKey(key);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/config/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function getBaseUrl(): string;
|
|
2
|
+
export declare function setBaseUrl(url: string): void;
|
|
3
|
+
export declare function getStoredApiKey(): string | undefined;
|
|
4
|
+
export declare function setStoredApiKey(key: string): void;
|
|
5
|
+
export declare function resetConfig(): void;
|
|
6
|
+
export declare function showConfig(): Record<string, unknown>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
const config = new Conf({
|
|
3
|
+
projectName: 'invinite-data-cli',
|
|
4
|
+
schema: {
|
|
5
|
+
baseUrl: {
|
|
6
|
+
type: 'string',
|
|
7
|
+
default: 'https://data.invinite.com',
|
|
8
|
+
},
|
|
9
|
+
apiKey: {
|
|
10
|
+
type: 'string',
|
|
11
|
+
default: '',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
export function getBaseUrl() {
|
|
16
|
+
return config.get('baseUrl');
|
|
17
|
+
}
|
|
18
|
+
export function setBaseUrl(url) {
|
|
19
|
+
config.set('baseUrl', url);
|
|
20
|
+
}
|
|
21
|
+
export function getStoredApiKey() {
|
|
22
|
+
const key = config.get('apiKey');
|
|
23
|
+
return key || undefined;
|
|
24
|
+
}
|
|
25
|
+
export function setStoredApiKey(key) {
|
|
26
|
+
config.set('apiKey', key);
|
|
27
|
+
}
|
|
28
|
+
export function resetConfig() {
|
|
29
|
+
config.clear();
|
|
30
|
+
}
|
|
31
|
+
export function showConfig() {
|
|
32
|
+
return {
|
|
33
|
+
baseUrl: getBaseUrl(),
|
|
34
|
+
apiKeySet: !!getStoredApiKey(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAe;IACpC,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE;QACN,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,2BAA2B;SACrC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;SACZ;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,GAAG,IAAI,SAAS,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO;QACL,OAAO,EAAE,UAAU,EAAE;QACrB,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function formatJson(data: unknown): void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-formatter.js","sourceRoot":"","sources":["../../../src/formatters/json-formatter.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function formatTable(rows, columns) {
|
|
3
|
+
if (rows.length === 0) {
|
|
4
|
+
console.log(chalk.yellow('No results.'));
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
const cols = columns || Object.keys(rows[0]);
|
|
8
|
+
const widths = {};
|
|
9
|
+
for (const col of cols) {
|
|
10
|
+
widths[col] = col.length;
|
|
11
|
+
for (const row of rows) {
|
|
12
|
+
const val = formatValue(row[col], col);
|
|
13
|
+
widths[col] = Math.max(widths[col], val.length);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// Header
|
|
17
|
+
const header = cols.map(c => chalk.bold(c.padEnd(widths[c]))).join(' ');
|
|
18
|
+
console.log(header);
|
|
19
|
+
console.log(cols.map(c => '─'.repeat(widths[c])).join(' '));
|
|
20
|
+
// Rows
|
|
21
|
+
for (const row of rows) {
|
|
22
|
+
const line = cols.map(c => formatValue(row[c], c).padEnd(widths[c])).join(' ');
|
|
23
|
+
console.log(line);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function formatValue(val, columnName) {
|
|
27
|
+
if (val === null || val === undefined)
|
|
28
|
+
return '—';
|
|
29
|
+
if (typeof val === 'number')
|
|
30
|
+
return formatNumber(val, columnName);
|
|
31
|
+
if (typeof val === 'boolean')
|
|
32
|
+
return val ? 'Yes' : 'No';
|
|
33
|
+
if (Array.isArray(val))
|
|
34
|
+
return val.join(', ');
|
|
35
|
+
return String(val);
|
|
36
|
+
}
|
|
37
|
+
const YEAR_LIKE_COLUMNS = new Set(['fiscal_year', 'calendar_year']);
|
|
38
|
+
function formatNumber(n, columnName) {
|
|
39
|
+
// Don't add thousand separators to year-like values
|
|
40
|
+
if (columnName && YEAR_LIKE_COLUMNS.has(columnName)) {
|
|
41
|
+
return String(n);
|
|
42
|
+
}
|
|
43
|
+
if (Number.isInteger(n) && Math.abs(n) >= 1000) {
|
|
44
|
+
return n.toLocaleString('en-US');
|
|
45
|
+
}
|
|
46
|
+
if (!Number.isInteger(n)) {
|
|
47
|
+
return n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 4 });
|
|
48
|
+
}
|
|
49
|
+
return String(n);
|
|
50
|
+
}
|
|
51
|
+
export function formatKeyValue(data) {
|
|
52
|
+
const maxKeyLen = Math.max(...Object.keys(data).map(k => k.length));
|
|
53
|
+
for (const [key, value] of Object.entries(data)) {
|
|
54
|
+
const label = chalk.bold(key.padEnd(maxKeyLen));
|
|
55
|
+
console.log(` ${label} ${formatValue(value)}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function printPaginationHint(nextUrl) {
|
|
59
|
+
if (nextUrl) {
|
|
60
|
+
console.log(chalk.dim('\nMore results available. Use --all to fetch all pages, or --offset/--limit to paginate.'));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=table-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-formatter.js","sourceRoot":"","sources":["../../../src/formatters/table-formatter.ts"],"names":[],"mappings":"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"}
|