@invinite-org/invinite-data-cli 0.3.0 → 0.3.2
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 +5 -5
- package/claude-plugin/.claude-plugin/plugin.json +2 -2
- package/claude-plugin/.mcp.json +1 -1
- package/claude-plugin/skills/invinite-data-cli/SKILL.md +1 -1
- package/dist/src/client/api-client.d.ts +5 -1
- package/dist/src/client/api-client.js +5 -2
- package/dist/src/client/api-client.js.map +1 -1
- package/dist/src/config/config-manager.d.ts +8 -0
- package/dist/src/config/config-manager.js +18 -2
- package/dist/src/config/config-manager.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ invd login
|
|
|
38
38
|
|
|
39
39
|
The browser flow creates a revocable, 90-day Data API key and stores it in the
|
|
40
40
|
OS keychain when available (with local CLI config as a fallback). The sign-in
|
|
41
|
-
also appears
|
|
41
|
+
also appears on the Data API dashboard's keys page (https://invinite.com/data-api/keys). If you belong to multiple
|
|
42
42
|
teams, choose one explicitly:
|
|
43
43
|
|
|
44
44
|
```bash
|
|
@@ -80,8 +80,8 @@ This repo includes plugins for AI coding tools that enable AI-powered financial
|
|
|
80
80
|
### Choose an integration
|
|
81
81
|
|
|
82
82
|
- **Standalone skill:** installs the Invinite workflow and CLI reference. It prefers MCP when connected and falls back to the local `invd` CLI.
|
|
83
|
-
- **Standalone MCP connector:** add `https://data.invinite.com/t/<teamId>/mcp` in Claude's connector settings, leave OAuth client ID/secret empty, and complete browser OAuth. This supplies tools but not the packaged research workflows.
|
|
84
|
-
- **Claude plugin:** bundles the skill, remote MCP connector, data agent, and research commands. During setup, enter the team ID shown in the team-pinned MCP URL
|
|
83
|
+
- **Standalone MCP connector:** add `https://api.data.invinite.com/t/<teamId>/mcp` in Claude's connector settings, leave OAuth client ID/secret empty, and complete browser OAuth. This supplies tools but not the packaged research workflows.
|
|
84
|
+
- **Claude plugin:** bundles the skill, remote MCP connector, data agent, and research commands. During setup, enter the team ID shown in the team-pinned MCP URL on the Data API dashboard's keys page; OAuth still uses Dynamic Client Registration and PKCE.
|
|
85
85
|
|
|
86
86
|
The team ID controls access, usage, and billing for MCP calls. CLI calls use the team selected by `invd login --team <teamId>` and do not inherit the plugin's connector setting.
|
|
87
87
|
|
|
@@ -195,8 +195,8 @@ invd --show-cost --json company details -i AAPL > aapl.json
|
|
|
195
195
|
# credits: 1 · included left: 249999
|
|
196
196
|
```
|
|
197
197
|
|
|
198
|
-
`included left` is the plan's
|
|
199
|
-
usage route). Keys, plan and prepaid credits are managed at [invinite.com/data-api](https://invinite.com/data-api);
|
|
198
|
+
`included left` is the plan's included credits left after the command: the API's `X-Credits-Included-Remaining`
|
|
199
|
+
(the allowance before the request) minus what the request was charged (absent → `—`, e.g. for the free usage route). Keys, plan and prepaid credits are managed at [invinite.com/data-api](https://invinite.com/data-api);
|
|
200
200
|
credit costs per endpoint and plan limits are documented at
|
|
201
201
|
[/docs/data-api/credits-and-limits](https://invinite.com/docs/data-api/credits-and-limits).
|
|
202
202
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "invinite-financial-data",
|
|
3
3
|
"description": "Fetch and analyze financial data using the Invinite Data API — company fundamentals, financial statements, SEC filings, earnings calls (transcripts, guidance, Q&A, live calls), institutional ownership, insider trades, and more.",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.2",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Invinite"
|
|
7
7
|
},
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"team_id": {
|
|
13
13
|
"type": "string",
|
|
14
14
|
"title": "Invinite team ID",
|
|
15
|
-
"description": "Team billed for Data API usage. Copy it from the team-pinned MCP URL
|
|
15
|
+
"description": "Team billed for Data API usage. Copy it from the team-pinned MCP URL on the Data API dashboard's keys page (https://invinite.com/data-api/keys).",
|
|
16
16
|
"required": true
|
|
17
17
|
}
|
|
18
18
|
}
|
package/claude-plugin/.mcp.json
CHANGED
|
@@ -42,7 +42,7 @@ The discovery rules below apply to both transports: call `list_available_metrics
|
|
|
42
42
|
|
|
43
43
|
### MCP
|
|
44
44
|
|
|
45
|
-
Connect `https://data.invinite.com/t/<teamId>/mcp` through OAuth. The team in the URL controls data billing. Leave OAuth client ID and secret empty so the client uses Dynamic Client Registration and PKCE.
|
|
45
|
+
Connect `https://api.data.invinite.com/t/<teamId>/mcp` through OAuth (the team-pinned URL is shown on the Data API dashboard's keys page, https://invinite.com/data-api/keys). The team in the URL controls data billing. Leave OAuth client ID and secret empty so the client uses Dynamic Client Registration and PKCE.
|
|
46
46
|
|
|
47
47
|
### CLI
|
|
48
48
|
|
|
@@ -7,7 +7,11 @@ export interface RequestOptions {
|
|
|
7
7
|
export interface CreditUsage {
|
|
8
8
|
/** `X-Credits-Charged`, summed over every request of this invocation (`--all` pages included). */
|
|
9
9
|
charged: number;
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Included credits left AFTER the last metered request: the API's `X-Credits-Included-Remaining` is the allowance
|
|
12
|
+
* BEFORE that request's own charge, so its `X-Credits-Charged` is subtracted (floored at 0). `null` when no
|
|
13
|
+
* response carried the header (routes that skip the quota decision, e.g. `/v1/account/usage`).
|
|
14
|
+
*/
|
|
11
15
|
includedRemaining: number | null;
|
|
12
16
|
}
|
|
13
17
|
/** What this invocation's requests cost so far, then reset; `null` when no response carried a credit header. */
|
|
@@ -26,9 +26,12 @@ function recordCredits(response) {
|
|
|
26
26
|
const remaining = response.headers?.get('X-Credits-Included-Remaining');
|
|
27
27
|
if (charged == null && remaining == null)
|
|
28
28
|
return;
|
|
29
|
+
const chargedCredits = Number(charged) || 0;
|
|
29
30
|
creditUsage = {
|
|
30
|
-
charged: (creditUsage?.charged ?? 0) +
|
|
31
|
-
includedRemaining: remaining == null
|
|
31
|
+
charged: (creditUsage?.charged ?? 0) + chargedCredits,
|
|
32
|
+
includedRemaining: remaining == null
|
|
33
|
+
? creditUsage?.includedRemaining ?? null
|
|
34
|
+
: Math.max(0, (Number(remaining) || 0) - chargedCredits),
|
|
32
35
|
};
|
|
33
36
|
}
|
|
34
37
|
/** What this invocation's requests cost so far, then reset; `null` when no response carried a credit header. */
|
|
@@ -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;AASrD,SAAS,QAAQ,CAAC,IAAY,EAAE,MAAiC;IAC/D,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1D,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBACtC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAkB;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAQ,CAAC;IAC5D,OAAO,IAAI,QAAQ,CACjB,QAAQ,CAAC,MAAM,EACf,IAAI,EAAE,KAAK,IAAI,QAAQ,CAAC,UAAU,IAAI,eAAe,EACrD,IAAI,EAAE,OAAO,IAAI,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CACjE,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../src/client/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/** The Data API dashboard in the Invinite app (keys, usage, plan) — the APP origin, never the API's. */
|
|
2
2
|
export declare const DASHBOARD_URL = "https://invinite.com/data-api";
|
|
3
|
+
/** The Data API's public origin (REST, `/v1/ws`, MCP). */
|
|
4
|
+
export declare const DEFAULT_BASE_URL = "https://api.data.invinite.com";
|
|
5
|
+
/**
|
|
6
|
+
* Retired API origins. `conf` WRITES its defaults into the config file, so every install that ran an older version
|
|
7
|
+
* holds one of these as if the person had chosen it; `getBaseUrl()` rewrites it once. A host the person set
|
|
8
|
+
* themselves (`invd config set-url`) is never touched.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LEGACY_BASE_URLS: readonly string[];
|
|
3
11
|
export declare function getBaseUrl(): string;
|
|
4
12
|
export declare function setBaseUrl(url: string): void;
|
|
5
13
|
export declare function getStoredApiKey(): string | undefined;
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import Conf from 'conf';
|
|
2
2
|
/** The Data API dashboard in the Invinite app (keys, usage, plan) — the APP origin, never the API's. */
|
|
3
3
|
export const DASHBOARD_URL = 'https://invinite.com/data-api';
|
|
4
|
+
/** The Data API's public origin (REST, `/v1/ws`, MCP). */
|
|
5
|
+
export const DEFAULT_BASE_URL = 'https://api.data.invinite.com';
|
|
6
|
+
/**
|
|
7
|
+
* Retired API origins. `conf` WRITES its defaults into the config file, so every install that ran an older version
|
|
8
|
+
* holds one of these as if the person had chosen it; `getBaseUrl()` rewrites it once. A host the person set
|
|
9
|
+
* themselves (`invd config set-url`) is never touched.
|
|
10
|
+
*/
|
|
11
|
+
export const LEGACY_BASE_URLS = ['https://data.invinite.com'];
|
|
4
12
|
const config = new Conf({
|
|
5
13
|
projectName: 'invinite-data-cli',
|
|
14
|
+
// The test suite points this at a temp dir: its `resetConfig()` would otherwise clear the person's real config.
|
|
15
|
+
cwd: process.env.INVD_CONFIG_DIR || undefined,
|
|
6
16
|
schema: {
|
|
7
17
|
baseUrl: {
|
|
8
18
|
type: 'string',
|
|
9
|
-
default:
|
|
19
|
+
default: DEFAULT_BASE_URL,
|
|
10
20
|
},
|
|
11
21
|
apiKey: {
|
|
12
22
|
type: 'string',
|
|
@@ -15,7 +25,13 @@ const config = new Conf({
|
|
|
15
25
|
},
|
|
16
26
|
});
|
|
17
27
|
export function getBaseUrl() {
|
|
18
|
-
|
|
28
|
+
const stored = config.get('baseUrl');
|
|
29
|
+
if (!LEGACY_BASE_URLS.includes(stored.replace(/\/+$/, '')))
|
|
30
|
+
return stored;
|
|
31
|
+
config.set('baseUrl', DEFAULT_BASE_URL);
|
|
32
|
+
// stderr: `getBaseUrl()` runs inside `--json` commands, whose stdout is machine output.
|
|
33
|
+
console.error(`Updated API host to ${DEFAULT_BASE_URL}`);
|
|
34
|
+
return DEFAULT_BASE_URL;
|
|
19
35
|
}
|
|
20
36
|
export function setBaseUrl(url) {
|
|
21
37
|
config.set('baseUrl', url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,wGAAwG;AACxG,MAAM,CAAC,MAAM,aAAa,GAAG,+BAA+B,CAAC;AAE7D,MAAM,MAAM,GAAG,IAAI,IAAI,CAAe;IACpC,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE;QACN,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAOxB,wGAAwG;AACxG,MAAM,CAAC,MAAM,aAAa,GAAG,+BAA+B,CAAC;AAE7D,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,2BAA2B,CAAC,CAAC;AAEjF,MAAM,MAAM,GAAG,IAAI,IAAI,CAAe;IACpC,WAAW,EAAE,mBAAmB;IAChC,gHAAgH;IAChH,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,SAAS;IAC7C,MAAM,EAAE;QACN,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,gBAAgB;SAC1B;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;SACZ;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACxC,wFAAwF;IACxF,OAAO,CAAC,KAAK,CAAC,uBAAuB,gBAAgB,EAAE,CAAC,CAAC;IACzD,OAAO,gBAAgB,CAAC;AAC1B,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,kBAAkB;IAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,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"}
|