@vapi-network/core 0.2.3 → 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 +18 -5
- package/dist/accounts.d.ts.map +1 -1
- package/dist/agent-guard.d.ts +40 -0
- package/dist/agent-guard.d.ts.map +1 -0
- package/dist/agent-link.d.ts +98 -0
- package/dist/agent-link.d.ts.map +1 -0
- package/dist/agent-link.js +1715 -0
- package/dist/agent-link.js.map +6 -0
- package/dist/agent-profile.d.ts +27 -0
- package/dist/agent-profile.d.ts.map +1 -0
- package/dist/api-key.d.ts +99 -0
- package/dist/api-key.d.ts.map +1 -0
- package/dist/api-key.js +20084 -0
- package/dist/api-key.js.map +6 -0
- package/dist/audit.d.ts +44 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/authorization-state.d.ts +58 -0
- package/dist/authorization-state.d.ts.map +1 -0
- package/dist/call-contracts-wire.d.ts +151 -11
- package/dist/call-contracts-wire.d.ts.map +1 -1
- package/dist/config.d.ts +10 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/discovery.d.ts +20 -2
- package/dist/discovery.d.ts.map +1 -1
- package/dist/hd.d.ts +33 -0
- package/dist/hd.d.ts.map +1 -0
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25354 -954
- package/dist/index.js.map +3 -3
- package/dist/keystore.d.ts +94 -4
- package/dist/keystore.d.ts.map +1 -1
- package/dist/marketplace-contracts.d.ts +448 -15
- package/dist/marketplace-contracts.d.ts.map +1 -1
- package/dist/networks.d.ts +16 -2
- package/dist/networks.d.ts.map +1 -1
- package/dist/onramp.d.ts +12 -28
- package/dist/onramp.d.ts.map +1 -1
- package/dist/passphrase.d.ts +47 -0
- package/dist/passphrase.d.ts.map +1 -0
- package/dist/policy.d.ts +6 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/receipts.d.ts +40 -4
- package/dist/receipts.d.ts.map +1 -1
- package/dist/router-client.d.ts +117 -0
- package/dist/router-client.d.ts.map +1 -0
- package/dist/router-client.js +27421 -0
- package/dist/router-client.js.map +6 -0
- package/dist/secret-store.d.ts +60 -0
- package/dist/secret-store.d.ts.map +1 -0
- package/dist/secrets.d.ts +14 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +47238 -0
- package/dist/secrets.js.map +6 -0
- package/dist/spend-policy.d.ts +13 -1
- package/dist/spend-policy.d.ts.map +1 -1
- package/dist/stats.d.ts +3 -2
- package/dist/stats.d.ts.map +1 -1
- package/dist/support-report.d.ts +1 -1
- package/dist/sweep.d.ts +4 -0
- package/dist/sweep.d.ts.map +1 -1
- package/dist/wallet-name.d.ts +18 -0
- package/dist/wallet-name.d.ts.map +1 -0
- package/dist/wallet-store.d.ts +220 -0
- package/dist/wallet-store.d.ts.map +1 -0
- package/dist/wallet.d.ts +0 -5
- package/dist/wallet.d.ts.map +1 -1
- package/dist/x402-networks.d.ts +6 -9
- package/dist/x402-networks.d.ts.map +1 -1
- package/dist/x402-pay.d.ts +131 -0
- package/dist/x402-pay.d.ts.map +1 -0
- package/dist/x402.d.ts +20 -1
- package/dist/x402.d.ts.map +1 -1
- package/package.json +17 -1
package/README.md
CHANGED
|
@@ -1,7 +1,20 @@
|
|
|
1
|
-
#
|
|
1
|
+
# `@vapi-network/core`
|
|
2
2
|
|
|
3
|
-
The non-custodial
|
|
4
|
-
|
|
3
|
+
The non-custodial heart of [vAPI Network](https://github.com/vAPI-Network/vapi-network):
|
|
4
|
+
the x402 protocol, the wallet store, spend policy, the network guard, discovery
|
|
5
|
+
merge and the append-only receipt ledger. Keys stay on the caller's machine.
|
|
6
|
+
This package proxies no payment and sends no telemetry.
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
Two entry points:
|
|
9
|
+
|
|
10
|
+
- `@vapi-network/core` — everything an agent-driven surface may use: accounts,
|
|
11
|
+
balances, `WalletStore`, `SpendPolicy`, `resolvePassphrase`, receipts, stats
|
|
12
|
+
and the x402 primitives.
|
|
13
|
+
- `@vapi-network/core/secrets` — human-only. `exportRecoveryPhrase`,
|
|
14
|
+
`exportKeystoreKeys`, `createKeystoreWithPhrase` and `decryptPrivateKey`
|
|
15
|
+
return a recovery phrase or a private key, so they are deliberately not
|
|
16
|
+
re-exported from the main index and the MCP package is forbidden to import
|
|
17
|
+
them.
|
|
18
|
+
|
|
19
|
+
See the [root README](https://github.com/vAPI-Network/vapi-network#readme) for
|
|
20
|
+
the SDK examples, the configuration layout and the custody model.
|
package/dist/accounts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../src/accounts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAa/C,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG;IAC7C,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,4BAA4B,KAClC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CAC5D,CAAC;AAKF,sFAAsF;AACtF,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyCjF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether this run may put a secret on the screen.
|
|
3
|
+
*
|
|
4
|
+
* A recovery phrase, a private key and a passphrase are the only secrets vAPI
|
|
5
|
+
* has, and an agent never needs one to pay for an API. So they are shown only
|
|
6
|
+
* when a person is demonstrably present: stdin and stdout are both a real
|
|
7
|
+
* terminal, and no environment variable says an agent or a CI job is driving
|
|
8
|
+
* the command. Addresses, balances, receipts and wallet names are not secrets
|
|
9
|
+
* and are never gated here.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The variables that mean "something other than a person is reading this".
|
|
13
|
+
* `VAPI_NO_SECRETS` is the documented way to lock down a machine's agent
|
|
14
|
+
* configuration; the rest are set by the agents and CI systems themselves.
|
|
15
|
+
*/
|
|
16
|
+
export declare const AGENT_MARKER_VARIABLES: readonly ["VAPI_NO_SECRETS", "CLAUDECODE", "CLAUDE_CODE", "CURSOR_AGENT", "CODEX_SANDBOX", "OPENAI_CODEX", "AGENT", "CI"];
|
|
17
|
+
export type AgentMarker = (typeof AGENT_MARKER_VARIABLES)[number];
|
|
18
|
+
/** Whether each standard stream is attached to a terminal. */
|
|
19
|
+
export type SecretsStreams = {
|
|
20
|
+
stdinIsTTY: boolean;
|
|
21
|
+
stdoutIsTTY: boolean;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The verdict. `reason` is written to be shown to a person directly after the
|
|
25
|
+
* refusal line, so it names the stream or the variable that decided it.
|
|
26
|
+
*/
|
|
27
|
+
export type SecretsDecision = {
|
|
28
|
+
allowed: boolean;
|
|
29
|
+
reason?: string;
|
|
30
|
+
marker?: AgentMarker;
|
|
31
|
+
};
|
|
32
|
+
/** The first marker variable this environment sets to a non-empty value. */
|
|
33
|
+
export declare function activeAgentMarker(env: NodeJS.ProcessEnv): AgentMarker | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Decides whether a secret may be printed. Both streams must be a terminal,
|
|
36
|
+
* because a redirected stdout writes the secret into a file and a piped stdin
|
|
37
|
+
* means the answers are scripted; then no agent marker may be set.
|
|
38
|
+
*/
|
|
39
|
+
export declare function secretsAllowed(env: NodeJS.ProcessEnv, streams: SecretsStreams): SecretsDecision;
|
|
40
|
+
//# sourceMappingURL=agent-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-guard.d.ts","sourceRoot":"","sources":["../src/agent-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,2HASzB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GAAG;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,WAAW,GAAG,SAAS,CAEjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe,CAY/F"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { SecretStore } from "./secret-store.js";
|
|
2
|
+
import type { AgentLink, WalletName, WalletStore } from "./wallet-store.js";
|
|
3
|
+
export declare const AGENT_LINK_STATEMENT = "Link this wallet to a vAPI account as an agent.";
|
|
4
|
+
export declare const AGENT_LINK_REVOKED_MESSAGE = "This agent's link was revoked or has expired. Run vapi login to link it again.";
|
|
5
|
+
export type DeviceLinkStart = {
|
|
6
|
+
clientId: string;
|
|
7
|
+
deviceCode: string;
|
|
8
|
+
userCode: string;
|
|
9
|
+
verificationUri: string;
|
|
10
|
+
verificationUriComplete: string;
|
|
11
|
+
expiresIn: number;
|
|
12
|
+
interval: number;
|
|
13
|
+
};
|
|
14
|
+
export type AgentTokens = {
|
|
15
|
+
accessToken: string;
|
|
16
|
+
refreshToken: string;
|
|
17
|
+
expiresAt: number;
|
|
18
|
+
scopes: string[];
|
|
19
|
+
};
|
|
20
|
+
export type LinkResult = {
|
|
21
|
+
tokens: AgentTokens;
|
|
22
|
+
owner: `0x${string}`;
|
|
23
|
+
routerKey?: string;
|
|
24
|
+
routerBaseUrl?: string;
|
|
25
|
+
routerKeyError?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare class AgentLinkError extends Error {
|
|
28
|
+
readonly code: "access_denied" | "expired_token" | "invalid_agent_signature" | "invalid_scope" | "not_linked" | "http";
|
|
29
|
+
constructor(code: "access_denied" | "expired_token" | "invalid_agent_signature" | "invalid_scope" | "not_linked" | "http", message: string);
|
|
30
|
+
}
|
|
31
|
+
export declare const DEFAULT_AGENT_SCOPES: readonly ["mcp:call", "router.use"];
|
|
32
|
+
export declare function startDeviceLink(args: {
|
|
33
|
+
apiBase: string;
|
|
34
|
+
account: {
|
|
35
|
+
address: `0x${string}`;
|
|
36
|
+
signMessage(a: {
|
|
37
|
+
message: string;
|
|
38
|
+
}): Promise<`0x${string}`>;
|
|
39
|
+
};
|
|
40
|
+
label: string;
|
|
41
|
+
scopes?: string[];
|
|
42
|
+
routerAllowanceUsd?: number;
|
|
43
|
+
fetchImpl?: typeof fetch;
|
|
44
|
+
now?: () => Date;
|
|
45
|
+
}): Promise<DeviceLinkStart>;
|
|
46
|
+
export declare function pollDeviceLink(args: {
|
|
47
|
+
apiBase: string;
|
|
48
|
+
start: DeviceLinkStart;
|
|
49
|
+
fetchImpl?: typeof fetch;
|
|
50
|
+
sleep?: (ms: number) => Promise<void>;
|
|
51
|
+
now?: () => number;
|
|
52
|
+
}): Promise<LinkResult>;
|
|
53
|
+
export declare const agentSecretAccounts: (wallet: WalletName) => {
|
|
54
|
+
tokens: string;
|
|
55
|
+
routerStake: string;
|
|
56
|
+
routerBalance: string;
|
|
57
|
+
};
|
|
58
|
+
/** Renames a linked wallet and its name-keyed credentials as one serialized operation. */
|
|
59
|
+
export declare function renameAgentLinkWallet(args: {
|
|
60
|
+
secrets: SecretStore;
|
|
61
|
+
wallets: WalletStore;
|
|
62
|
+
from: string;
|
|
63
|
+
to: string;
|
|
64
|
+
}): Promise<import("./wallet-store.js").ResolvedWallet>;
|
|
65
|
+
export declare function saveAgentLink(args: {
|
|
66
|
+
secrets: SecretStore;
|
|
67
|
+
wallets: WalletStore;
|
|
68
|
+
wallet: WalletName;
|
|
69
|
+
start: DeviceLinkStart;
|
|
70
|
+
result: LinkResult;
|
|
71
|
+
apiBase: string;
|
|
72
|
+
label: string;
|
|
73
|
+
home?: string;
|
|
74
|
+
}): Promise<AgentLink>;
|
|
75
|
+
export declare function agentAccessToken(args: {
|
|
76
|
+
secrets: SecretStore;
|
|
77
|
+
wallets: WalletStore;
|
|
78
|
+
wallet: WalletName;
|
|
79
|
+
fetchImpl?: typeof fetch;
|
|
80
|
+
now?: () => number;
|
|
81
|
+
}): Promise<string>;
|
|
82
|
+
export declare function agentFetch(args: {
|
|
83
|
+
secrets: SecretStore;
|
|
84
|
+
wallets: WalletStore;
|
|
85
|
+
wallet: WalletName;
|
|
86
|
+
fetchImpl?: typeof fetch;
|
|
87
|
+
now?: () => number;
|
|
88
|
+
}, url: string, init?: RequestInit): Promise<Response>;
|
|
89
|
+
export declare function forgetAgentLink(args: {
|
|
90
|
+
secrets: SecretStore;
|
|
91
|
+
wallets: WalletStore;
|
|
92
|
+
wallet: WalletName;
|
|
93
|
+
fetchImpl?: typeof fetch;
|
|
94
|
+
home?: string;
|
|
95
|
+
}): Promise<void>;
|
|
96
|
+
/** Serializes reads and writes of one agent link's credentials across processes. */
|
|
97
|
+
export declare function withAgentCredentialLock<T>(wallets: WalletStore, clientId: string, operation: () => Promise<T>): Promise<T>;
|
|
98
|
+
//# sourceMappingURL=agent-link.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-link.d.ts","sourceRoot":"","sources":["../src/agent-link.ts"],"names":[],"mappings":"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"}
|