@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.
Files changed (78) hide show
  1. package/README.md +125 -77
  2. package/bin/hpp-x402.js +5 -0
  3. package/bin/x402-mcp-bridge.js +0 -0
  4. package/dist/a2a.d.ts +70 -0
  5. package/dist/a2a.js +210 -0
  6. package/dist/a2a.js.map +1 -0
  7. package/dist/autoTopup.d.ts +2 -1
  8. package/dist/autoTopup.js.map +1 -1
  9. package/dist/cli/channel.d.ts +1 -0
  10. package/dist/cli/channel.js +323 -0
  11. package/dist/cli/channel.js.map +1 -0
  12. package/dist/cli/hpp-x402.d.ts +2 -0
  13. package/dist/cli/hpp-x402.js +375 -0
  14. package/dist/cli/hpp-x402.js.map +1 -0
  15. package/dist/cli/install-claude-code.d.ts +24 -0
  16. package/dist/cli/install-claude-code.js +50 -0
  17. package/dist/cli/install-claude-code.js.map +1 -0
  18. package/dist/cli/install-claude.d.ts +2 -20
  19. package/dist/cli/install-claude.js +12 -63
  20. package/dist/cli/install-claude.js.map +1 -1
  21. package/dist/cli/install-cursor.d.ts +7 -0
  22. package/dist/cli/install-cursor.js +26 -0
  23. package/dist/cli/install-cursor.js.map +1 -0
  24. package/dist/cli/install-mcp-host.d.ts +35 -0
  25. package/dist/cli/install-mcp-host.js +82 -0
  26. package/dist/cli/install-mcp-host.js.map +1 -0
  27. package/dist/cli/install-openclaw.d.ts +7 -0
  28. package/dist/cli/install-openclaw.js +28 -0
  29. package/dist/cli/install-openclaw.js.map +1 -0
  30. package/dist/cli/install-windsurf.d.ts +7 -0
  31. package/dist/cli/install-windsurf.js +37 -0
  32. package/dist/cli/install-windsurf.js.map +1 -0
  33. package/dist/cli/policy.d.ts +1 -0
  34. package/dist/cli/policy.js +212 -0
  35. package/dist/cli/policy.js.map +1 -0
  36. package/dist/cli/revoke.d.ts +1 -1
  37. package/dist/cli/revoke.js +1 -5
  38. package/dist/cli/revoke.js.map +1 -1
  39. package/dist/cli/safe.d.ts +4172 -9580
  40. package/dist/cli/setup.d.ts +1 -1
  41. package/dist/cli/setup.js +24 -6
  42. package/dist/cli/setup.js.map +1 -1
  43. package/dist/client.d.ts +25 -10
  44. package/dist/client.js +139 -2
  45. package/dist/client.js.map +1 -1
  46. package/dist/config.d.ts +50 -11
  47. package/dist/config.js +50 -10
  48. package/dist/config.js.map +1 -1
  49. package/dist/discovery.d.ts +43 -0
  50. package/dist/discovery.js +62 -0
  51. package/dist/discovery.js.map +1 -0
  52. package/dist/discoveryTools.d.ts +75 -0
  53. package/dist/discoveryTools.js +101 -0
  54. package/dist/discoveryTools.js.map +1 -0
  55. package/dist/funds/direct-balance.d.ts +27 -0
  56. package/dist/funds/direct-balance.js +58 -0
  57. package/dist/funds/direct-balance.js.map +1 -0
  58. package/dist/funds.d.ts +26 -0
  59. package/dist/funds.js +2 -0
  60. package/dist/funds.js.map +1 -0
  61. package/dist/httpX402.d.ts +45 -0
  62. package/dist/httpX402.js +214 -0
  63. package/dist/httpX402.js.map +1 -0
  64. package/dist/index.js +66 -20
  65. package/dist/index.js.map +1 -1
  66. package/dist/keychain.d.ts +23 -0
  67. package/dist/keychain.js +111 -0
  68. package/dist/keychain.js.map +1 -0
  69. package/dist/policy.d.ts +73 -0
  70. package/dist/policy.js +249 -0
  71. package/dist/policy.js.map +1 -0
  72. package/dist/server.d.ts +18 -1
  73. package/dist/server.js +120 -10
  74. package/dist/server.js.map +1 -1
  75. package/docs/policy.md +101 -0
  76. package/package.json +11 -8
  77. package/bin/hpp-x402-safe-revoke.js +0 -5
  78. package/bin/hpp-x402-safe-setup.js +0 -5
@@ -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 main() {
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
- else {
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
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
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 { AutoTopup } from "./autoTopup.js";
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
- autoTopup: AutoTopup;
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
- const accept = paymentRequired.accepts?.[0];
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.autoTopup.ensure(requiredAtomic);
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
  },
@@ -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;AAKxD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAoB/B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAqB;IACzD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAEhF,MAAM,IAAI,GAAG,kCAAkC,CAC7C,IAAI,EACJ;QACE,OAAO,EAAE;YACP;gBACE,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aACpD;SACF;KACF,EACD;QACE,WAAW,EAAE,IAAI;QACjB,kBAAkB,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAE1B,MAAM,cAAc,GAAG,MAAM,CAAE,MAA8B,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;YAC7E,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,MAAM,EAAE,cAAc,CAAC,QAAQ,EAAE;gBACjC,KAAK,EAAG,MAA6B,CAAC,KAAK;gBAC3C,OAAO,EAAG,MAA+B,CAAC,OAAO;aAClD,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;gBAC3D,IAAI,MAAM,EAAE,CAAC;oBACX,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACxF,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACtD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE;oBAC5B,GAAG,EAAG,GAAa,CAAC,OAAO;oBAC3B,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE;iBAC1C,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,CAAC,2CAA2C;YAC3D,CAAC;QACH,CAAC;KACF,CACF,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAElD,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,KAAK,CAAC,KAAK;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,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
- // NOTE: PoC accepts the raw key. Future signers (keychain, server-wallet)
13
- // will short-circuit this field.
14
- DELEGATE_PRIVATE_KEY: z.string().regex(HEX_KEY, "expected 0x + 64 hex chars"),
15
- // Safe wallet that holds the user's USDC.e.
16
- SAFE_ADDRESS: z.string().regex(HEX_ADDR),
17
- // Deployed AllowanceModule.
18
- ALLOWANCE_MODULE_ADDRESS: z.string().regex(HEX_ADDR),
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
- RESOURCE_SERVER_URL: z.string().url(),
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
- return { ...v, chainId };
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
@@ -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;AAEtC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,qEAAqE;IACrE,0EAA0E;IAC1E,iCAAiC;IACjC,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAE7E,4CAA4C;IAC5C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAExC,4BAA4B;IAC5B,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEpD,iCAAiC;IACjC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;IAEzC,8CAA8C;IAC9C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAErC,aAAa;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAE7B,+CAA+C;IAC/C,sEAAsE;IACtE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC;IAE7C,wEAAwE;IACxE,oEAAoE;IACpE,oEAAoE;IACpE,2DAA2D;IAC3D,mBAAmB,EAAE,CAAC;SACnB,MAAM,EAAE;SACR,KAAK,CAAC,OAAO,CAAC;SACd,QAAQ,EAAE;IAEb,oEAAoE;IACpE,kEAAkE;IAClE,4BAA4B;IAC5B,gBAAgB,EAAE,CAAC;SAChB,MAAM,EAAE;SACR,KAAK,CAAC,OAAO,CAAC;SACd,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;IAEhB,4EAA4E;IAC5E,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;CACvE,CAAC,CAAC;AAMH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,4CAA4C,GAAG,MAAM,GAAG,IAAI,CAC7D,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3B,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
+ }