@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.
Files changed (93) hide show
  1. package/README.md +693 -0
  2. package/claude-plugin/.claude-plugin/plugin.json +11 -0
  3. package/claude-plugin/agents/invinite-data.md +46 -0
  4. package/claude-plugin/commands/financial-research.md +69 -0
  5. package/claude-plugin/skills/invinite-data-cli/SKILL.md +251 -0
  6. package/dist/bin/invd.d.ts +2 -0
  7. package/dist/bin/invd.js +5 -0
  8. package/dist/bin/invd.js.map +1 -0
  9. package/dist/src/cli.d.ts +2 -0
  10. package/dist/src/cli.js +47 -0
  11. package/dist/src/cli.js.map +1 -0
  12. package/dist/src/client/api-client.d.ts +6 -0
  13. package/dist/src/client/api-client.js +40 -0
  14. package/dist/src/client/api-client.js.map +1 -0
  15. package/dist/src/client/pagination.d.ts +3 -0
  16. package/dist/src/client/pagination.js +27 -0
  17. package/dist/src/client/pagination.js.map +1 -0
  18. package/dist/src/client/websocket-client.d.ts +1 -0
  19. package/dist/src/client/websocket-client.js +57 -0
  20. package/dist/src/client/websocket-client.js.map +1 -0
  21. package/dist/src/commands/company.d.ts +2 -0
  22. package/dist/src/commands/company.js +220 -0
  23. package/dist/src/commands/company.js.map +1 -0
  24. package/dist/src/commands/config.d.ts +2 -0
  25. package/dist/src/commands/config.js +56 -0
  26. package/dist/src/commands/config.js.map +1 -0
  27. package/dist/src/commands/filings.d.ts +2 -0
  28. package/dist/src/commands/filings.js +139 -0
  29. package/dist/src/commands/filings.js.map +1 -0
  30. package/dist/src/commands/financials.d.ts +2 -0
  31. package/dist/src/commands/financials.js +162 -0
  32. package/dist/src/commands/financials.js.map +1 -0
  33. package/dist/src/commands/health.d.ts +2 -0
  34. package/dist/src/commands/health.js +18 -0
  35. package/dist/src/commands/health.js.map +1 -0
  36. package/dist/src/commands/insider-trades.d.ts +2 -0
  37. package/dist/src/commands/insider-trades.js +56 -0
  38. package/dist/src/commands/insider-trades.js.map +1 -0
  39. package/dist/src/commands/ipos.d.ts +2 -0
  40. package/dist/src/commands/ipos.js +42 -0
  41. package/dist/src/commands/ipos.js.map +1 -0
  42. package/dist/src/commands/market.d.ts +2 -0
  43. package/dist/src/commands/market.js +34 -0
  44. package/dist/src/commands/market.js.map +1 -0
  45. package/dist/src/commands/metadata.d.ts +2 -0
  46. package/dist/src/commands/metadata.js +39 -0
  47. package/dist/src/commands/metadata.js.map +1 -0
  48. package/dist/src/commands/metrics.d.ts +2 -0
  49. package/dist/src/commands/metrics.js +158 -0
  50. package/dist/src/commands/metrics.js.map +1 -0
  51. package/dist/src/commands/ownership.d.ts +2 -0
  52. package/dist/src/commands/ownership.js +152 -0
  53. package/dist/src/commands/ownership.js.map +1 -0
  54. package/dist/src/commands/plugin.d.ts +2 -0
  55. package/dist/src/commands/plugin.js +303 -0
  56. package/dist/src/commands/plugin.js.map +1 -0
  57. package/dist/src/commands/segments.d.ts +2 -0
  58. package/dist/src/commands/segments.js +64 -0
  59. package/dist/src/commands/segments.js.map +1 -0
  60. package/dist/src/commands/ws.d.ts +2 -0
  61. package/dist/src/commands/ws.js +14 -0
  62. package/dist/src/commands/ws.js.map +1 -0
  63. package/dist/src/config/auth.d.ts +2 -0
  64. package/dist/src/config/auth.js +70 -0
  65. package/dist/src/config/auth.js.map +1 -0
  66. package/dist/src/config/config-manager.d.ts +6 -0
  67. package/dist/src/config/config-manager.js +37 -0
  68. package/dist/src/config/config-manager.js.map +1 -0
  69. package/dist/src/formatters/json-formatter.d.ts +1 -0
  70. package/dist/src/formatters/json-formatter.js +4 -0
  71. package/dist/src/formatters/json-formatter.js.map +1 -0
  72. package/dist/src/formatters/table-formatter.d.ts +3 -0
  73. package/dist/src/formatters/table-formatter.js +63 -0
  74. package/dist/src/formatters/table-formatter.js.map +1 -0
  75. package/dist/src/formatters/tree-formatter.d.ts +11 -0
  76. package/dist/src/formatters/tree-formatter.js +30 -0
  77. package/dist/src/formatters/tree-formatter.js.map +1 -0
  78. package/dist/src/shared/errors.d.ts +6 -0
  79. package/dist/src/shared/errors.js +32 -0
  80. package/dist/src/shared/errors.js.map +1 -0
  81. package/dist/src/shared/options.d.ts +13 -0
  82. package/dist/src/shared/options.js +14 -0
  83. package/dist/src/shared/options.js.map +1 -0
  84. package/dist/src/shared/output.d.ts +3 -0
  85. package/dist/src/shared/output.js +13 -0
  86. package/dist/src/shared/output.js.map +1 -0
  87. package/dist/src/shared/spinner.d.ts +3 -0
  88. package/dist/src/shared/spinner.js +12 -0
  89. package/dist/src/shared/spinner.js.map +1 -0
  90. package/dist/src/shared/types.d.ts +11 -0
  91. package/dist/src/shared/types.js +2 -0
  92. package/dist/src/shared/types.js.map +1 -0
  93. 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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerSegmentsCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerWsCommands(program: Command): void;
@@ -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,2 @@
1
+ export declare function getApiKey(): Promise<string>;
2
+ export declare function setApiKey(key: string): Promise<void>;
@@ -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,4 @@
1
+ export function formatJson(data) {
2
+ console.log(JSON.stringify(data, null, 2));
3
+ }
4
+ //# sourceMappingURL=json-formatter.js.map
@@ -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,3 @@
1
+ export declare function formatTable(rows: Record<string, unknown>[], columns?: string[]): void;
2
+ export declare function formatKeyValue(data: Record<string, unknown>): void;
3
+ export declare function printPaginationHint(nextUrl?: string): void;
@@ -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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"}