@disclosure-api/cli 0.0.1

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/dist/client.js ADDED
@@ -0,0 +1,170 @@
1
+ import { DEFAULT_BASE_URL } from './catalog.js';
2
+ export class ApiRequestError extends Error {
3
+ code;
4
+ status;
5
+ details;
6
+ rateLimit;
7
+ constructor(input) {
8
+ super(input.message);
9
+ this.name = 'ApiRequestError';
10
+ this.code = input.code;
11
+ this.status = input.status;
12
+ this.details = input.details;
13
+ this.rateLimit = input.rateLimit;
14
+ }
15
+ }
16
+ export class DisclosureApiClient {
17
+ baseUrl;
18
+ apiKey;
19
+ constructor(env = process.env) {
20
+ this.baseUrl = normalizeBaseUrl(env.DISCLOSURE_API_BASE_URL ?? DEFAULT_BASE_URL);
21
+ this.apiKey = env.DISCLOSURE_API_KEY;
22
+ }
23
+ async getJson(path, query, authRequired) {
24
+ const url = buildUrl(this.baseUrl, path, query);
25
+ const headers = {
26
+ accept: 'application/json'
27
+ };
28
+ if (authRequired) {
29
+ if (!this.apiKey) {
30
+ throw new ApiRequestError({
31
+ code: 'missing_api_key',
32
+ message: 'DISCLOSURE_API_KEY is required for this command. Set it to your Disclosure API bearer token.'
33
+ });
34
+ }
35
+ headers.authorization = `Bearer ${this.apiKey}`;
36
+ }
37
+ let response;
38
+ try {
39
+ response = await fetch(url, { headers });
40
+ }
41
+ catch (error) {
42
+ throw new ApiRequestError({
43
+ code: 'network_error',
44
+ message: error instanceof Error ? error.message : 'Network request failed'
45
+ });
46
+ }
47
+ const body = await readBody(response);
48
+ if (!response.ok) {
49
+ const apiError = parseApiError(body);
50
+ throw new ApiRequestError({
51
+ code: apiError.code,
52
+ message: apiError.message,
53
+ status: response.status,
54
+ details: apiError.details,
55
+ rateLimit: readRateLimitHeaders(response.headers)
56
+ });
57
+ }
58
+ return body;
59
+ }
60
+ async getAllPages(path, query, authRequired) {
61
+ const rows = [];
62
+ let pages = 0;
63
+ let nextOffset = typeof query.offset === 'number'
64
+ ? query.offset
65
+ : Number.parseInt(String(query.offset ?? '0'), 10);
66
+ const initialOffset = Number.isFinite(nextOffset) ? nextOffset : 0;
67
+ const pageQuery = { ...query };
68
+ for (;;) {
69
+ pageQuery.offset = nextOffset;
70
+ const page = (await this.getJson(path, pageQuery, authRequired));
71
+ pages += 1;
72
+ if (!Array.isArray(page.data)) {
73
+ throw new ApiRequestError({
74
+ code: 'unexpected_response',
75
+ message: 'Expected a paginated response with a data array while using --all.',
76
+ details: { page }
77
+ });
78
+ }
79
+ rows.push(...page.data);
80
+ const pagination = page.pagination;
81
+ if (!pagination?.has_more ||
82
+ pagination.next_offset === null ||
83
+ pagination.next_offset === undefined) {
84
+ return {
85
+ data: rows,
86
+ pagination: {
87
+ limit: pagination?.limit ?? parseNullableNumber(query.limit),
88
+ offset: initialOffset,
89
+ has_more: false,
90
+ next_offset: null,
91
+ total_retrieved: rows.length,
92
+ pages
93
+ }
94
+ };
95
+ }
96
+ if (pages > 1000) {
97
+ throw new ApiRequestError({
98
+ code: 'pagination_limit_exceeded',
99
+ message: 'Stopped after 1000 pages while following --all pagination.',
100
+ details: { next_offset: pagination.next_offset }
101
+ });
102
+ }
103
+ nextOffset = pagination.next_offset;
104
+ }
105
+ }
106
+ }
107
+ function normalizeBaseUrl(value) {
108
+ const url = new URL(value);
109
+ url.hash = '';
110
+ url.search = '';
111
+ url.pathname = url.pathname.replace(/\/+$/, '');
112
+ if (url.pathname === '/v1') {
113
+ url.pathname = '';
114
+ }
115
+ return url.toString().replace(/\/+$/, '');
116
+ }
117
+ function buildUrl(baseUrl, path, query) {
118
+ const url = new URL(path.replace(/^\//, ''), `${baseUrl}/`);
119
+ for (const [key, value] of Object.entries(query)) {
120
+ url.searchParams.set(key, String(value));
121
+ }
122
+ return url;
123
+ }
124
+ async function readBody(response) {
125
+ const text = await response.text();
126
+ if (!text)
127
+ return null;
128
+ try {
129
+ return JSON.parse(text);
130
+ }
131
+ catch {
132
+ return text;
133
+ }
134
+ }
135
+ function parseApiError(body) {
136
+ if (isRecord(body)) {
137
+ const error = body.error;
138
+ if (isRecord(error)) {
139
+ return {
140
+ code: typeof error.code === 'string' ? error.code : 'api_error',
141
+ message: typeof error.message === 'string' ? error.message : 'API request failed',
142
+ details: error.details
143
+ };
144
+ }
145
+ }
146
+ return {
147
+ code: 'api_error',
148
+ message: typeof body === 'string' ? body : 'API request failed',
149
+ details: body
150
+ };
151
+ }
152
+ function readRateLimitHeaders(headers) {
153
+ const output = {};
154
+ for (const name of ['ratelimit-limit', 'ratelimit-remaining', 'ratelimit-reset', 'retry-after']) {
155
+ const value = headers.get(name);
156
+ if (value)
157
+ output[name] = value;
158
+ }
159
+ return Object.keys(output).length ? output : undefined;
160
+ }
161
+ function parseNullableNumber(value) {
162
+ if (value === undefined)
163
+ return null;
164
+ const number = typeof value === 'number' ? value : Number.parseInt(String(value), 10);
165
+ return Number.isFinite(number) ? number : null;
166
+ }
167
+ function isRecord(value) {
168
+ return typeof value === 'object' && value !== null;
169
+ }
170
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/help.d.ts ADDED
@@ -0,0 +1,56 @@
1
+ import { type CommandSpec } from './catalog.js';
2
+ export declare function rootHelp(): string;
3
+ export declare function commandHelp(command: CommandSpec): string;
4
+ export declare function helpCatalogJson(): {
5
+ name: string;
6
+ binary: string;
7
+ version: string;
8
+ defaultBaseUrl: string;
9
+ env: ({
10
+ name: string;
11
+ requiredForProtectedCommands: boolean;
12
+ description: string;
13
+ required?: undefined;
14
+ default?: undefined;
15
+ } | {
16
+ name: string;
17
+ required: boolean;
18
+ default: string;
19
+ description: string;
20
+ requiredForProtectedCommands?: undefined;
21
+ })[];
22
+ output: {
23
+ success: string;
24
+ error: string;
25
+ pagination: string;
26
+ };
27
+ agentGuidance: string[];
28
+ commands: {
29
+ id: string;
30
+ command: string;
31
+ description: string;
32
+ authRequired: boolean;
33
+ list: boolean;
34
+ endpoint: {
35
+ method: string;
36
+ path: string;
37
+ };
38
+ positionals: {
39
+ name: string;
40
+ label: string;
41
+ required: boolean;
42
+ description: string;
43
+ pathParam: string | undefined;
44
+ queryParam: string | undefined;
45
+ }[];
46
+ flags: {
47
+ name: string;
48
+ kind: string;
49
+ valueName: string | undefined;
50
+ apiName: string | undefined;
51
+ description: string;
52
+ }[];
53
+ examples: readonly string[];
54
+ notes: readonly string[];
55
+ }[];
56
+ };
package/dist/help.js ADDED
@@ -0,0 +1,200 @@
1
+ import { CLI_NAME, CLI_VERSION, COMMANDS, DEFAULT_BASE_URL, commandName } from './catalog.js';
2
+ export function rootHelp() {
3
+ const commands = COMMANDS.map((command) => ` ${pad(commandName(command), 36)} ${command.summary}`).join('\n');
4
+ return `${CLI_NAME} ${CLI_VERSION}
5
+
6
+ Agent-friendly CLI for the Disclosure API.
7
+
8
+ Usage:
9
+ ${CLI_NAME} <command> [args] [flags]
10
+ ${CLI_NAME} --help
11
+ ${CLI_NAME} --version
12
+ ${CLI_NAME} help --json
13
+ ${CLI_NAME} help <command>
14
+
15
+ Environment:
16
+ DISCLOSURE_API_KEY Required for all protected /v1 commands.
17
+ DISCLOSURE_API_BASE_URL Optional API origin. Defaults to ${DEFAULT_BASE_URL}.
18
+
19
+ Output contract:
20
+ Success writes JSON to stdout.
21
+ List commands support --format jsonl to write one data row per line.
22
+ Errors write a JSON error envelope to stderr and exit non-zero.
23
+ Use --all on list commands to follow pagination until has_more is false.
24
+
25
+ For coding agents:
26
+ Prefer --format json unless a streaming row format is easier to consume.
27
+ Use --all only when a complete dataset is needed.
28
+ Avoid --include-text unless full extracted filing text is required.
29
+ On non-zero exit, parse stderr JSON and inspect error.code and error.details.
30
+ Cite returned SEC/source URLs when relevant.
31
+
32
+ Commands:
33
+ ${commands}
34
+
35
+ Examples:
36
+ ${CLI_NAME} status
37
+ ${CLI_NAME} companies search AAPL --limit 5
38
+ ${CLI_NAME} filings list --ticker AAPL --form-type 8-K --format jsonl
39
+ ${CLI_NAME} filings sections 0000320193-24-000037 --item-code 2.02
40
+ ${CLI_NAME} help filings list
41
+ `;
42
+ }
43
+ export function commandHelp(command) {
44
+ const usage = buildUsage(command);
45
+ const positionals = command.positionals?.length
46
+ ? `\nArguments:\n${command.positionals
47
+ .map((arg) => ` ${pad(arg.label, 22)} ${arg.description}`)
48
+ .join('\n')}\n`
49
+ : '';
50
+ const flags = renderFlags(command);
51
+ const examples = command.examples.map((example) => ` ${example}`).join('\n');
52
+ const notes = command.notes?.length
53
+ ? `\nNotes:\n${command.notes.map((note) => ` ${note}`).join('\n')}\n`
54
+ : '';
55
+ return `${CLI_NAME} ${commandName(command)}
56
+
57
+ ${command.summary}
58
+
59
+ ${command.description}
60
+
61
+ Usage:
62
+ ${usage}
63
+
64
+ Auth:
65
+ ${command.authRequired ? 'Requires DISCLOSURE_API_KEY.' : 'No API key required.'}
66
+
67
+ Endpoint:
68
+ GET ${command.endpoint}
69
+
70
+ Output:
71
+ Success writes JSON to stdout.
72
+ ${command.list
73
+ ? 'This list command supports --format jsonl and --all pagination.'
74
+ : 'This command supports --format json only.'}
75
+ Errors write JSON to stderr and exit non-zero.
76
+ ${positionals}${flags}${notes}
77
+ Examples:
78
+ ${examples}
79
+ `;
80
+ }
81
+ export function helpCatalogJson() {
82
+ return {
83
+ name: '@disclosure-api/cli',
84
+ binary: CLI_NAME,
85
+ version: CLI_VERSION,
86
+ defaultBaseUrl: DEFAULT_BASE_URL,
87
+ env: [
88
+ {
89
+ name: 'DISCLOSURE_API_KEY',
90
+ requiredForProtectedCommands: true,
91
+ description: 'Bearer token for protected Disclosure API commands.'
92
+ },
93
+ {
94
+ name: 'DISCLOSURE_API_BASE_URL',
95
+ required: false,
96
+ default: DEFAULT_BASE_URL,
97
+ description: 'API origin override. A trailing /v1 is accepted and normalized.'
98
+ }
99
+ ],
100
+ output: {
101
+ success: 'JSON to stdout. List commands may use JSONL with --format jsonl.',
102
+ error: 'JSON error envelope to stderr with a non-zero exit code.',
103
+ pagination: '--all follows pagination.has_more and pagination.next_offset on list commands.'
104
+ },
105
+ agentGuidance: [
106
+ 'Prefer --format json unless JSONL row streaming is easier.',
107
+ 'Use --all only when a complete dataset is required.',
108
+ 'Avoid --include-text unless full extracted source text is needed.',
109
+ 'On non-zero exit, parse stderr JSON and inspect error.code and error.details.',
110
+ 'Cite returned SEC/source URLs when relevant.'
111
+ ],
112
+ commands: COMMANDS.map((command) => ({
113
+ id: command.id,
114
+ command: commandName(command),
115
+ description: command.description,
116
+ authRequired: command.authRequired,
117
+ list: command.list,
118
+ endpoint: {
119
+ method: 'GET',
120
+ path: command.endpoint
121
+ },
122
+ positionals: command.positionals?.map((arg) => ({
123
+ name: arg.name,
124
+ label: arg.label,
125
+ required: arg.required,
126
+ description: arg.description,
127
+ pathParam: arg.pathParam,
128
+ queryParam: arg.queryParam
129
+ })) ?? [],
130
+ flags: [...renderOutputFlagJson(command), ...(command.flags?.map(flagJson) ?? [])],
131
+ examples: command.examples,
132
+ notes: command.notes ?? []
133
+ }))
134
+ };
135
+ }
136
+ function buildUsage(command) {
137
+ const args = command.positionals?.map((arg) => arg.label).join(' ');
138
+ return [CLI_NAME, commandName(command), args, '[flags]'].filter(Boolean).join(' ');
139
+ }
140
+ function renderFlags(command) {
141
+ const flags = [...outputFlags(command), ...(command.flags ?? [])];
142
+ if (!flags.length)
143
+ return '';
144
+ return `Flags:\n${flags.map(formatFlag).join('\n')}\n`;
145
+ }
146
+ function outputFlags(command) {
147
+ return [
148
+ {
149
+ name: 'format',
150
+ apiName: '',
151
+ kind: 'string',
152
+ valueName: command.list ? 'json|jsonl' : 'json',
153
+ description: command.list
154
+ ? 'Output format. Defaults to json.'
155
+ : 'Output format. Only json is supported.'
156
+ },
157
+ ...(command.list
158
+ ? [
159
+ {
160
+ name: 'all',
161
+ apiName: '',
162
+ kind: 'boolean-string',
163
+ description: 'Follow pagination until has_more is false.'
164
+ }
165
+ ]
166
+ : []),
167
+ {
168
+ name: 'help',
169
+ apiName: '',
170
+ kind: 'boolean-string',
171
+ description: 'Show help for this command.'
172
+ }
173
+ ];
174
+ }
175
+ function renderOutputFlagJson(command) {
176
+ return outputFlags(command).map((flag) => ({
177
+ name: `--${flag.name}`,
178
+ kind: flag.name === 'all' || flag.name === 'help' ? 'boolean' : flag.kind,
179
+ valueName: flag.valueName,
180
+ apiName: flag.apiName || undefined,
181
+ description: flag.description
182
+ }));
183
+ }
184
+ function flagJson(flag) {
185
+ return {
186
+ name: `--${flag.name}`,
187
+ kind: flag.kind,
188
+ valueName: flag.valueName,
189
+ apiName: flag.apiName,
190
+ description: flag.description
191
+ };
192
+ }
193
+ function formatFlag(flag) {
194
+ const label = flag.valueName ? `--${flag.name} <${flag.valueName}>` : `--${flag.name}`;
195
+ return ` ${pad(label, 30)} ${flag.description}`;
196
+ }
197
+ function pad(value, width) {
198
+ return value.length >= width ? value : `${value}${' '.repeat(width - value.length)}`;
199
+ }
200
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};