run402-mcp 1.17.0 → 1.18.1

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.
@@ -3,6 +3,7 @@
3
3
  * (x402 vs mpp), returns a wrapped fetch that intercepts 402 responses,
4
4
  * signs payment, and retries automatically.
5
5
  *
6
+ * Checks on-chain balances at setup time and selects funded networks.
6
7
  * Returns null when no allowance is configured or payment libraries are
7
8
  * unavailable (graceful degradation).
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"paid-fetch.d.ts","sourceRoot":"","sources":["../src/paid-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAElE,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAEvC;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAuC9D;AAKD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
1
+ {"version":3,"file":"paid-fetch.d.ts","sourceRoot":"","sources":["../src/paid-fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAElE,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAoBvC;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAyD9D;AAKD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED,oDAAoD;AACpD,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -3,11 +3,29 @@
3
3
  * (x402 vs mpp), returns a wrapped fetch that intercepts 402 responses,
4
4
  * signs payment, and retries automatically.
5
5
  *
6
+ * Checks on-chain balances at setup time and selects funded networks.
6
7
  * Returns null when no allowance is configured or payment libraries are
7
8
  * unavailable (graceful degradation).
8
9
  */
9
10
  import { readAllowance } from "./allowance.js";
10
11
  import { apiRequest } from "./client.js";
12
+ const USDC_ABI = [{ name: "balanceOf", type: "function", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ name: "", type: "uint256" }] }];
13
+ const USDC_MAINNET = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
14
+ const USDC_SEPOLIA = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
15
+ async function checkBalance(publicClient, tokenAddress, walletAddress) {
16
+ try {
17
+ const raw = await publicClient.readContract({
18
+ address: tokenAddress,
19
+ abi: USDC_ABI,
20
+ functionName: "balanceOf",
21
+ args: [walletAddress],
22
+ });
23
+ return Number(raw);
24
+ }
25
+ catch {
26
+ return 0;
27
+ }
28
+ }
11
29
  /**
12
30
  * Create a payment-wrapping fetch function from the local allowance.
13
31
  * Returns null if no allowance exists or payment libraries fail to load.
@@ -39,9 +57,27 @@ export async function setupPaidFetch() {
39
57
  const account = privateKeyToAccount(allowance.privateKey);
40
58
  const mainnetClient = createPublicClient({ chain: base, transport: http() });
41
59
  const sepoliaClient = createPublicClient({ chain: baseSepolia, transport: http() });
60
+ // Check balances in parallel
61
+ const [mainnetBalance, sepoliaBalance] = await Promise.all([
62
+ checkBalance(mainnetClient, USDC_MAINNET, allowance.address),
63
+ checkBalance(sepoliaClient, USDC_SEPOLIA, allowance.address),
64
+ ]);
42
65
  const client = new x402Client();
43
66
  client.register("eip155:8453", new ExactEvmScheme(toClientEvmSigner(account, mainnetClient)));
44
67
  client.register("eip155:84532", new ExactEvmScheme(toClientEvmSigner(account, sepoliaClient)));
68
+ // Policy: only allow networks where the wallet has funds
69
+ if (mainnetBalance > 0 || sepoliaBalance > 0) {
70
+ client.registerPolicy((_version, reqs) => {
71
+ const funded = reqs.filter((r) => {
72
+ if (r.network === "eip155:8453")
73
+ return mainnetBalance > 0;
74
+ if (r.network === "eip155:84532")
75
+ return sepoliaBalance > 0;
76
+ return false;
77
+ });
78
+ return funded.length > 0 ? funded : reqs;
79
+ });
80
+ }
45
81
  return wrapFetchWithPayment(fetch, client);
46
82
  }
47
83
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"paid-fetch.js","sourceRoot":"","sources":["../src/paid-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paid-fetch.js","sourceRoot":"","sources":["../src/paid-fetch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402-mcp",
3
- "version": "1.17.0",
3
+ "version": "1.18.1",
4
4
  "description": "MCP server for Run402 — AI-native Postgres databases with REST API, auth, storage, and row-level security. Pay with x402 USDC micropayments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,7 +22,8 @@
22
22
  "test": "node --experimental-test-module-mocks --test --import tsx SKILL.test.ts sync.test.ts core/src/**/*.test.ts src/**/*.test.ts && node --test cli-e2e.test.mjs",
23
23
  "test:e2e": "node --test cli-e2e.test.mjs",
24
24
  "test:integration": "node --test --import tsx core/src/siwx-integration.integ.ts",
25
- "test:integration:full": "node --test --import tsx cli-integration.test.ts"
25
+ "test:integration:full": "node --test --import tsx cli-integration.test.ts",
26
+ "test:integration:mcp": "node --test --import tsx mcp-integration.test.ts"
26
27
  },
27
28
  "keywords": [
28
29
  "mcp",