safehands-pharos 1.4.0 → 1.5.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.
Files changed (124) hide show
  1. package/README.md +174 -63
  2. package/dist/cli.d.ts +5 -5
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +126 -124
  5. package/dist/cli.js.map +1 -1
  6. package/dist/demo.d.ts +1 -1
  7. package/dist/demo.js +171 -171
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +73 -65
  11. package/dist/index.js.map +1 -1
  12. package/dist/init.d.ts +1 -1
  13. package/dist/init.js +65 -65
  14. package/dist/lib/constants.d.ts +303 -291
  15. package/dist/lib/constants.d.ts.map +1 -1
  16. package/dist/lib/constants.js +302 -292
  17. package/dist/lib/constants.js.map +1 -1
  18. package/dist/lib/dodoApi.d.ts +78 -78
  19. package/dist/lib/dodoApi.js +196 -196
  20. package/dist/lib/envLoader.d.ts +2 -0
  21. package/dist/lib/envLoader.d.ts.map +1 -0
  22. package/dist/lib/envLoader.js +44 -0
  23. package/dist/lib/envLoader.js.map +1 -0
  24. package/dist/lib/http.d.ts +14 -14
  25. package/dist/lib/http.js +118 -118
  26. package/dist/lib/pharosClient.d.ts +58 -58
  27. package/dist/lib/pharosClient.js +63 -63
  28. package/dist/lib/policy/actionPolicyEngine.d.ts +53 -53
  29. package/dist/lib/policy/actionPolicyEngine.js +212 -212
  30. package/dist/lib/riskEngine.d.ts +26 -26
  31. package/dist/lib/riskEngine.d.ts.map +1 -1
  32. package/dist/lib/riskEngine.js +288 -283
  33. package/dist/lib/riskEngine.js.map +1 -1
  34. package/dist/lib/signer/index.d.ts +24 -24
  35. package/dist/lib/signer/index.js +88 -88
  36. package/dist/lib/testDodoLive.d.ts +1 -1
  37. package/dist/lib/testDodoLive.js +104 -104
  38. package/dist/lib/testLiveSafehands.d.ts +1 -1
  39. package/dist/lib/testLiveSafehands.js +92 -92
  40. package/dist/lib/testRpcLive.d.ts +1 -1
  41. package/dist/lib/testRpcLive.js +88 -88
  42. package/dist/lib/testTools.js +397 -398
  43. package/dist/lib/testX402Live.d.ts +1 -1
  44. package/dist/lib/testX402Live.js +159 -159
  45. package/dist/lib/toolResponse.d.ts +25 -25
  46. package/dist/lib/toolResponse.js +53 -53
  47. package/dist/lib/wallet/index.d.ts +37 -37
  48. package/dist/lib/wallet/index.js +128 -128
  49. package/dist/scripts/checkDeploy.d.ts +1 -1
  50. package/dist/scripts/checkDeploy.js +24 -24
  51. package/dist/scripts/deployRegistry.d.ts +1 -1
  52. package/dist/scripts/deployRegistry.js +100 -100
  53. package/dist/scripts/testRegistry.d.ts +1 -1
  54. package/dist/scripts/testRegistry.js +43 -43
  55. package/dist/tools/approveToken.d.ts +45 -45
  56. package/dist/tools/approveToken.js +85 -85
  57. package/dist/tools/assessRisk.d.ts +79 -79
  58. package/dist/tools/assessRisk.js +104 -104
  59. package/dist/tools/checkAllowance.d.ts +43 -43
  60. package/dist/tools/checkAllowance.js +56 -56
  61. package/dist/tools/checkTokenSecurity.d.ts +46 -46
  62. package/dist/tools/checkTokenSecurity.js +95 -95
  63. package/dist/tools/createAgentWallet.d.ts +28 -26
  64. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  65. package/dist/tools/createAgentWallet.js +82 -58
  66. package/dist/tools/createAgentWallet.js.map +1 -1
  67. package/dist/tools/estimateGas.d.ts +79 -79
  68. package/dist/tools/estimateGas.js +124 -124
  69. package/dist/tools/executeSwap.d.ts +61 -61
  70. package/dist/tools/executeSwap.js +141 -141
  71. package/dist/tools/explainRisk.d.ts +29 -29
  72. package/dist/tools/explainRisk.js +32 -32
  73. package/dist/tools/getAgentWallet.d.ts +21 -21
  74. package/dist/tools/getAgentWallet.js +27 -27
  75. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  76. package/dist/tools/getAgentWalletBalance.js +70 -70
  77. package/dist/tools/getExecutionHistory.d.ts +49 -49
  78. package/dist/tools/getExecutionHistory.js +154 -154
  79. package/dist/tools/getGasPrice.d.ts +43 -43
  80. package/dist/tools/getGasPrice.js +59 -59
  81. package/dist/tools/getPoolInfo.d.ts +75 -75
  82. package/dist/tools/getPoolInfo.js +137 -137
  83. package/dist/tools/getTokenPrice.d.ts +113 -113
  84. package/dist/tools/getTokenPrice.js +117 -117
  85. package/dist/tools/getTransactionStatus.d.ts +43 -43
  86. package/dist/tools/getTransactionStatus.js +59 -59
  87. package/dist/tools/getWalletBalance.d.ts +68 -68
  88. package/dist/tools/getWalletBalance.js +87 -87
  89. package/dist/tools/publishRiskScore.d.ts +63 -63
  90. package/dist/tools/publishRiskScore.js +88 -88
  91. package/dist/tools/queryRiskRegistry.d.ts +38 -38
  92. package/dist/tools/queryRiskRegistry.js +55 -55
  93. package/dist/tools/safehandsPreflightCheck.d.ts +77 -77
  94. package/dist/tools/safehandsPreflightCheck.js +47 -47
  95. package/dist/tools/safehandsRiskReport.d.ts +81 -81
  96. package/dist/tools/safehandsRiskReport.js +28 -28
  97. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  98. package/dist/tools/safehandsSafeExecute.js +81 -81
  99. package/dist/tools/safehandsWalletHealth.d.ts +14 -14
  100. package/dist/tools/safehandsWalletHealth.js +103 -103
  101. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  102. package/dist/tools/safehandsX402Preflight.js +65 -65
  103. package/dist/tools/sendPayment.d.ts +57 -57
  104. package/dist/tools/sendPayment.js +117 -117
  105. package/dist/tools/simulateTransaction.d.ts +60 -60
  106. package/dist/tools/simulateTransaction.js +83 -83
  107. package/dist/tools/tokenRegistryStatus.d.ts +26 -26
  108. package/dist/tools/tokenRegistryStatus.js +96 -96
  109. package/dist/tools/x402PayAndFetch.d.ts +81 -81
  110. package/dist/tools/x402PayAndFetch.js +152 -152
  111. package/dist/x402Server.d.ts +1 -1
  112. package/dist/x402Server.js +300 -252
  113. package/dist/x402Server.js.map +1 -1
  114. package/package.json +6 -16
  115. package/examples/dashboard/index.html +0 -337
  116. package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
  117. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
  118. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
  119. package/examples/pharos-skill-engine/references/safehands.md +0 -345
  120. package/examples/scenario-hack.ts +0 -38
  121. package/skill/SKILL.md +0 -133
  122. package/skill/assets/safehands/example-actions.json +0 -49
  123. package/skill/assets/safehands/policy-defaults.json +0 -11
  124. package/skill/references/safehands.md +0 -345
@@ -1,253 +1,301 @@
1
- // ─── SafeHands x402 Server ──────────────────────────────────────────────
2
- // Exposes SafeHands risk endpoints. /supported and /health are free and do
3
- // not require user private keys. Paid routes are gated only when receiver +
4
- // facilitator signer config is present.
5
- // ────────────────────────────────────────────────────────────────────────
6
- import express from "express";
7
- import { join } from "path";
8
- import { readFileSync } from "fs";
9
- import { defineChain, createWalletClient, http, publicActions } from "viem";
10
- import { privateKeyToAccount } from "viem/accounts";
11
- import { x402Facilitator } from "@x402/core/facilitator";
12
- import { toFacilitatorEvmSigner } from "@x402/evm";
13
- import { ExactEvmScheme as FacilitatorExactEvmScheme } from "@x402/evm/exact/facilitator";
14
- import { ExactEvmScheme as ServerExactEvmScheme } from "@x402/evm/exact/server";
15
- import { HTTPFacilitatorClient } from "@x402/core/server";
16
- import { paymentMiddleware, x402ResourceServer } from "@x402/express";
17
- import { handleAssessRisk } from "./tools/assessRisk.js";
18
- import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
19
- import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
20
- import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, X402_PAYMENT_TOKEN_ADDRESS } from "./lib/constants.js";
21
- import { fail, ok } from "./lib/toolResponse.js";
22
- function loadEnv() {
23
- try {
24
- const f = readFileSync(join(process.cwd(), ".env"), "utf-8");
25
- for (const l of f.split("\n")) {
26
- const t = l.trim();
27
- if (!t || t.startsWith("#"))
28
- continue;
29
- const i = t.indexOf("=");
30
- if (i === -1)
31
- continue;
32
- const key = t.slice(0, i).trim();
33
- if (process.env[key] === undefined)
34
- process.env[key] = t.slice(i + 1).trim();
35
- }
36
- }
37
- catch { }
38
- }
39
- loadEnv();
40
- const receiverAddress = (process.env.X402_PAY_TO || process.env.WALLET_ADDRESS || "");
41
- const facilitatorPrivateKey = process.env.X402_FACILITATOR_PRIVATE_KEY || "";
42
- const port = parseInt(process.env.X402_SERVER_PORT || process.env.X402_PORT || "4021", 10);
43
- const rpcUrl = process.env.PHAROS_RPC_URL || RPC_URL;
44
- const usdcAddress = X402_PAYMENT_TOKEN_ADDRESS;
45
- const priceUsdc = process.env.X402_PRICE_USDC || "0.001";
46
- const isPaidConfigured = Boolean(receiverAddress && facilitatorPrivateKey);
47
- const pharos = defineChain({
48
- id: CHAIN_ID,
49
- name: `Pharos ${PHAROS_ENVIRONMENT}`,
50
- nativeCurrency: { name: "PHRS", symbol: "PHRS", decimals: 18 },
51
- rpcUrls: { default: { http: [rpcUrl] } },
52
- testnet: true,
53
- });
54
- const app = express();
55
- app.disable("x-powered-by");
56
- app.use((req, res, next) => {
57
- req.setTimeout(15_000);
58
- res.setHeader("X-Content-Type-Options", "nosniff");
59
- res.setHeader("Referrer-Policy", "no-referrer");
60
- next();
61
- });
62
- app.use(express.json({ limit: "64kb" }));
63
- const rateLimitWindowMs = 60_000;
64
- const rateLimitMax = 120;
65
- const rateLimitBuckets = new Map();
66
- app.use((req, res, next) => {
67
- const key = req.ip || "unknown";
68
- const now = Date.now();
69
- const bucket = rateLimitBuckets.get(key);
70
- if (!bucket || bucket.resetAt <= now) {
71
- rateLimitBuckets.set(key, { count: 1, resetAt: now + rateLimitWindowMs });
72
- return next();
73
- }
74
- bucket.count += 1;
75
- if (bucket.count > rateLimitMax) {
76
- return res.status(429).json(fail("RATE_LIMITED", "Too many requests", true, "x402_server"));
77
- }
78
- return next();
79
- });
80
- let facilitator = null;
81
- let resourceServer = null;
82
- if (isPaidConfigured) {
83
- const account = privateKeyToAccount(facilitatorPrivateKey);
84
- const walletClient = createWalletClient({
85
- account,
86
- chain: pharos,
87
- transport: http(undefined, { timeout: 30_000 }),
88
- }).extend(publicActions);
89
- const evmSigner = toFacilitatorEvmSigner({
90
- address: account.address,
91
- getCode: (args) => walletClient.getCode(args),
92
- readContract: (args) => walletClient.readContract({ ...args, args: args.args || [] }),
93
- verifyTypedData: (args) => walletClient.verifyTypedData(args),
94
- writeContract: (args) => walletClient.writeContract({ ...args, args: args.args || [] }),
95
- sendTransaction: (args) => walletClient.sendTransaction(args),
96
- waitForTransactionReceipt: (args) => walletClient.waitForTransactionReceipt(args),
97
- });
98
- facilitator = new x402Facilitator();
99
- facilitator.register(`eip155:${CHAIN_ID}`, new FacilitatorExactEvmScheme(evmSigner, {}));
100
- const facilitatorClient = new HTTPFacilitatorClient({ url: `http://localhost:${port}` });
101
- resourceServer = new x402ResourceServer(facilitatorClient);
102
- const evmScheme = new ServerExactEvmScheme();
103
- evmScheme.registerMoneyParser(async (amount, network) => {
104
- if (network === `eip155:${CHAIN_ID}`) {
105
- return {
106
- amount: Math.round(amount * 1e6).toString(),
107
- asset: usdcAddress,
108
- extra: { token: "USDC", name: "USDC", version: "2" },
109
- };
110
- }
111
- return null;
112
- });
113
- resourceServer.register(`eip155:${CHAIN_ID}`, evmScheme);
114
- }
115
- app.post("/verify", async (req, res) => {
116
- if (!facilitator) {
117
- return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "x402 facilitator is not configured. Set X402_PAY_TO/WALLET_ADDRESS and X402_FACILITATOR_PRIVATE_KEY for paid endpoints. Client PRIVATE_KEY is not used for server receiver config.", false, "x402_server"));
118
- }
119
- try {
120
- const { paymentPayload, paymentRequirements } = req.body;
121
- const result = await facilitator.verify(paymentPayload, paymentRequirements);
122
- res.json(result);
123
- }
124
- catch (e) {
125
- res.status(500).json(fail("X402_PAYMENT_FAILED", e.message, true, "x402_server"));
126
- }
127
- });
128
- app.post("/settle", async (req, res) => {
129
- if (!facilitator) {
130
- return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "x402 facilitator is not configured. Set X402_PAY_TO/WALLET_ADDRESS and X402_FACILITATOR_PRIVATE_KEY for paid endpoints. Client PRIVATE_KEY is not used for server receiver config.", false, "x402_server"));
131
- }
132
- try {
133
- const { paymentPayload, paymentRequirements } = req.body;
134
- const result = await facilitator.settle(paymentPayload, paymentRequirements);
135
- res.json(result);
136
- }
137
- catch (e) {
138
- res.status(500).json(fail("X402_PAYMENT_FAILED", e.message, true, "x402_server"));
139
- }
140
- });
141
- app.get("/supported", (_req, res) => {
142
- if (facilitator)
143
- return res.json(facilitator.getSupported());
144
- return res.json(ok({
145
- configured: false,
146
- network: `eip155:${CHAIN_ID}`,
147
- scheme: "exact",
148
- asset: usdcAddress,
149
- priceUsdc,
150
- freeEndpoints: ["GET /supported", "GET /health"],
151
- paidEndpoints: ["GET /assess-risk", "GET /check-token-security", "GET /simulate-transaction"],
152
- configError: {
153
- code: "X402_SERVER_RECEIVER_CONFIG_MISSING",
154
- message: "Paid endpoints require receiver/payTo plus facilitator signer config. Free endpoints remain available.",
155
- },
156
- }));
157
- });
158
- app.get("/health", (_req, res) => {
159
- res.json(ok({
160
- status: "ok",
161
- service: "SafeHands x402 Resource Server",
162
- network: `Pharos ${PHAROS_ENVIRONMENT} (Chain ID ${CHAIN_ID})`,
163
- environment: PHAROS_ENVIRONMENT,
164
- isMainnet: false,
165
- receiverConfigured: Boolean(receiverAddress),
166
- paidEndpointsConfigured: isPaidConfigured,
167
- receiver: receiverAddress || null,
168
- asset: usdcAddress,
169
- freeEndpoints: ["/supported", "/health"],
170
- }));
171
- });
172
- function paidConfigError(req, res, next) {
173
- if (isPaidConfigured)
174
- return next();
175
- return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "Paid endpoint receiver/payTo or facilitator signer config is missing. Free endpoints do not require a client signer/private key.", false, "x402_server"));
176
- }
177
- if (isPaidConfigured && resourceServer) {
178
- app.use(paymentMiddleware({
179
- "GET /assess-risk": {
180
- accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
181
- description: `Assess transaction risk (USDC ${priceUsdc})`,
182
- mimeType: "application/json",
183
- },
184
- "GET /check-token-security": {
185
- accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
186
- description: `Verify contract token security profile (USDC ${priceUsdc})`,
187
- mimeType: "application/json",
188
- },
189
- "GET /simulate-transaction": {
190
- accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
191
- description: `Simulate EVM execution trace before broadcasting (USDC ${priceUsdc})`,
192
- mimeType: "application/json",
193
- },
194
- }, resourceServer));
195
- }
196
- else {
197
- app.use(["/assess-risk", "/check-token-security", "/simulate-transaction"], paidConfigError);
198
- }
199
- app.get("/assess-risk", async (req, res) => {
200
- try {
201
- const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
202
- const result = await handleAssessRisk({
203
- action: action,
204
- tokenIn: tokenIn,
205
- tokenOut: tokenOut,
206
- amount: amount,
207
- toAddress: toAddress,
208
- walletAddress: walletAddress,
209
- });
210
- res.json(result);
211
- }
212
- catch (e) {
213
- res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
214
- }
215
- });
216
- app.get("/check-token-security", async (req, res) => {
217
- try {
218
- const { tokenAddress, chainId } = req.query;
219
- const cid = chainId ? parseInt(chainId, 10) : CHAIN_ID;
220
- const result = await handleCheckTokenSecurity({ tokenAddress: tokenAddress, chainId: cid });
221
- res.json(result);
222
- }
223
- catch (e) {
224
- res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
225
- }
226
- });
227
- app.get("/simulate-transaction", async (req, res) => {
228
- try {
229
- const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
230
- const result = await handleSimulateTransaction({
231
- action: action,
232
- tokenIn: tokenIn,
233
- tokenOut: tokenOut,
234
- amount: amount,
235
- toAddress: toAddress,
236
- walletAddress: walletAddress,
237
- });
238
- res.json(result);
239
- }
240
- catch (e) {
241
- res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
242
- }
243
- });
244
- app.listen(port, () => {
245
- console.log(`✅ SafeHands x402 Server listening on http://localhost:${port}`);
246
- console.log(`📡 Network: eip155:${CHAIN_ID} (Pharos ${PHAROS_ENVIRONMENT})`);
247
- console.log(`💰 Paid endpoints configured: ${isPaidConfigured ? "yes" : "no"}`);
248
- if (receiverAddress)
249
- console.log(`💰 Paid recipient address: ${receiverAddress}`);
250
- console.log(`🪙 x402 payment token: ${usdcAddress}`);
251
- console.log(`🆓 Free APIs: /supported, /health`);
252
- });
1
+ // ─── SafeHands x402 Server ──────────────────────────────────────────────
2
+ // Exposes SafeHands risk endpoints. /supported and /health are free and do
3
+ // not require user private keys. Paid routes are gated only when receiver +
4
+ // facilitator signer config is present.
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ import express from "express";
7
+ import { join } from "path";
8
+ import { readFileSync } from "fs";
9
+ import { defineChain, createWalletClient, http, publicActions } from "viem";
10
+ import { privateKeyToAccount } from "viem/accounts";
11
+ import { x402Facilitator } from "@x402/core/facilitator";
12
+ import { toFacilitatorEvmSigner } from "@x402/evm";
13
+ import { ExactEvmScheme as FacilitatorExactEvmScheme } from "@x402/evm/exact/facilitator";
14
+ import { ExactEvmScheme as ServerExactEvmScheme } from "@x402/evm/exact/server";
15
+ import { HTTPFacilitatorClient } from "@x402/core/server";
16
+ import { paymentMiddleware, x402ResourceServer } from "@x402/express";
17
+ import { handleAssessRisk } from "./tools/assessRisk.js";
18
+ import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
19
+ import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
20
+ import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
21
+ import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, X402_PAYMENT_TOKEN_ADDRESS } from "./lib/constants.js";
22
+ import { fail, ok } from "./lib/toolResponse.js";
23
+ function loadEnv() {
24
+ try {
25
+ const f = readFileSync(join(process.cwd(), ".env"), "utf-8");
26
+ for (const l of f.split("\n")) {
27
+ const t = l.trim();
28
+ if (!t || t.startsWith("#"))
29
+ continue;
30
+ const i = t.indexOf("=");
31
+ if (i === -1)
32
+ continue;
33
+ const key = t.slice(0, i).trim();
34
+ if (process.env[key] === undefined)
35
+ process.env[key] = t.slice(i + 1).trim();
36
+ }
37
+ }
38
+ catch { }
39
+ }
40
+ loadEnv();
41
+ const receiverAddress = (process.env.X402_PAY_TO || process.env.WALLET_ADDRESS || "");
42
+ const facilitatorPrivateKey = process.env.X402_FACILITATOR_PRIVATE_KEY || "";
43
+ const port = parseInt(process.env.PORT || process.env.X402_SERVER_PORT || process.env.X402_PORT || "4021", 10);
44
+ const rpcUrl = process.env.PHAROS_RPC_URL || RPC_URL;
45
+ const usdcAddress = X402_PAYMENT_TOKEN_ADDRESS;
46
+ const priceUsdc = process.env.X402_PRICE_USDC || "0.001";
47
+ const isPaidConfigured = Boolean(receiverAddress && facilitatorPrivateKey);
48
+ const pharos = defineChain({
49
+ id: CHAIN_ID,
50
+ name: `Pharos ${PHAROS_ENVIRONMENT}`,
51
+ nativeCurrency: { name: "PHRS", symbol: "PHRS", decimals: 18 },
52
+ rpcUrls: { default: { http: [rpcUrl] } },
53
+ testnet: true,
54
+ });
55
+ const app = express();
56
+ app.disable("x-powered-by");
57
+ app.use((req, res, next) => {
58
+ res.setHeader("Access-Control-Allow-Origin", "*");
59
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
60
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, X-PAYMENT, Accept");
61
+ if (req.method === "OPTIONS")
62
+ return res.sendStatus(200);
63
+ req.setTimeout(15_000);
64
+ res.setHeader("X-Content-Type-Options", "nosniff");
65
+ res.setHeader("Referrer-Policy", "no-referrer");
66
+ next();
67
+ });
68
+ app.use(express.json({ limit: "64kb" }));
69
+ const rateLimitWindowMs = 60_000;
70
+ const rateLimitMax = 120;
71
+ const rateLimitBuckets = new Map();
72
+ app.use((req, res, next) => {
73
+ const key = req.ip || "unknown";
74
+ const now = Date.now();
75
+ const bucket = rateLimitBuckets.get(key);
76
+ if (!bucket || bucket.resetAt <= now) {
77
+ rateLimitBuckets.set(key, { count: 1, resetAt: now + rateLimitWindowMs });
78
+ return next();
79
+ }
80
+ bucket.count += 1;
81
+ if (bucket.count > rateLimitMax) {
82
+ return res.status(429).json(fail("RATE_LIMITED", "Too many requests", true, "x402_server"));
83
+ }
84
+ return next();
85
+ });
86
+ let facilitator = null;
87
+ let resourceServer = null;
88
+ if (isPaidConfigured) {
89
+ const account = privateKeyToAccount(facilitatorPrivateKey);
90
+ const walletClient = createWalletClient({
91
+ account,
92
+ chain: pharos,
93
+ transport: http(undefined, { timeout: 30_000 }),
94
+ }).extend(publicActions);
95
+ const evmSigner = toFacilitatorEvmSigner({
96
+ address: account.address,
97
+ getCode: (args) => walletClient.getCode(args),
98
+ readContract: (args) => walletClient.readContract({ ...args, args: args.args || [] }),
99
+ verifyTypedData: (args) => walletClient.verifyTypedData(args),
100
+ writeContract: (args) => walletClient.writeContract({ ...args, args: args.args || [] }),
101
+ sendTransaction: (args) => walletClient.sendTransaction(args),
102
+ waitForTransactionReceipt: (args) => walletClient.waitForTransactionReceipt(args),
103
+ });
104
+ facilitator = new x402Facilitator();
105
+ facilitator.register(`eip155:${CHAIN_ID}`, new FacilitatorExactEvmScheme(evmSigner, {}));
106
+ const facilitatorClient = new HTTPFacilitatorClient({ url: `http://localhost:${port}` });
107
+ resourceServer = new x402ResourceServer(facilitatorClient);
108
+ const evmScheme = new ServerExactEvmScheme();
109
+ evmScheme.registerMoneyParser(async (amount, network) => {
110
+ if (network === `eip155:${CHAIN_ID}`) {
111
+ return {
112
+ amount: Math.round(amount * 1e6).toString(),
113
+ asset: usdcAddress,
114
+ extra: { token: "USDC", name: "USDC", version: "2" },
115
+ };
116
+ }
117
+ return null;
118
+ });
119
+ resourceServer.register(`eip155:${CHAIN_ID}`, evmScheme);
120
+ }
121
+ app.post("/verify", async (req, res) => {
122
+ if (!facilitator) {
123
+ return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "x402 facilitator is not configured. Set X402_PAY_TO/WALLET_ADDRESS and X402_FACILITATOR_PRIVATE_KEY for paid endpoints. Client PRIVATE_KEY is not used for server receiver config.", false, "x402_server"));
124
+ }
125
+ try {
126
+ const { paymentPayload, paymentRequirements } = req.body ?? {};
127
+ if (!paymentPayload || !paymentRequirements) {
128
+ return res.status(400).json(fail("BAD_REQUEST", "Missing required fields: paymentPayload and paymentRequirements.", false, "x402_server"));
129
+ }
130
+ const result = await facilitator.verify(paymentPayload, paymentRequirements);
131
+ res.json(result);
132
+ }
133
+ catch (e) {
134
+ res.status(500).json(fail("X402_PAYMENT_FAILED", e.message, true, "x402_server"));
135
+ }
136
+ });
137
+ app.post("/settle", async (req, res) => {
138
+ if (!facilitator) {
139
+ return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "x402 facilitator is not configured. Set X402_PAY_TO/WALLET_ADDRESS and X402_FACILITATOR_PRIVATE_KEY for paid endpoints. Client PRIVATE_KEY is not used for server receiver config.", false, "x402_server"));
140
+ }
141
+ try {
142
+ const { paymentPayload, paymentRequirements } = req.body ?? {};
143
+ if (!paymentPayload || !paymentRequirements) {
144
+ return res.status(400).json(fail("BAD_REQUEST", "Missing required fields: paymentPayload and paymentRequirements.", false, "x402_server"));
145
+ }
146
+ const result = await facilitator.settle(paymentPayload, paymentRequirements);
147
+ res.json(result);
148
+ }
149
+ catch (e) {
150
+ res.status(500).json(fail("X402_PAYMENT_FAILED", e.message, true, "x402_server"));
151
+ }
152
+ });
153
+ app.get("/supported", (_req, res) => {
154
+ if (facilitator)
155
+ return res.json(facilitator.getSupported());
156
+ return res.json(ok({
157
+ configured: false,
158
+ network: `eip155:${CHAIN_ID}`,
159
+ scheme: "exact",
160
+ asset: usdcAddress,
161
+ priceUsdc,
162
+ freeEndpoints: ["GET /supported", "GET /health"],
163
+ paidEndpoints: ["GET /assess-risk", "GET /check-token-security", "GET /simulate-transaction"],
164
+ configError: {
165
+ code: "X402_SERVER_RECEIVER_CONFIG_MISSING",
166
+ message: "Paid endpoints require receiver/payTo plus facilitator signer config. Free endpoints remain available.",
167
+ },
168
+ }));
169
+ });
170
+ app.get("/health", (_req, res) => {
171
+ res.json(ok({
172
+ status: "ok",
173
+ service: "SafeHands x402 Resource Server",
174
+ network: `Pharos ${PHAROS_ENVIRONMENT} (Chain ID ${CHAIN_ID})`,
175
+ environment: PHAROS_ENVIRONMENT,
176
+ isMainnet: false,
177
+ receiverConfigured: Boolean(receiverAddress),
178
+ paidEndpointsConfigured: isPaidConfigured,
179
+ receiver: receiverAddress || null,
180
+ asset: usdcAddress,
181
+ freeEndpoints: ["/supported", "/health"],
182
+ }));
183
+ });
184
+ function paidConfigError(req, res, next) {
185
+ if (isPaidConfigured)
186
+ return next();
187
+ return res.status(503).json(fail("X402_SERVER_RECEIVER_CONFIG_MISSING", "Paid endpoint receiver/payTo or facilitator signer config is missing. Free endpoints do not require a client signer/private key.", false, "x402_server"));
188
+ }
189
+ if (isPaidConfigured && resourceServer) {
190
+ app.use(paymentMiddleware({
191
+ "GET /assess-risk": {
192
+ accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
193
+ description: `Assess transaction risk (USDC ${priceUsdc})`,
194
+ mimeType: "application/json",
195
+ },
196
+ "GET /check-token-security": {
197
+ accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
198
+ description: `Verify contract token security profile (USDC ${priceUsdc})`,
199
+ mimeType: "application/json",
200
+ },
201
+ "GET /simulate-transaction": {
202
+ accepts: { scheme: "exact", price: priceUsdc, network: `eip155:${CHAIN_ID}`, payTo: receiverAddress },
203
+ description: `Simulate EVM execution trace before broadcasting (USDC ${priceUsdc})`,
204
+ mimeType: "application/json",
205
+ },
206
+ }, resourceServer));
207
+ }
208
+ else {
209
+ app.use(["/assess-risk", "/check-token-security", "/simulate-transaction"], paidConfigError);
210
+ }
211
+ app.get("/assess-risk", async (req, res) => {
212
+ try {
213
+ const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
214
+ const result = await handleAssessRisk({
215
+ action: action,
216
+ tokenIn: tokenIn,
217
+ tokenOut: tokenOut,
218
+ amount: amount,
219
+ toAddress: toAddress,
220
+ walletAddress: walletAddress,
221
+ });
222
+ res.json(result);
223
+ }
224
+ catch (e) {
225
+ res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
226
+ }
227
+ });
228
+ app.get("/check-token-security", async (req, res) => {
229
+ try {
230
+ const { tokenAddress, chainId } = req.query;
231
+ const cid = chainId ? parseInt(chainId, 10) : CHAIN_ID;
232
+ const result = await handleCheckTokenSecurity({ tokenAddress: tokenAddress, chainId: cid });
233
+ res.json(result);
234
+ }
235
+ catch (e) {
236
+ res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
237
+ }
238
+ });
239
+ app.get("/simulate-transaction", async (req, res) => {
240
+ try {
241
+ const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
242
+ const result = await handleSimulateTransaction({
243
+ action: action,
244
+ tokenIn: tokenIn,
245
+ tokenOut: tokenOut,
246
+ amount: amount,
247
+ toAddress: toAddress,
248
+ walletAddress: walletAddress,
249
+ });
250
+ res.json(result);
251
+ }
252
+ catch (e) {
253
+ res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
254
+ }
255
+ });
256
+ // Free endpoints for live dashboard
257
+ app.get("/preflight", async (req, res) => {
258
+ try {
259
+ const { actionType, chainId, amount, tokenAddress, spender, approvalAmount, recipient } = req.query;
260
+ const result = await handleSafeHandsPreflightCheck({
261
+ actionType: actionType,
262
+ chainId: chainId ? parseInt(chainId, 10) : CHAIN_ID,
263
+ amount: amount,
264
+ tokenAddress: tokenAddress,
265
+ spender: spender,
266
+ approvalAmount: approvalAmount,
267
+ recipient: recipient,
268
+ });
269
+ res.json(result);
270
+ }
271
+ catch (e) {
272
+ res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
273
+ }
274
+ });
275
+ app.get("/risk", async (req, res) => {
276
+ try {
277
+ const { action, tokenIn, tokenOut, amount, toAddress, walletAddress } = req.query;
278
+ const result = await handleAssessRisk({
279
+ action: action,
280
+ tokenIn: tokenIn,
281
+ tokenOut: tokenOut,
282
+ amount: amount,
283
+ toAddress: toAddress,
284
+ walletAddress: walletAddress,
285
+ });
286
+ res.json(result);
287
+ }
288
+ catch (e) {
289
+ res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
290
+ }
291
+ });
292
+ app.listen(port, () => {
293
+ console.log(`✅ SafeHands x402 Server listening on http://localhost:${port}`);
294
+ console.log(`📡 Network: eip155:${CHAIN_ID} (Pharos ${PHAROS_ENVIRONMENT})`);
295
+ console.log(`💰 Paid endpoints configured: ${isPaidConfigured ? "yes" : "no"}`);
296
+ if (receiverAddress)
297
+ console.log(`💰 Paid recipient address: ${receiverAddress}`);
298
+ console.log(`🪙 x402 payment token: ${usdcAddress}`);
299
+ console.log(`🆓 Free APIs: /supported, /health`);
300
+ });
253
301
  //# sourceMappingURL=x402Server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"x402Server.js","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402Server.js","sourceRoot":"","sources":["../src/x402Server.ts"],"names":[],"mappings":"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"}