safehands-pharos 1.0.3 → 1.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.
@@ -1 +1 @@
1
- {"version":3,"file":"sendPayment.js","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sendPayment.js","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ export declare const x402PayAndFetchSchema: z.ZodObject<{
3
+ url: z.ZodString;
4
+ method: z.ZodDefault<z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "DELETE"]>>>;
5
+ body: z.ZodOptional<z.ZodString>;
6
+ privateKey: z.ZodOptional<z.ZodString>;
7
+ rpcUrl: z.ZodOptional<z.ZodString>;
8
+ }, "strip", z.ZodTypeAny, {
9
+ method: "GET" | "POST" | "PUT" | "DELETE";
10
+ url: string;
11
+ privateKey?: string | undefined;
12
+ body?: string | undefined;
13
+ rpcUrl?: string | undefined;
14
+ }, {
15
+ url: string;
16
+ privateKey?: string | undefined;
17
+ body?: string | undefined;
18
+ method?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
19
+ rpcUrl?: string | undefined;
20
+ }>;
21
+ export type X402PayAndFetchInput = z.input<typeof x402PayAndFetchSchema>;
22
+ export declare const x402PayAndFetchTool: {
23
+ name: string;
24
+ description: string;
25
+ inputSchema: z.ZodObject<{
26
+ url: z.ZodString;
27
+ method: z.ZodDefault<z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "DELETE"]>>>;
28
+ body: z.ZodOptional<z.ZodString>;
29
+ privateKey: z.ZodOptional<z.ZodString>;
30
+ rpcUrl: z.ZodOptional<z.ZodString>;
31
+ }, "strip", z.ZodTypeAny, {
32
+ method: "GET" | "POST" | "PUT" | "DELETE";
33
+ url: string;
34
+ privateKey?: string | undefined;
35
+ body?: string | undefined;
36
+ rpcUrl?: string | undefined;
37
+ }, {
38
+ url: string;
39
+ privateKey?: string | undefined;
40
+ body?: string | undefined;
41
+ method?: "GET" | "POST" | "PUT" | "DELETE" | undefined;
42
+ rpcUrl?: string | undefined;
43
+ }>;
44
+ };
45
+ export declare function handleX402PayAndFetch(raw: X402PayAndFetchInput): Promise<{
46
+ success: boolean;
47
+ status: number;
48
+ statusText: string;
49
+ data: any;
50
+ paymentExecuted: boolean;
51
+ paymentDetails: {
52
+ header: string;
53
+ } | null;
54
+ error?: undefined;
55
+ } | {
56
+ success: boolean;
57
+ error: string;
58
+ status?: undefined;
59
+ statusText?: undefined;
60
+ data?: undefined;
61
+ paymentExecuted?: undefined;
62
+ paymentDetails?: undefined;
63
+ }>;
64
+ //# sourceMappingURL=x402PayAndFetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402PayAndFetch.d.ts","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAC;AAEF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;GAkEpE"}
@@ -0,0 +1,80 @@
1
+ // ─── Tool: x402_pay_and_fetch ─────────────────────────────────────────────
2
+ // Enables an agent to fetch protected resources from an x402 server.
3
+ // Automatically executes the payment challenge when HTTP 402 is returned.
4
+ // ─────────────────────────────────────────────────────────────────────────
5
+ import { z } from "zod";
6
+ import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
7
+ import { registerExactEvmScheme } from "@x402/evm/exact/client";
8
+ import { privateKeyToAccount } from "viem/accounts";
9
+ export const x402PayAndFetchSchema = z.object({
10
+ url: z.string().describe("Target URL of the protected resource requiring x402 payment"),
11
+ method: z.enum(["GET", "POST", "PUT", "DELETE"]).optional().default("GET").describe("HTTP method to use"),
12
+ body: z.string().optional().describe("Optional stringified JSON request body"),
13
+ privateKey: z.string().optional().describe("EVM private key to pay with. If not provided, falls back to PRIVATE_KEY env var"),
14
+ rpcUrl: z.string().optional().describe("Custom RPC URL for payment verification (defaults to Atlantic Testnet RPC)"),
15
+ });
16
+ export const x402PayAndFetchTool = {
17
+ name: "x402_pay_and_fetch",
18
+ description: "Fetch resources from an HTTP x402 payment-gated server. " +
19
+ "If the server challenges with HTTP 402, this tool automatically signs the required payment payload and completes the fetch.",
20
+ inputSchema: x402PayAndFetchSchema,
21
+ };
22
+ export async function handleX402PayAndFetch(raw) {
23
+ const input = x402PayAndFetchSchema.parse(raw);
24
+ const pk = input.privateKey || process.env.PRIVATE_KEY;
25
+ if (!pk) {
26
+ throw new Error("Private key is required to execute x402 payments.");
27
+ }
28
+ const rpc = input.rpcUrl || process.env.PHAROS_RPC_URL || "https://atlantic.dplabs-internal.com/";
29
+ // 1. Initialize EVM Account
30
+ const signer = privateKeyToAccount(pk);
31
+ // 2. Setup x402 client
32
+ const client = new x402Client();
33
+ registerExactEvmScheme(client, {
34
+ signer,
35
+ schemeOptions: {
36
+ 688689: { rpcUrl: rpc },
37
+ },
38
+ });
39
+ // 3. Wrap fetch
40
+ const fetchWithPayment = wrapFetchWithPayment(fetch, client);
41
+ // 4. Perform the request
42
+ const fetchOptions = {
43
+ method: input.method,
44
+ headers: {
45
+ "Content-Type": "application/json",
46
+ },
47
+ };
48
+ if (input.body) {
49
+ fetchOptions.body = input.body;
50
+ }
51
+ try {
52
+ const res = await fetchWithPayment(input.url, fetchOptions);
53
+ const contentType = res.headers.get("content-type") || "";
54
+ let responseData;
55
+ if (contentType.includes("application/json")) {
56
+ responseData = await res.json();
57
+ }
58
+ else {
59
+ responseData = await res.text();
60
+ }
61
+ const paymentResponseHeader = res.headers.get("PAYMENT-RESPONSE");
62
+ return {
63
+ success: res.ok,
64
+ status: res.status,
65
+ statusText: res.statusText,
66
+ data: responseData,
67
+ paymentExecuted: !!paymentResponseHeader,
68
+ paymentDetails: paymentResponseHeader ? {
69
+ header: paymentResponseHeader,
70
+ } : null,
71
+ };
72
+ }
73
+ catch (err) {
74
+ return {
75
+ success: false,
76
+ error: `x402 fetch failed: ${err.message}`,
77
+ };
78
+ }
79
+ }
80
+ //# sourceMappingURL=x402PayAndFetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402PayAndFetch.js","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=x402Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Server.d.ts","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":""}
@@ -0,0 +1,219 @@
1
+ // ─── SafeHands x402 Server ──────────────────────────────────────────────
2
+ // Exposes SafeHands risk assessment endpoints protected by x402 paywalls.
3
+ // ────────────────────────────────────────────────────────────────────────
4
+ import express from "express";
5
+ import { join } from "path";
6
+ import { readFileSync } from "fs";
7
+ import { defineChain, createWalletClient, http, publicActions } from "viem";
8
+ import { privateKeyToAccount } from "viem/accounts";
9
+ import { x402Facilitator } from "@x402/core/facilitator";
10
+ import { toFacilitatorEvmSigner } from "@x402/evm";
11
+ import { ExactEvmScheme as FacilitatorExactEvmScheme } from "@x402/evm/exact/facilitator";
12
+ import { ExactEvmScheme as ServerExactEvmScheme } from "@x402/evm/exact/server";
13
+ import { HTTPFacilitatorClient } from "@x402/core/server";
14
+ import { paymentMiddleware, x402ResourceServer } from "@x402/express";
15
+ import { handleAssessRisk } from "./tools/assessRisk.js";
16
+ import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
17
+ import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
18
+ import { USDC_ADDRESS } from "./lib/constants.js";
19
+ // Load Environment Variables
20
+ function loadEnv() {
21
+ try {
22
+ const f = readFileSync(join(process.cwd(), ".env"), "utf-8");
23
+ for (const l of f.split("\n")) {
24
+ const t = l.trim();
25
+ if (!t || t.startsWith("#"))
26
+ continue;
27
+ const i = t.indexOf("=");
28
+ if (i === -1)
29
+ continue;
30
+ process.env[t.slice(0, i).trim()] = t.slice(i + 1).trim();
31
+ }
32
+ }
33
+ catch (e) { }
34
+ }
35
+ loadEnv();
36
+ const PK = process.env.PRIVATE_KEY;
37
+ const WALLET = process.env.WALLET_ADDRESS;
38
+ if (!PK || !WALLET) {
39
+ console.error("❌ PRIVATE_KEY and WALLET_ADDRESS environment variables must be configured in .env");
40
+ process.exit(1);
41
+ }
42
+ const payToAddress = WALLET;
43
+ const port = parseInt(process.env.X402_PORT || "4021", 10);
44
+ const rpcUrl = "https://atlantic.dplabs-internal.com/";
45
+ const usdcAddress = USDC_ADDRESS;
46
+ // === Define Pharos Testnet ===
47
+ const pharos = defineChain({
48
+ id: 688_689,
49
+ name: "Pharos Atlantic",
50
+ nativeCurrency: { name: "PHRS", symbol: "PHRS", decimals: 18 },
51
+ rpcUrls: { default: { http: [rpcUrl] } },
52
+ testnet: true,
53
+ });
54
+ // === Create Facilitator EVM Client ===
55
+ const account = privateKeyToAccount(PK);
56
+ const walletClient = createWalletClient({
57
+ account,
58
+ chain: pharos,
59
+ transport: http(undefined, { timeout: 30_000 }),
60
+ }).extend(publicActions);
61
+ const evmSigner = toFacilitatorEvmSigner({
62
+ address: account.address,
63
+ getCode: (args) => walletClient.getCode(args),
64
+ readContract: (args) => walletClient.readContract({ ...args, args: args.args || [] }),
65
+ verifyTypedData: (args) => walletClient.verifyTypedData(args),
66
+ writeContract: (args) => walletClient.writeContract({ ...args, args: args.args || [] }),
67
+ sendTransaction: (args) => walletClient.sendTransaction(args),
68
+ waitForTransactionReceipt: (args) => walletClient.waitForTransactionReceipt(args),
69
+ });
70
+ // === Initialize Facilitator ===
71
+ const facilitator = new x402Facilitator();
72
+ facilitator.register("eip155:688689", new FacilitatorExactEvmScheme(evmSigner, {}));
73
+ // === Initialize Resource Server ===
74
+ const facilitatorClient = new HTTPFacilitatorClient({ url: `http://localhost:${port}` });
75
+ const resourceServer = new x402ResourceServer(facilitatorClient);
76
+ const evmScheme = new ServerExactEvmScheme();
77
+ evmScheme.registerMoneyParser(async (amount, network) => {
78
+ if (network === "eip155:688689") {
79
+ return {
80
+ amount: Math.round(amount * 1e6).toString(), // Convert to USDC integer units
81
+ asset: usdcAddress,
82
+ extra: {
83
+ token: "USDC",
84
+ name: "USDC",
85
+ version: "2",
86
+ },
87
+ };
88
+ }
89
+ return null;
90
+ });
91
+ resourceServer.register("eip155:688689", evmScheme);
92
+ // === Express Server setup ===
93
+ const app = express();
94
+ app.use(express.json());
95
+ // --- Facilitator endpoints ---
96
+ app.post("/verify", async (req, res) => {
97
+ try {
98
+ const { paymentPayload, paymentRequirements } = req.body;
99
+ const result = await facilitator.verify(paymentPayload, paymentRequirements);
100
+ res.json(result);
101
+ }
102
+ catch (e) {
103
+ res.status(500).json({ error: e.message });
104
+ }
105
+ });
106
+ app.post("/settle", async (req, res) => {
107
+ try {
108
+ const { paymentPayload, paymentRequirements } = req.body;
109
+ const result = await facilitator.settle(paymentPayload, paymentRequirements);
110
+ res.json(result);
111
+ }
112
+ catch (e) {
113
+ res.status(500).json({ error: e.message });
114
+ }
115
+ });
116
+ app.get("/supported", (req, res) => {
117
+ res.json(facilitator.getSupported());
118
+ });
119
+ // --- x402 Paid Middleware gating ---
120
+ app.use(paymentMiddleware({
121
+ "GET /assess-risk": {
122
+ accepts: {
123
+ scheme: "exact",
124
+ price: "0.001", // USDC amount: $0.001
125
+ network: "eip155:688689",
126
+ payTo: payToAddress,
127
+ },
128
+ description: "Assess transaction risk (USDC 0.001)",
129
+ mimeType: "application/json",
130
+ },
131
+ "GET /check-token-security": {
132
+ accepts: {
133
+ scheme: "exact",
134
+ price: "0.001", // USDC amount: $0.001
135
+ network: "eip155:688689",
136
+ payTo: payToAddress,
137
+ },
138
+ description: "Verify contract token security profile (USDC 0.001)",
139
+ mimeType: "application/json",
140
+ },
141
+ "GET /simulate-transaction": {
142
+ accepts: {
143
+ scheme: "exact",
144
+ price: "0.001", // USDC amount: $0.001
145
+ network: "eip155:688689",
146
+ payTo: payToAddress,
147
+ },
148
+ description: "Simulate EVM execution trace before broadcasting (USDC 0.001)",
149
+ mimeType: "application/json",
150
+ },
151
+ }, resourceServer));
152
+ // --- Paid Business Logic ---
153
+ app.get("/assess-risk", async (req, res) => {
154
+ try {
155
+ const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
156
+ const result = await handleAssessRisk({
157
+ action: action,
158
+ tokenIn: tokenIn,
159
+ tokenOut: tokenOut,
160
+ amount: amount,
161
+ toAddress: toAddress,
162
+ walletAddress: walletAddress,
163
+ });
164
+ res.json(result);
165
+ }
166
+ catch (e) {
167
+ res.status(400).json({ error: e.message });
168
+ }
169
+ });
170
+ app.get("/check-token-security", async (req, res) => {
171
+ try {
172
+ const { tokenAddress, chainId } = req.query;
173
+ const cid = chainId ? parseInt(chainId, 10) : 688689;
174
+ const result = await handleCheckTokenSecurity({
175
+ tokenAddress: tokenAddress,
176
+ chainId: cid,
177
+ });
178
+ res.json(result);
179
+ }
180
+ catch (e) {
181
+ res.status(400).json({ error: e.message });
182
+ }
183
+ });
184
+ app.get("/simulate-transaction", async (req, res) => {
185
+ try {
186
+ const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
187
+ const result = await handleSimulateTransaction({
188
+ action: action,
189
+ tokenIn: tokenIn,
190
+ tokenOut: tokenOut,
191
+ amount: amount,
192
+ toAddress: toAddress,
193
+ walletAddress: walletAddress,
194
+ });
195
+ res.json(result);
196
+ }
197
+ catch (e) {
198
+ res.status(400).json({ error: e.message });
199
+ }
200
+ });
201
+ // --- Free endpoints ---
202
+ app.get("/health", (req, res) => {
203
+ res.json({
204
+ status: "ok",
205
+ service: "SafeHands x402 Resource Server",
206
+ network: "Pharos Atlantic Testnet (Chain ID 688689)",
207
+ receiver: payToAddress,
208
+ asset: usdcAddress,
209
+ });
210
+ });
211
+ // Start Server
212
+ app.listen(port, () => {
213
+ console.log(`✅ SafeHands x402 Server listening on http://localhost:${port}`);
214
+ console.log(`📡 Network: eip155:688689 (Pharos Atlantic Testnet)`);
215
+ console.log(`💰 Paid Recipient Address: ${payToAddress}`);
216
+ console.log(`🪙 USDC Contract Address: ${usdcAddress}`);
217
+ console.log(`🚪 Gated APIs: /assess-risk, /check-token-security, /simulate-transaction`);
218
+ });
219
+ //# sourceMappingURL=x402Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402Server.js","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "safehands-pharos",
3
- "version": "1.0.3",
3
+ "version": "1.1.0",
4
4
  "description": "Risk-gating middleware for Pharos agents. Blocks dangerous swaps and transfers before they hit the chain.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -22,6 +22,7 @@
22
22
  "build": "tsc",
23
23
  "start": "node dist/index.js",
24
24
  "dev": "tsx src/index.ts",
25
+ "x402-server": "tsx src/x402Server.ts",
25
26
  "test:rpc": "tsx src/lib/testRpc.ts",
26
27
  "test:all": "tsx src/lib/testTools.ts"
27
28
  },
@@ -49,6 +50,12 @@
49
50
  },
50
51
  "dependencies": {
51
52
  "@modelcontextprotocol/sdk": "^1.12.1",
53
+ "@types/express": "^5.0.6",
54
+ "@x402/core": "^2.14.0",
55
+ "@x402/evm": "^2.14.0",
56
+ "@x402/express": "^2.14.0",
57
+ "@x402/fetch": "^2.14.0",
58
+ "express": "^5.2.1",
52
59
  "viem": "^2.31.3",
53
60
  "zod": "^3.25.67"
54
61
  },