@paybox-sh/sdk 0.4.0 → 0.7.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 +43 -7
- package/dist/{chunk-7RGQEEY3.js → chunk-EBB4HNOB.js} +264 -17
- package/dist/chunk-EBB4HNOB.js.map +1 -0
- package/dist/cli.js +140 -25
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +175 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-7RGQEEY3.js.map +0 -1
package/dist/cli.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
loginLoopback,
|
|
10
10
|
openBrowser,
|
|
11
11
|
saveConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EBB4HNOB.js";
|
|
13
13
|
|
|
14
14
|
// src/cli.ts
|
|
15
15
|
import { spawnSync } from "node:child_process";
|
|
@@ -18,7 +18,7 @@ import { createInterface } from "node:readline/promises";
|
|
|
18
18
|
import { Command } from "commander";
|
|
19
19
|
var DEFAULT_BASE_URL = "https://api.paybox.sh";
|
|
20
20
|
var PKG = "@paybox-sh/sdk";
|
|
21
|
-
var VERSION = "0.
|
|
21
|
+
var VERSION = "0.7.0";
|
|
22
22
|
var program = new Command();
|
|
23
23
|
program.name("paybox").description("Paybox agent CLI \u2014 vaulted cards, wallets, and secrets for agents").version(VERSION).option("--base-url <url>", "API origin (default https://api.paybox.sh or stored)").option("--json", "machine-readable JSON output");
|
|
24
24
|
function jsonMode() {
|
|
@@ -72,6 +72,13 @@ async function run(fn) {
|
|
|
72
72
|
process.exitCode = 1;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
|
+
function warnIfUnsignable(c, status) {
|
|
76
|
+
if (status === "pending_signature" && !c.canSign) {
|
|
77
|
+
console.error(
|
|
78
|
+
"awaiting signatures but no signing key is set \u2014 run `paybox login --signing-key <pbxk1...>` or set PAYBOX_SIGNING_KEY, then poll `paybox request <id>`."
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
75
82
|
program.command("login").description("Authenticate via OAuth (browser + passkey), or store a pbx_live_ key").option("--key <key>", "store a pbx_live_ personal API key instead of OAuth").option("--signing-key <token>", "store a pbxk1. wallet signing key (skips the prompt)").option("--app-url <url>", "Paybox app origin for key provisioning (default: derived from --base-url)").option("--no-provision", "skip the wallet signing-key provisioning step").action(
|
|
76
83
|
(opts) => run(async () => {
|
|
77
84
|
const cfg = loadConfig();
|
|
@@ -165,34 +172,63 @@ program.command("sign").description("Sign with a wallet credential (intent JSON,
|
|
|
165
172
|
credentialId: o.credential,
|
|
166
173
|
intent: readIntent(o.intent)
|
|
167
174
|
});
|
|
168
|
-
|
|
169
|
-
console.error(
|
|
170
|
-
"request is awaiting a signature but no signing key is set \u2014 run `paybox login --signing-key <pbxk1...>` or set PAYBOX_SIGNING_KEY, then poll `paybox request <id>`."
|
|
171
|
-
);
|
|
172
|
-
}
|
|
175
|
+
warnIfUnsignable(c, res.status);
|
|
173
176
|
emit(res);
|
|
174
177
|
})
|
|
175
178
|
);
|
|
176
|
-
program.command("swap").description("Swap tokens from a wallet credential").requiredOption("--credential <id>").requiredOption("--src-chain <caip2>").requiredOption("--src-token <addr>", '"native" or a token address').requiredOption("--dst-token <addr>").requiredOption("--amount <smallest-unit>", "source amount in smallest units").option("--dst-chain <caip2>", "defaults to --src-chain").option("--direction <dir>", "exact-amount-in | exact-amount-out", "exact-amount-in").option("--slippage <bps>", "slippage in bps", "50").option("--recipient <addr>").option("--value-cents <n>").action(
|
|
179
|
+
program.command("swap").description("Swap tokens from a wallet credential").requiredOption("--credential <id>").requiredOption("--src-chain <caip2>").requiredOption("--src-token <addr>", '"native" or a token address').requiredOption("--dst-token <addr>").requiredOption("--amount <smallest-unit>", "source amount in smallest units").option("--dst-chain <caip2>", "defaults to --src-chain").option("--direction <dir>", "exact-amount-in | exact-amount-out", "exact-amount-in").option("--slippage <bps>", "slippage in bps", "50").option("--recipient <addr>").option("--value-cents <n>").option("--wait", "if approval is required, wait for it and then sign in-process").action(
|
|
177
180
|
(o) => run(async () => {
|
|
178
181
|
const c = client();
|
|
179
|
-
const result = await c.requestSwap(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
182
|
+
const result = await c.requestSwap(
|
|
183
|
+
{
|
|
184
|
+
credentialId: o.credential,
|
|
185
|
+
srcChain: o.srcChain,
|
|
186
|
+
dstChain: o.dstChain,
|
|
187
|
+
srcToken: o.srcToken,
|
|
188
|
+
dstToken: o.dstToken,
|
|
189
|
+
amount: o.amount,
|
|
190
|
+
swapDirection: o.direction,
|
|
191
|
+
slippageBps: int("slippage", o.slippage),
|
|
192
|
+
recipient: o.recipient,
|
|
193
|
+
valueCents: optInt("value-cents", o.valueCents)
|
|
194
|
+
},
|
|
195
|
+
{ waitForApproval: Boolean(o.wait) }
|
|
196
|
+
);
|
|
197
|
+
warnIfUnsignable(c, result.response.status);
|
|
198
|
+
emit(result);
|
|
199
|
+
})
|
|
200
|
+
);
|
|
201
|
+
program.command("discover [query]").description("Discover curated paid x402 services from Bazaar (optional search)").option("--raw", "return uncurated compact Bazaar service summaries (debug)").action(
|
|
202
|
+
(query, o) => run(async () => emit(await client().discoverServices(query, { raw: Boolean(o.raw) })))
|
|
203
|
+
);
|
|
204
|
+
program.command("pay-x402").description("Pay a paid x402 endpoint (header mode \u2014 returns the X-PAYMENT header to replay)").requiredOption("--credential <id>").requiredOption("--accepts <json>", "the 402's accepts[] array (JSON or @file)").requiredOption("--url <url>", "the paywalled resource URL").option("--wait", "if approval is required, wait for it and then sign in-process").action(
|
|
205
|
+
(o) => run(async () => {
|
|
206
|
+
const c = client();
|
|
207
|
+
const result = await c.payX402(
|
|
208
|
+
{
|
|
209
|
+
credentialId: o.credential,
|
|
210
|
+
accepts: readIntent(o.accepts),
|
|
211
|
+
resourceUrl: o.url
|
|
212
|
+
},
|
|
213
|
+
{ waitForApproval: Boolean(o.wait) }
|
|
214
|
+
);
|
|
215
|
+
warnIfUnsignable(c, result.response.status);
|
|
216
|
+
emit(result);
|
|
217
|
+
})
|
|
218
|
+
);
|
|
219
|
+
program.command("use-service").description("Fetch a paid x402 resource and have paybox pay for it (gateway mode)").requiredOption("--credential <id>").requiredOption("--url <url>", "the paid x402 resource URL").option("--method <verb>", "HTTP method", "GET").option("--body <json>", "request body (JSON or @file)").option("--wait", "if approval is required, wait for it and then sign in-process").action(
|
|
220
|
+
(o) => run(async () => {
|
|
221
|
+
const c = client();
|
|
222
|
+
const result = await c.useService(
|
|
223
|
+
{
|
|
224
|
+
credentialId: o.credential,
|
|
225
|
+
url: o.url,
|
|
226
|
+
method: o.method,
|
|
227
|
+
body: o.body === void 0 ? void 0 : readIntent(o.body)
|
|
228
|
+
},
|
|
229
|
+
{ waitForApproval: Boolean(o.wait) }
|
|
230
|
+
);
|
|
231
|
+
warnIfUnsignable(c, result.response.status);
|
|
196
232
|
emit(result);
|
|
197
233
|
})
|
|
198
234
|
);
|
|
@@ -201,6 +237,85 @@ program.command("portfolio").description("List a wallet address's token balances
|
|
|
201
237
|
async () => emit(await client().getPortfolio({ address: o.address, networkIds: o.networks }))
|
|
202
238
|
)
|
|
203
239
|
);
|
|
240
|
+
program.command("claim <request-id>").description("Claim the usable card credentials of an approved payment (one-time)").action((id) => run(async () => emit(await client().claimPaymentCredentials(id))));
|
|
241
|
+
program.command("account-change").description("Get a manage_url for the USER to update this client's access in the app").option("--note <text>", "why the change is needed (shown to the user)").action((o) => run(async () => emit(await client().requestAccountChange(o.note))));
|
|
242
|
+
program.command("buy-link").description("Signed MoonPay checkout URL funding a granted wallet (charges nothing)").requiredOption("--credential <id>", "a granted wallet credential").option("--currency <code>", "MoonPay currency code (default USDC on the wallet's chain)").option("--amount-usd <n>", "prefill amount in USD").action(
|
|
243
|
+
(o) => run(
|
|
244
|
+
async () => emit(
|
|
245
|
+
await client().getBuyLink({
|
|
246
|
+
credentialId: o.credential,
|
|
247
|
+
currencyCode: o.currency,
|
|
248
|
+
amountUsd: o.amountUsd === void 0 ? void 0 : Number(o.amountUsd)
|
|
249
|
+
})
|
|
250
|
+
)
|
|
251
|
+
)
|
|
252
|
+
);
|
|
253
|
+
var world = program.command("world").description("World prediction markets (requires the world plugin)");
|
|
254
|
+
world.command("markets").description("Browse markets (or events with --events)").option("--events", "list events (each groups its markets)").option("--limit <n>").option("--cursor <n>", "rows to skip; the response carries the next cursor").option("--event-ticker <ticker>").option("--series-ticker <ticker>").option("--status <status>", "active | initialized | determined | finalized").action(
|
|
255
|
+
(o) => run(
|
|
256
|
+
async () => emit(
|
|
257
|
+
await client().worldMarkets({
|
|
258
|
+
events: Boolean(o.events),
|
|
259
|
+
limit: optInt("limit", o.limit),
|
|
260
|
+
cursor: optInt("cursor", o.cursor),
|
|
261
|
+
eventTicker: o.eventTicker,
|
|
262
|
+
seriesTicker: o.seriesTicker,
|
|
263
|
+
status: o.status
|
|
264
|
+
})
|
|
265
|
+
)
|
|
266
|
+
)
|
|
267
|
+
);
|
|
268
|
+
world.command("market <event-ticker>").description("One event with its nested markets (disable with --no-nested)").option("--no-nested", "exclude the event's markets").action(
|
|
269
|
+
(ticker, o) => run(async () => emit(await client().worldMarket(ticker, Boolean(o.nested))))
|
|
270
|
+
);
|
|
271
|
+
world.command("orderbook <id>").description("A market's orderbook (id is a ticker, or a mint with --by-mint)").option("--by-mint", "look up by outcome mint instead of ticker").action(
|
|
272
|
+
(id, o) => run(async () => emit(await client().worldOrderbook(id, Boolean(o.byMint))))
|
|
273
|
+
);
|
|
274
|
+
world.command("prices <ticker>").description("A market's price history").requiredOption("--start <unix-ts>").requiredOption("--end <unix-ts>").option("--resolution <n>").action(
|
|
275
|
+
(ticker, o) => run(
|
|
276
|
+
async () => emit(
|
|
277
|
+
await client().worldPrices({
|
|
278
|
+
ticker,
|
|
279
|
+
startTs: int("start", o.start),
|
|
280
|
+
endTs: int("end", o.end),
|
|
281
|
+
resolution: optInt("resolution", o.resolution)
|
|
282
|
+
})
|
|
283
|
+
)
|
|
284
|
+
)
|
|
285
|
+
);
|
|
286
|
+
world.command("filter-mints <addresses...>").description("Filter addresses down to World outcome mints").action(
|
|
287
|
+
(addresses) => run(async () => emit(await client().worldFilterOutcomeMints(addresses)))
|
|
288
|
+
);
|
|
289
|
+
world.command("positions <address>").description("Solana token positions for an address").action((address) => run(async () => emit(await client().worldPositions(address))));
|
|
290
|
+
function worldTradeCommand(name, side, desc) {
|
|
291
|
+
const cmd = world.command(name).description(desc).requiredOption("--credential <id>", "a granted wallet credential (Solana)").requiredOption("--mint <addr>", "the outcome mint").requiredOption("--size <n>").option("--value-cents <n>").option("--wait", "wait for the user's approval, then sign in-process");
|
|
292
|
+
if (side !== "redeem") cmd.option("--slippage <bps>", "slippage in bps", "50");
|
|
293
|
+
cmd.action(
|
|
294
|
+
(o) => run(async () => {
|
|
295
|
+
const c = client();
|
|
296
|
+
const result = await c.worldTrade(
|
|
297
|
+
{
|
|
298
|
+
credentialId: o.credential,
|
|
299
|
+
marketMint: o.mint,
|
|
300
|
+
side,
|
|
301
|
+
size: o.size,
|
|
302
|
+
slippageBps: optInt("slippage", o.slippage),
|
|
303
|
+
valueCents: optInt("value-cents", o.valueCents)
|
|
304
|
+
},
|
|
305
|
+
{ waitForApproval: Boolean(o.wait) }
|
|
306
|
+
);
|
|
307
|
+
warnIfUnsignable(c, result.response.status);
|
|
308
|
+
emit(result);
|
|
309
|
+
})
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
worldTradeCommand("buy", "buy", "Buy an outcome (force-approved; approve in the app)");
|
|
313
|
+
worldTradeCommand("sell", "sell", "Sell an outcome position (force-approved)");
|
|
314
|
+
worldTradeCommand("redeem", "redeem", "Redeem a settled position (force-approved)");
|
|
315
|
+
var hyperliquid = program.command("hyperliquid").description("Hyperliquid spot discovery (requires the hyperliquid plugin)");
|
|
316
|
+
hyperliquid.command("markets").description("Spot markets").action(() => run(async () => emit(await client().hyperliquidMarkets())));
|
|
317
|
+
hyperliquid.command("prices").description("Spot prices").action(() => run(async () => emit(await client().hyperliquidPrices())));
|
|
318
|
+
hyperliquid.command("token <name>").description("Resolve one token by name").action((name) => run(async () => emit(await client().hyperliquidToken(name))));
|
|
204
319
|
program.command("request <id>").description("Poll a request's status").option("--wait", "block until it leaves the pending state").action(
|
|
205
320
|
(id, o) => run(async () => {
|
|
206
321
|
const c = client();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n// The `paybox` CLI — a thin wrapper over PayboxClient. Mirrors the MCP tools as\n// subcommands; `--json` on any command emits machine-readable output.\n\nimport { spawnSync } from \"node:child_process\";\nimport { readFileSync, rmSync } from \"node:fs\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport { Command } from \"commander\";\n\nimport { agentClientId, appBaseFrom, loginLoopback, openBrowser } from \"./auth.js\";\nimport { PayboxClient } from \"./client.js\";\nimport { configDir, configFile, loadConfig, saveConfig } from \"./config.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.paybox.sh\";\nconst PKG = \"@paybox-sh/sdk\";\nconst VERSION = \"0.4.0\";\n\nconst program = new Command();\nprogram\n .name(\"paybox\")\n .description(\"Paybox agent CLI — vaulted cards, wallets, and secrets for agents\")\n .version(VERSION)\n .option(\"--base-url <url>\", \"API origin (default https://api.paybox.sh or stored)\")\n .option(\"--json\", \"machine-readable JSON output\");\n\nfunction jsonMode(): boolean {\n return Boolean(program.opts().json);\n}\n\nfunction emit(data: unknown): void {\n if (jsonMode()) console.log(JSON.stringify(data, null, 2));\n else console.dir(data, { depth: null, colors: process.stdout.isTTY });\n}\n\nfunction client(): PayboxClient {\n return PayboxClient.fromConfig({ baseUrl: program.opts().baseUrl });\n}\n\nfunction readIntent(value: string): unknown {\n const raw = value.startsWith(\"@\") ? readFileSync(value.slice(1), \"utf8\") : value;\n return JSON.parse(raw);\n}\n\nfunction int(flag: string, value: string): number {\n const n = Number(value);\n if (!Number.isInteger(n)) {\n throw new Error(`--${flag} must be an integer, got ${JSON.stringify(value)}`);\n }\n return n;\n}\n\nfunction optInt(flag: string, value: string | undefined): number | undefined {\n return value === undefined ? undefined : int(flag, value);\n}\n\n/** True when semver `a` is strictly greater than `b` (plain x.y.z). */\nfunction isNewer(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const x = pa[i] ?? 0;\n const y = pb[i] ?? 0;\n if (x !== y) return x > y;\n }\n return false;\n}\n\nasync function prompt(question: string): Promise<string> {\n if (!process.stdin.isTTY) return \"\"; // non-interactive: skip\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n try {\n return (await rl.question(question)).trim();\n } finally {\n rl.close();\n }\n}\n\nasync function run(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n\nprogram\n .command(\"login\")\n .description(\"Authenticate via OAuth (browser + passkey), or store a pbx_live_ key\")\n .option(\"--key <key>\", \"store a pbx_live_ personal API key instead of OAuth\")\n .option(\"--signing-key <token>\", \"store a pbxk1. wallet signing key (skips the prompt)\")\n .option(\"--app-url <url>\", \"Paybox app origin for key provisioning (default: derived from --base-url)\")\n .option(\"--no-provision\", \"skip the wallet signing-key provisioning step\")\n .action((opts) =>\n run(async () => {\n const cfg = loadConfig();\n const baseUrl = (\n program.opts().baseUrl ??\n process.env.PAYBOX_API_URL ??\n cfg.baseUrl ??\n DEFAULT_BASE_URL\n ).replace(/\\/+$/, \"\");\n cfg.baseUrl = baseUrl;\n if (opts.appUrl) cfg.appUrl = opts.appUrl;\n\n // Step 1 — authenticate.\n if (opts.key) {\n cfg.apiKey = opts.key;\n delete cfg.oauth;\n } else {\n cfg.oauth = await loginLoopback(baseUrl);\n delete cfg.apiKey;\n }\n if (opts.signingKey) cfg.signingKey = opts.signingKey;\n saveConfig(cfg);\n console.error(`Saved credentials to ${configFile()}`);\n\n // Step 2 — provision a wallet signing key. Runs only after OAuth (the app\n // session is warm) and only when one wasn't supplied or disabled. The app\n // mints a key scoped to this agent and shows a `pbxk1.` token to paste back.\n if (!cfg.oauth || opts.signingKey || opts.provision === false) return;\n const cid = agentClientId(cfg.oauth.accessToken);\n const appBase = appBaseFrom(baseUrl, opts.appUrl ?? process.env.PAYBOX_APP_URL ?? cfg.appUrl);\n if (!cid || !appBase) {\n console.error(\n \"To enable wallet sign/swap, provision a signing key and run\\n\" +\n \" paybox login --signing-key <pbxk1...>\" +\n (cid && !appBase ? \" (or pass --app-url <paybox app origin>)\" : \"\"),\n );\n return;\n }\n const url = `${appBase}/agent-key?client_id=${cid}`;\n console.error(\n `\\nNext, provision a wallet signing key for this agent (needed for sign/swap):\\n ${url}\\n`,\n );\n openBrowser(url);\n const key = await prompt(\"Paste the pbxk1. signing key when ready (or Enter to skip): \");\n if (key) {\n cfg.signingKey = key;\n saveConfig(cfg);\n console.error(\"Signing key saved — sign/swap enabled.\");\n } else {\n console.error(\"Skipped — add it later with `paybox login --signing-key <pbxk1...>`.\");\n }\n }),\n );\n\nprogram\n .command(\"logout\")\n .description(\"Forget stored credentials\")\n .action(() =>\n run(async () => {\n const cfg = loadConfig();\n delete cfg.apiKey;\n delete cfg.oauth;\n delete cfg.signingKey;\n saveConfig(cfg);\n console.error(\"Logged out.\");\n }),\n );\n\nprogram\n .command(\"whoami\")\n .description(\"Show the configured endpoint, auth mode, and signing capability\")\n .action(() =>\n run(async () => {\n const cfg = loadConfig();\n const c = client();\n const mode = process.env.PAYBOX_ACCESS_TOKEN\n ? \"oauth (env token)\"\n : process.env.PAYBOX_API_KEY || cfg.apiKey\n ? \"api key\"\n : cfg.oauth\n ? \"oauth\"\n : \"none\";\n emit({ baseUrl: c.baseUrl, auth: mode, canSign: c.canSign, configFile: configFile() });\n }),\n );\n\nprogram\n .command(\"credentials\")\n .description(\"List the credentials this client may use\")\n .action(() => run(async () => emit(await client().listCredentials())));\n\nprogram\n .command(\"pay\")\n .description(\"Charge a card credential\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--merchant <name>\")\n .requiredOption(\"--url <url>\", \"real merchant URL the card is bound to\")\n .requiredOption(\"--amount <cents>\", \"amount in cents\")\n .option(\"--currency <code>\", \"ISO 4217 currency\", \"USD\")\n .action((o) =>\n run(async () =>\n emit(\n await client().requestPayment({\n credentialId: o.credential,\n merchant: o.merchant,\n merchantUrl: o.url,\n amountCents: int(\"amount\", o.amount),\n currency: o.currency,\n }),\n ),\n ),\n );\n\nprogram\n .command(\"secret\")\n .description(\"Reveal a secret credential (one-time token, or --raw value)\")\n .requiredOption(\"--credential <id>\")\n .option(\"--raw\", \"return the raw secret value (grant-gated)\")\n .option(\"--purpose <text>\", \"why the secret is requested (shown on approval)\")\n .action((o) =>\n run(async () =>\n emit(\n await client().requestSecret({\n credentialId: o.credential,\n raw: Boolean(o.raw),\n purpose: o.purpose,\n }),\n ),\n ),\n );\n\nprogram\n .command(\"sign\")\n .description(\"Sign with a wallet credential (intent JSON, or @file)\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--intent <json>\", 'a SignIntent, e.g. \\'{\"op\":\"message\",\"message\":\"hi\"}\\' or @intent.json')\n .action((o) =>\n run(async () => {\n const c = client();\n const res = await c.requestWalletSign({\n credentialId: o.credential,\n intent: readIntent(o.intent) as never,\n });\n if (res.status === \"pending_signature\" && !c.canSign) {\n console.error(\n \"request is awaiting a signature but no signing key is set — \" +\n \"run `paybox login --signing-key <pbxk1...>` or set PAYBOX_SIGNING_KEY, then poll `paybox request <id>`.\",\n );\n }\n emit(res);\n }),\n );\n\nprogram\n .command(\"swap\")\n .description(\"Swap tokens from a wallet credential\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--src-chain <caip2>\")\n .requiredOption(\"--src-token <addr>\", '\"native\" or a token address')\n .requiredOption(\"--dst-token <addr>\")\n .requiredOption(\"--amount <smallest-unit>\", \"source amount in smallest units\")\n .option(\"--dst-chain <caip2>\", \"defaults to --src-chain\")\n .option(\"--direction <dir>\", \"exact-amount-in | exact-amount-out\", \"exact-amount-in\")\n .option(\"--slippage <bps>\", \"slippage in bps\", \"50\")\n .option(\"--recipient <addr>\")\n .option(\"--value-cents <n>\")\n .action((o) =>\n run(async () => {\n const c = client();\n const result = await c.requestSwap({\n credentialId: o.credential,\n srcChain: o.srcChain,\n dstChain: o.dstChain,\n srcToken: o.srcToken,\n dstToken: o.dstToken,\n amount: o.amount,\n swapDirection: o.direction,\n slippageBps: int(\"slippage\", o.slippage),\n recipient: o.recipient,\n valueCents: optInt(\"value-cents\", o.valueCents),\n });\n if (result.response.status === \"pending_signature\" && !c.canSign) {\n console.error(\n \"swap is awaiting signatures but no signing key is set — \" +\n \"run `paybox login --signing-key <pbxk1...>` or set PAYBOX_SIGNING_KEY, then poll `paybox request <id>`.\",\n );\n }\n emit(result);\n }),\n );\n\nprogram\n .command(\"portfolio\")\n .description(\"List a wallet address's token balances across chains\")\n .requiredOption(\"--address <addr>\")\n .option(\"--networks <ids>\", 'comma-separated network IDs, e.g. \"1,8453\"')\n .action((o) =>\n run(async () =>\n emit(await client().getPortfolio({ address: o.address, networkIds: o.networks })),\n ),\n );\n\nprogram\n .command(\"request <id>\")\n .description(\"Poll a request's status\")\n .option(\"--wait\", \"block until it leaves the pending state\")\n .action((id, o) =>\n run(async () => {\n const c = client();\n emit(o.wait ? await c.waitForRequest(id) : await c.getRequest(id));\n }),\n );\n\nprogram\n .command(\"version\")\n .description(\"Show the installed CLI version (and whether an update is available)\")\n .action(() =>\n run(async () => {\n let latest: string | undefined;\n try {\n const res = await fetch(`https://registry.npmjs.org/${PKG}/latest`);\n if (res.ok) latest = ((await res.json()) as { version?: string }).version;\n } catch {\n /* offline — just report the installed version */\n }\n const updateAvailable = Boolean(latest && isNewer(latest, VERSION));\n if (jsonMode()) {\n emit({ version: VERSION, latest: latest ?? null, updateAvailable });\n return;\n }\n console.log(`${PKG} v${VERSION}`);\n if (updateAvailable) {\n console.log(`Update available: v${latest} — run \\`paybox update\\`.`);\n }\n }),\n );\n\nprogram\n .command(\"update\")\n .description(\"Update the globally-installed paybox CLI to the latest version\")\n .option(\"--print\", \"print the update command instead of running it\")\n .action((opts) =>\n run(async () => {\n const args = [\"install\", \"-g\", `${PKG}@latest`];\n if (opts.print) {\n console.log(`npm ${args.join(\" \")}`);\n return;\n }\n console.error(`Updating ${PKG} (npm ${args.join(\" \")})…`);\n const r = spawnSync(\"npm\", args, { stdio: \"inherit\" });\n if (r.status !== 0) {\n console.error(\n `\\nIf this isn't a global install: run \\`pnpm up ${PKG}\\` in your project, ` +\n `or use \\`npx ${PKG}@latest …\\` to always run the latest.`,\n );\n process.exitCode = r.status ?? 1;\n }\n }),\n );\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove stored Paybox credentials/config (and show how to remove the CLI)\")\n .action(() =>\n run(async () => {\n const dir = configDir();\n rmSync(dir, { recursive: true, force: true });\n console.error(`Removed stored config at ${dir}.`);\n console.error(\n `The CLI binary is managed by npm — remove it with:\\n npm rm -g ${PKG}`,\n );\n }),\n );\n\nprogram.parseAsync(process.argv);\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n// The `paybox` CLI — a thin wrapper over PayboxClient. Mirrors the MCP tools as\n// subcommands; `--json` on any command emits machine-readable output.\n\nimport { spawnSync } from \"node:child_process\";\nimport { readFileSync, rmSync } from \"node:fs\";\nimport { createInterface } from \"node:readline/promises\";\n\nimport { Command } from \"commander\";\n\nimport { agentClientId, appBaseFrom, loginLoopback, openBrowser } from \"./auth.js\";\nimport { PayboxClient } from \"./client.js\";\nimport { configDir, configFile, loadConfig, saveConfig } from \"./config.js\";\n\nconst DEFAULT_BASE_URL = \"https://api.paybox.sh\";\nconst PKG = \"@paybox-sh/sdk\";\nconst VERSION = \"0.7.0\";\n\nconst program = new Command();\nprogram\n .name(\"paybox\")\n .description(\"Paybox agent CLI — vaulted cards, wallets, and secrets for agents\")\n .version(VERSION)\n .option(\"--base-url <url>\", \"API origin (default https://api.paybox.sh or stored)\")\n .option(\"--json\", \"machine-readable JSON output\");\n\nfunction jsonMode(): boolean {\n return Boolean(program.opts().json);\n}\n\nfunction emit(data: unknown): void {\n if (jsonMode()) console.log(JSON.stringify(data, null, 2));\n else console.dir(data, { depth: null, colors: process.stdout.isTTY });\n}\n\nfunction client(): PayboxClient {\n return PayboxClient.fromConfig({ baseUrl: program.opts().baseUrl });\n}\n\nfunction readIntent(value: string): unknown {\n const raw = value.startsWith(\"@\") ? readFileSync(value.slice(1), \"utf8\") : value;\n return JSON.parse(raw);\n}\n\nfunction int(flag: string, value: string): number {\n const n = Number(value);\n if (!Number.isInteger(n)) {\n throw new Error(`--${flag} must be an integer, got ${JSON.stringify(value)}`);\n }\n return n;\n}\n\nfunction optInt(flag: string, value: string | undefined): number | undefined {\n return value === undefined ? undefined : int(flag, value);\n}\n\n/** True when semver `a` is strictly greater than `b` (plain x.y.z). */\nfunction isNewer(a: string, b: string): boolean {\n const pa = a.split(\".\").map(Number);\n const pb = b.split(\".\").map(Number);\n for (let i = 0; i < 3; i++) {\n const x = pa[i] ?? 0;\n const y = pb[i] ?? 0;\n if (x !== y) return x > y;\n }\n return false;\n}\n\nasync function prompt(question: string): Promise<string> {\n if (!process.stdin.isTTY) return \"\"; // non-interactive: skip\n const rl = createInterface({ input: process.stdin, output: process.stderr });\n try {\n return (await rl.question(question)).trim();\n } finally {\n rl.close();\n }\n}\n\nasync function run(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n}\n\n/** A request parked at `pending_signature` can only complete in-process with a\n * `pbxk1.` key (there is no signing window on this surface). */\nfunction warnIfUnsignable(c: PayboxClient, status: string): void {\n if (status === \"pending_signature\" && !c.canSign) {\n console.error(\n \"awaiting signatures but no signing key is set — \" +\n \"run `paybox login --signing-key <pbxk1...>` or set PAYBOX_SIGNING_KEY, then poll `paybox request <id>`.\",\n );\n }\n}\n\nprogram\n .command(\"login\")\n .description(\"Authenticate via OAuth (browser + passkey), or store a pbx_live_ key\")\n .option(\"--key <key>\", \"store a pbx_live_ personal API key instead of OAuth\")\n .option(\"--signing-key <token>\", \"store a pbxk1. wallet signing key (skips the prompt)\")\n .option(\"--app-url <url>\", \"Paybox app origin for key provisioning (default: derived from --base-url)\")\n .option(\"--no-provision\", \"skip the wallet signing-key provisioning step\")\n .action((opts) =>\n run(async () => {\n const cfg = loadConfig();\n const baseUrl = (\n program.opts().baseUrl ??\n process.env.PAYBOX_API_URL ??\n cfg.baseUrl ??\n DEFAULT_BASE_URL\n ).replace(/\\/+$/, \"\");\n cfg.baseUrl = baseUrl;\n if (opts.appUrl) cfg.appUrl = opts.appUrl;\n\n // Step 1 — authenticate.\n if (opts.key) {\n cfg.apiKey = opts.key;\n delete cfg.oauth;\n } else {\n cfg.oauth = await loginLoopback(baseUrl);\n delete cfg.apiKey;\n }\n if (opts.signingKey) cfg.signingKey = opts.signingKey;\n saveConfig(cfg);\n console.error(`Saved credentials to ${configFile()}`);\n\n // Step 2 — provision a wallet signing key. Runs only after OAuth (the app\n // session is warm) and only when one wasn't supplied or disabled. The app\n // mints a key scoped to this agent and shows a `pbxk1.` token to paste back.\n if (!cfg.oauth || opts.signingKey || opts.provision === false) return;\n const cid = agentClientId(cfg.oauth.accessToken);\n const appBase = appBaseFrom(baseUrl, opts.appUrl ?? process.env.PAYBOX_APP_URL ?? cfg.appUrl);\n if (!cid || !appBase) {\n console.error(\n \"To enable wallet sign/swap, provision a signing key and run\\n\" +\n \" paybox login --signing-key <pbxk1...>\" +\n (cid && !appBase ? \" (or pass --app-url <paybox app origin>)\" : \"\"),\n );\n return;\n }\n const url = `${appBase}/agent-key?client_id=${cid}`;\n console.error(\n `\\nNext, provision a wallet signing key for this agent (needed for sign/swap):\\n ${url}\\n`,\n );\n openBrowser(url);\n const key = await prompt(\"Paste the pbxk1. signing key when ready (or Enter to skip): \");\n if (key) {\n cfg.signingKey = key;\n saveConfig(cfg);\n console.error(\"Signing key saved — sign/swap enabled.\");\n } else {\n console.error(\"Skipped — add it later with `paybox login --signing-key <pbxk1...>`.\");\n }\n }),\n );\n\nprogram\n .command(\"logout\")\n .description(\"Forget stored credentials\")\n .action(() =>\n run(async () => {\n const cfg = loadConfig();\n delete cfg.apiKey;\n delete cfg.oauth;\n delete cfg.signingKey;\n saveConfig(cfg);\n console.error(\"Logged out.\");\n }),\n );\n\nprogram\n .command(\"whoami\")\n .description(\"Show the configured endpoint, auth mode, and signing capability\")\n .action(() =>\n run(async () => {\n const cfg = loadConfig();\n const c = client();\n const mode = process.env.PAYBOX_ACCESS_TOKEN\n ? \"oauth (env token)\"\n : process.env.PAYBOX_API_KEY || cfg.apiKey\n ? \"api key\"\n : cfg.oauth\n ? \"oauth\"\n : \"none\";\n emit({ baseUrl: c.baseUrl, auth: mode, canSign: c.canSign, configFile: configFile() });\n }),\n );\n\nprogram\n .command(\"credentials\")\n .description(\"List the credentials this client may use\")\n .action(() => run(async () => emit(await client().listCredentials())));\n\nprogram\n .command(\"pay\")\n .description(\"Charge a card credential\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--merchant <name>\")\n .requiredOption(\"--url <url>\", \"real merchant URL the card is bound to\")\n .requiredOption(\"--amount <cents>\", \"amount in cents\")\n .option(\"--currency <code>\", \"ISO 4217 currency\", \"USD\")\n .action((o) =>\n run(async () =>\n emit(\n await client().requestPayment({\n credentialId: o.credential,\n merchant: o.merchant,\n merchantUrl: o.url,\n amountCents: int(\"amount\", o.amount),\n currency: o.currency,\n }),\n ),\n ),\n );\n\nprogram\n .command(\"secret\")\n .description(\"Reveal a secret credential (one-time token, or --raw value)\")\n .requiredOption(\"--credential <id>\")\n .option(\"--raw\", \"return the raw secret value (grant-gated)\")\n .option(\"--purpose <text>\", \"why the secret is requested (shown on approval)\")\n .action((o) =>\n run(async () =>\n emit(\n await client().requestSecret({\n credentialId: o.credential,\n raw: Boolean(o.raw),\n purpose: o.purpose,\n }),\n ),\n ),\n );\n\nprogram\n .command(\"sign\")\n .description(\"Sign with a wallet credential (intent JSON, or @file)\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--intent <json>\", 'a SignIntent, e.g. \\'{\"op\":\"message\",\"message\":\"hi\"}\\' or @intent.json')\n .action((o) =>\n run(async () => {\n const c = client();\n const res = await c.requestWalletSign({\n credentialId: o.credential,\n intent: readIntent(o.intent) as never,\n });\n warnIfUnsignable(c, res.status);\n emit(res);\n }),\n );\n\nprogram\n .command(\"swap\")\n .description(\"Swap tokens from a wallet credential\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--src-chain <caip2>\")\n .requiredOption(\"--src-token <addr>\", '\"native\" or a token address')\n .requiredOption(\"--dst-token <addr>\")\n .requiredOption(\"--amount <smallest-unit>\", \"source amount in smallest units\")\n .option(\"--dst-chain <caip2>\", \"defaults to --src-chain\")\n .option(\"--direction <dir>\", \"exact-amount-in | exact-amount-out\", \"exact-amount-in\")\n .option(\"--slippage <bps>\", \"slippage in bps\", \"50\")\n .option(\"--recipient <addr>\")\n .option(\"--value-cents <n>\")\n .option(\"--wait\", \"if approval is required, wait for it and then sign in-process\")\n .action((o) =>\n run(async () => {\n const c = client();\n const result = await c.requestSwap(\n {\n credentialId: o.credential,\n srcChain: o.srcChain,\n dstChain: o.dstChain,\n srcToken: o.srcToken,\n dstToken: o.dstToken,\n amount: o.amount,\n swapDirection: o.direction,\n slippageBps: int(\"slippage\", o.slippage),\n recipient: o.recipient,\n valueCents: optInt(\"value-cents\", o.valueCents),\n },\n { waitForApproval: Boolean(o.wait) },\n );\n warnIfUnsignable(c, result.response.status);\n emit(result);\n }),\n );\n\nprogram\n .command(\"discover [query]\")\n .description(\"Discover curated paid x402 services from Bazaar (optional search)\")\n .option(\"--raw\", \"return uncurated compact Bazaar service summaries (debug)\")\n .action((query, o) =>\n run(async () => emit(await client().discoverServices(query, { raw: Boolean(o.raw) }))),\n );\n\nprogram\n .command(\"pay-x402\")\n .description(\"Pay a paid x402 endpoint (header mode — returns the X-PAYMENT header to replay)\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--accepts <json>\", \"the 402's accepts[] array (JSON or @file)\")\n .requiredOption(\"--url <url>\", \"the paywalled resource URL\")\n .option(\"--wait\", \"if approval is required, wait for it and then sign in-process\")\n .action((o) =>\n run(async () => {\n const c = client();\n const result = await c.payX402(\n {\n credentialId: o.credential,\n accepts: readIntent(o.accepts) as unknown[],\n resourceUrl: o.url,\n },\n { waitForApproval: Boolean(o.wait) },\n );\n warnIfUnsignable(c, result.response.status);\n emit(result);\n }),\n );\n\nprogram\n .command(\"use-service\")\n .description(\"Fetch a paid x402 resource and have paybox pay for it (gateway mode)\")\n .requiredOption(\"--credential <id>\")\n .requiredOption(\"--url <url>\", \"the paid x402 resource URL\")\n .option(\"--method <verb>\", \"HTTP method\", \"GET\")\n .option(\"--body <json>\", \"request body (JSON or @file)\")\n .option(\"--wait\", \"if approval is required, wait for it and then sign in-process\")\n .action((o) =>\n run(async () => {\n const c = client();\n const result = await c.useService(\n {\n credentialId: o.credential,\n url: o.url,\n method: o.method,\n body: o.body === undefined ? undefined : readIntent(o.body),\n },\n { waitForApproval: Boolean(o.wait) },\n );\n warnIfUnsignable(c, result.response.status);\n emit(result);\n }),\n );\n\nprogram\n .command(\"portfolio\")\n .description(\"List a wallet address's token balances across chains\")\n .requiredOption(\"--address <addr>\")\n .option(\"--networks <ids>\", 'comma-separated network IDs, e.g. \"1,8453\"')\n .action((o) =>\n run(async () =>\n emit(await client().getPortfolio({ address: o.address, networkIds: o.networks })),\n ),\n );\n\nprogram\n .command(\"claim <request-id>\")\n .description(\"Claim the usable card credentials of an approved payment (one-time)\")\n .action((id) => run(async () => emit(await client().claimPaymentCredentials(id))));\n\nprogram\n .command(\"account-change\")\n .description(\"Get a manage_url for the USER to update this client's access in the app\")\n .option(\"--note <text>\", \"why the change is needed (shown to the user)\")\n .action((o) => run(async () => emit(await client().requestAccountChange(o.note))));\n\nprogram\n .command(\"buy-link\")\n .description(\"Signed MoonPay checkout URL funding a granted wallet (charges nothing)\")\n .requiredOption(\"--credential <id>\", \"a granted wallet credential\")\n .option(\"--currency <code>\", \"MoonPay currency code (default USDC on the wallet's chain)\")\n .option(\"--amount-usd <n>\", \"prefill amount in USD\")\n .action((o) =>\n run(async () =>\n emit(\n await client().getBuyLink({\n credentialId: o.credential,\n currencyCode: o.currency,\n amountUsd: o.amountUsd === undefined ? undefined : Number(o.amountUsd),\n }),\n ),\n ),\n );\n\n// ---- World plugin (prediction markets). Requires the `world` plugin enabled in\n// the paybox app. Trades are force-approved; --wait waits for the approval and\n// then signs in-process (no signing window on this surface). ----\nconst world = program\n .command(\"world\")\n .description(\"World prediction markets (requires the world plugin)\");\n\nworld\n .command(\"markets\")\n .description(\"Browse markets (or events with --events)\")\n .option(\"--events\", \"list events (each groups its markets)\")\n .option(\"--limit <n>\")\n .option(\"--cursor <n>\", \"rows to skip; the response carries the next cursor\")\n .option(\"--event-ticker <ticker>\")\n .option(\"--series-ticker <ticker>\")\n .option(\"--status <status>\", \"active | initialized | determined | finalized\")\n .action((o) =>\n run(async () =>\n emit(\n await client().worldMarkets({\n events: Boolean(o.events),\n limit: optInt(\"limit\", o.limit),\n cursor: optInt(\"cursor\", o.cursor),\n eventTicker: o.eventTicker,\n seriesTicker: o.seriesTicker,\n status: o.status,\n }),\n ),\n ),\n );\n\nworld\n .command(\"market <event-ticker>\")\n .description(\"One event with its nested markets (disable with --no-nested)\")\n .option(\"--no-nested\", \"exclude the event's markets\")\n .action((ticker, o) =>\n run(async () => emit(await client().worldMarket(ticker, Boolean(o.nested)))),\n );\n\nworld\n .command(\"orderbook <id>\")\n .description(\"A market's orderbook (id is a ticker, or a mint with --by-mint)\")\n .option(\"--by-mint\", \"look up by outcome mint instead of ticker\")\n .action((id, o) =>\n run(async () => emit(await client().worldOrderbook(id, Boolean(o.byMint)))),\n );\n\nworld\n .command(\"prices <ticker>\")\n .description(\"A market's price history\")\n .requiredOption(\"--start <unix-ts>\")\n .requiredOption(\"--end <unix-ts>\")\n .option(\"--resolution <n>\")\n .action((ticker, o) =>\n run(async () =>\n emit(\n await client().worldPrices({\n ticker,\n startTs: int(\"start\", o.start),\n endTs: int(\"end\", o.end),\n resolution: optInt(\"resolution\", o.resolution),\n }),\n ),\n ),\n );\n\nworld\n .command(\"filter-mints <addresses...>\")\n .description(\"Filter addresses down to World outcome mints\")\n .action((addresses) =>\n run(async () => emit(await client().worldFilterOutcomeMints(addresses))),\n );\n\nworld\n .command(\"positions <address>\")\n .description(\"Solana token positions for an address\")\n .action((address) => run(async () => emit(await client().worldPositions(address))));\n\nfunction worldTradeCommand(name: string, side: \"buy\" | \"sell\" | \"redeem\", desc: string) {\n const cmd = world\n .command(name)\n .description(desc)\n .requiredOption(\"--credential <id>\", \"a granted wallet credential (Solana)\")\n .requiredOption(\"--mint <addr>\", \"the outcome mint\")\n .requiredOption(\"--size <n>\")\n .option(\"--value-cents <n>\")\n .option(\"--wait\", \"wait for the user's approval, then sign in-process\");\n if (side !== \"redeem\") cmd.option(\"--slippage <bps>\", \"slippage in bps\", \"50\");\n cmd.action((o) =>\n run(async () => {\n const c = client();\n const result = await c.worldTrade(\n {\n credentialId: o.credential,\n marketMint: o.mint,\n side,\n size: o.size,\n slippageBps: optInt(\"slippage\", o.slippage),\n valueCents: optInt(\"value-cents\", o.valueCents),\n },\n { waitForApproval: Boolean(o.wait) },\n );\n warnIfUnsignable(c, result.response.status);\n emit(result);\n }),\n );\n}\nworldTradeCommand(\"buy\", \"buy\", \"Buy an outcome (force-approved; approve in the app)\");\nworldTradeCommand(\"sell\", \"sell\", \"Sell an outcome position (force-approved)\");\nworldTradeCommand(\"redeem\", \"redeem\", \"Redeem a settled position (force-approved)\");\n\n// ---- Hyperliquid plugin (read-only spot discovery). Requires the\n// `hyperliquid` plugin enabled in the paybox app. ----\nconst hyperliquid = program\n .command(\"hyperliquid\")\n .description(\"Hyperliquid spot discovery (requires the hyperliquid plugin)\");\n\nhyperliquid\n .command(\"markets\")\n .description(\"Spot markets\")\n .action(() => run(async () => emit(await client().hyperliquidMarkets())));\n\nhyperliquid\n .command(\"prices\")\n .description(\"Spot prices\")\n .action(() => run(async () => emit(await client().hyperliquidPrices())));\n\nhyperliquid\n .command(\"token <name>\")\n .description(\"Resolve one token by name\")\n .action((name) => run(async () => emit(await client().hyperliquidToken(name))));\n\nprogram\n .command(\"request <id>\")\n .description(\"Poll a request's status\")\n .option(\"--wait\", \"block until it leaves the pending state\")\n .action((id, o) =>\n run(async () => {\n const c = client();\n emit(o.wait ? await c.waitForRequest(id) : await c.getRequest(id));\n }),\n );\n\nprogram\n .command(\"version\")\n .description(\"Show the installed CLI version (and whether an update is available)\")\n .action(() =>\n run(async () => {\n let latest: string | undefined;\n try {\n const res = await fetch(`https://registry.npmjs.org/${PKG}/latest`);\n if (res.ok) latest = ((await res.json()) as { version?: string }).version;\n } catch {\n /* offline — just report the installed version */\n }\n const updateAvailable = Boolean(latest && isNewer(latest, VERSION));\n if (jsonMode()) {\n emit({ version: VERSION, latest: latest ?? null, updateAvailable });\n return;\n }\n console.log(`${PKG} v${VERSION}`);\n if (updateAvailable) {\n console.log(`Update available: v${latest} — run \\`paybox update\\`.`);\n }\n }),\n );\n\nprogram\n .command(\"update\")\n .description(\"Update the globally-installed paybox CLI to the latest version\")\n .option(\"--print\", \"print the update command instead of running it\")\n .action((opts) =>\n run(async () => {\n const args = [\"install\", \"-g\", `${PKG}@latest`];\n if (opts.print) {\n console.log(`npm ${args.join(\" \")}`);\n return;\n }\n console.error(`Updating ${PKG} (npm ${args.join(\" \")})…`);\n const r = spawnSync(\"npm\", args, { stdio: \"inherit\" });\n if (r.status !== 0) {\n console.error(\n `\\nIf this isn't a global install: run \\`pnpm up ${PKG}\\` in your project, ` +\n `or use \\`npx ${PKG}@latest …\\` to always run the latest.`,\n );\n process.exitCode = r.status ?? 1;\n }\n }),\n );\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove stored Paybox credentials/config (and show how to remove the CLI)\")\n .action(() =>\n run(async () => {\n const dir = configDir();\n rmSync(dir, { recursive: true, force: true });\n console.error(`Removed stored config at ${dir}.`);\n console.error(\n `The CLI binary is managed by npm — remove it with:\\n npm rm -g ${PKG}`,\n );\n }),\n );\n\nprogram.parseAsync(process.argv);\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -38,7 +38,11 @@ interface PortfolioArgs {
|
|
|
38
38
|
/** Comma-separated network IDs, e.g. "1,8453". Omit to auto-detect. */
|
|
39
39
|
networkIds?: string;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
interface DiscoverServicesOptions {
|
|
42
|
+
/** Debug escape hatch: return uncurated compact Bazaar service summaries. */
|
|
43
|
+
raw?: boolean;
|
|
44
|
+
}
|
|
45
|
+
type RequestStatus = "pending_approval" | "pending_signature" | "pending_settlement" | "pending_confirmation" | "success" | "denied" | "error";
|
|
42
46
|
type OutputType = "payment_token" | "signature" | "tx_hash" | "secret_token" | "raw_secret";
|
|
43
47
|
interface CredentialOutput {
|
|
44
48
|
output_id: string;
|
|
@@ -107,6 +111,102 @@ interface WalletSignResult {
|
|
|
107
111
|
response: AgentResponse;
|
|
108
112
|
binding: BindingResponse | null;
|
|
109
113
|
}
|
|
114
|
+
interface X402Args {
|
|
115
|
+
credentialId: string;
|
|
116
|
+
/** The 402's `accepts` PaymentRequirements array, verbatim (from the resource's
|
|
117
|
+
* own 402 — discover_services gives you a curated catalog entry to start from). */
|
|
118
|
+
accepts: unknown[];
|
|
119
|
+
/** The paywalled resource URL. */
|
|
120
|
+
resourceUrl: string;
|
|
121
|
+
}
|
|
122
|
+
interface UseServiceArgs {
|
|
123
|
+
credentialId: string;
|
|
124
|
+
/** The paid x402 resource URL to fetch. */
|
|
125
|
+
url: string;
|
|
126
|
+
/** HTTP method (default GET). */
|
|
127
|
+
method?: string;
|
|
128
|
+
/** Optional JSON request body (for POST/PUT services). */
|
|
129
|
+
body?: unknown;
|
|
130
|
+
}
|
|
131
|
+
/** The x402 sign-ready plan (`POST /agent/x402` | `/agent/use-service`): the
|
|
132
|
+
* EIP-3009 typed data to sign + the wallet binding. */
|
|
133
|
+
interface X402Plan {
|
|
134
|
+
typed_data: unknown;
|
|
135
|
+
binding: {
|
|
136
|
+
wallet_id: string;
|
|
137
|
+
key_id?: string | null;
|
|
138
|
+
derivation_path?: string | null;
|
|
139
|
+
};
|
|
140
|
+
x402: Record<string, unknown>;
|
|
141
|
+
}
|
|
142
|
+
/** `POST /agent/x402` | `/agent/use-service` response: parked request + plan. On
|
|
143
|
+
* success, header mode puts the X-PAYMENT header in
|
|
144
|
+
* `response.output.value.x_payment`; gateway mode puts the resource's reply in
|
|
145
|
+
* `response.output.value.response`. */
|
|
146
|
+
interface X402Result {
|
|
147
|
+
response: AgentResponse;
|
|
148
|
+
plan: X402Plan;
|
|
149
|
+
}
|
|
150
|
+
/** One curated x402 service (the `discover_services` tool / `/agent/services`):
|
|
151
|
+
* where it lives, a human description, and its `accepts` PaymentRequirements. */
|
|
152
|
+
interface ServiceSummary {
|
|
153
|
+
resource: string;
|
|
154
|
+
description: string | null;
|
|
155
|
+
accepts: unknown;
|
|
156
|
+
}
|
|
157
|
+
/** `POST /agent/account-change` (the `request_account_change` tool): a pure
|
|
158
|
+
* launcher. Surface `manage_url` to the user — they edit this client's access
|
|
159
|
+
* in their own app session (passkey-gated); nothing is parked server-side. */
|
|
160
|
+
interface AccountChangeResult {
|
|
161
|
+
kind: "account_change";
|
|
162
|
+
client_id: string;
|
|
163
|
+
manage_url: string;
|
|
164
|
+
note?: string | null;
|
|
165
|
+
}
|
|
166
|
+
interface BuyLinkArgs {
|
|
167
|
+
/** A granted wallet credential to fund. */
|
|
168
|
+
credentialId: string;
|
|
169
|
+
/** MoonPay currency code (defaults to USDC on the wallet's chain). */
|
|
170
|
+
currencyCode?: string;
|
|
171
|
+
/** Prefill amount in USD. */
|
|
172
|
+
amountUsd?: number;
|
|
173
|
+
}
|
|
174
|
+
/** `GET /agent/buy-link` (the `get_buy_link` tool): a signed MoonPay checkout
|
|
175
|
+
* URL funding the wallet. Generating the link charges nothing. */
|
|
176
|
+
interface BuyLinkResult {
|
|
177
|
+
url: string;
|
|
178
|
+
currency_code: string;
|
|
179
|
+
wallet_address: string;
|
|
180
|
+
}
|
|
181
|
+
interface WorldMarketsArgs {
|
|
182
|
+
/** Return the events list (each event groups its markets) instead of markets. */
|
|
183
|
+
events?: boolean;
|
|
184
|
+
limit?: number;
|
|
185
|
+
/** Rows to skip; the response carries the next cursor. */
|
|
186
|
+
cursor?: number;
|
|
187
|
+
eventTicker?: string;
|
|
188
|
+
seriesTicker?: string;
|
|
189
|
+
/** One of active | initialized | determined | finalized. */
|
|
190
|
+
status?: string;
|
|
191
|
+
}
|
|
192
|
+
interface WorldPricesArgs {
|
|
193
|
+
ticker: string;
|
|
194
|
+
startTs: number;
|
|
195
|
+
endTs: number;
|
|
196
|
+
resolution?: number;
|
|
197
|
+
}
|
|
198
|
+
interface WorldTradeArgs {
|
|
199
|
+
/** A granted wallet credential (Solana). */
|
|
200
|
+
credentialId: string;
|
|
201
|
+
/** The outcome mint to trade. */
|
|
202
|
+
marketMint: string;
|
|
203
|
+
/** "buy" | "sell" trade at market; "redeem" pays out a settled position. */
|
|
204
|
+
side: "buy" | "sell" | "redeem";
|
|
205
|
+
size: string;
|
|
206
|
+
/** Ignored for redeem (no price slippage at settlement). Default 50. */
|
|
207
|
+
slippageBps?: number;
|
|
208
|
+
valueCents?: number;
|
|
209
|
+
}
|
|
110
210
|
|
|
111
211
|
declare class PayboxError extends Error {
|
|
112
212
|
readonly status: number;
|
|
@@ -127,6 +227,14 @@ interface PayboxClientOptions {
|
|
|
127
227
|
interface SignOptions {
|
|
128
228
|
/** Sign in-process when the request clears to `pending_signature`. Default true. */
|
|
129
229
|
autoSign?: boolean;
|
|
230
|
+
/** When the request parks as `pending_approval` (approval-mode grant, or a
|
|
231
|
+
* force-approved op like a World trade), wait for the user's passkey approval
|
|
232
|
+
* and then sign in-process — the SDK's headless equivalent of the signing
|
|
233
|
+
* window's post-approval sign. Default false (return the pending response). */
|
|
234
|
+
waitForApproval?: boolean | {
|
|
235
|
+
intervalMs?: number;
|
|
236
|
+
timeoutMs?: number;
|
|
237
|
+
};
|
|
130
238
|
}
|
|
131
239
|
declare class PayboxClient {
|
|
132
240
|
readonly baseUrl: string;
|
|
@@ -160,6 +268,71 @@ declare class PayboxClient {
|
|
|
160
268
|
* parked response + sign-ready plan; signs + submits in-process when a signing
|
|
161
269
|
* key is set and the swap cleared immediately. */
|
|
162
270
|
requestSwap(args: SwapArgs, opts?: SignOptions): Promise<SwapResult>;
|
|
271
|
+
/** Shared completion for swap-shaped requests (`request_swap` and the World
|
|
272
|
+
* trade): optionally wait out a `pending_approval` dwell, then sign the plan
|
|
273
|
+
* in-process and submit envelopes. Signing re-pins a Solana plan's blockhash
|
|
274
|
+
* (and re-quotes a stale World order) via `/agent/requests/{id}/refresh`
|
|
275
|
+
* first, so a long approval dwell never signs stale bytes. */
|
|
276
|
+
private completeSwap;
|
|
277
|
+
/** Poll while the request sits in `pending_approval` (the user is approving
|
|
278
|
+
* with their passkey); returns the first non-approval state. */
|
|
279
|
+
private waitWhileApproval;
|
|
280
|
+
/** Discover curated paid x402 services from the Bazaar catalog (the
|
|
281
|
+
* `discover_services` tool). Pass a query to search the curated set; omit it
|
|
282
|
+
* for the curated listing. Set `raw` only to inspect uncurated compact
|
|
283
|
+
* Bazaar service summaries. */
|
|
284
|
+
discoverServices(query?: string, opts?: DiscoverServicesOptions): Promise<ServiceSummary[]>;
|
|
285
|
+
/** Pay a paid x402 endpoint from a wallet credential (the `pay_x402` tool,
|
|
286
|
+
* header mode). Signs in-process when a signing key is set and the payment
|
|
287
|
+
* clears immediately — then the X-PAYMENT header is on the completed
|
|
288
|
+
* response's `output.value.x_payment` (replay it on the original request). */
|
|
289
|
+
payX402(args: X402Args, opts?: SignOptions): Promise<X402Result>;
|
|
290
|
+
/** Fetch a paid x402 resource and have paybox pay for it (the `use_service`
|
|
291
|
+
* tool, gateway mode): paybox probes the url, pays the 402, re-fetches with the
|
|
292
|
+
* payment, and returns the resource's reply on `output.value.response`. */
|
|
293
|
+
useService(args: UseServiceArgs, opts?: SignOptions): Promise<X402Result>;
|
|
294
|
+
/** Shared completion for the two x402 entry points: optionally wait out a
|
|
295
|
+
* `pending_approval` dwell, then sign the parked typed data in-process and
|
|
296
|
+
* return the finished request, exactly like the swap path. */
|
|
297
|
+
private completeX402;
|
|
298
|
+
/** Claim the usable card credentials of an approved payment (the
|
|
299
|
+
* `claim_payment_credentials` tool). One-time: the claim is consumed. */
|
|
300
|
+
claimPaymentCredentials(requestId: string): Promise<Record<string, unknown>>;
|
|
301
|
+
/** Open the account-change flow (the `request_account_change` tool): returns a
|
|
302
|
+
* `manage_url` deep link for the USER to open — they update this client's
|
|
303
|
+
* access (or add a credential) in their own passkey-gated app session.
|
|
304
|
+
* Nothing is parked or applied server-side. */
|
|
305
|
+
requestAccountChange(note?: string): Promise<AccountChangeResult>;
|
|
306
|
+
/** A signed MoonPay checkout URL funding a granted wallet (the `get_buy_link`
|
|
307
|
+
* tool). Share the URL with the user; generating it charges nothing. */
|
|
308
|
+
getBuyLink(args: BuyLinkArgs): Promise<BuyLinkResult>;
|
|
309
|
+
/** Browse World prediction markets (the `world_find_markets` tool). */
|
|
310
|
+
worldMarkets(args?: WorldMarketsArgs): Promise<unknown>;
|
|
311
|
+
/** One World event with its markets (the `world_get_market` tool). Nested
|
|
312
|
+
* markets default on, matching the tool — they carry the outcome mint ids
|
|
313
|
+
* the orderbook/trade calls need. */
|
|
314
|
+
worldMarket(eventTicker: string, withNestedMarkets?: boolean): Promise<unknown>;
|
|
315
|
+
/** A World market's orderbook (the `world_orderbook` tool). */
|
|
316
|
+
worldOrderbook(id: string, byMint?: boolean): Promise<unknown>;
|
|
317
|
+
/** A World market's price history (the `world_market_prices` tool). */
|
|
318
|
+
worldPrices(args: WorldPricesArgs): Promise<unknown>;
|
|
319
|
+
/** Filter addresses down to World outcome mints (the
|
|
320
|
+
* `world_filter_outcome_mints` tool). */
|
|
321
|
+
worldFilterOutcomeMints(addresses: string[]): Promise<unknown>;
|
|
322
|
+
/** Solana token positions for an address (the `world_positions` tool). */
|
|
323
|
+
worldPositions(address: string): Promise<unknown>;
|
|
324
|
+
/** Trade a World prediction market (the `world_buy_outcome` /
|
|
325
|
+
* `world_change_position` / `world_redeem` tools). Always parks as
|
|
326
|
+
* `pending_approval` (trades are force-approved); pass
|
|
327
|
+
* `{ waitForApproval: true }` to wait for the user's passkey approval and
|
|
328
|
+
* sign in-process. */
|
|
329
|
+
worldTrade(args: WorldTradeArgs, opts?: SignOptions): Promise<SwapResult>;
|
|
330
|
+
/** Hyperliquid spot markets (the `hyperliquid_markets` tool). */
|
|
331
|
+
hyperliquidMarkets(): Promise<unknown>;
|
|
332
|
+
/** Hyperliquid spot prices (the `hyperliquid_prices` tool). */
|
|
333
|
+
hyperliquidPrices(): Promise<unknown>;
|
|
334
|
+
/** Resolve one Hyperliquid token by name (the `hyperliquid_token` tool). */
|
|
335
|
+
hyperliquidToken(name: string): Promise<unknown>;
|
|
163
336
|
/** Poll a request's status (the `get_request` tool). */
|
|
164
337
|
getRequest(requestId: string): Promise<AgentResponse>;
|
|
165
338
|
/** Poll until the request leaves a pending state (or the timeout elapses). */
|
|
@@ -240,4 +413,4 @@ interface GetPortfolioArgs {
|
|
|
240
413
|
network_ids?: string | null;
|
|
241
414
|
}
|
|
242
415
|
|
|
243
|
-
export { type AgentResponse, type BindingResponse, type ClientGrantSummary, type CredentialOutput, type CredentialSummary, type GetPortfolioArgs, type Grant, type LoginOptions, type OAuthTokens, type OutputType, PayboxClient, type PayboxClientOptions, PayboxError, type PaymentArgs, type PortfolioArgs, type RequestPaymentArgs, type RequestSecretArgs, type RequestStatus, type RequestSwapArgs, type RequestWalletSignArgs, type SecretArgs, type SignOptions, type StoredConfig, type SwapArgs, type SwapPlan, type SwapResult, type WalletSignArgs, type WalletSignResult, configFile, credsFromToken, loadConfig, loginLoopback, mcpResource, refreshTokens, saveConfig };
|
|
416
|
+
export { type AccountChangeResult, type AgentResponse, type BindingResponse, type BuyLinkArgs, type BuyLinkResult, type ClientGrantSummary, type CredentialOutput, type CredentialSummary, type DiscoverServicesOptions, type GetPortfolioArgs, type Grant, type LoginOptions, type OAuthTokens, type OutputType, PayboxClient, type PayboxClientOptions, PayboxError, type PaymentArgs, type PortfolioArgs, type RequestPaymentArgs, type RequestSecretArgs, type RequestStatus, type RequestSwapArgs, type RequestWalletSignArgs, type SecretArgs, type ServiceSummary, type SignOptions, type StoredConfig, type SwapArgs, type SwapPlan, type SwapResult, type UseServiceArgs, type WalletSignArgs, type WalletSignResult, type WorldMarketsArgs, type WorldPricesArgs, type WorldTradeArgs, type X402Args, type X402Plan, type X402Result, configFile, credsFromToken, loadConfig, loginLoopback, mcpResource, refreshTokens, saveConfig };
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paybox-sh/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Typed Node SDK + `paybox` CLI for the Paybox agent API. Mirrors the MCP tool surface (list_credentials, request_payment, request_wallet_sign, request_secret, request_swap, get_portfolio, get_request) over REST, with in-process non-custodial wallet signing.",
|
|
6
6
|
"license": "Apache-2.0",
|