@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.
- package/README.md +88 -802
- package/claude-plugin/agents/invinite-data.md +1 -1
- package/claude-plugin/commands/analyze-earnings-call.md +3 -3
- package/claude-plugin/skills/invinite-data-cli/SKILL.md +444 -187
- package/dist/src/cli.d.ts +6 -0
- package/dist/src/cli.js +21 -31
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client/api-client.d.ts +2 -4
- package/dist/src/client/api-client.js +3 -9
- package/dist/src/client/api-client.js.map +1 -1
- package/dist/src/client/pagination.d.ts +10 -0
- package/dist/src/client/pagination.js +40 -0
- package/dist/src/client/pagination.js.map +1 -1
- package/dist/src/commands/earnings.d.ts +0 -3
- package/dist/src/commands/earnings.js +46 -524
- package/dist/src/commands/earnings.js.map +1 -1
- package/dist/src/generated/cli-manifest.json +4983 -0
- package/dist/src/hand-written-commands.d.ts +43 -0
- package/dist/src/hand-written-commands.js +21 -0
- package/dist/src/hand-written-commands.js.map +1 -0
- package/dist/src/shared/errors.d.ts +5 -0
- package/dist/src/shared/errors.js +12 -0
- package/dist/src/shared/errors.js.map +1 -1
- package/dist/src/shared/options.d.ts +0 -13
- package/dist/src/shared/options.js +0 -13
- package/dist/src/shared/options.js.map +1 -1
- package/dist/src/spec-commands.d.ts +10 -0
- package/dist/src/spec-commands.js +207 -0
- package/dist/src/spec-commands.js.map +1 -0
- package/dist/src/spec-flags.d.ts +6 -0
- package/dist/src/spec-flags.js +9 -0
- package/dist/src/spec-flags.js.map +1 -0
- package/dist/src/spec-manifest.d.ts +382 -0
- package/dist/src/spec-manifest.js +65 -0
- package/dist/src/spec-manifest.js.map +1 -0
- package/package.json +7 -3
- package/dist/src/commands/company.d.ts +0 -2
- package/dist/src/commands/company.js +0 -220
- package/dist/src/commands/company.js.map +0 -1
- package/dist/src/commands/earnings-selector.d.ts +0 -15
- package/dist/src/commands/earnings-selector.js +0 -29
- package/dist/src/commands/earnings-selector.js.map +0 -1
- package/dist/src/commands/filings.d.ts +0 -2
- package/dist/src/commands/filings.js +0 -139
- package/dist/src/commands/filings.js.map +0 -1
- package/dist/src/commands/financials.d.ts +0 -2
- package/dist/src/commands/financials.js +0 -162
- package/dist/src/commands/financials.js.map +0 -1
- package/dist/src/commands/health.d.ts +0 -2
- package/dist/src/commands/health.js +0 -18
- package/dist/src/commands/health.js.map +0 -1
- package/dist/src/commands/insider-trades.d.ts +0 -2
- package/dist/src/commands/insider-trades.js +0 -56
- package/dist/src/commands/insider-trades.js.map +0 -1
- package/dist/src/commands/ipos.d.ts +0 -2
- package/dist/src/commands/ipos.js +0 -42
- package/dist/src/commands/ipos.js.map +0 -1
- package/dist/src/commands/market.d.ts +0 -2
- package/dist/src/commands/market.js +0 -34
- package/dist/src/commands/market.js.map +0 -1
- package/dist/src/commands/metadata.d.ts +0 -2
- package/dist/src/commands/metadata.js +0 -39
- package/dist/src/commands/metadata.js.map +0 -1
- package/dist/src/commands/metrics.d.ts +0 -2
- package/dist/src/commands/metrics.js +0 -158
- package/dist/src/commands/metrics.js.map +0 -1
- package/dist/src/commands/ownership.d.ts +0 -2
- package/dist/src/commands/ownership.js +0 -152
- package/dist/src/commands/ownership.js.map +0 -1
- package/dist/src/commands/segments.d.ts +0 -2
- package/dist/src/commands/segments.js +0 -64
- package/dist/src/commands/segments.js.map +0 -1
- package/dist/src/commands/usage.d.ts +0 -38
- package/dist/src/commands/usage.js +0 -82
- package/dist/src/commands/usage.js.map +0 -1
- package/dist/src/commands/webhooks.d.ts +0 -16
- package/dist/src/commands/webhooks.js +0 -186
- package/dist/src/commands/webhooks.js.map +0 -1
- package/dist/src/formatters/sparkline.d.ts +0 -2
- package/dist/src/formatters/sparkline.js +0 -11
- package/dist/src/formatters/sparkline.js.map +0 -1
- package/dist/src/formatters/tree-formatter.d.ts +0 -11
- package/dist/src/formatters/tree-formatter.js +0 -30
- package/dist/src/formatters/tree-formatter.js.map +0 -1
package/dist/src/cli.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
import { type Manifest } from './spec-manifest.js';
|
|
2
3
|
/** `package.json` sits one level up under tsx (`src/cli.ts`), two in the build (`dist/src/cli.js`). */
|
|
3
4
|
export declare function packageVersion(): string;
|
|
5
|
+
/**
|
|
6
|
+
* The committed command manifest, parsed once. Resolved next to this file: `src/generated/` under tsx,
|
|
7
|
+
* `dist/src/generated/` in the build (`scripts/copy-manifest.mjs` puts it there — `tsc` copies no JSON).
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadManifest(): Manifest;
|
|
4
10
|
export declare function createProgram(): Command;
|
package/dist/src/cli.js
CHANGED
|
@@ -3,23 +3,12 @@ import { Command } from 'commander';
|
|
|
3
3
|
import { setJsonMode } from './shared/spinner.js';
|
|
4
4
|
import { formatCreditUsage, takeCreditUsage } from './client/api-client.js';
|
|
5
5
|
import { registerConfigCommands } from './commands/config.js';
|
|
6
|
-
import { registerHealthCommand } from './commands/health.js';
|
|
7
|
-
import { registerCompanyCommands } from './commands/company.js';
|
|
8
|
-
import { registerFinancialsCommands } from './commands/financials.js';
|
|
9
|
-
import { registerMetricsCommands } from './commands/metrics.js';
|
|
10
|
-
import { registerSegmentsCommands } from './commands/segments.js';
|
|
11
|
-
import { registerIposCommands } from './commands/ipos.js';
|
|
12
|
-
import { registerOwnershipCommands } from './commands/ownership.js';
|
|
13
|
-
import { registerInsiderTradesCommands } from './commands/insider-trades.js';
|
|
14
|
-
import { registerFilingsCommands } from './commands/filings.js';
|
|
15
6
|
import { registerEarningsCommands } from './commands/earnings.js';
|
|
16
|
-
import { registerMarketCommands } from './commands/market.js';
|
|
17
|
-
import { registerMetadataCommands } from './commands/metadata.js';
|
|
18
|
-
import { registerWebhooksCommands } from './commands/webhooks.js';
|
|
19
|
-
import { registerWsCommands } from './commands/ws.js';
|
|
20
|
-
import { registerPluginCommands } from './commands/plugin.js';
|
|
21
7
|
import { registerLoginCommands } from './commands/login.js';
|
|
22
|
-
import {
|
|
8
|
+
import { registerPluginCommands } from './commands/plugin.js';
|
|
9
|
+
import { registerWsCommands } from './commands/ws.js';
|
|
10
|
+
import { registerSpecCommands } from './spec-commands.js';
|
|
11
|
+
import { parseManifest } from './spec-manifest.js';
|
|
23
12
|
const PACKAGE_NAME = '@invinite-org/invinite-data-cli';
|
|
24
13
|
/** `package.json` sits one level up under tsx (`src/cli.ts`), two in the build (`dist/src/cli.js`). */
|
|
25
14
|
export function packageVersion() {
|
|
@@ -36,6 +25,15 @@ export function packageVersion() {
|
|
|
36
25
|
}
|
|
37
26
|
return '0.0.0';
|
|
38
27
|
}
|
|
28
|
+
let manifest;
|
|
29
|
+
/**
|
|
30
|
+
* The committed command manifest, parsed once. Resolved next to this file: `src/generated/` under tsx,
|
|
31
|
+
* `dist/src/generated/` in the build (`scripts/copy-manifest.mjs` puts it there — `tsc` copies no JSON).
|
|
32
|
+
*/
|
|
33
|
+
export function loadManifest() {
|
|
34
|
+
manifest ??= parseManifest(createRequire(import.meta.url)('./generated/cli-manifest.json'));
|
|
35
|
+
return manifest;
|
|
36
|
+
}
|
|
39
37
|
export function createProgram() {
|
|
40
38
|
const program = new Command();
|
|
41
39
|
program
|
|
@@ -45,6 +43,8 @@ export function createProgram() {
|
|
|
45
43
|
.option('--json', 'Output raw JSON (pipe-friendly)')
|
|
46
44
|
.option('--all', 'Auto-paginate through all results')
|
|
47
45
|
.option('--show-cost', 'Print the credits a command cost to stderr (or set INVD_SHOW_COST=1)')
|
|
46
|
+
// Inherited by every group, so rostered and generated commands list alphabetically together.
|
|
47
|
+
.configureHelp({ sortSubcommands: true })
|
|
48
48
|
.hook('preAction', (thisCommand) => {
|
|
49
49
|
const opts = thisCommand.opts();
|
|
50
50
|
if (opts.json) {
|
|
@@ -58,24 +58,14 @@ export function createProgram() {
|
|
|
58
58
|
return;
|
|
59
59
|
console.error(formatCreditUsage(usage));
|
|
60
60
|
});
|
|
61
|
+
// The hand-written roster (`src/hand-written-commands.ts`) first, then every manifest operation; a generated
|
|
62
|
+
// `earnings` action attaches to the group `registerEarningsCommands` created.
|
|
63
|
+
registerLoginCommands(program);
|
|
61
64
|
registerConfigCommands(program);
|
|
62
|
-
registerHealthCommand(program);
|
|
63
|
-
registerCompanyCommands(program);
|
|
64
|
-
registerFinancialsCommands(program);
|
|
65
|
-
registerMetricsCommands(program);
|
|
66
|
-
registerSegmentsCommands(program);
|
|
67
|
-
registerIposCommands(program);
|
|
68
|
-
registerOwnershipCommands(program);
|
|
69
|
-
registerInsiderTradesCommands(program);
|
|
70
|
-
registerFilingsCommands(program);
|
|
71
|
-
registerEarningsCommands(program);
|
|
72
|
-
registerMarketCommands(program);
|
|
73
|
-
registerMetadataCommands(program);
|
|
74
|
-
registerWebhooksCommands(program);
|
|
75
|
-
registerWsCommands(program);
|
|
76
65
|
registerPluginCommands(program);
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
registerWsCommands(program);
|
|
67
|
+
registerEarningsCommands(program);
|
|
68
|
+
registerSpecCommands(program, loadManifest());
|
|
79
69
|
return program;
|
|
80
70
|
}
|
|
81
71
|
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ export interface RequestOptions {
|
|
|
3
3
|
/** An array value is sent as a repeated parameter (`status=a&status=b`). */
|
|
4
4
|
params?: Record<string, string | string[] | undefined>;
|
|
5
5
|
silent?: boolean;
|
|
6
|
+
/** `false` for a public operation: no API key is resolved or sent (default `true`). */
|
|
7
|
+
auth?: boolean;
|
|
6
8
|
}
|
|
7
9
|
export interface CreditUsage {
|
|
8
10
|
/** `X-Credits-Charged`, summed over every request of this invocation (`--all` pages included). */
|
|
@@ -17,10 +19,6 @@ export interface CreditUsage {
|
|
|
17
19
|
/** What this invocation's requests cost so far, then reset; `null` when no response carried a credit header. */
|
|
18
20
|
export declare function takeCreditUsage(): CreditUsage | null;
|
|
19
21
|
export declare function formatCreditUsage(usage: CreditUsage): string;
|
|
20
|
-
/** Same auth / URL building as `apiGet`, without the JSON parse; a non-2xx throws `ApiError`. */
|
|
21
|
-
export declare function apiGetRaw(opts: RequestOptions & {
|
|
22
|
-
accept?: string;
|
|
23
|
-
}): Promise<Response>;
|
|
24
22
|
export declare function apiGet<T = unknown>(opts: RequestOptions): Promise<T>;
|
|
25
23
|
export interface ApiRequestOptions extends RequestOptions {
|
|
26
24
|
method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
@@ -44,12 +44,10 @@ export function formatCreditUsage(usage) {
|
|
|
44
44
|
return `credits: ${usage.charged} · included left: ${usage.includedRemaining ?? '—'}`;
|
|
45
45
|
}
|
|
46
46
|
async function request(opts, accept, init = {}) {
|
|
47
|
-
const apiKey = await getApiKey();
|
|
48
47
|
const url = buildUrl(opts.path, opts.params);
|
|
49
|
-
const headers = {
|
|
50
|
-
|
|
51
|
-
'
|
|
52
|
-
};
|
|
48
|
+
const headers = { 'Accept': accept };
|
|
49
|
+
if (opts.auth !== false)
|
|
50
|
+
headers['Authorization'] = `Bearer ${await getApiKey()}`;
|
|
53
51
|
if (init.body !== undefined)
|
|
54
52
|
headers['Content-Type'] = 'application/json';
|
|
55
53
|
const response = await fetch(url, {
|
|
@@ -63,10 +61,6 @@ async function request(opts, accept, init = {}) {
|
|
|
63
61
|
}
|
|
64
62
|
return response;
|
|
65
63
|
}
|
|
66
|
-
/** Same auth / URL building as `apiGet`, without the JSON parse; a non-2xx throws `ApiError`. */
|
|
67
|
-
export async function apiGetRaw(opts) {
|
|
68
|
-
return request(opts, opts.accept ?? '*/*');
|
|
69
|
-
}
|
|
70
64
|
export async function apiGet(opts) {
|
|
71
65
|
const spinner = opts.silent ? null : createSpinner('Fetching data...');
|
|
72
66
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/client/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/client/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
type NextUrlExtractor<T> = (data: T) => string | undefined;
|
|
2
2
|
export declare function fetchAllPages<T>(initialData: T, extractNextUrl: NextUrlExtractor<T>, mergeResults: (accumulated: T, page: T) => T): Promise<T>;
|
|
3
|
+
/**
|
|
4
|
+
* `--all` over a response that pages with a top-level `next_url`: every `itemsPaths` array is concatenated across
|
|
5
|
+
* pages (a path a page does not carry adds nothing); the other fields come from the last page.
|
|
6
|
+
*/
|
|
7
|
+
export declare function fetchAllTopPages(initialData: unknown, itemsPaths: readonly string[]): Promise<unknown>;
|
|
8
|
+
/**
|
|
9
|
+
* `--all` over a multi-company response (`companies[].next_url`): follows `companies[0].next_url` and concatenates
|
|
10
|
+
* each company's `itemsPaths` arrays by index, carrying each company's own `next_url` forward.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fetchAllCompanyPages(initialData: unknown, itemsPaths: readonly string[]): Promise<unknown>;
|
|
3
13
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { apiGet } from './api-client.js';
|
|
2
2
|
import { createSpinner } from '../shared/spinner.js';
|
|
3
|
+
import { pick } from '../formatters/flatten.js';
|
|
3
4
|
export async function fetchAllPages(initialData, extractNextUrl, mergeResults) {
|
|
4
5
|
let result = initialData;
|
|
5
6
|
let nextUrl = extractNextUrl(result);
|
|
@@ -25,4 +26,43 @@ export async function fetchAllPages(initialData, extractNextUrl, mergeResults) {
|
|
|
25
26
|
}
|
|
26
27
|
return result;
|
|
27
28
|
}
|
|
29
|
+
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
30
|
+
const arrayAt = (value, path) => {
|
|
31
|
+
const found = pick(value, path);
|
|
32
|
+
return Array.isArray(found) ? found : [];
|
|
33
|
+
};
|
|
34
|
+
/** A copy of `target` with `value` at the dotted `path` (missing objects on the way are created). */
|
|
35
|
+
function withValueAt(target, path, value) {
|
|
36
|
+
const [head, ...rest] = path.split('.');
|
|
37
|
+
if (rest.length === 0)
|
|
38
|
+
return { ...target, [head]: value };
|
|
39
|
+
const child = target[head];
|
|
40
|
+
return { ...target, [head]: withValueAt(isRecord(child) ? child : {}, rest.join('.'), value) };
|
|
41
|
+
}
|
|
42
|
+
const nextUrlAt = (value, path) => {
|
|
43
|
+
const found = pick(value, path);
|
|
44
|
+
return typeof found === 'string' && found !== '' ? found : undefined;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* `--all` over a response that pages with a top-level `next_url`: every `itemsPaths` array is concatenated across
|
|
48
|
+
* pages (a path a page does not carry adds nothing); the other fields come from the last page.
|
|
49
|
+
*/
|
|
50
|
+
export async function fetchAllTopPages(initialData, itemsPaths) {
|
|
51
|
+
return fetchAllPages(initialData, data => nextUrlAt(data, 'next_url'), (accumulated, page) => itemsPaths.reduce((merged, path) => withValueAt(merged, path, [...arrayAt(accumulated, path), ...arrayAt(page, path)]), isRecord(page) ? page : {}));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `--all` over a multi-company response (`companies[].next_url`): follows `companies[0].next_url` and concatenates
|
|
55
|
+
* each company's `itemsPaths` arrays by index, carrying each company's own `next_url` forward.
|
|
56
|
+
*/
|
|
57
|
+
export async function fetchAllCompanyPages(initialData, itemsPaths) {
|
|
58
|
+
return fetchAllPages(initialData, data => nextUrlAt(data, 'companies.0.next_url'), (accumulated, page) => {
|
|
59
|
+
const base = isRecord(accumulated) ? accumulated : {};
|
|
60
|
+
const companies = arrayAt(accumulated, 'companies').map((company, index) => {
|
|
61
|
+
const pageCompany = pick(page, `companies.${index}`);
|
|
62
|
+
const merged = itemsPaths.reduce((acc, path) => withValueAt(acc, path, [...arrayAt(company, path), ...arrayAt(pageCompany, path)]), isRecord(company) ? company : {});
|
|
63
|
+
return { ...merged, next_url: pick(pageCompany, 'next_url') };
|
|
64
|
+
});
|
|
65
|
+
return { ...base, companies };
|
|
66
|
+
});
|
|
67
|
+
}
|
|
28
68
|
//# sourceMappingURL=pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/client/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../../src/client/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAIhD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAc,EACd,cAAmC,EACnC,YAA4C;IAE5C,IAAI,MAAM,GAAG,WAAW,CAAC;IACzB,IAAI,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,aAAa,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,qDAAqD;YACrD,MAAM,MAAM,GAA6B,EAAE,CAAC;YAC5C,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAI,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxC,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;YACpC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,IAAY,EAAa,EAAE;IAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC,CAAC;AAEF,qGAAqG;AACrG,SAAS,WAAW,CAAC,MAA+B,EAAE,IAAY,EAAE,KAAc;IAChF,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;AACjG,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,IAAY,EAAsB,EAAE;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAoB,EAAE,UAA6B;IACxF,OAAO,aAAa,CAClB,WAAW,EACX,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,EACnC,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CACtC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EACpG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC3B,CACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAoB,EAAE,UAA6B;IAC5F,OAAO,aAAa,CAClB,WAAW,EACX,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAC/C,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YACzE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,KAAK,EAAE,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EACjG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CACjC,CAAC;YACF,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,CAAC;IAChC,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import { ApiError } from '../shared/errors.js';
|
|
3
2
|
type Row = Record<string, any>;
|
|
4
|
-
/** One dim line after a 403 whose message names the plan the route needs. */
|
|
5
|
-
export declare function planHint(error: ApiError): string | undefined;
|
|
6
3
|
/** "Q&A starts at m:ss" for the transcript header; undefined without a Q&A boundary. */
|
|
7
4
|
export declare function qaStartLine(qaStartMs: unknown): string | undefined;
|
|
8
5
|
/** Plain-text rendering of a transcript `data` (console and `--output`); `words` stays JSON. */
|