@xona-labs/xpay 0.1.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/LICENSE +21 -0
- package/README.md +226 -0
- package/dist/cli/accounts.d.ts +13 -0
- package/dist/cli/accounts.d.ts.map +1 -0
- package/dist/cli/accounts.js +66 -0
- package/dist/cli/accounts.js.map +1 -0
- package/dist/cli/balance.d.ts +14 -0
- package/dist/cli/balance.d.ts.map +1 -0
- package/dist/cli/balance.js +60 -0
- package/dist/cli/balance.js.map +1 -0
- package/dist/cli/common.d.ts +20 -0
- package/dist/cli/common.d.ts.map +1 -0
- package/dist/cli/common.js +58 -0
- package/dist/cli/common.js.map +1 -0
- package/dist/cli/discover.d.ts +12 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +69 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/guardrail.d.ts +16 -0
- package/dist/cli/guardrail.d.ts.map +1 -0
- package/dist/cli/guardrail.js +71 -0
- package/dist/cli/guardrail.js.map +1 -0
- package/dist/cli/history.d.ts +16 -0
- package/dist/cli/history.d.ts.map +1 -0
- package/dist/cli/history.js +59 -0
- package/dist/cli/history.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +165 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +23 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +114 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/mcp-server.d.ts +26 -0
- package/dist/cli/mcp-server.d.ts.map +1 -0
- package/dist/cli/mcp-server.js +112 -0
- package/dist/cli/mcp-server.js.map +1 -0
- package/dist/cli/pay.d.ts +15 -0
- package/dist/cli/pay.d.ts.map +1 -0
- package/dist/cli/pay.js +76 -0
- package/dist/cli/pay.js.map +1 -0
- package/dist/cli/transfer.d.ts +19 -0
- package/dist/cli/transfer.d.ts.map +1 -0
- package/dist/cli/transfer.js +66 -0
- package/dist/cli/transfer.js.map +1 -0
- package/dist/discover/cache.d.ts +24 -0
- package/dist/discover/cache.d.ts.map +1 -0
- package/dist/discover/cache.js +94 -0
- package/dist/discover/cache.js.map +1 -0
- package/dist/discover/index.d.ts +21 -0
- package/dist/discover/index.d.ts.map +1 -0
- package/dist/discover/index.js +88 -0
- package/dist/discover/index.js.map +1 -0
- package/dist/discover/payai.d.ts +18 -0
- package/dist/discover/payai.d.ts.map +1 -0
- package/dist/discover/payai.js +56 -0
- package/dist/discover/payai.js.map +1 -0
- package/dist/do/index.d.ts +17 -0
- package/dist/do/index.d.ts.map +1 -0
- package/dist/do/index.js +32 -0
- package/dist/do/index.js.map +1 -0
- package/dist/guardrail/index.d.ts +47 -0
- package/dist/guardrail/index.d.ts.map +1 -0
- package/dist/guardrail/index.js +99 -0
- package/dist/guardrail/index.js.map +1 -0
- package/dist/history/evm.d.ts +21 -0
- package/dist/history/evm.d.ts.map +1 -0
- package/dist/history/evm.js +118 -0
- package/dist/history/evm.js.map +1 -0
- package/dist/history/index.d.ts +19 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +45 -0
- package/dist/history/index.js.map +1 -0
- package/dist/history/solana.d.ts +20 -0
- package/dist/history/solana.d.ts.map +1 -0
- package/dist/history/solana.js +97 -0
- package/dist/history/solana.js.map +1 -0
- package/dist/history/types.d.ts +26 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/history/types.js +10 -0
- package/dist/history/types.js.map +1 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/profile/derive.d.ts +28 -0
- package/dist/profile/derive.d.ts.map +1 -0
- package/dist/profile/derive.js +75 -0
- package/dist/profile/derive.js.map +1 -0
- package/dist/profile/index.d.ts +74 -0
- package/dist/profile/index.d.ts.map +1 -0
- package/dist/profile/index.js +115 -0
- package/dist/profile/index.js.map +1 -0
- package/dist/profile/storage.d.ts +35 -0
- package/dist/profile/storage.d.ts.map +1 -0
- package/dist/profile/storage.js +162 -0
- package/dist/profile/storage.js.map +1 -0
- package/dist/profile/types.d.ts +69 -0
- package/dist/profile/types.d.ts.map +1 -0
- package/dist/profile/types.js +9 -0
- package/dist/profile/types.js.map +1 -0
- package/dist/signers/index.d.ts +5 -0
- package/dist/signers/index.d.ts.map +1 -0
- package/dist/signers/index.js +5 -0
- package/dist/signers/index.js.map +1 -0
- package/dist/signers/phantom.d.ts +14 -0
- package/dist/signers/phantom.d.ts.map +1 -0
- package/dist/signers/phantom.js +12 -0
- package/dist/signers/phantom.js.map +1 -0
- package/dist/signers/privy.d.ts +20 -0
- package/dist/signers/privy.d.ts.map +1 -0
- package/dist/signers/privy.js +15 -0
- package/dist/signers/privy.js.map +1 -0
- package/dist/signers/raw-evm.d.ts +15 -0
- package/dist/signers/raw-evm.d.ts.map +1 -0
- package/dist/signers/raw-evm.js +70 -0
- package/dist/signers/raw-evm.js.map +1 -0
- package/dist/signers/raw-solana.d.ts +15 -0
- package/dist/signers/raw-solana.d.ts.map +1 -0
- package/dist/signers/raw-solana.js +88 -0
- package/dist/signers/raw-solana.js.map +1 -0
- package/dist/tools/index.d.ts +48 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +164 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/transfer/index.d.ts +30 -0
- package/dist/transfer/index.d.ts.map +1 -0
- package/dist/transfer/index.js +86 -0
- package/dist/transfer/index.js.map +1 -0
- package/dist/types.d.ts +203 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +56 -0
- package/dist/types.js.map +1 -0
- package/dist/use/index.d.ts +38 -0
- package/dist/use/index.d.ts.map +1 -0
- package/dist/use/index.js +173 -0
- package/dist/use/index.js.map +1 -0
- package/dist/wallet/index.d.ts +31 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +56 -0
- package/dist/wallet/index.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xpay guardrail show|set|clear` — view and edit the active profile's
|
|
3
|
+
* spending guardrail. Persisted to config.json; loaded by every command that
|
|
4
|
+
* builds a runtime client.
|
|
5
|
+
*/
|
|
6
|
+
import chalk from "chalk";
|
|
7
|
+
import { clearProfileGuardrail, readProfileConfig, setProfileGuardrail, } from "../profile/index.js";
|
|
8
|
+
import { getActiveProfile } from "./accounts.js";
|
|
9
|
+
export function runGuardrailShow(profileName) {
|
|
10
|
+
const name = profileName ?? getActiveProfile();
|
|
11
|
+
const config = readProfileConfig(name);
|
|
12
|
+
const g = config.guardrail;
|
|
13
|
+
console.log("");
|
|
14
|
+
console.log(chalk.bold(`Guardrail for "${name}"`));
|
|
15
|
+
if (!g || Object.keys(g).length === 0) {
|
|
16
|
+
console.log(chalk.yellow(" (no guardrail configured — calls are uncapped)"));
|
|
17
|
+
console.log(chalk.dim(" Set one with: xpay guardrail set --max-per-tx 1 --max-per-day 10"));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
console.log("");
|
|
21
|
+
if (g.maxPerTx !== undefined)
|
|
22
|
+
console.log(` max per tx $${g.maxPerTx.toFixed(4)}`);
|
|
23
|
+
if (g.maxPerDay !== undefined)
|
|
24
|
+
console.log(` max per 24h $${g.maxPerDay.toFixed(4)}`);
|
|
25
|
+
if (g.requireApprovalAbove !== undefined)
|
|
26
|
+
console.log(` approval above $${g.requireApprovalAbove.toFixed(4)}`);
|
|
27
|
+
if (g.allowedHosts?.length) {
|
|
28
|
+
console.log(` allowed hosts ${g.allowedHosts.join(", ")}`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.log(` allowed hosts ${chalk.dim("(any)")}`);
|
|
32
|
+
}
|
|
33
|
+
console.log("");
|
|
34
|
+
}
|
|
35
|
+
export function runGuardrailSet(opts) {
|
|
36
|
+
const name = opts.profile ?? getActiveProfile();
|
|
37
|
+
const patch = {};
|
|
38
|
+
if (opts.maxPerTx !== undefined)
|
|
39
|
+
patch.maxPerTx = parseDollarsOrExit(opts.maxPerTx, "--max-per-tx");
|
|
40
|
+
if (opts.maxPerDay !== undefined)
|
|
41
|
+
patch.maxPerDay = parseDollarsOrExit(opts.maxPerDay, "--max-per-day");
|
|
42
|
+
if (opts.requireApprovalAbove !== undefined)
|
|
43
|
+
patch.requireApprovalAbove = parseDollarsOrExit(opts.requireApprovalAbove, "--require-approval-above");
|
|
44
|
+
if (opts.allowedHosts !== undefined) {
|
|
45
|
+
patch.allowedHosts = opts.allowedHosts
|
|
46
|
+
.split(",")
|
|
47
|
+
.map((s) => s.trim())
|
|
48
|
+
.filter(Boolean);
|
|
49
|
+
}
|
|
50
|
+
if (Object.keys(patch).length === 0) {
|
|
51
|
+
console.error(chalk.red("✗ no fields provided. See `xpay guardrail set --help`."));
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
setProfileGuardrail(name, patch);
|
|
55
|
+
console.log(chalk.green(`✔ Guardrail updated for "${name}"`));
|
|
56
|
+
runGuardrailShow(name);
|
|
57
|
+
}
|
|
58
|
+
export function runGuardrailClear(profileName) {
|
|
59
|
+
const name = profileName ?? getActiveProfile();
|
|
60
|
+
clearProfileGuardrail(name);
|
|
61
|
+
console.log(chalk.yellow(`⚠ Guardrail cleared for "${name}" — calls are now uncapped.`));
|
|
62
|
+
}
|
|
63
|
+
function parseDollarsOrExit(raw, flag) {
|
|
64
|
+
const n = Number(raw);
|
|
65
|
+
if (!Number.isFinite(n) || n < 0) {
|
|
66
|
+
console.error(chalk.red(`✗ ${flag} must be a non-negative number (got "${raw}")`));
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
return n;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=guardrail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guardrail.js","sourceRoot":"","sources":["../../src/cli/guardrail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xpay history` — recent USDC activity across all configured networks.
|
|
3
|
+
*
|
|
4
|
+
* Public-RPC powered by default. EVM scans a recent block window
|
|
5
|
+
* (~100k blocks ≈ 2 days on Base); pass --evm-window to widen.
|
|
6
|
+
*/
|
|
7
|
+
export interface HistoryCmdOptions {
|
|
8
|
+
profile?: string;
|
|
9
|
+
passphrase?: string;
|
|
10
|
+
network?: string;
|
|
11
|
+
limit?: string;
|
|
12
|
+
evmWindow?: string;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function runHistory(opts: HistoryCmdOptions): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DvE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xpay history` — recent USDC activity across all configured networks.
|
|
3
|
+
*
|
|
4
|
+
* Public-RPC powered by default. EVM scans a recent block window
|
|
5
|
+
* (~100k blocks ≈ 2 days on Base); pass --evm-window to widen.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { createXPay } from "../index.js";
|
|
9
|
+
import { unlockActive, shortAddress, timeAgo, formatUsd } from "./common.js";
|
|
10
|
+
export async function runHistory(opts) {
|
|
11
|
+
const profile = await unlockActive(opts);
|
|
12
|
+
const xpay = createXPay({ profile });
|
|
13
|
+
const limit = opts.limit ? Number(opts.limit) : 25;
|
|
14
|
+
const networks = opts.network ? [opts.network] : undefined;
|
|
15
|
+
const evmBlockWindow = opts.evmWindow ? Number(opts.evmWindow) : undefined;
|
|
16
|
+
const t0 = Date.now();
|
|
17
|
+
let entries;
|
|
18
|
+
try {
|
|
19
|
+
entries = await xpay.history({ limit, networks, evmBlockWindow });
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
console.error(chalk.red(`✗ ${err.message}`));
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const elapsed = Date.now() - t0;
|
|
26
|
+
if (opts.json) {
|
|
27
|
+
process.stdout.write(JSON.stringify(entries, null, 2) + "\n");
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (entries.length === 0) {
|
|
31
|
+
console.log(chalk.yellow("No USDC activity in the scanned window."));
|
|
32
|
+
console.log(chalk.dim("Tip: widen the EVM window with --evm-window 500000, or run `xpay balance`."));
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
console.log("");
|
|
36
|
+
console.log(chalk.dim(`${entries.length} entr${entries.length === 1 ? "y" : "ies"} (${elapsed}ms)`));
|
|
37
|
+
console.log("");
|
|
38
|
+
// Header
|
|
39
|
+
console.log(chalk.dim(" TIME".padEnd(12) +
|
|
40
|
+
"NETWORK".padEnd(10) +
|
|
41
|
+
"DIR".padEnd(10) +
|
|
42
|
+
"AMOUNT".padEnd(14) +
|
|
43
|
+
"COUNTERPARTY".padEnd(18) +
|
|
44
|
+
"TX"));
|
|
45
|
+
for (const e of entries) {
|
|
46
|
+
const dir = e.direction === "send" ? chalk.red("→ send") : chalk.green("← recv");
|
|
47
|
+
const amount = formatUsd(e.amountUsdc).padEnd(20); // padEnd ignores ANSI codes
|
|
48
|
+
console.log(" " +
|
|
49
|
+
timeAgo(e.timestamp).padEnd(12) +
|
|
50
|
+
chalk.cyan(e.network.padEnd(10)) +
|
|
51
|
+
dir.padEnd(18) + // padEnd ignores ANSI
|
|
52
|
+
formatUsd(e.amountUsdc).padEnd(20) +
|
|
53
|
+
chalk.white(shortAddress(e.counterparty, 6, 6).padEnd(18)) +
|
|
54
|
+
chalk.dim(shortAddress(e.signature, 6, 6)));
|
|
55
|
+
void amount;
|
|
56
|
+
}
|
|
57
|
+
console.log("");
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/cli/history.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* xpay CLI — agentic-commerce wallet.
|
|
4
|
+
*
|
|
5
|
+
* Top-level commands:
|
|
6
|
+
* xpay init [--import] [--no-encrypt] [--workspace]
|
|
7
|
+
* xpay accounts list|show|use
|
|
8
|
+
* xpay balance [--network solana|base|...]
|
|
9
|
+
* xpay mcp (default: start MCP server on stdio)
|
|
10
|
+
*
|
|
11
|
+
* More to come: discover, pay, transfer, history, bridge, guardrail, link.
|
|
12
|
+
*
|
|
13
|
+
* Designed to also run as the MCP server entry point (the `bin` field points
|
|
14
|
+
* here) — invoking `xpay-mcp` directly defaults to the `mcp` subcommand.
|
|
15
|
+
*/
|
|
16
|
+
import "dotenv/config";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,eAAe,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* xpay CLI — agentic-commerce wallet.
|
|
4
|
+
*
|
|
5
|
+
* Top-level commands:
|
|
6
|
+
* xpay init [--import] [--no-encrypt] [--workspace]
|
|
7
|
+
* xpay accounts list|show|use
|
|
8
|
+
* xpay balance [--network solana|base|...]
|
|
9
|
+
* xpay mcp (default: start MCP server on stdio)
|
|
10
|
+
*
|
|
11
|
+
* More to come: discover, pay, transfer, history, bridge, guardrail, link.
|
|
12
|
+
*
|
|
13
|
+
* Designed to also run as the MCP server entry point (the `bin` field points
|
|
14
|
+
* here) — invoking `xpay-mcp` directly defaults to the `mcp` subcommand.
|
|
15
|
+
*/
|
|
16
|
+
import "dotenv/config";
|
|
17
|
+
import { basename } from "node:path";
|
|
18
|
+
import { Command } from "commander";
|
|
19
|
+
import chalk from "chalk";
|
|
20
|
+
import { runInit } from "./init.js";
|
|
21
|
+
import { runAccountsList, runAccountsShow, runAccountsUse } from "./accounts.js";
|
|
22
|
+
import { runBalance } from "./balance.js";
|
|
23
|
+
import { runDiscover } from "./discover.js";
|
|
24
|
+
import { runPay } from "./pay.js";
|
|
25
|
+
import { runHistory } from "./history.js";
|
|
26
|
+
import { runTransfer } from "./transfer.js";
|
|
27
|
+
import { runGuardrailShow, runGuardrailSet, runGuardrailClear } from "./guardrail.js";
|
|
28
|
+
import { startMcpServer } from "./mcp-server.js";
|
|
29
|
+
const program = new Command();
|
|
30
|
+
program
|
|
31
|
+
.name("xpay")
|
|
32
|
+
.description("xPay — discovery, payments, and wallet for agentic commerce.")
|
|
33
|
+
.version("0.1.0");
|
|
34
|
+
// ---------------------------------------------------------------- init
|
|
35
|
+
program
|
|
36
|
+
.command("init [name]")
|
|
37
|
+
.description("Create a new profile (Solana + EVM keys).")
|
|
38
|
+
.option("--import", "Import an existing recovery phrase instead of generating one")
|
|
39
|
+
.option("--no-encrypt", "Skip passphrase encryption (dev wallets only)")
|
|
40
|
+
.option("--workspace", "Store under <cwd>/.xpay/ instead of ~/.xpay/")
|
|
41
|
+
.option("--overwrite", "Replace an existing profile with the same name")
|
|
42
|
+
.option("--passphrase <value>", "Non-interactive passphrase (scripts/tests)")
|
|
43
|
+
.option("--mnemonic <phrase>", "Non-interactive mnemonic (scripts/tests)")
|
|
44
|
+
.action(async (name, opts) => {
|
|
45
|
+
await runInit({ name, ...opts });
|
|
46
|
+
});
|
|
47
|
+
// ---------------------------------------------------------------- accounts
|
|
48
|
+
const accounts = program
|
|
49
|
+
.command("accounts")
|
|
50
|
+
.description("Manage local profiles.");
|
|
51
|
+
accounts
|
|
52
|
+
.command("list", { isDefault: true })
|
|
53
|
+
.description("List all profiles in ~/.xpay/.")
|
|
54
|
+
.action(() => runAccountsList());
|
|
55
|
+
accounts
|
|
56
|
+
.command("show [name]")
|
|
57
|
+
.description("Show addresses + metadata for a profile.")
|
|
58
|
+
.action((name) => runAccountsShow(name));
|
|
59
|
+
accounts
|
|
60
|
+
.command("use <name>")
|
|
61
|
+
.description("Set the active profile.")
|
|
62
|
+
.action((name) => runAccountsUse(name));
|
|
63
|
+
// ---------------------------------------------------------------- discover
|
|
64
|
+
program
|
|
65
|
+
.command("discover [query]")
|
|
66
|
+
.description("Search the agentic-commerce catalog (PayAI + sources).")
|
|
67
|
+
.option("--limit <n>", "Max results (default 10)")
|
|
68
|
+
.option("--network <net>", "Filter by network (solana, base, ...)")
|
|
69
|
+
.option("--json", "Emit raw JSON instead of the table view")
|
|
70
|
+
.action(async (query, opts) => {
|
|
71
|
+
await runDiscover(query, opts);
|
|
72
|
+
});
|
|
73
|
+
// ---------------------------------------------------------------- pay
|
|
74
|
+
program
|
|
75
|
+
.command("pay <url>")
|
|
76
|
+
.description("Pay an x402 endpoint (catalog URL or any URL that returns 402).")
|
|
77
|
+
.option("--profile <name>", "Profile to pay from (defaults to active)")
|
|
78
|
+
.option("--passphrase <value>", "Non-interactive passphrase")
|
|
79
|
+
.option("--max-usd <n>", "Override per-tx guardrail cap for this call")
|
|
80
|
+
.option("--body <json>", "Request body for POST endpoints (JSON)")
|
|
81
|
+
.option("-y, --yes", "Skip the confirmation prompt")
|
|
82
|
+
.action(async (url, opts) => {
|
|
83
|
+
await runPay(url, opts);
|
|
84
|
+
});
|
|
85
|
+
// ---------------------------------------------------------------- history
|
|
86
|
+
program
|
|
87
|
+
.command("history")
|
|
88
|
+
.description("Recent USDC activity across all configured networks.")
|
|
89
|
+
.option("--profile <name>", "Profile to query (defaults to active)")
|
|
90
|
+
.option("--passphrase <value>", "Non-interactive passphrase")
|
|
91
|
+
.option("--network <net>", "Restrict to one network")
|
|
92
|
+
.option("--limit <n>", "Max entries (default 25)")
|
|
93
|
+
.option("--evm-window <blocks>", "Block window for EVM scans (default 100000)")
|
|
94
|
+
.option("--json", "Emit raw JSON")
|
|
95
|
+
.action(async (opts) => {
|
|
96
|
+
await runHistory(opts);
|
|
97
|
+
});
|
|
98
|
+
// ---------------------------------------------------------------- transfer
|
|
99
|
+
program
|
|
100
|
+
.command("transfer <amount> <token> <to>")
|
|
101
|
+
.description("Send USDC to an address (no x402). Subject to the active guardrail.")
|
|
102
|
+
.option("--profile <name>", "Profile to send from (defaults to active)")
|
|
103
|
+
.option("--passphrase <value>", "Non-interactive passphrase")
|
|
104
|
+
.option("--network <net>", "Force network (solana, base, ethereum, ...)")
|
|
105
|
+
.option("-y, --yes", "Skip the confirmation prompt")
|
|
106
|
+
.action(async (amount, token, to, opts) => {
|
|
107
|
+
await runTransfer(amount, token, to, opts);
|
|
108
|
+
});
|
|
109
|
+
// ---------------------------------------------------------------- guardrail
|
|
110
|
+
const guardrail = program
|
|
111
|
+
.command("guardrail")
|
|
112
|
+
.description("Inspect or edit spending caps for the active profile.");
|
|
113
|
+
guardrail
|
|
114
|
+
.command("show [profile]", { isDefault: true })
|
|
115
|
+
.description("Print the current guardrail config.")
|
|
116
|
+
.action((profile) => runGuardrailShow(profile));
|
|
117
|
+
guardrail
|
|
118
|
+
.command("set")
|
|
119
|
+
.description("Update guardrail fields. Unspecified fields are left alone.")
|
|
120
|
+
.option("--profile <name>", "Profile to edit (defaults to active)")
|
|
121
|
+
.option("--max-per-tx <usd>", "Hard cap per single call (USD)")
|
|
122
|
+
.option("--max-per-day <usd>", "Hard cap per rolling 24h (USD)")
|
|
123
|
+
.option("--require-approval-above <usd>", "Calls ≥ USD require an approval hook (set in SDK)")
|
|
124
|
+
.option("--allowed-hosts <list>", "Comma-separated host globs (use '*' to allow any)")
|
|
125
|
+
.action((opts) => runGuardrailSet(opts));
|
|
126
|
+
guardrail
|
|
127
|
+
.command("clear [profile]")
|
|
128
|
+
.description("Remove the guardrail entirely.")
|
|
129
|
+
.action((profile) => runGuardrailClear(profile));
|
|
130
|
+
// ---------------------------------------------------------------- balance
|
|
131
|
+
program
|
|
132
|
+
.command("balance")
|
|
133
|
+
.description("Show USDC balance per network for the active profile.")
|
|
134
|
+
.option("--profile <name>", "Profile to query (defaults to active)")
|
|
135
|
+
.option("--network <net>", "Restrict to one network (solana, base, ...)")
|
|
136
|
+
.option("--passphrase <value>", "Non-interactive passphrase")
|
|
137
|
+
.action(async (opts) => {
|
|
138
|
+
await runBalance(opts);
|
|
139
|
+
});
|
|
140
|
+
// ---------------------------------------------------------------- mcp
|
|
141
|
+
program
|
|
142
|
+
.command("mcp")
|
|
143
|
+
.description("Start the MCP server on stdio (for Claude Desktop / Cursor / Codex).")
|
|
144
|
+
.action(async () => {
|
|
145
|
+
process.stderr.write(chalk.cyan("[xpay-mcp] starting...\n"));
|
|
146
|
+
try {
|
|
147
|
+
await startMcpServer();
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
process.stderr.write(chalk.red(`[xpay-mcp] fatal: ${err.message}\n`));
|
|
151
|
+
process.exit(1);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
// ---------------------------------------------------------------- run
|
|
155
|
+
// When invoked as `xpay-mcp` (or any binary name containing "mcp"), default to
|
|
156
|
+
// the MCP server so MCP hosts don't need a subcommand in their config.
|
|
157
|
+
const invokedAs = basename(process.argv[1] ?? "");
|
|
158
|
+
if (invokedAs.includes("mcp") && process.argv.length <= 2) {
|
|
159
|
+
process.argv.push("mcp");
|
|
160
|
+
}
|
|
161
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
162
|
+
process.stderr.write(chalk.red(`xpay: ${err}\n`));
|
|
163
|
+
process.exit(1);
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xpay init` — create a new profile (or import one).
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Confirm profile name (default: "default") + workspace flag.
|
|
6
|
+
* 2. Either generate a fresh 24-word mnemonic or accept --import.
|
|
7
|
+
* 3. Prompt for passphrase (twice, with confirmation) unless --no-encrypt.
|
|
8
|
+
* 4. Write wallet.json + config.json under ~/.xpay/<name>/ (mode 0700).
|
|
9
|
+
* 5. Print addresses + force user to acknowledge the seed phrase.
|
|
10
|
+
*/
|
|
11
|
+
export interface InitCmdOptions {
|
|
12
|
+
name?: string;
|
|
13
|
+
import?: boolean;
|
|
14
|
+
noEncrypt?: boolean;
|
|
15
|
+
workspace?: boolean;
|
|
16
|
+
overwrite?: boolean;
|
|
17
|
+
/** Non-interactive passphrase (for scripts/tests). */
|
|
18
|
+
passphrase?: string;
|
|
19
|
+
/** Non-interactive mnemonic (for scripts/tests). */
|
|
20
|
+
mnemonic?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function runInit(opts: InitCmdOptions): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGjE"}
|
package/dist/cli/init.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `xpay init` — create a new profile (or import one).
|
|
3
|
+
*
|
|
4
|
+
* Flow:
|
|
5
|
+
* 1. Confirm profile name (default: "default") + workspace flag.
|
|
6
|
+
* 2. Either generate a fresh 24-word mnemonic or accept --import.
|
|
7
|
+
* 3. Prompt for passphrase (twice, with confirmation) unless --no-encrypt.
|
|
8
|
+
* 4. Write wallet.json + config.json under ~/.xpay/<name>/ (mode 0700).
|
|
9
|
+
* 5. Print addresses + force user to acknowledge the seed phrase.
|
|
10
|
+
*/
|
|
11
|
+
import chalk from "chalk";
|
|
12
|
+
import inquirer from "inquirer";
|
|
13
|
+
import { initProfile, profileExists } from "../profile/index.js";
|
|
14
|
+
import { assertValidMnemonic } from "../profile/derive.js";
|
|
15
|
+
export async function runInit(opts) {
|
|
16
|
+
const name = opts.name ?? "default";
|
|
17
|
+
if (profileExists(name, { workspace: opts.workspace }) && !opts.overwrite) {
|
|
18
|
+
console.error(chalk.red(`✗ Profile "${name}" already exists.`) +
|
|
19
|
+
` Pass --overwrite to replace it (you will lose access to the old wallet).`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
// --- Mnemonic ---
|
|
23
|
+
let mnemonic = opts.mnemonic;
|
|
24
|
+
if (opts.import && !mnemonic) {
|
|
25
|
+
const answer = await inquirer.prompt([
|
|
26
|
+
{
|
|
27
|
+
type: "input",
|
|
28
|
+
name: "mnemonic",
|
|
29
|
+
message: "Paste your 12- or 24-word recovery phrase:",
|
|
30
|
+
filter: (v) => v.trim().toLowerCase().replace(/\s+/g, " "),
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
mnemonic = answer.mnemonic;
|
|
34
|
+
}
|
|
35
|
+
if (mnemonic) {
|
|
36
|
+
try {
|
|
37
|
+
assertValidMnemonic(mnemonic);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error(chalk.red(`✗ ${err.message}`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// --- Passphrase ---
|
|
45
|
+
let passphrase = opts.passphrase;
|
|
46
|
+
if (!opts.noEncrypt && passphrase === undefined) {
|
|
47
|
+
const { p1, p2 } = await inquirer.prompt([
|
|
48
|
+
{
|
|
49
|
+
type: "password",
|
|
50
|
+
name: "p1",
|
|
51
|
+
message: "Encryption passphrase (used to unlock this wallet):",
|
|
52
|
+
mask: "*",
|
|
53
|
+
validate: (v) => v.length >= 8 || "Use at least 8 characters (or pass --no-encrypt for dev wallets)",
|
|
54
|
+
},
|
|
55
|
+
{ type: "password", name: "p2", message: "Confirm passphrase:", mask: "*" },
|
|
56
|
+
]);
|
|
57
|
+
if (p1 !== p2) {
|
|
58
|
+
console.error(chalk.red("✗ Passphrases do not match."));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
passphrase = p1;
|
|
62
|
+
}
|
|
63
|
+
// --- Create ---
|
|
64
|
+
const result = await initProfile({
|
|
65
|
+
name,
|
|
66
|
+
mnemonic,
|
|
67
|
+
passphrase,
|
|
68
|
+
workspace: opts.workspace,
|
|
69
|
+
overwrite: opts.overwrite,
|
|
70
|
+
});
|
|
71
|
+
// --- Output ---
|
|
72
|
+
console.log("");
|
|
73
|
+
console.log(chalk.green(`✔ Profile "${result.name}" created at ${result.path}`));
|
|
74
|
+
console.log("");
|
|
75
|
+
console.log(chalk.bold("Addresses:"));
|
|
76
|
+
console.log(` Solana ${chalk.cyan(result.addresses.solana)}`);
|
|
77
|
+
console.log(` EVM ${chalk.cyan(result.addresses.evm)}`);
|
|
78
|
+
console.log("");
|
|
79
|
+
if (!opts.import) {
|
|
80
|
+
console.log(chalk.yellow.bold("⚠ RECOVERY PHRASE — write this down NOW. We cannot recover it for you."));
|
|
81
|
+
console.log("");
|
|
82
|
+
printMnemonicGrid(result.mnemonic);
|
|
83
|
+
console.log("");
|
|
84
|
+
if (process.stdin.isTTY && !opts.passphrase) {
|
|
85
|
+
const { ack } = await inquirer.prompt([
|
|
86
|
+
{
|
|
87
|
+
type: "confirm",
|
|
88
|
+
name: "ack",
|
|
89
|
+
message: "I have written down the recovery phrase in a safe place.",
|
|
90
|
+
default: false,
|
|
91
|
+
},
|
|
92
|
+
]);
|
|
93
|
+
if (!ack) {
|
|
94
|
+
console.log(chalk.yellow("Take your time. The phrase is also visible above."));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
console.log(chalk.dim("Next steps:"));
|
|
99
|
+
console.log(chalk.dim(" xpay balance # check funded balance"));
|
|
100
|
+
console.log(chalk.dim(" xpay discover foo # search the catalog"));
|
|
101
|
+
console.log(chalk.dim(" xpay pay <url> # pay an x402 endpoint"));
|
|
102
|
+
}
|
|
103
|
+
function printMnemonicGrid(mnemonic) {
|
|
104
|
+
const words = mnemonic.split(" ");
|
|
105
|
+
const cols = 4;
|
|
106
|
+
for (let i = 0; i < words.length; i += cols) {
|
|
107
|
+
const row = words
|
|
108
|
+
.slice(i, i + cols)
|
|
109
|
+
.map((w, j) => chalk.dim(`${String(i + j + 1).padStart(2)}.`) + ` ${chalk.bold(w.padEnd(12))}`)
|
|
110
|
+
.join(" ");
|
|
111
|
+
console.log(" " + row);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xPay MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Exposes every CLI capability as an MCP tool over stdio. Designed to be
|
|
5
|
+
* dropped into Claude Desktop / Cursor / Codex configs verbatim:
|
|
6
|
+
*
|
|
7
|
+
* {
|
|
8
|
+
* "mcpServers": {
|
|
9
|
+
* "xpay": {
|
|
10
|
+
* "command": "npx",
|
|
11
|
+
* "args": ["-y", "@xona-labs/xpay"],
|
|
12
|
+
* "env": { "XPAY_PASSPHRASE": "<your-passphrase>" }
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* Configuration via env:
|
|
18
|
+
* XPAY_PROFILE profile to load (default: active profile, else "default")
|
|
19
|
+
* XPAY_PASSPHRASE passphrase for encrypted wallets
|
|
20
|
+
* XPAY_HOME override ~/.xpay/ root (mirrors the CLI)
|
|
21
|
+
*
|
|
22
|
+
* For ephemeral / test setups you can still bypass profiles with:
|
|
23
|
+
* XPAY_SOLANA_SECRET, XPAY_EVM_KEY, XPAY_EVM_NETWORK
|
|
24
|
+
*/
|
|
25
|
+
export declare function startMcpServer(): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/cli/mcp-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAiBH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAsCpD"}
|