@hpp-io/x402-mcp-bridge 0.0.1 → 0.0.3
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 +125 -77
- package/bin/hpp-x402.js +5 -0
- package/bin/x402-mcp-bridge.js +0 -0
- package/dist/a2a.d.ts +70 -0
- package/dist/a2a.js +210 -0
- package/dist/a2a.js.map +1 -0
- package/dist/autoTopup.d.ts +2 -1
- package/dist/autoTopup.js.map +1 -1
- package/dist/cli/channel.d.ts +1 -0
- package/dist/cli/channel.js +323 -0
- package/dist/cli/channel.js.map +1 -0
- package/dist/cli/hpp-x402.d.ts +2 -0
- package/dist/cli/hpp-x402.js +375 -0
- package/dist/cli/hpp-x402.js.map +1 -0
- package/dist/cli/install-claude-code.d.ts +24 -0
- package/dist/cli/install-claude-code.js +50 -0
- package/dist/cli/install-claude-code.js.map +1 -0
- package/dist/cli/install-claude.d.ts +2 -20
- package/dist/cli/install-claude.js +12 -63
- package/dist/cli/install-claude.js.map +1 -1
- package/dist/cli/install-cursor.d.ts +7 -0
- package/dist/cli/install-cursor.js +26 -0
- package/dist/cli/install-cursor.js.map +1 -0
- package/dist/cli/install-mcp-host.d.ts +35 -0
- package/dist/cli/install-mcp-host.js +82 -0
- package/dist/cli/install-mcp-host.js.map +1 -0
- package/dist/cli/install-openclaw.d.ts +7 -0
- package/dist/cli/install-openclaw.js +28 -0
- package/dist/cli/install-openclaw.js.map +1 -0
- package/dist/cli/install-windsurf.d.ts +7 -0
- package/dist/cli/install-windsurf.js +37 -0
- package/dist/cli/install-windsurf.js.map +1 -0
- package/dist/cli/policy.d.ts +1 -0
- package/dist/cli/policy.js +212 -0
- package/dist/cli/policy.js.map +1 -0
- package/dist/cli/revoke.d.ts +1 -1
- package/dist/cli/revoke.js +1 -5
- package/dist/cli/revoke.js.map +1 -1
- package/dist/cli/safe.d.ts +4172 -9580
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +24 -6
- package/dist/cli/setup.js.map +1 -1
- package/dist/client.d.ts +25 -10
- package/dist/client.js +139 -2
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +50 -11
- package/dist/config.js +50 -10
- package/dist/config.js.map +1 -1
- package/dist/discovery.d.ts +43 -0
- package/dist/discovery.js +62 -0
- package/dist/discovery.js.map +1 -0
- package/dist/discoveryTools.d.ts +75 -0
- package/dist/discoveryTools.js +101 -0
- package/dist/discoveryTools.js.map +1 -0
- package/dist/funds/direct-balance.d.ts +27 -0
- package/dist/funds/direct-balance.js +58 -0
- package/dist/funds/direct-balance.js.map +1 -0
- package/dist/funds.d.ts +26 -0
- package/dist/funds.js +2 -0
- package/dist/funds.js.map +1 -0
- package/dist/httpX402.d.ts +45 -0
- package/dist/httpX402.js +214 -0
- package/dist/httpX402.js.map +1 -0
- package/dist/index.js +66 -20
- package/dist/index.js.map +1 -1
- package/dist/keychain.d.ts +23 -0
- package/dist/keychain.js +111 -0
- package/dist/keychain.js.map +1 -0
- package/dist/policy.d.ts +73 -0
- package/dist/policy.js +249 -0
- package/dist/policy.js.map +1 -0
- package/dist/server.d.ts +18 -1
- package/dist/server.js +120 -10
- package/dist/server.js.map +1 -1
- package/docs/policy.md +101 -0
- package/package.json +11 -8
- package/bin/hpp-x402-safe-revoke.js +0 -5
- package/bin/hpp-x402-safe-setup.js +0 -5
package/dist/cli/setup.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export declare function run(): Promise<void>;
|
package/dist/cli/setup.js
CHANGED
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
* --delegate-pk 0x... (optional; auto-generates if omitted)
|
|
30
30
|
* --resource-server-url https://... (default localhost:4021/mcp/sse)
|
|
31
31
|
* --install-claude (also write claude_desktop_config.json)
|
|
32
|
+
* --install-openclaw (also write ~/.openclaw/openclaw.json)
|
|
32
33
|
*/
|
|
33
34
|
import { parseUnits, parseEther, } from "viem";
|
|
34
35
|
import { privateKeyToAccount, generatePrivateKey } from "viem/accounts";
|
|
@@ -83,7 +84,7 @@ const ERC20_TRANSFER_ABI = [
|
|
|
83
84
|
stateMutability: "nonpayable",
|
|
84
85
|
},
|
|
85
86
|
];
|
|
86
|
-
async function
|
|
87
|
+
export async function run() {
|
|
87
88
|
const args = parseArgs(process.argv);
|
|
88
89
|
const network = args.network || "eip155:181228";
|
|
89
90
|
const def = DEFAULTS[network];
|
|
@@ -102,6 +103,7 @@ async function main() {
|
|
|
102
103
|
const resourceServerUrl = args["resource-server-url"] ||
|
|
103
104
|
"http://localhost:4021/mcp/sse";
|
|
104
105
|
const installClaude = args["install-claude"] === true;
|
|
106
|
+
const installOpenClaw = args["install-openclaw"] === true;
|
|
105
107
|
let delegatePk = args["delegate-pk"];
|
|
106
108
|
let delegateGenerated = false;
|
|
107
109
|
if (!delegatePk) {
|
|
@@ -214,8 +216,28 @@ async function main() {
|
|
|
214
216
|
console.error(" Use the env block above to merge manually.");
|
|
215
217
|
}
|
|
216
218
|
}
|
|
217
|
-
|
|
219
|
+
if (installOpenClaw) {
|
|
220
|
+
console.log("\n[install-openclaw] Writing to OpenClaw config…");
|
|
221
|
+
const { installOpenClaw: doInstall } = await import("./install-openclaw.js");
|
|
222
|
+
try {
|
|
223
|
+
const r = doInstall(envBlock, {
|
|
224
|
+
force: true,
|
|
225
|
+
});
|
|
226
|
+
console.log(` config: ${r.configPath}`);
|
|
227
|
+
if (r.backupPath)
|
|
228
|
+
console.log(` backup: ${r.backupPath}`);
|
|
229
|
+
console.log(` preserved entries: ${r.preservedEntries.length}`);
|
|
230
|
+
console.log(` changed: ${r.changed}`);
|
|
231
|
+
console.log("\n ✓ Restart OpenClaw to load the new MCP server.");
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
console.error(" ✗ install-openclaw failed:", err.message);
|
|
235
|
+
console.error(" Use the env block above to merge manually.");
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (!installClaude && !installOpenClaw) {
|
|
218
239
|
console.log("\nTo merge into Claude Desktop automatically, re-run with --install-claude.");
|
|
240
|
+
console.log("To merge into OpenClaw automatically, re-run with --install-openclaw.");
|
|
219
241
|
console.log("To start the bridge manually:");
|
|
220
242
|
console.log(` RESOURCE_SERVER_URL=${resourceServerUrl} \\`);
|
|
221
243
|
console.log(` DELEGATE_PRIVATE_KEY=${delegatePk} \\`);
|
|
@@ -227,8 +249,4 @@ async function main() {
|
|
|
227
249
|
console.log(` npx @hpp-io/x402-mcp-bridge`);
|
|
228
250
|
}
|
|
229
251
|
}
|
|
230
|
-
main().catch((err) => {
|
|
231
|
-
console.error("\nERROR:", err?.message ?? err);
|
|
232
|
-
process.exit(1);
|
|
233
|
-
});
|
|
234
252
|
//# sourceMappingURL=setup.js.map
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,29 +1,44 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Upstream MCP client. Connects to the remote x402 MCP server (the
|
|
3
|
-
* "seller") and wraps it with @x402/mcp's payment middleware.
|
|
4
|
-
*
|
|
5
|
-
* The middleware handles the 402 → sign → retry cycle. We hook into its
|
|
6
|
-
* `onPaymentRequested` callback to run autoTopup before each payment so
|
|
7
|
-
* the delegate EOA holds enough USDC.e to sign the EIP-3009 authorization.
|
|
8
|
-
*/
|
|
9
1
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
10
2
|
import { wrapMCPClientWithPaymentFromConfig } from "@x402/mcp";
|
|
3
|
+
import { BatchSettlementEvmScheme } from "@x402/evm/batch-settlement/client";
|
|
11
4
|
import type { Network } from "@x402/core/types";
|
|
12
|
-
import type {
|
|
5
|
+
import type { Funds } from "./funds.js";
|
|
13
6
|
import { RawEoaSigner } from "./signers/raw-eoa.js";
|
|
14
7
|
export interface UpstreamClient {
|
|
15
8
|
/** Standard MCP client — listTools/etc go here. */
|
|
16
9
|
base: Client;
|
|
17
10
|
/** Payment-aware wrapper — callTool goes here. */
|
|
18
11
|
x402: ReturnType<typeof wrapMCPClientWithPaymentFromConfig>;
|
|
12
|
+
/**
|
|
13
|
+
* batch-settlement scheme instance — F-3a auto-refund needs to
|
|
14
|
+
* call `.refund(url, {amount})` when a paid compute times out and
|
|
15
|
+
* the server reports the job failed.
|
|
16
|
+
*/
|
|
17
|
+
batchScheme: BatchSettlementEvmScheme;
|
|
18
|
+
/**
|
|
19
|
+
* Resource server URL the bridge is talking to. F-3a refund uses
|
|
20
|
+
* this as the target URL passed to `batchScheme.refund(...)`.
|
|
21
|
+
*/
|
|
22
|
+
serverUrl: string;
|
|
23
|
+
/**
|
|
24
|
+
* Most recent payment amount the selector accepted, in atomic
|
|
25
|
+
* units. F-3a's refund needs this to know how much to ask back —
|
|
26
|
+
* the SDK doesn't surface it through onAfterPayment cleanly.
|
|
27
|
+
* Updated by `paymentRequirementsSelector` on every 402 → sign.
|
|
28
|
+
*/
|
|
29
|
+
lastPaymentAmount(): bigint | null;
|
|
19
30
|
/** Disconnect and free resources. */
|
|
20
31
|
close(): Promise<void>;
|
|
21
32
|
}
|
|
22
33
|
export interface UpstreamOptions {
|
|
23
34
|
url: string;
|
|
24
35
|
network: Network;
|
|
36
|
+
/** EVM RPC URL — the upto client needs it to read the EIP-2612 token nonce
|
|
37
|
+
* for gasless Permit2 approval (without it, upto falls back to requiring a
|
|
38
|
+
* pre-existing on-chain approve(Permit2)). */
|
|
39
|
+
rpcUrl: string;
|
|
25
40
|
signer: RawEoaSigner;
|
|
26
|
-
|
|
41
|
+
funds: Funds;
|
|
27
42
|
bridgeName: string;
|
|
28
43
|
bridgeVersion: string;
|
|
29
44
|
}
|
package/dist/client.js
CHANGED
|
@@ -6,24 +6,110 @@
|
|
|
6
6
|
* `onPaymentRequested` callback to run autoTopup before each payment so
|
|
7
7
|
* the delegate EOA holds enough USDC.e to sign the EIP-3009 authorization.
|
|
8
8
|
*/
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { resolve } from "node:path";
|
|
9
11
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
10
12
|
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
11
13
|
import { wrapMCPClientWithPaymentFromConfig } from "@x402/mcp";
|
|
12
14
|
import { ExactEvmScheme } from "@x402/evm/exact/client";
|
|
15
|
+
import { UptoEvmScheme } from "@x402/evm/upto/client";
|
|
16
|
+
import { BatchSettlementEvmScheme, processSettleResponse, } from "@x402/evm/batch-settlement/client";
|
|
17
|
+
// @x402/evm 2.13.0 moved FileClientChannelStorage into its own subpath.
|
|
18
|
+
import { FileClientChannelStorage } from "@x402/evm/batch-settlement/client/file-storage";
|
|
13
19
|
import { log } from "./log.js";
|
|
20
|
+
/**
|
|
21
|
+
* Root directory for persisted batch-settlement client state.
|
|
22
|
+
*
|
|
23
|
+
* The SDK's `FileClientChannelStorage` writes one JSON per channel under
|
|
24
|
+
* `{root}/client/{channelId}.json` and uses cross-process file locks so
|
|
25
|
+
* concurrent bridge instances (e.g., Claude Desktop + OpenClaw on the same
|
|
26
|
+
* machine sharing a delegate EOA) can mutate the same channel safely.
|
|
27
|
+
*
|
|
28
|
+
* Override with `HPP_X402_HOME` for test isolation or non-standard layouts.
|
|
29
|
+
*/
|
|
30
|
+
const CHANNEL_STORAGE_ROOT = process.env.HPP_X402_HOME ?? resolve(homedir(), ".hpp-x402");
|
|
14
31
|
export async function connectUpstream(opts) {
|
|
15
32
|
const base = new Client({ name: opts.bridgeName, version: opts.bridgeVersion });
|
|
33
|
+
const channelStorage = new FileClientChannelStorage({
|
|
34
|
+
directory: CHANNEL_STORAGE_ROOT,
|
|
35
|
+
});
|
|
36
|
+
log.info("channelStorage.configured", { directory: CHANNEL_STORAGE_ROOT });
|
|
37
|
+
// Single batch-settlement scheme instance — referenced by both the
|
|
38
|
+
// payment middleware and F-3a's auto-refund poller (via UpstreamClient
|
|
39
|
+
// surface). Sharing the instance keeps storage consistent — the same
|
|
40
|
+
// FileClientChannelStorage backs voucher signing AND refund signing.
|
|
41
|
+
const batchScheme = new BatchSettlementEvmScheme(opts.signer.viemAccount, {
|
|
42
|
+
storage: channelStorage,
|
|
43
|
+
});
|
|
44
|
+
// Track the last accepted payment amount so F-3a knows how much to
|
|
45
|
+
// refund on a failed compute. The selector callback below assigns
|
|
46
|
+
// it; the UpstreamClient surface reads it.
|
|
47
|
+
let lastPaymentAmountAtomic = null;
|
|
16
48
|
const x402 = wrapMCPClientWithPaymentFromConfig(base, {
|
|
49
|
+
// Register all three client schemes so the bridge can pay whatever a
|
|
50
|
+
// service advertises. The selector (below) honors the seller's accepts
|
|
51
|
+
// order and logs the choice; registration order here is not significant.
|
|
17
52
|
schemes: [
|
|
53
|
+
{
|
|
54
|
+
network: opts.network,
|
|
55
|
+
// payerAuthorizer defaults to signer.address (Q-3: delegate EOA
|
|
56
|
+
// self-signs vouchers — no Safe EIP-1271 round-trip per call).
|
|
57
|
+
client: batchScheme,
|
|
58
|
+
},
|
|
18
59
|
{
|
|
19
60
|
network: opts.network,
|
|
20
61
|
client: new ExactEvmScheme(opts.signer.viemAccount),
|
|
21
62
|
},
|
|
63
|
+
{
|
|
64
|
+
// upto (usage-based) — selected when the service advertises it first
|
|
65
|
+
// (seller-driven). The client auto-detects the facilitator's EIP-2612
|
|
66
|
+
// gas-sponsoring extension and signs the Permit2 permit accordingly;
|
|
67
|
+
// without it the payer must have an existing approve(Permit2).
|
|
68
|
+
// Ref: x402-upto-scheme design/05.
|
|
69
|
+
network: opts.network,
|
|
70
|
+
// rpcUrl lets the upto client read the EIP-2612 token nonce so it can
|
|
71
|
+
// sign the gasless Permit2 approval (no on-chain approve needed).
|
|
72
|
+
client: new UptoEvmScheme(opts.signer.viemAccount, { rpcUrl: opts.rpcUrl }),
|
|
73
|
+
},
|
|
22
74
|
],
|
|
75
|
+
paymentRequirementsSelector: (_x402Version, accepts) => {
|
|
76
|
+
// Honor the SELLER's advertised order: pick the first accept whose
|
|
77
|
+
// scheme this client can sign. Scheme choice is a property of the
|
|
78
|
+
// service's pricing model (seller advertises priority via accepts
|
|
79
|
+
// order), NOT buyer config — so a usage-based service that lists `upto`
|
|
80
|
+
// first gets upto automatically; a fixed-price service that lists
|
|
81
|
+
// batch/exact gets those. `HPP_X402_PREFER_EXACT=true` is a demo-only
|
|
82
|
+
// override (forces exact, e.g. to show wallet balance deltas live).
|
|
83
|
+
const supported = new Set(["exact", "batch-settlement", "upto"]);
|
|
84
|
+
let picked = accepts.find((a) => supported.has(a.scheme)) ?? accepts[0];
|
|
85
|
+
if (process.env.HPP_X402_PREFER_EXACT === "true") {
|
|
86
|
+
picked = accepts.find((a) => a.scheme === "exact") ?? picked;
|
|
87
|
+
}
|
|
88
|
+
const amountStr = picked.amount;
|
|
89
|
+
if (amountStr) {
|
|
90
|
+
try {
|
|
91
|
+
lastPaymentAmountAtomic = BigInt(amountStr);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// amount unparseable — leave previous value, log already covers selecting
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
log.info("scheme.selecting", {
|
|
98
|
+
offered: accepts.map((a) => a.scheme),
|
|
99
|
+
picked: picked.scheme,
|
|
100
|
+
amount: amountStr,
|
|
101
|
+
});
|
|
102
|
+
return picked;
|
|
103
|
+
},
|
|
23
104
|
}, {
|
|
24
105
|
autoPayment: true,
|
|
25
106
|
onPaymentRequested: async ({ paymentRequired }) => {
|
|
26
|
-
|
|
107
|
+
// A multi-network resource-server advertises accepts for several networks;
|
|
108
|
+
// pick THIS bridge's network so the topup amount + log match the accept the
|
|
109
|
+
// selector will actually settle (the SDK filters accepts by registered
|
|
110
|
+
// network). Falling back to accepts[0] keeps single-network servers working.
|
|
111
|
+
const accept = paymentRequired.accepts?.find((a) => a.network === opts.network) ??
|
|
112
|
+
paymentRequired.accepts?.[0];
|
|
27
113
|
if (!accept)
|
|
28
114
|
return false;
|
|
29
115
|
const requiredAtomic = BigInt(accept.amount ?? "0");
|
|
@@ -33,7 +119,7 @@ export async function connectUpstream(opts) {
|
|
|
33
119
|
network: accept.network,
|
|
34
120
|
});
|
|
35
121
|
try {
|
|
36
|
-
const txHash = await opts.
|
|
122
|
+
const txHash = await opts.funds.ensure(requiredAtomic);
|
|
37
123
|
if (txHash) {
|
|
38
124
|
log.info("autoTopup.executed", { txHash, requiredAtomic: requiredAtomic.toString() });
|
|
39
125
|
}
|
|
@@ -51,12 +137,63 @@ export async function connectUpstream(opts) {
|
|
|
51
137
|
}
|
|
52
138
|
},
|
|
53
139
|
});
|
|
140
|
+
// Persist channel state after every paid call. The SDK's HTTP transport
|
|
141
|
+
// does this through `processPaymentResponse(storage, getHeader)` which
|
|
142
|
+
// parses the PAYMENT-RESPONSE header; MCP transport routes the same
|
|
143
|
+
// settle payload through tool result meta (extractPaymentResponseFromMeta
|
|
144
|
+
// → afterPaymentHooks ctx.settleResponse) but the SDK's BatchSettlement
|
|
145
|
+
// schemeHooks.onPaymentResponse is *not* invoked by the MCP wrapper
|
|
146
|
+
// (only manual afterPaymentHooks are). Without this we never write
|
|
147
|
+
// {balance, totalClaimed, chargedCumulativeAmount, signedMaxClaimable,
|
|
148
|
+
// signature} back to the channel context, and the next call signs a
|
|
149
|
+
// voucher against stale state — triggering
|
|
150
|
+
// `invalid_batch_settlement_evm_cumulative_amount_mismatch`. Pending
|
|
151
|
+
// upstream MCP wrapper fix: x402-foundation/x402#2387.
|
|
152
|
+
x402.onAfterPayment(async ({ settleResponse }) => {
|
|
153
|
+
if (!settleResponse || !settleResponse.success)
|
|
154
|
+
return;
|
|
155
|
+
// Auto-deposit visibility: when the SDK bundles an onchain deposit
|
|
156
|
+
// with this call (channel was low on balance), the settle response
|
|
157
|
+
// carries a transaction hash AND the post-deposit balance. Compare
|
|
158
|
+
// against the previously-persisted balance to surface a clear log.
|
|
159
|
+
const extra = settleResponse
|
|
160
|
+
.extra?.channelState;
|
|
161
|
+
if (extra?.channelId && extra.balance !== undefined && settleResponse.transaction) {
|
|
162
|
+
try {
|
|
163
|
+
const prior = await channelStorage.get(extra.channelId.toLowerCase());
|
|
164
|
+
const priorBalance = BigInt(prior?.balance ?? "0");
|
|
165
|
+
const newBalance = BigInt(extra.balance);
|
|
166
|
+
if (newBalance > priorBalance) {
|
|
167
|
+
log.info("batch.channel.deposited", {
|
|
168
|
+
channelId: extra.channelId,
|
|
169
|
+
depositedAmount: (newBalance - priorBalance).toString(),
|
|
170
|
+
balanceAfter: extra.balance,
|
|
171
|
+
txHash: settleResponse.transaction,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// best-effort log — never block payment on this
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
try {
|
|
180
|
+
await processSettleResponse(channelStorage, settleResponse);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
log.error("batch.settleResponse.persist_failed", {
|
|
184
|
+
err: err.message,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
});
|
|
54
188
|
const transport = new SSEClientTransport(new URL(opts.url));
|
|
55
189
|
await base.connect(transport);
|
|
56
190
|
log.info("upstream.connected", { url: opts.url });
|
|
57
191
|
return {
|
|
58
192
|
base,
|
|
59
193
|
x402,
|
|
194
|
+
batchScheme,
|
|
195
|
+
serverUrl: opts.url,
|
|
196
|
+
lastPaymentAmount: () => lastPaymentAmountAtomic,
|
|
60
197
|
async close() {
|
|
61
198
|
await base.close().catch(() => { });
|
|
62
199
|
},
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,kCAAkC,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -5,42 +5,81 @@
|
|
|
5
5
|
* loudly at startup rather than mid-call.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
8
|
-
declare const Schema: z.ZodObject<{
|
|
9
|
-
DELEGATE_PRIVATE_KEY: z.ZodString
|
|
10
|
-
SAFE_ADDRESS: z.ZodString
|
|
11
|
-
ALLOWANCE_MODULE_ADDRESS: z.ZodString
|
|
8
|
+
declare const Schema: z.ZodEffects<z.ZodObject<{
|
|
9
|
+
DELEGATE_PRIVATE_KEY: z.ZodEffects<z.ZodString, string, string>;
|
|
10
|
+
SAFE_ADDRESS: z.ZodOptional<z.ZodString>;
|
|
11
|
+
ALLOWANCE_MODULE_ADDRESS: z.ZodOptional<z.ZodString>;
|
|
12
12
|
USDCE_ADDRESS: z.ZodString;
|
|
13
|
-
RESOURCE_SERVER_URL: z.ZodString
|
|
13
|
+
RESOURCE_SERVER_URL: z.ZodOptional<z.ZodString>;
|
|
14
14
|
HPP_RPC_URL: z.ZodString;
|
|
15
15
|
HPP_NETWORK: z.ZodString;
|
|
16
16
|
TOPUP_AMOUNT_ATOMIC: z.ZodOptional<z.ZodString>;
|
|
17
17
|
TOPUP_HEADROOM_X: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
18
18
|
LOG_LEVEL: z.ZodDefault<z.ZodOptional<z.ZodEnum<["off", "info", "debug"]>>>;
|
|
19
|
+
HPP_X402_DISCOVERY: z.ZodDefault<z.ZodOptional<z.ZodEnum<["on", "off"]>>>;
|
|
20
|
+
HPP_X402_DISCOVERY_URL: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
19
21
|
}, "strip", z.ZodTypeAny, {
|
|
20
22
|
DELEGATE_PRIVATE_KEY: string;
|
|
21
|
-
SAFE_ADDRESS: string;
|
|
22
|
-
ALLOWANCE_MODULE_ADDRESS: string;
|
|
23
23
|
USDCE_ADDRESS: string;
|
|
24
|
-
RESOURCE_SERVER_URL: string;
|
|
25
24
|
HPP_RPC_URL: string;
|
|
26
25
|
HPP_NETWORK: string;
|
|
27
26
|
TOPUP_HEADROOM_X: string;
|
|
28
27
|
LOG_LEVEL: "off" | "info" | "debug";
|
|
28
|
+
HPP_X402_DISCOVERY: "off" | "on";
|
|
29
|
+
HPP_X402_DISCOVERY_URL: string;
|
|
30
|
+
SAFE_ADDRESS?: string | undefined;
|
|
31
|
+
ALLOWANCE_MODULE_ADDRESS?: string | undefined;
|
|
32
|
+
RESOURCE_SERVER_URL?: string | undefined;
|
|
29
33
|
TOPUP_AMOUNT_ATOMIC?: string | undefined;
|
|
30
34
|
}, {
|
|
31
35
|
DELEGATE_PRIVATE_KEY: string;
|
|
32
|
-
SAFE_ADDRESS: string;
|
|
33
|
-
ALLOWANCE_MODULE_ADDRESS: string;
|
|
34
36
|
USDCE_ADDRESS: string;
|
|
35
|
-
RESOURCE_SERVER_URL: string;
|
|
36
37
|
HPP_RPC_URL: string;
|
|
37
38
|
HPP_NETWORK: string;
|
|
39
|
+
SAFE_ADDRESS?: string | undefined;
|
|
40
|
+
ALLOWANCE_MODULE_ADDRESS?: string | undefined;
|
|
41
|
+
RESOURCE_SERVER_URL?: string | undefined;
|
|
38
42
|
TOPUP_AMOUNT_ATOMIC?: string | undefined;
|
|
39
43
|
TOPUP_HEADROOM_X?: string | undefined;
|
|
40
44
|
LOG_LEVEL?: "off" | "info" | "debug" | undefined;
|
|
45
|
+
HPP_X402_DISCOVERY?: "off" | "on" | undefined;
|
|
46
|
+
HPP_X402_DISCOVERY_URL?: string | undefined;
|
|
47
|
+
}>, {
|
|
48
|
+
DELEGATE_PRIVATE_KEY: string;
|
|
49
|
+
USDCE_ADDRESS: string;
|
|
50
|
+
HPP_RPC_URL: string;
|
|
51
|
+
HPP_NETWORK: string;
|
|
52
|
+
TOPUP_HEADROOM_X: string;
|
|
53
|
+
LOG_LEVEL: "off" | "info" | "debug";
|
|
54
|
+
HPP_X402_DISCOVERY: "off" | "on";
|
|
55
|
+
HPP_X402_DISCOVERY_URL: string;
|
|
56
|
+
SAFE_ADDRESS?: string | undefined;
|
|
57
|
+
ALLOWANCE_MODULE_ADDRESS?: string | undefined;
|
|
58
|
+
RESOURCE_SERVER_URL?: string | undefined;
|
|
59
|
+
TOPUP_AMOUNT_ATOMIC?: string | undefined;
|
|
60
|
+
}, {
|
|
61
|
+
DELEGATE_PRIVATE_KEY: string;
|
|
62
|
+
USDCE_ADDRESS: string;
|
|
63
|
+
HPP_RPC_URL: string;
|
|
64
|
+
HPP_NETWORK: string;
|
|
65
|
+
SAFE_ADDRESS?: string | undefined;
|
|
66
|
+
ALLOWANCE_MODULE_ADDRESS?: string | undefined;
|
|
67
|
+
RESOURCE_SERVER_URL?: string | undefined;
|
|
68
|
+
TOPUP_AMOUNT_ATOMIC?: string | undefined;
|
|
69
|
+
TOPUP_HEADROOM_X?: string | undefined;
|
|
70
|
+
LOG_LEVEL?: "off" | "info" | "debug" | undefined;
|
|
71
|
+
HPP_X402_DISCOVERY?: "off" | "on" | undefined;
|
|
72
|
+
HPP_X402_DISCOVERY_URL?: string | undefined;
|
|
41
73
|
}>;
|
|
42
74
|
export type Config = z.infer<typeof Schema> & {
|
|
43
75
|
chainId: number;
|
|
76
|
+
/** "safe" when SAFE_ADDRESS + ALLOWANCE_MODULE_ADDRESS are set (autoTopup
|
|
77
|
+
* from the Safe); "light" when both are omitted (delegate holds USDC.e). */
|
|
78
|
+
walletMode: "safe" | "light";
|
|
79
|
+
/** true when HPP_X402_DISCOVERY === "on" — register hpp_discover/hpp_call. */
|
|
80
|
+
discoveryEnabled: boolean;
|
|
81
|
+
/** Base URL of the discovery REST API. */
|
|
82
|
+
discoveryUrl: string;
|
|
44
83
|
};
|
|
45
84
|
export declare function loadConfig(env?: NodeJS.ProcessEnv): Config;
|
|
46
85
|
export {};
|
package/dist/config.js
CHANGED
|
@@ -7,19 +7,27 @@
|
|
|
7
7
|
import { z } from "zod";
|
|
8
8
|
const HEX_ADDR = /^0x[0-9a-fA-F]{40}$/;
|
|
9
9
|
const HEX_KEY = /^0x[0-9a-fA-F]{64}$/;
|
|
10
|
+
const KEYCHAIN_URI = /^keychain:\/\/[^\/]+\/[a-zA-Z0-9._-]+$/;
|
|
10
11
|
const Schema = z.object({
|
|
11
12
|
// Delegate EOA — signs EIP-3009 payments + executeAllowanceTransfer.
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
// Accepted forms:
|
|
14
|
+
// - 0x + 64 hex chars (raw key, dev / quickstart)
|
|
15
|
+
// - keychain://hpp-x402/<account> (resolved via @napi-rs/keyring at startup)
|
|
16
|
+
DELEGATE_PRIVATE_KEY: z
|
|
17
|
+
.string()
|
|
18
|
+
.refine((v) => HEX_KEY.test(v) || KEYCHAIN_URI.test(v), "expected 0x + 64 hex chars OR keychain://hpp-x402/<account>"),
|
|
19
|
+
// Safe wallet that holds the user's USDC.e (Safe mode only). Omit for light
|
|
20
|
+
// mode, where the delegate EOA holds USDC.e directly. Must be set together
|
|
21
|
+
// with ALLOWANCE_MODULE_ADDRESS (both-or-neither, enforced below).
|
|
22
|
+
SAFE_ADDRESS: z.string().regex(HEX_ADDR).optional(),
|
|
23
|
+
// Deployed AllowanceModule (Safe mode only; pairs with SAFE_ADDRESS).
|
|
24
|
+
ALLOWANCE_MODULE_ADDRESS: z.string().regex(HEX_ADDR).optional(),
|
|
19
25
|
// Asset paid in (USDC.e on HPP).
|
|
20
26
|
USDCE_ADDRESS: z.string().regex(HEX_ADDR),
|
|
21
|
-
// Remote MCP server we proxy to (the seller).
|
|
22
|
-
|
|
27
|
+
// Remote MCP server we proxy to (the seller). Optional: when unset the
|
|
28
|
+
// bridge runs in local-tools-only mode (e.g. credit top-up / A2A) and skips
|
|
29
|
+
// the upstream connection entirely.
|
|
30
|
+
RESOURCE_SERVER_URL: z.string().url().optional(),
|
|
23
31
|
// Chain RPC.
|
|
24
32
|
HPP_RPC_URL: z.string().url(),
|
|
25
33
|
// CAIP-2 network identifier used by @x402/evm.
|
|
@@ -43,6 +51,31 @@ const Schema = z.object({
|
|
|
43
51
|
.default("10"),
|
|
44
52
|
// Logging. "off" = silent (good for clean stdio), "debug" = verbose stderr.
|
|
45
53
|
LOG_LEVEL: z.enum(["off", "info", "debug"]).optional().default("info"),
|
|
54
|
+
// Curated service discovery (hpp-x402-discovery). "on" (default) registers
|
|
55
|
+
// the hpp_discover / hpp_call tools that query the HPP discovery directory —
|
|
56
|
+
// a facilitator-indexed, semi-curated list of paid x402 services. "off"
|
|
57
|
+
// disables them (manual RESOURCE_SERVER_URL only).
|
|
58
|
+
HPP_X402_DISCOVERY: z.enum(["on", "off"]).optional().default("on"),
|
|
59
|
+
HPP_X402_DISCOVERY_URL: z
|
|
60
|
+
.string()
|
|
61
|
+
.url()
|
|
62
|
+
.optional()
|
|
63
|
+
.default("https://x402-discovery.hpp.io"),
|
|
64
|
+
})
|
|
65
|
+
// Wallet mode is inferred from Safe config presence: both set = Safe mode
|
|
66
|
+
// (autoTopup from the Safe within an on-chain cap); both omitted = light mode
|
|
67
|
+
// (delegate EOA holds USDC.e directly). Setting one without the other is a
|
|
68
|
+
// config error.
|
|
69
|
+
.superRefine((v, ctx) => {
|
|
70
|
+
const hasSafe = !!v.SAFE_ADDRESS;
|
|
71
|
+
const hasModule = !!v.ALLOWANCE_MODULE_ADDRESS;
|
|
72
|
+
if (hasSafe !== hasModule) {
|
|
73
|
+
ctx.addIssue({
|
|
74
|
+
code: z.ZodIssueCode.custom,
|
|
75
|
+
path: [hasSafe ? "ALLOWANCE_MODULE_ADDRESS" : "SAFE_ADDRESS"],
|
|
76
|
+
message: "SAFE_ADDRESS and ALLOWANCE_MODULE_ADDRESS must be set together (Safe mode) or both omitted (light mode)",
|
|
77
|
+
});
|
|
78
|
+
}
|
|
46
79
|
});
|
|
47
80
|
export function loadConfig(env = process.env) {
|
|
48
81
|
const parsed = Schema.safeParse(env);
|
|
@@ -54,6 +87,13 @@ export function loadConfig(env = process.env) {
|
|
|
54
87
|
}
|
|
55
88
|
const v = parsed.data;
|
|
56
89
|
const chainId = Number(v.HPP_NETWORK.split(":")[1]);
|
|
57
|
-
|
|
90
|
+
const walletMode = v.SAFE_ADDRESS && v.ALLOWANCE_MODULE_ADDRESS ? "safe" : "light";
|
|
91
|
+
return {
|
|
92
|
+
...v,
|
|
93
|
+
chainId,
|
|
94
|
+
walletMode,
|
|
95
|
+
discoveryEnabled: v.HPP_X402_DISCOVERY === "on",
|
|
96
|
+
discoveryUrl: v.HPP_X402_DISCOVERY_URL,
|
|
97
|
+
};
|
|
58
98
|
}
|
|
59
99
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AACvC,MAAM,OAAO,GAAG,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface DiscoveredResource {
|
|
2
|
+
id: string;
|
|
3
|
+
type: "http" | "mcp" | "a2a";
|
|
4
|
+
resourceUrl: string;
|
|
5
|
+
routeTemplate?: string;
|
|
6
|
+
toolName?: string;
|
|
7
|
+
skillId?: string;
|
|
8
|
+
agentCardUrl?: string;
|
|
9
|
+
payTo: string;
|
|
10
|
+
network: string;
|
|
11
|
+
asset: string;
|
|
12
|
+
scheme: string;
|
|
13
|
+
priceAtomic: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
httpMethod?: string;
|
|
16
|
+
bodyType?: "json" | "form-data" | "text";
|
|
17
|
+
transport?: "streamable-http" | "sse";
|
|
18
|
+
x402Version: number;
|
|
19
|
+
}
|
|
20
|
+
export interface DiscoveredResourceDetail extends DiscoveredResource {
|
|
21
|
+
metadata?: {
|
|
22
|
+
info?: unknown;
|
|
23
|
+
schema?: unknown;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export interface DiscoverQuery {
|
|
27
|
+
/** Free-text semantic search; omit to browse the newest/highest-ranked. */
|
|
28
|
+
query?: string;
|
|
29
|
+
type?: "http" | "mcp" | "a2a" | "all";
|
|
30
|
+
/** CAIP-2 network filter, e.g. "eip155:190415". */
|
|
31
|
+
network?: string;
|
|
32
|
+
limit?: number;
|
|
33
|
+
}
|
|
34
|
+
export declare class DiscoveryClient {
|
|
35
|
+
private readonly baseUrl;
|
|
36
|
+
private readonly timeoutMs;
|
|
37
|
+
constructor(baseUrl: string, timeoutMs?: number);
|
|
38
|
+
private get;
|
|
39
|
+
/** List or semantically search the directory. */
|
|
40
|
+
discover(q: DiscoverQuery): Promise<DiscoveredResource[]>;
|
|
41
|
+
/** Full detail for one resource (incl. metadata.schema when present). */
|
|
42
|
+
detail(id: string): Promise<DiscoveredResourceDetail>;
|
|
43
|
+
}
|