@hpp-io/x402-mcp-bridge 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -123
- package/bin/hpp-x402.js +5 -0
- package/dist/a2a.d.ts +2 -2
- package/dist/a2a.js +14 -6
- package/dist/a2a.js.map +1 -1
- package/dist/autoTopup.d.ts +4 -1
- package/dist/autoTopup.js +4 -0
- package/dist/autoTopup.js.map +1 -1
- package/dist/cli/channel.d.ts +1 -1
- package/dist/cli/channel.js +1 -8
- package/dist/cli/channel.js.map +1 -1
- package/dist/cli/hpp-x402.d.ts +2 -0
- package/dist/cli/hpp-x402.js +377 -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-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 +2 -2
- package/dist/cli/install-mcp-host.js.map +1 -1
- 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 -1
- package/dist/cli/policy.js +1 -8
- package/dist/cli/policy.js.map +1 -1
- 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 +62 -62
- package/dist/cli/serve.d.ts +1 -0
- package/dist/cli/serve.js +128 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/setup.d.ts +1 -1
- package/dist/cli/setup.js +1 -5
- package/dist/cli/setup.js.map +1 -1
- package/dist/client.d.ts +6 -2
- package/dist/client.js +34 -15
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +71 -15
- package/dist/config.js +66 -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 +28 -0
- package/dist/funds/direct-balance.js +61 -0
- package/dist/funds/direct-balance.js.map +1 -0
- package/dist/funds.d.ts +32 -0
- package/dist/funds.js +2 -0
- package/dist/funds.js.map +1 -0
- package/dist/httpX402.d.ts +8 -2
- package/dist/httpX402.js +26 -13
- package/dist/httpX402.js.map +1 -1
- package/dist/index.js +66 -11
- package/dist/index.js.map +1 -1
- package/dist/sellerTools.d.ts +247 -0
- package/dist/sellerTools.js +202 -0
- package/dist/sellerTools.js.map +1 -0
- package/dist/server.d.ts +8 -2
- package/dist/server.js +165 -64
- package/dist/server.js.map +1 -1
- package/dist/spendGuard.d.ts +24 -0
- package/dist/spendGuard.js +124 -0
- package/dist/spendGuard.js.map +1 -0
- package/package.json +13 -12
- package/bin/hpp-x402-channel.js +0 -5
- package/bin/hpp-x402-keychain.js +0 -5
- package/bin/hpp-x402-policy.js +0 -5
- package/bin/hpp-x402-safe-revoke.js +0 -5
- package/bin/hpp-x402-safe-setup.js +0 -5
- package/dist/autoSettlePickup.d.ts +0 -69
- package/dist/autoSettlePickup.js +0 -150
- package/dist/autoSettlePickup.js.map +0 -1
- package/dist/cli/keychain.d.ts +0 -1
- package/dist/cli/keychain.js +0 -147
- package/dist/cli/keychain.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoveryTools.js","sourceRoot":"","sources":["../src/discoveryTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DirectBalance — light wallet mode (Safe-less).
|
|
3
|
+
*
|
|
4
|
+
* The delegate EOA holds USDC.e directly (funded by sending USDC.e straight to
|
|
5
|
+
* its address). No Safe, no AllowanceModule, no autoTopup — and because x402
|
|
6
|
+
* settlement is gasless (the facilitator submits EIP-3009 / sponsors the upto
|
|
7
|
+
* Permit2 approval), the delegate needs no native gas either. So funding the
|
|
8
|
+
* wallet is a single USDC.e transfer.
|
|
9
|
+
*
|
|
10
|
+
* This `Funds` impl simply reads the delegate's balance before each payment and,
|
|
11
|
+
* when short, throws an error whose message doubles as a funding instruction the
|
|
12
|
+
* MCP host surfaces to the LLM/user.
|
|
13
|
+
*/
|
|
14
|
+
import { type Address, type Hex } from "viem";
|
|
15
|
+
import type { Funds } from "../funds.js";
|
|
16
|
+
export declare class DirectBalance implements Funds {
|
|
17
|
+
private readonly delegate;
|
|
18
|
+
private readonly token;
|
|
19
|
+
private readonly publicClient;
|
|
20
|
+
constructor(delegate: Address, token: Address, chainId: number, rpcUrl: string);
|
|
21
|
+
/**
|
|
22
|
+
* Light mode never performs an on-chain topup, so this either returns null
|
|
23
|
+
* (sufficient balance) or throws with a funding instruction. It never returns
|
|
24
|
+
* a tx hash.
|
|
25
|
+
*/
|
|
26
|
+
balance(): Promise<bigint>;
|
|
27
|
+
ensure(requiredAtomic: bigint): Promise<Hex | null>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DirectBalance — light wallet mode (Safe-less).
|
|
3
|
+
*
|
|
4
|
+
* The delegate EOA holds USDC.e directly (funded by sending USDC.e straight to
|
|
5
|
+
* its address). No Safe, no AllowanceModule, no autoTopup — and because x402
|
|
6
|
+
* settlement is gasless (the facilitator submits EIP-3009 / sponsors the upto
|
|
7
|
+
* Permit2 approval), the delegate needs no native gas either. So funding the
|
|
8
|
+
* wallet is a single USDC.e transfer.
|
|
9
|
+
*
|
|
10
|
+
* This `Funds` impl simply reads the delegate's balance before each payment and,
|
|
11
|
+
* when short, throws an error whose message doubles as a funding instruction the
|
|
12
|
+
* MCP host surfaces to the LLM/user.
|
|
13
|
+
*/
|
|
14
|
+
import { createPublicClient, http, defineChain, } from "viem";
|
|
15
|
+
const ERC20_BALANCE_ABI = [
|
|
16
|
+
{
|
|
17
|
+
type: "function",
|
|
18
|
+
name: "balanceOf",
|
|
19
|
+
inputs: [{ name: "account", type: "address" }],
|
|
20
|
+
outputs: [{ name: "", type: "uint256" }],
|
|
21
|
+
stateMutability: "view",
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
export class DirectBalance {
|
|
25
|
+
delegate;
|
|
26
|
+
token;
|
|
27
|
+
publicClient;
|
|
28
|
+
constructor(delegate, token, chainId, rpcUrl) {
|
|
29
|
+
this.delegate = delegate;
|
|
30
|
+
this.token = token;
|
|
31
|
+
const chain = defineChain({
|
|
32
|
+
id: chainId,
|
|
33
|
+
name: `chain-${chainId}`,
|
|
34
|
+
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
|
|
35
|
+
rpcUrls: { default: { http: [rpcUrl] } },
|
|
36
|
+
});
|
|
37
|
+
this.publicClient = createPublicClient({ chain, transport: http(rpcUrl) });
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Light mode never performs an on-chain topup, so this either returns null
|
|
41
|
+
* (sufficient balance) or throws with a funding instruction. It never returns
|
|
42
|
+
* a tx hash.
|
|
43
|
+
*/
|
|
44
|
+
async balance() {
|
|
45
|
+
return (await this.publicClient.readContract({
|
|
46
|
+
address: this.token,
|
|
47
|
+
abi: ERC20_BALANCE_ABI,
|
|
48
|
+
functionName: "balanceOf",
|
|
49
|
+
args: [this.delegate],
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
async ensure(requiredAtomic) {
|
|
53
|
+
const balance = await this.balance();
|
|
54
|
+
if (balance >= requiredAtomic)
|
|
55
|
+
return null;
|
|
56
|
+
throw new Error(`insufficient USDC.e: need ${requiredAtomic}, have ${balance}. ` +
|
|
57
|
+
`Send USDC.e to ${this.delegate} on this network to top up ` +
|
|
58
|
+
`(no native gas required).`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=direct-balance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-balance.js","sourceRoot":"","sources":["../../src/funds/direct-balance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,kBAAkB,EAClB,IAAI,EACJ,WAAW,GAIZ,MAAM,MAAM,CAAC;AAId,MAAM,iBAAiB,GAAG;IACxB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACxC,eAAe,EAAE,MAAM;KACxB;CACO,CAAC;AAEX,MAAM,OAAO,aAAa;IAIL;IACA;IAJF,YAAY,CAAe;IAE5C,YACmB,QAAiB,EACjB,KAAc,EAC/B,OAAe,EACf,MAAc;QAHG,aAAQ,GAAR,QAAQ,CAAS;QACjB,UAAK,GAAL,KAAK,CAAS;QAI/B,MAAM,KAAK,GAAG,WAAW,CAAC;YACxB,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,SAAS,OAAO,EAAE;YACxB,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC9D,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;SACzC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC3C,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAW,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAErC,IAAI,OAAO,IAAI,cAAc;YAAE,OAAO,IAAI,CAAC;QAE3C,MAAM,IAAI,KAAK,CACb,6BAA6B,cAAc,UAAU,OAAO,IAAI;YAC9D,kBAAkB,IAAI,CAAC,QAAQ,6BAA6B;YAC5D,2BAA2B,CAC9B,CAAC;IACJ,CAAC;CACF"}
|
package/dist/funds.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Funds — abstraction over "ensure the delegate can cover this payment".
|
|
3
|
+
*
|
|
4
|
+
* Two implementations back the two wallet modes:
|
|
5
|
+
* - AutoTopup (Safe mode): pulls USDC.e from the user's Safe to the delegate
|
|
6
|
+
* EOA via AllowanceModule.executeAllowanceTransfer, within the on-chain
|
|
7
|
+
* daily cap, when the delegate balance is short.
|
|
8
|
+
* - DirectBalance (light mode): the delegate EOA holds USDC.e directly; this
|
|
9
|
+
* impl only verifies the balance and surfaces a clear funding instruction
|
|
10
|
+
* when short — no Safe, no on-chain topup, no native gas.
|
|
11
|
+
*
|
|
12
|
+
* The payment path (client.ts onPaymentRequested) depends only on this
|
|
13
|
+
* interface, so the two modes share a single code path.
|
|
14
|
+
*/
|
|
15
|
+
import type { Hex } from "viem";
|
|
16
|
+
export interface Funds {
|
|
17
|
+
/**
|
|
18
|
+
* Ensure the delegate holds at least `requiredAtomic` of the payment asset
|
|
19
|
+
* before the x402 payment is signed.
|
|
20
|
+
*
|
|
21
|
+
* Returns the topup tx hash when an on-chain refill was performed (Safe mode),
|
|
22
|
+
* or `null` when no action was needed (already sufficient). Throws a clear,
|
|
23
|
+
* host-surfaceable error when funds are insufficient and cannot be topped up.
|
|
24
|
+
*/
|
|
25
|
+
ensure(requiredAtomic: bigint): Promise<Hex | null>;
|
|
26
|
+
/**
|
|
27
|
+
* The delegate's current balance of the payment asset (atomic units) — the
|
|
28
|
+
* immediately-spendable balance. In Safe mode the Safe can top up more on
|
|
29
|
+
* demand (see {@link ensure}).
|
|
30
|
+
*/
|
|
31
|
+
balance(): Promise<bigint>;
|
|
32
|
+
}
|
package/dist/funds.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funds.js","sourceRoot":"","sources":["../src/funds.ts"],"names":[],"mappings":""}
|
package/dist/httpX402.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import type { Network } from "@x402/core/types";
|
|
2
2
|
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { Funds } from "./funds.js";
|
|
4
4
|
import type { RawEoaSigner } from "./signers/raw-eoa.js";
|
|
5
5
|
export interface HttpX402Deps {
|
|
6
6
|
signer: RawEoaSigner;
|
|
7
7
|
network: Network;
|
|
8
8
|
/** Ensure the delegate holds enough USDC.e before paying. */
|
|
9
|
-
|
|
9
|
+
funds?: Funds;
|
|
10
|
+
/**
|
|
11
|
+
* Set by hpp_call for curated-discovery resources: skip the manual host
|
|
12
|
+
* allowlist + local credential injection (discovery is the trust boundary).
|
|
13
|
+
* The spend cap (default limits, per-call amount, cooldown) still applies.
|
|
14
|
+
*/
|
|
15
|
+
trustedSource?: boolean;
|
|
10
16
|
}
|
|
11
17
|
export declare const X402_HTTP_TOOL: {
|
|
12
18
|
readonly name: "x402_http_call";
|
package/dist/httpX402.js
CHANGED
|
@@ -24,6 +24,7 @@ import { x402Client, x402HTTPClient } from "@x402/core/client";
|
|
|
24
24
|
import { ExactEvmScheme } from "@x402/evm/exact/client";
|
|
25
25
|
import { pickExactAccept } from "./a2a.js";
|
|
26
26
|
import { loadPolicy, checkAccess, checkAmount, resolveCredentials, checkCooldown, recordPaid, acquireHostLock, } from "./policy.js";
|
|
27
|
+
import { checkWalletSpend, recordWalletSpend } from "./spendGuard.js";
|
|
27
28
|
import { log } from "./log.js";
|
|
28
29
|
export const X402_HTTP_TOOL = {
|
|
29
30
|
name: "x402_http_call",
|
|
@@ -70,18 +71,23 @@ export async function x402HttpCall(deps, args) {
|
|
|
70
71
|
return errorResult("url required");
|
|
71
72
|
const method = (args.method ?? "POST").toUpperCase();
|
|
72
73
|
const policy = loadPolicy();
|
|
73
|
-
// 1. pre-flight guard — host allowlist + https (③ / H1·C1)
|
|
74
|
+
// 1. pre-flight guard — host allowlist + https (③ / H1·C1). Trusted
|
|
75
|
+
// (curated-discovery) calls skip the allowlist/https gate but still inherit
|
|
76
|
+
// the default spend limits carried on `access.limits`.
|
|
74
77
|
const access = checkAccess(policy, url);
|
|
75
|
-
if (!access.ok)
|
|
78
|
+
if (!access.ok && !deps.trustedSource)
|
|
76
79
|
return errorResult(`blocked: ${access.error}`);
|
|
77
80
|
const host = new URL(url).host.toLowerCase();
|
|
78
|
-
// 2. inject auth headers from local policy (② — never from args/LLM)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
// 2. inject auth headers from local policy (② — never from args/LLM). Trusted
|
|
82
|
+
// discovery services authenticate by payment (x402), not a local api key.
|
|
83
|
+
let authHeaders = {};
|
|
84
|
+
if (!deps.trustedSource) {
|
|
85
|
+
try {
|
|
86
|
+
authHeaders = resolveCredentials(policy, host);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
return errorResult(err.message);
|
|
90
|
+
}
|
|
85
91
|
}
|
|
86
92
|
const baseHeaders = { "Content-Type": "application/json", ...authHeaders };
|
|
87
93
|
const init = {
|
|
@@ -161,13 +167,19 @@ export async function x402HttpCall(deps, args) {
|
|
|
161
167
|
const deny = checkAmount(access.limits, amount);
|
|
162
168
|
if (deny)
|
|
163
169
|
return errorResult(`blocked: ${deny}`);
|
|
164
|
-
//
|
|
165
|
-
|
|
170
|
+
// wallet-wide guard (per-call + daily ledger) — uniform across all payment
|
|
171
|
+
// tools; blocks a runaway agent before signing.
|
|
172
|
+
const walletDeny = checkWalletSpend(amount);
|
|
173
|
+
if (walletDeny)
|
|
174
|
+
return errorResult(`blocked: ${walletDeny}`);
|
|
175
|
+
// Ensure the delegate holds enough USDC.e (Safe autoTopup within the
|
|
176
|
+
// on-chain cap, or a light-mode balance check — same gate either way).
|
|
177
|
+
if (deps.funds) {
|
|
166
178
|
try {
|
|
167
|
-
await deps.
|
|
179
|
+
await deps.funds.ensure(amount);
|
|
168
180
|
}
|
|
169
181
|
catch (err) {
|
|
170
|
-
return errorResult(`
|
|
182
|
+
return errorResult(`funds check failed (spend cap / insufficient balance?): ${err.message}`);
|
|
171
183
|
}
|
|
172
184
|
}
|
|
173
185
|
// sign exact payload + encode Payment-Signature header
|
|
@@ -192,6 +204,7 @@ export async function x402HttpCall(deps, args) {
|
|
|
192
204
|
// retries; a failed settle (isError) stays retryable.
|
|
193
205
|
if (!result.isError) {
|
|
194
206
|
recordPaid(host, result.content[0].text ?? "");
|
|
207
|
+
recordWalletSpend(amount);
|
|
195
208
|
}
|
|
196
209
|
log.info("x402_http_call.done", {
|
|
197
210
|
host,
|
package/dist/httpX402.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpX402.js","sourceRoot":"","sources":["../src/httpX402.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"httpX402.js","sourceRoot":"","sources":["../src/httpX402.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,18 +10,52 @@ import { loadConfig } from "./config.js";
|
|
|
10
10
|
import { setLogLevel, log } from "./log.js";
|
|
11
11
|
import { RawEoaSigner } from "./signers/raw-eoa.js";
|
|
12
12
|
import { AutoTopup } from "./autoTopup.js";
|
|
13
|
+
import { DirectBalance } from "./funds/direct-balance.js";
|
|
13
14
|
import { connectUpstream } from "./client.js";
|
|
14
15
|
import { startBridgeServer } from "./server.js";
|
|
15
|
-
import {
|
|
16
|
+
import { DiscoveryClient } from "./discovery.js";
|
|
17
|
+
import { isKeychainURI, resolveKeychain, setKeychain, buildKeychainURI, } from "./keychain.js";
|
|
18
|
+
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
16
19
|
const PKG_NAME = "@hpp-io/x402-mcp-bridge";
|
|
17
|
-
const PKG_VERSION = "0.0
|
|
20
|
+
const PKG_VERSION = "0.1.0"; // mirrors package.json — bump together
|
|
21
|
+
const DEFAULT_ACCOUNT = "delegate-default";
|
|
22
|
+
/**
|
|
23
|
+
* Zero-config first run: if no DELEGATE_PRIVATE_KEY is supplied, auto-create a
|
|
24
|
+
* delegate wallet in the OS keychain (idempotent — reused on later runs) and
|
|
25
|
+
* point the env at its keychain URI. Lets a bare
|
|
26
|
+
* `npx -y @hpp-io/x402-mcp-bridge` boot with no config; the user just funds the
|
|
27
|
+
* printed address. Explicitly-set keys are untouched.
|
|
28
|
+
*/
|
|
29
|
+
function ensureDelegateKey(env) {
|
|
30
|
+
if (env.DELEGATE_PRIVATE_KEY)
|
|
31
|
+
return;
|
|
32
|
+
const uri = buildKeychainURI(DEFAULT_ACCOUNT);
|
|
33
|
+
let key;
|
|
34
|
+
let created = false;
|
|
35
|
+
try {
|
|
36
|
+
key = resolveKeychain(uri);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
key = generatePrivateKey();
|
|
40
|
+
setKeychain(DEFAULT_ACCOUNT, key);
|
|
41
|
+
created = true;
|
|
42
|
+
}
|
|
43
|
+
env.DELEGATE_PRIVATE_KEY = uri;
|
|
44
|
+
const address = privateKeyToAccount(key).address;
|
|
45
|
+
// Written straight to stderr (not the level-gated logger, which isn't
|
|
46
|
+
// configured yet at this point) so the funding address is always visible.
|
|
47
|
+
process.stderr.write(`\nhpp-x402: wallet ${created ? "created" : "ready"} → ${address}\n` +
|
|
48
|
+
` ▶ Fund it: send USDC.e to this address (no native gas needed).\n\n`);
|
|
49
|
+
}
|
|
18
50
|
export async function runBridge(env = process.env) {
|
|
51
|
+
ensureDelegateKey(env);
|
|
19
52
|
const cfg = loadConfig(env);
|
|
20
53
|
setLogLevel(cfg.LOG_LEVEL);
|
|
21
54
|
log.info("bridge.start", {
|
|
22
55
|
name: PKG_NAME,
|
|
23
56
|
version: PKG_VERSION,
|
|
24
57
|
chain: cfg.HPP_NETWORK,
|
|
58
|
+
walletMode: cfg.walletMode,
|
|
25
59
|
safe: cfg.SAFE_ADDRESS,
|
|
26
60
|
resourceServer: cfg.RESOURCE_SERVER_URL,
|
|
27
61
|
});
|
|
@@ -34,13 +68,19 @@ export async function runBridge(env = process.env) {
|
|
|
34
68
|
address: signer.address,
|
|
35
69
|
source: isKeychainURI(cfg.DELEGATE_PRIVATE_KEY) ? "keychain" : "env",
|
|
36
70
|
});
|
|
37
|
-
// ----
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
71
|
+
// ---- Funds (wallet mode) --------------------------------------------
|
|
72
|
+
// Safe mode: autoTopup pulls USDC.e from the Safe within the on-chain daily
|
|
73
|
+
// cap when the delegate is short. Light mode: the delegate holds USDC.e
|
|
74
|
+
// directly; DirectBalance only checks the balance and surfaces a funding
|
|
75
|
+
// instruction when short (no Safe, no on-chain topup, no native gas).
|
|
76
|
+
const funds = cfg.walletMode === "safe"
|
|
77
|
+
? new AutoTopup(signer, cfg.SAFE_ADDRESS, cfg.ALLOWANCE_MODULE_ADDRESS, cfg.USDCE_ADDRESS, cfg.chainId, cfg.HPP_RPC_URL, {
|
|
78
|
+
headroomX: BigInt(cfg.TOPUP_HEADROOM_X),
|
|
79
|
+
fixedAmountAtomic: cfg.TOPUP_AMOUNT_ATOMIC
|
|
80
|
+
? BigInt(cfg.TOPUP_AMOUNT_ATOMIC)
|
|
81
|
+
: undefined,
|
|
82
|
+
})
|
|
83
|
+
: new DirectBalance(signer.address, cfg.USDCE_ADDRESS, cfg.chainId, cfg.HPP_RPC_URL);
|
|
44
84
|
// ---- Upstream MCP client (optional) ---------------------------------
|
|
45
85
|
// When RESOURCE_SERVER_URL is unset, run in local-tools-only mode (credit
|
|
46
86
|
// top-up / A2A) and skip the upstream connection.
|
|
@@ -49,8 +89,9 @@ export async function runBridge(env = process.env) {
|
|
|
49
89
|
upstream = await connectUpstream({
|
|
50
90
|
url: cfg.RESOURCE_SERVER_URL,
|
|
51
91
|
network: cfg.HPP_NETWORK,
|
|
92
|
+
rpcUrl: cfg.HPP_RPC_URL,
|
|
52
93
|
signer,
|
|
53
|
-
|
|
94
|
+
funds,
|
|
54
95
|
bridgeName: PKG_NAME,
|
|
55
96
|
bridgeVersion: PKG_VERSION,
|
|
56
97
|
});
|
|
@@ -69,13 +110,27 @@ export async function runBridge(env = process.env) {
|
|
|
69
110
|
const a2aRpcTimeoutMs = Number.isFinite(a2aRpcTimeoutParsed) && a2aRpcTimeoutParsed > 0
|
|
70
111
|
? a2aRpcTimeoutParsed
|
|
71
112
|
: undefined;
|
|
113
|
+
// Curated service discovery — register hpp_discover / hpp_call when enabled.
|
|
114
|
+
const discovery = cfg.discoveryEnabled
|
|
115
|
+
? new DiscoveryClient(cfg.discoveryUrl)
|
|
116
|
+
: undefined;
|
|
117
|
+
if (discovery)
|
|
118
|
+
log.info("discovery.enabled", { url: cfg.discoveryUrl });
|
|
119
|
+
// Seller tools — register seller_* when enabled.
|
|
120
|
+
const seller = cfg.sellerEnabled
|
|
121
|
+
? { network: cfg.HPP_NETWORK, facilitatorUrl: cfg.facilitatorUrl }
|
|
122
|
+
: undefined;
|
|
123
|
+
if (seller)
|
|
124
|
+
log.info("seller.enabled", { facilitator: cfg.facilitatorUrl });
|
|
72
125
|
await startBridgeServer({
|
|
73
126
|
upstream,
|
|
74
127
|
name: PKG_NAME,
|
|
75
128
|
version: PKG_VERSION,
|
|
76
129
|
signer,
|
|
77
130
|
network: cfg.HPP_NETWORK,
|
|
78
|
-
|
|
131
|
+
funds,
|
|
132
|
+
discovery,
|
|
133
|
+
seller,
|
|
79
134
|
a2aRpcTimeoutMs,
|
|
80
135
|
});
|
|
81
136
|
// Graceful shutdown: when the host closes our stdin (or Claude Desktop
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,aAAa,EACb,eAAe,EACf,WAAW,EACX,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAIxE,MAAM,QAAQ,GAAG,yBAAyB,CAAC;AAC3C,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,uCAAuC;AACpE,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,GAAsB;IAC/C,IAAI,GAAG,CAAC,oBAAoB;QAAE,OAAO;IACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC9C,IAAI,GAAkB,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,GAAG,GAAG,kBAAkB,EAAE,CAAC;QAC3B,WAAW,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC;IAC/B,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACjD,sEAAsE;IACtE,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,sBAAsB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,MAAM,OAAO,IAAI;QAClE,sEAAsE,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAyB,OAAO,CAAC,GAAG;IAClE,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvB,MAAM,GAAG,GAAW,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE;QACvB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,GAAG,CAAC,WAAW;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,YAAY;QACtB,cAAc,EAAE,GAAG,CAAC,mBAAmB;KACxC,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACzD,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAC3C,CAAC,CAAE,GAAG,CAAC,oBAAsC,CAAC;IAChD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;KACrE,CAAC,CAAC;IAEH,wEAAwE;IACxE,4EAA4E;IAC5E,wEAAwE;IACxE,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,KAAK,GACT,GAAG,CAAC,UAAU,KAAK,MAAM;QACvB,CAAC,CAAC,IAAI,SAAS,CACX,MAAM,EACN,GAAG,CAAC,YAA6B,EACjC,GAAG,CAAC,wBAAyC,EAC7C,GAAG,CAAC,aAA8B,EAClC,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,WAAW,EACf;YACE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC;YACvC,iBAAiB,EAAE,GAAG,CAAC,mBAAmB;gBACxC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;gBACjC,CAAC,CAAC,SAAS;SACd,CACF;QACH,CAAC,CAAC,IAAI,aAAa,CACf,MAAM,CAAC,OAAO,EACd,GAAG,CAAC,aAA8B,EAClC,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,WAAW,CAChB,CAAC;IAER,wEAAwE;IACxE,0EAA0E;IAC1E,kDAAkD;IAClD,IAAI,QAAiE,CAAC;IACtE,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC;QAC5B,QAAQ,GAAG,MAAM,eAAe,CAAC;YAC/B,GAAG,EAAE,GAAG,CAAC,mBAAmB;YAC5B,OAAO,EAAE,GAAG,CAAC,WAAsB;YACnC,MAAM,EAAE,GAAG,CAAC,WAAW;YACvB,MAAM;YACN,KAAK;YACL,UAAU,EAAE,QAAQ;YACpB,aAAa,EAAE,WAAW;SAC3B,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAC3B,MAAM,EAAE,8EAA8E;SACvF,CAAC,CAAC;IACL,CAAC;IAED,wEAAwE;IACxE,wEAAwE;IACxE,wEAAwE;IACxE,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACjE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9E,MAAM,eAAe,GACnB,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,mBAAmB,GAAG,CAAC;QAC7D,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,SAAS,CAAC;IAEhB,6EAA6E;IAC7E,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB;QACpC,CAAC,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;QACvC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IAExE,iDAAiD;IACjD,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa;QAC9B,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,WAAsB,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,EAAE;QAC7E,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IAE5E,MAAM,iBAAiB,CAAC;QACtB,QAAQ;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,WAAsB;QACnC,KAAK;QACL,SAAS;QACT,MAAM;QACN,eAAe;KAChB,CAAC,CAAC;IAEH,uEAAuE;IACvE,kEAAkE;IAClE,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;QACrC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7C,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,4DAA4D;AAC5D,yEAAyE;AACzE,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACpD,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACxB,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,GAAG,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|