@invinite-org/invinite-data-cli 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +88 -802
  2. package/claude-plugin/agents/invinite-data.md +1 -1
  3. package/claude-plugin/commands/analyze-earnings-call.md +3 -3
  4. package/claude-plugin/skills/invinite-data-cli/SKILL.md +444 -187
  5. package/dist/src/cli.d.ts +6 -0
  6. package/dist/src/cli.js +21 -31
  7. package/dist/src/cli.js.map +1 -1
  8. package/dist/src/client/api-client.d.ts +2 -4
  9. package/dist/src/client/api-client.js +3 -9
  10. package/dist/src/client/api-client.js.map +1 -1
  11. package/dist/src/client/pagination.d.ts +10 -0
  12. package/dist/src/client/pagination.js +40 -0
  13. package/dist/src/client/pagination.js.map +1 -1
  14. package/dist/src/commands/earnings.d.ts +0 -3
  15. package/dist/src/commands/earnings.js +46 -524
  16. package/dist/src/commands/earnings.js.map +1 -1
  17. package/dist/src/generated/cli-manifest.json +4983 -0
  18. package/dist/src/hand-written-commands.d.ts +43 -0
  19. package/dist/src/hand-written-commands.js +21 -0
  20. package/dist/src/hand-written-commands.js.map +1 -0
  21. package/dist/src/shared/errors.d.ts +5 -0
  22. package/dist/src/shared/errors.js +12 -0
  23. package/dist/src/shared/errors.js.map +1 -1
  24. package/dist/src/shared/options.d.ts +0 -13
  25. package/dist/src/shared/options.js +0 -13
  26. package/dist/src/shared/options.js.map +1 -1
  27. package/dist/src/spec-commands.d.ts +10 -0
  28. package/dist/src/spec-commands.js +207 -0
  29. package/dist/src/spec-commands.js.map +1 -0
  30. package/dist/src/spec-flags.d.ts +6 -0
  31. package/dist/src/spec-flags.js +9 -0
  32. package/dist/src/spec-flags.js.map +1 -0
  33. package/dist/src/spec-manifest.d.ts +382 -0
  34. package/dist/src/spec-manifest.js +65 -0
  35. package/dist/src/spec-manifest.js.map +1 -0
  36. package/package.json +7 -3
  37. package/dist/src/commands/company.d.ts +0 -2
  38. package/dist/src/commands/company.js +0 -220
  39. package/dist/src/commands/company.js.map +0 -1
  40. package/dist/src/commands/earnings-selector.d.ts +0 -15
  41. package/dist/src/commands/earnings-selector.js +0 -29
  42. package/dist/src/commands/earnings-selector.js.map +0 -1
  43. package/dist/src/commands/filings.d.ts +0 -2
  44. package/dist/src/commands/filings.js +0 -139
  45. package/dist/src/commands/filings.js.map +0 -1
  46. package/dist/src/commands/financials.d.ts +0 -2
  47. package/dist/src/commands/financials.js +0 -162
  48. package/dist/src/commands/financials.js.map +0 -1
  49. package/dist/src/commands/health.d.ts +0 -2
  50. package/dist/src/commands/health.js +0 -18
  51. package/dist/src/commands/health.js.map +0 -1
  52. package/dist/src/commands/insider-trades.d.ts +0 -2
  53. package/dist/src/commands/insider-trades.js +0 -56
  54. package/dist/src/commands/insider-trades.js.map +0 -1
  55. package/dist/src/commands/ipos.d.ts +0 -2
  56. package/dist/src/commands/ipos.js +0 -42
  57. package/dist/src/commands/ipos.js.map +0 -1
  58. package/dist/src/commands/market.d.ts +0 -2
  59. package/dist/src/commands/market.js +0 -34
  60. package/dist/src/commands/market.js.map +0 -1
  61. package/dist/src/commands/metadata.d.ts +0 -2
  62. package/dist/src/commands/metadata.js +0 -39
  63. package/dist/src/commands/metadata.js.map +0 -1
  64. package/dist/src/commands/metrics.d.ts +0 -2
  65. package/dist/src/commands/metrics.js +0 -158
  66. package/dist/src/commands/metrics.js.map +0 -1
  67. package/dist/src/commands/ownership.d.ts +0 -2
  68. package/dist/src/commands/ownership.js +0 -152
  69. package/dist/src/commands/ownership.js.map +0 -1
  70. package/dist/src/commands/segments.d.ts +0 -2
  71. package/dist/src/commands/segments.js +0 -64
  72. package/dist/src/commands/segments.js.map +0 -1
  73. package/dist/src/commands/usage.d.ts +0 -38
  74. package/dist/src/commands/usage.js +0 -82
  75. package/dist/src/commands/usage.js.map +0 -1
  76. package/dist/src/commands/webhooks.d.ts +0 -16
  77. package/dist/src/commands/webhooks.js +0 -186
  78. package/dist/src/commands/webhooks.js.map +0 -1
  79. package/dist/src/formatters/sparkline.d.ts +0 -2
  80. package/dist/src/formatters/sparkline.js +0 -11
  81. package/dist/src/formatters/sparkline.js.map +0 -1
  82. package/dist/src/formatters/tree-formatter.d.ts +0 -11
  83. package/dist/src/formatters/tree-formatter.js +0 -30
  84. package/dist/src/formatters/tree-formatter.js.map +0 -1
@@ -1,64 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"segments.js","sourceRoot":"","sources":["../../../src/commands/segments.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- import { Command } from 'commander';
2
- /** `GET /v1/account/usage` (invinite-data-api `src/routes/account/usage/types/routeSchemas.ts`). */
3
- export interface AccountUsage {
4
- window_days: number;
5
- period: {
6
- tier: string;
7
- included_credits: number;
8
- used_credits: number;
9
- resets_at: string | null;
10
- prepaid_balance_usd: number;
11
- };
12
- daily: {
13
- date: string;
14
- requests: number;
15
- credits: number;
16
- errors: Record<ErrorClass, number>;
17
- }[];
18
- by_family: {
19
- family: string;
20
- label: string;
21
- requests: number;
22
- credits: number;
23
- }[];
24
- by_key: {
25
- caller: 'key' | 'oauth' | 'unknown';
26
- label: string;
27
- key_hint: string | null;
28
- requests: number;
29
- credits: number;
30
- }[];
31
- truncated: boolean;
32
- }
33
- declare const ERROR_CLASSES: readonly ["402", "403", "429", "4xx", "5xx"];
34
- type ErrorClass = typeof ERROR_CLASSES[number];
35
- /** The dashboard's answer as label / value rows; pure, so the command and its tests share it. */
36
- export declare function usageRows(usage: AccountUsage): Record<string, string>;
37
- export declare function registerUsageCommands(program: Command): void;
38
- export {};
@@ -1,82 +0,0 @@
1
- import { Option } from 'commander';
2
- import chalk from 'chalk';
3
- import { apiGetRaw } from '../client/api-client.js';
4
- import { DASHBOARD_URL } from '../config/config-manager.js';
5
- import { formatKeyValue } from '../formatters/table-formatter.js';
6
- import { sparkline } from '../formatters/sparkline.js';
7
- import { ApiError, withErrorHandling } from '../shared/errors.js';
8
- import { createSpinner } from '../shared/spinner.js';
9
- const ERROR_CLASSES = ['402', '403', '429', '4xx', '5xx'];
10
- const BREAKDOWN_LIMIT = 5;
11
- const count = new Intl.NumberFormat('en-US');
12
- const usd = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });
13
- const utcDateTime = new Intl.DateTimeFormat('en-GB', {
14
- day: 'numeric', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit', timeZone: 'UTC',
15
- });
16
- function breakdown(items) {
17
- if (items.length === 0)
18
- return 'none';
19
- const shown = items.slice(0, BREAKDOWN_LIMIT).map(item => `${item.name} ${count.format(item.credits)}`);
20
- const rest = items.length - BREAKDOWN_LIMIT;
21
- return shown.join(' · ') + (rest > 0 ? ` · +${rest} more` : '');
22
- }
23
- /** The dashboard's answer as label / value rows; pure, so the command and its tests share it. */
24
- export function usageRows(usage) {
25
- const { period, daily } = usage;
26
- const tier = period.tier.charAt(0).toUpperCase() + period.tier.slice(1);
27
- const resets = period.resets_at ? `resets ${utcDateTime.format(new Date(period.resets_at))} UTC` : 'no reset date';
28
- const share = period.included_credits > 0
29
- ? ` (${Math.round((period.used_credits / period.included_credits) * 100)} %)`
30
- : '';
31
- const errors = ERROR_CLASSES
32
- .map(status => [status, daily.reduce((sum, day) => sum + (day.errors[status] ?? 0), 0)])
33
- .filter(([, total]) => total > 0)
34
- .map(([status, total]) => `${status} ×${count.format(total)}`);
35
- const range = daily.length > 0 ? `, ${daily[0].date} → ${daily[daily.length - 1].date} UTC` : '';
36
- return {
37
- 'Plan': `${tier} · ${count.format(period.included_credits)} credits included · ${resets}`,
38
- 'Used': `${count.format(period.used_credits)} credits${share} · prepaid balance ${usd.format(period.prepaid_balance_usd)}`,
39
- 'Daily': `${sparkline(daily.map(day => day.credits))} (credits per day${range})`,
40
- 'By family': breakdown(usage.by_family.map(item => ({ name: item.label, credits: item.credits }))),
41
- 'By key': breakdown(usage.by_key.map(item => ({
42
- name: item.key_hint ? `${item.label} (${item.key_hint})` : item.label,
43
- credits: item.credits,
44
- }))),
45
- 'Errors': errors.length > 0 ? errors.join(' · ') : 'none',
46
- 'Details': `${DASHBOARD_URL}/usage`,
47
- };
48
- }
49
- export function registerUsageCommands(program) {
50
- program
51
- .command('usage')
52
- .description('Plan allowance, prepaid balance and usage by day, endpoint family and key (costs no credits)')
53
- .addOption(new Option('--days <n>', 'Window in UTC days').choices(['7', '30', '90']).default('30'))
54
- .action(withErrorHandling(async (cmdOpts) => {
55
- const parentOpts = program.opts();
56
- const spinner = createSpinner('Fetching usage...');
57
- let body;
58
- try {
59
- const response = await apiGetRaw({ path: '/v1/account/usage', params: { days: cmdOpts.days }, accept: 'application/json' });
60
- body = await response.text();
61
- spinner.succeed('Done');
62
- }
63
- catch (error) {
64
- spinner.fail('Failed');
65
- if (error instanceof ApiError && error.statusCode === 503) {
66
- throw new Error('Usage is temporarily unavailable — try again in a minute.');
67
- }
68
- throw error;
69
- }
70
- if (parentOpts.json) {
71
- // The route's JSON as received, byte for byte.
72
- process.stdout.write(body.endsWith('\n') ? body : `${body}\n`);
73
- return;
74
- }
75
- const usage = JSON.parse(body);
76
- formatKeyValue(usageRows(usage));
77
- if (usage.truncated) {
78
- console.log(chalk.dim('Breakdowns are capped at their item limit; the dashboard lists every key and family.'));
79
- }
80
- }, error => (error.statusCode === 401 ? 'Run: invd login' : undefined)));
81
- }
82
- //# sourceMappingURL=usage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/commands/usage.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { Command } from 'commander';
2
- /** IDA's `WEBHOOK_EVENT_NAMES` (docs/webhooks.md); the API's 400 stays the final word. */
3
- export declare const WEBHOOK_EVENTS: readonly ["earnings_call.scheduled", "earnings_call.rescheduled", "earnings_call.started", "earnings_call.ended", "earnings_call.transcript_provisional", "earnings_call.transcript_ready", "earnings_call.transcript_corrected", "earnings_call.assets_ready", "earnings_call.keyword_hit", "earnings_call.guidance_flash", "ping"];
4
- /** `--active` of `webhooks update`: only the two literals. */
5
- export declare function parseActive(value: string): boolean;
6
- export interface UpdateOptions {
7
- keywords?: string;
8
- ciks?: string;
9
- events?: string;
10
- active?: string;
11
- }
12
- /** The PATCH body of `webhooks update`: only the given fields; at least one is required. */
13
- export declare function buildUpdateBody(cmdOpts: UpdateOptions): Record<string, unknown>;
14
- /** `--events`: each name must be one of `WEBHOOK_EVENTS`. */
15
- export declare function parseEvents(value: string): string[];
16
- export declare function registerWebhooksCommands(program: Command): void;
@@ -1,186 +0,0 @@
1
- import chalk from 'chalk';
2
- import { apiGet, apiRequest } from '../client/api-client.js';
3
- import { withErrorHandling } from '../shared/errors.js';
4
- import { output } from '../shared/output.js';
5
- import { splitList } from '../shared/options.js';
6
- import { setJsonMode } from '../shared/spinner.js';
7
- import { formatKeyValue, formatTable } from '../formatters/table-formatter.js';
8
- import { planHint } from './earnings.js';
9
- const BASE = '/v1/earnings-calls/webhooks';
10
- /** IDA's `WEBHOOK_EVENT_NAMES` (docs/webhooks.md); the API's 400 stays the final word. */
11
- export const WEBHOOK_EVENTS = [
12
- 'earnings_call.scheduled',
13
- 'earnings_call.rescheduled',
14
- 'earnings_call.started',
15
- 'earnings_call.ended',
16
- 'earnings_call.transcript_provisional',
17
- 'earnings_call.transcript_ready',
18
- 'earnings_call.transcript_corrected',
19
- 'earnings_call.assets_ready',
20
- 'earnings_call.keyword_hit',
21
- 'earnings_call.guidance_flash',
22
- 'ping',
23
- ];
24
- /** `--active` of `webhooks update`: only the two literals. */
25
- export function parseActive(value) {
26
- if (value === 'true')
27
- return true;
28
- if (value === 'false')
29
- return false;
30
- throw new Error('--active takes true or false');
31
- }
32
- /** The PATCH body of `webhooks update`: only the given fields; at least one is required. */
33
- export function buildUpdateBody(cmdOpts) {
34
- const body = {};
35
- if (cmdOpts.keywords !== undefined)
36
- body.keywords = splitList(cmdOpts.keywords);
37
- if (cmdOpts.ciks !== undefined)
38
- body.ciks = splitList(cmdOpts.ciks);
39
- if (cmdOpts.events !== undefined)
40
- body.events = parseEvents(cmdOpts.events);
41
- if (cmdOpts.active !== undefined)
42
- body.active = parseActive(cmdOpts.active);
43
- if (Object.keys(body).length === 0) {
44
- throw new Error('webhooks update needs at least one of --keywords, --ciks, --events, --active');
45
- }
46
- return body;
47
- }
48
- const SUBSCRIPTION_COLUMNS = ['id', 'url', 'events', 'ciks', 'active', 'consecutive_failures', 'secret_hint', 'created_at'];
49
- const DELIVERY_COLUMNS = ['delivery_id', 'event', 'attempt', 'status', 'response_status', 'duration_ms', 'at', 'next_attempt_at'];
50
- /** `--events`: each name must be one of `WEBHOOK_EVENTS`. */
51
- export function parseEvents(value) {
52
- const events = splitList(value);
53
- const unknown = events.filter(event => !WEBHOOK_EVENTS.includes(event));
54
- if (events.length === 0 || unknown.length > 0) {
55
- const named = unknown.length ? `Unknown event(s): ${unknown.join(', ')}. ` : '';
56
- throw new Error(`${named}--events takes a comma-separated list of: ${WEBHOOK_EVENTS.join(', ')}`);
57
- }
58
- return events;
59
- }
60
- function subscriptionRow(sub) {
61
- return { ...sub, ciks: sub.filters?.ciks?.length ? sub.filters.ciks : 'all' };
62
- }
63
- const idPath = (id, suffix = '') => `${BASE}/${encodeURIComponent(id)}${suffix}`;
64
- export function registerWebhooksCommands(program) {
65
- const webhooks = program
66
- .command('webhooks')
67
- .description('Earnings-call webhook subscriptions (PRO): signed POSTs of the call lifecycle');
68
- const globalOpts = () => {
69
- const opts = program.opts();
70
- if (opts.json)
71
- setJsonMode(true);
72
- return opts;
73
- };
74
- const run = (fn) => withErrorHandling(fn, planHint);
75
- webhooks
76
- .command('list')
77
- .description("Your account's webhook subscriptions (secrets are never shown)")
78
- .action(run(async () => {
79
- const opts = globalOpts();
80
- const data = await apiGet({ path: BASE });
81
- output(data, opts, () => {
82
- console.log(chalk.bold('\nWebhook subscriptions\n'));
83
- formatTable(data.data.map(subscriptionRow), SUBSCRIPTION_COLUMNS);
84
- });
85
- }));
86
- webhooks
87
- .command('create')
88
- .description('Create a subscription (max 10 per account); prints the signing secret once')
89
- .requiredOption('--url <url>', 'https endpoint (port 443, public addresses only)')
90
- .requiredOption('--events <list>', `Comma-separated events: ${WEBHOOK_EVENTS.join(', ')}`)
91
- .option('--ciks <list>', 'Only these companies, comma-separated CIKs (max 10; default every company)')
92
- .option('--keywords <list>', 'Comma-separated keywords for earnings_call.keyword_hit (2–64 chars each, max 20)')
93
- .action(run(async (cmdOpts) => {
94
- const opts = globalOpts();
95
- const events = parseEvents(cmdOpts.events);
96
- const ciks = splitList(cmdOpts.ciks);
97
- const keywords = splitList(cmdOpts.keywords);
98
- const filters = ciks.length || keywords.length
99
- ? { ...(ciks.length ? { ciks } : {}), ...(keywords.length ? { keywords } : {}) }
100
- : undefined;
101
- const data = await apiRequest({
102
- method: 'POST',
103
- path: BASE,
104
- body: { url: cmdOpts.url, events, ...(filters ? { filters } : {}) },
105
- });
106
- output(data, opts, () => {
107
- const { secret, ...sub } = data;
108
- console.log(chalk.bold('\nWebhook created\n'));
109
- formatKeyValue(subscriptionRow(sub));
110
- console.log(chalk.yellow('\nSigning secret — shown only this once; store it now:'));
111
- console.log(secret);
112
- });
113
- }));
114
- webhooks
115
- .command('update')
116
- .description('Change the keywords, companies, events or active flag of a subscription')
117
- .argument('<id>', 'Subscription ID')
118
- .option('--keywords <list>', 'Comma-separated keywords for earnings_call.keyword_hit (an empty value clears them)')
119
- .option('--ciks <list>', 'Only these companies, comma-separated CIKs (max 10; an empty value = every company)')
120
- .option('--events <list>', `Comma-separated events: ${WEBHOOK_EVENTS.join(', ')}`)
121
- .option('--active <true|false>', 'Pause (false) or resume (true; resets the failure counters) the subscription')
122
- .action(run(async (id, cmdOpts) => {
123
- const opts = globalOpts();
124
- const body = buildUpdateBody(cmdOpts);
125
- const data = await apiRequest({ method: 'PATCH', path: idPath(id), body });
126
- output(data, opts, () => {
127
- console.log(chalk.bold('\nWebhook updated\n'));
128
- formatKeyValue(subscriptionRow(data));
129
- });
130
- }));
131
- webhooks
132
- .command('delete')
133
- .description('Delete a subscription')
134
- .argument('<id>', 'Subscription ID')
135
- .action(run(async (id) => {
136
- const opts = globalOpts();
137
- await apiRequest({ method: 'DELETE', path: idPath(id) });
138
- output({ id, deleted: true }, opts, () => {
139
- console.log(chalk.green(`Deleted webhook ${id}`));
140
- });
141
- }));
142
- webhooks
143
- .command('rotate-secret')
144
- .description('New signing secret (shown once); the old one stays valid for 5 minutes')
145
- .argument('<id>', 'Subscription ID')
146
- .action(run(async (id) => {
147
- const opts = globalOpts();
148
- const data = await apiRequest({
149
- method: 'POST',
150
- path: idPath(id, '/rotate-secret'),
151
- });
152
- output(data, opts, () => {
153
- console.log(chalk.yellow('\nNew signing secret — shown only this once; store it now:'));
154
- console.log(data.secret);
155
- console.log(chalk.dim(`\nThe previous secret stays valid until ${data.previous_secret_expires_at}.`));
156
- });
157
- }));
158
- webhooks
159
- .command('test')
160
- .description('Send a signed ping delivery to the subscription')
161
- .argument('<id>', 'Subscription ID')
162
- .action(run(async (id) => {
163
- const opts = globalOpts();
164
- const data = await apiRequest({
165
- method: 'POST',
166
- path: idPath(id, '/test'),
167
- });
168
- output(data, opts, () => {
169
- console.log(chalk.green(`Queued ${data.event} delivery ${data.delivery_id}`));
170
- console.log(chalk.dim(`See its result with: invd webhooks deliveries ${id}`));
171
- });
172
- }));
173
- webhooks
174
- .command('deliveries')
175
- .description('The last 100 delivery attempts, newest first (kept 7 days)')
176
- .argument('<id>', 'Subscription ID')
177
- .action(run(async (id) => {
178
- const opts = globalOpts();
179
- const data = await apiGet({ path: idPath(id, '/deliveries') });
180
- output(data, opts, () => {
181
- console.log(chalk.bold(`\nDeliveries of ${id}\n`));
182
- formatTable(data.data, DELIVERY_COLUMNS);
183
- });
184
- }));
185
- }
186
- //# sourceMappingURL=webhooks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/commands/webhooks.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- /** One block glyph per value, scaled to the largest; an all-zero (or negative) series is a flat line of `▁`. */
2
- export declare function sparkline(values: number[]): string;
@@ -1,11 +0,0 @@
1
- const BLOCKS = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];
2
- /** One block glyph per value, scaled to the largest; an all-zero (or negative) series is a flat line of `▁`. */
3
- export function sparkline(values) {
4
- const max = Math.max(0, ...values);
5
- if (max === 0)
6
- return BLOCKS[0].repeat(values.length);
7
- return values
8
- .map(value => BLOCKS[Math.round((Math.max(0, value) / max) * (BLOCKS.length - 1))])
9
- .join('');
10
- }
11
- //# sourceMappingURL=sparkline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sparkline.js","sourceRoot":"","sources":["../../../src/formatters/sparkline.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAExD,gHAAgH;AAChH,MAAM,UAAU,SAAS,CAAC,MAAgB;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACnC,IAAI,GAAG,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,MAAM;SACV,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClF,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -1,11 +0,0 @@
1
- interface TreeNode {
2
- concept?: string;
3
- metric_id?: string;
4
- label?: string;
5
- value?: number | null;
6
- depth?: number;
7
- isTotal?: boolean;
8
- children?: TreeNode[];
9
- }
10
- export declare function formatTree(nodes: TreeNode[], indent?: number): void;
11
- export {};
@@ -1,30 +0,0 @@
1
- import chalk from 'chalk';
2
- export function formatTree(nodes, indent = 0) {
3
- for (const node of nodes) {
4
- const prefix = ' '.repeat(indent);
5
- const label = node.label || node.metric_id || node.concept || 'Unknown';
6
- const value = node.value !== null && node.value !== undefined ? formatTreeValue(node.value) : '';
7
- if (node.isTotal) {
8
- console.log(`${prefix}${chalk.bold(label)}${value ? ' ' + chalk.bold(value) : ''}`);
9
- }
10
- else if (node.children && node.children.length > 0) {
11
- console.log(`${prefix}${chalk.cyan(label)}${value ? ' ' + value : ''}`);
12
- }
13
- else {
14
- console.log(`${prefix}${label}${value ? ' ' + chalk.dim(value) : ''}`);
15
- }
16
- if (node.children) {
17
- formatTree(node.children, indent + 1);
18
- }
19
- }
20
- }
21
- function formatTreeValue(n) {
22
- if (Math.abs(n) >= 1_000_000) {
23
- return `${(n / 1_000_000).toFixed(1)}M`;
24
- }
25
- if (Math.abs(n) >= 1_000) {
26
- return `${(n / 1_000).toFixed(1)}K`;
27
- }
28
- return n.toLocaleString('en-US', { maximumFractionDigits: 2 });
29
- }
30
- //# sourceMappingURL=tree-formatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-formatter.js","sourceRoot":"","sources":["../../../src/formatters/tree-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,MAAM,UAAU,UAAU,CAAC,KAAiB,EAAE,SAAiB,CAAC;IAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,CAAS;IAChC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;AACjE,CAAC"}