safehands-pharos 1.3.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.
- package/.env.example +64 -26
- package/README.md +444 -445
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +36 -8
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +208 -147
- package/dist/index.js.map +1 -1
- package/dist/lib/auditLog.d.ts +9 -0
- package/dist/lib/auditLog.d.ts.map +1 -0
- package/dist/lib/auditLog.js +30 -0
- package/dist/lib/auditLog.js.map +1 -0
- package/dist/lib/constants.d.ts +12 -0
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +10 -0
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +8 -0
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +22 -4
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/envLoader.d.ts +2 -0
- package/dist/lib/envLoader.d.ts.map +1 -0
- package/dist/lib/envLoader.js +44 -0
- package/dist/lib/envLoader.js.map +1 -0
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +13 -3
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +50 -45
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +3 -4
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +10 -0
- package/dist/lib/spendAccumulator.d.ts.map +1 -0
- package/dist/lib/spendAccumulator.js +54 -0
- package/dist/lib/spendAccumulator.js.map +1 -0
- package/dist/lib/testRpc.d.ts +1 -1
- package/dist/lib/testRpc.js +29 -29
- package/dist/lib/testTools.d.ts +1 -1
- package/dist/lib/testTools.js +4 -5
- package/dist/lib/wallet/index.d.ts +19 -0
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +65 -7
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/tools/approveToken.d.ts +0 -1
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +3 -1
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +18 -7
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +9 -2
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +20 -6
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +7 -0
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +2 -0
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +30 -7
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +3 -1
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +13 -1
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +15 -17
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +125 -64
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +5 -19
- package/dist/tools/getTransactionStatus.d.ts.map +1 -1
- package/dist/tools/getTransactionStatus.js +10 -18
- package/dist/tools/getTransactionStatus.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +3 -0
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryRiskRegistry.d.ts +3 -13
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +6 -11
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +12 -6
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +0 -1
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +10 -1
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/simulateTransaction.d.ts +2 -23
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +10 -15
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +4 -1
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/x402Server.js +51 -3
- package/dist/x402Server.js.map +1 -1
- package/package.json +73 -84
- package/.agents/skill/safehands/SKILL.md +0 -212
- package/.agents/skill/safehands/assets/networks.json +0 -24
- package/.agents/skill/safehands/assets/tokens.json +0 -66
- package/.agents/wallets.json +0 -20
- package/docs/reports/OFFICIAL_DOCS_ALIGNMENT_REPORT.md +0 -137
- package/docs/reports/final_audit_report.md +0 -307
- package/docs/reports/live_verification_report.md +0 -147
- package/docs/reports/pharos_skill_engine_alignment_report.md +0 -85
- package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
- package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
- package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
- package/examples/pharos-skill-engine/references/safehands.md +0 -345
- package/examples/scenario-hack.ts +0 -38
- package/skill/SKILL.md +0 -133
- package/skill/assets/safehands/example-actions.json +0 -49
- package/skill/assets/safehands/policy-defaults.json +0 -11
- package/skill/references/safehands.md +0 -345
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/tools/getTransactionStatus.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uDAAuD;AACvD,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"getTransactionStatus.js","sourceRoot":"","sources":["../../src/tools/getTransactionStatus.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,uDAAuD;AACvD,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC3D,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EACT,oHAAoH;IACtH,WAAW,EAAE,0BAA0B;CACxC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,GAA8B;IAC7E,MAAM,KAAK,GAAG,0BAA0B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAuB,CAAC;IAE3C,4DAA4D;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;YAC3C,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YACnC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE;YACvD,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC1B,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;SAC1C,CAAC;QAEF,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,EAAE,8CAA8C,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAC9G,CAAC;QAED,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;QAC9D,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,SAAkB;gBAC5B,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,OAAO,EAAE,IAAI;gBACb,iBAAiB,EAAE,IAAI;gBACvB,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC1B,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,cAAc,EAAE,iCAAiC,EAAE,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishRiskScore.d.ts","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAMhC,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"publishRiskScore.d.ts","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;EAOjC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE3E,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAMhC,CAAC;AAEF,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,qBAAqB;;;;;;;;;;;;IAgFtE"}
|
|
@@ -65,6 +65,9 @@ export async function handlePublishRiskScore(raw) {
|
|
|
65
65
|
],
|
|
66
66
|
});
|
|
67
67
|
const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
68
|
+
if (receipt.status !== "success") {
|
|
69
|
+
return fail("TX_REVERTED", "publish_risk_score transaction was mined but reverted on-chain. Ensure the calling wallet is authorized via RiskRegistry.setAuthorizedAgent() by the contract owner.", false, "publish_risk_score");
|
|
70
|
+
}
|
|
68
71
|
return ok({
|
|
69
72
|
assessment,
|
|
70
73
|
policy,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publishRiskScore.js","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,mEAAmE;AACnE,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,mCAAmC,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC7G,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAA4B,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC9E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;CAC3G,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,6EAA6E;QAC7E,yFAAyF;IAC3F,WAAW,EAAE,sBAAsB;CACpC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAA0B;IACrE,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,IAAI,CACT,sBAAsB,EACtB,6GAA6G,EAC7G,KAAK,EACL,oBAAoB,CACrB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,MAAM,GAAG,oBAAoB,CAAC;QAClC,UAAU,EAAE,oBAAoB;QAChC,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,kBAAkB;QAC/B,SAAS,EAAE,KAAK;QAChB,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,yCAAyC,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACpI,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC;QAClC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,mCAAmC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACxC,OAAO,EAAE,qBAAqB;YAC9B,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE;gBACJ,aAAa;gBACb,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;gBAC5B,UAAU,CAAC,SAAS;gBACpB,UAAU,CAAC,cAAc;aAC1B;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAE/E,OAAO,EAAE,CAAC;YACR,UAAU;YACV,MAAM;YACN,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,OAAO,EAAE;gBACP,MAAM;gBACN,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC;gBACnC,eAAe,EAAE,qBAAqB;gBACtC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACnC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE;aAC5C;YACD,MAAM,EAAE,oBAAoB;SAC7B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"publishRiskScore.js","sourceRoot":"","sources":["../../src/tools/publishRiskScore.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,14 +18,13 @@ export declare const queryRiskRegistryTool: {
|
|
|
18
18
|
walletAddress: string;
|
|
19
19
|
}>;
|
|
20
20
|
};
|
|
21
|
-
export declare function handleQueryRiskRegistry(raw: QueryRiskRegistryInput): Promise<{
|
|
21
|
+
export declare function handleQueryRiskRegistry(raw: QueryRiskRegistryInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
|
|
22
22
|
walletAddress: string;
|
|
23
23
|
found: boolean;
|
|
24
24
|
record: null;
|
|
25
25
|
registryContract: `0x${string}`;
|
|
26
26
|
message: string;
|
|
27
|
-
|
|
28
|
-
} | {
|
|
27
|
+
}> | import("../lib/toolResponse.js").ToolSuccess<{
|
|
29
28
|
walletAddress: string;
|
|
30
29
|
found: boolean;
|
|
31
30
|
record: {
|
|
@@ -36,14 +35,5 @@ export declare function handleQueryRiskRegistry(raw: QueryRiskRegistryInput): Pr
|
|
|
36
35
|
assessedBy: `0x${string}`;
|
|
37
36
|
};
|
|
38
37
|
registryContract: `0x${string}`;
|
|
39
|
-
|
|
40
|
-
error?: undefined;
|
|
41
|
-
} | {
|
|
42
|
-
walletAddress: string;
|
|
43
|
-
found: boolean;
|
|
44
|
-
record: null;
|
|
45
|
-
registryContract: `0x${string}`;
|
|
46
|
-
error: string;
|
|
47
|
-
message?: undefined;
|
|
48
|
-
}>;
|
|
38
|
+
}>>;
|
|
49
39
|
//# sourceMappingURL=queryRiskRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryRiskRegistry.d.ts","sourceRoot":"","sources":["../../src/tools/queryRiskRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"queryRiskRegistry.d.ts","sourceRoot":"","sources":["../../src/tools/queryRiskRegistry.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE7E,eAAO,MAAM,qBAAqB;;;;;;;;;;CAMjC,CAAC;AAEF,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,sBAAsB;;;;;;;;;;;;;;;;;IA8CxE"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { publicClient } from "../lib/pharosClient.js";
|
|
7
7
|
import { RISK_REGISTRY_ADDRESS, RISK_REGISTRY_ABI } from "../lib/constants.js";
|
|
8
|
+
import { ok, fail } from "../lib/toolResponse.js";
|
|
8
9
|
export const queryRiskRegistrySchema = z.object({
|
|
9
10
|
walletAddress: z.string().describe("Wallet address to query risk score for"),
|
|
10
11
|
});
|
|
@@ -27,15 +28,15 @@ export async function handleQueryRiskRegistry(raw) {
|
|
|
27
28
|
const timestamp = Number(result.timestamp);
|
|
28
29
|
// Check if record exists (timestamp will be 0 if never published)
|
|
29
30
|
if (timestamp === 0) {
|
|
30
|
-
return {
|
|
31
|
+
return ok({
|
|
31
32
|
walletAddress: input.walletAddress,
|
|
32
33
|
found: false,
|
|
33
34
|
record: null,
|
|
34
35
|
registryContract: RISK_REGISTRY_ADDRESS,
|
|
35
36
|
message: "No risk score published for this wallet",
|
|
36
|
-
};
|
|
37
|
+
});
|
|
37
38
|
}
|
|
38
|
-
return {
|
|
39
|
+
return ok({
|
|
39
40
|
walletAddress: input.walletAddress,
|
|
40
41
|
found: true,
|
|
41
42
|
record: {
|
|
@@ -46,16 +47,10 @@ export async function handleQueryRiskRegistry(raw) {
|
|
|
46
47
|
assessedBy: result.assessedBy,
|
|
47
48
|
},
|
|
48
49
|
registryContract: RISK_REGISTRY_ADDRESS,
|
|
49
|
-
};
|
|
50
|
+
});
|
|
50
51
|
}
|
|
51
52
|
catch (err) {
|
|
52
|
-
return {
|
|
53
|
-
walletAddress: input.walletAddress,
|
|
54
|
-
found: false,
|
|
55
|
-
record: null,
|
|
56
|
-
registryContract: RISK_REGISTRY_ADDRESS,
|
|
57
|
-
error: `Failed to query registry: ${err.message}`,
|
|
58
|
-
};
|
|
53
|
+
return fail("REGISTRY_QUERY_FAILED", `Failed to query registry: ${err.message}`, true, "query_risk_registry");
|
|
59
54
|
}
|
|
60
55
|
}
|
|
61
56
|
//# sourceMappingURL=queryRiskRegistry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryRiskRegistry.js","sourceRoot":"","sources":["../../src/tools/queryRiskRegistry.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,qCAAqC;AACrC,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"queryRiskRegistry.js","sourceRoot":"","sources":["../../src/tools/queryRiskRegistry.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,qCAAqC;AACrC,2EAA2E;AAE3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAkB,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC7E,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EACT,uEAAuE;QACvE,kGAAkG;IACpG,WAAW,EAAE,uBAAuB;CACrC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAA2B;IACvE,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;YAC9C,OAAO,EAAE,qBAAqB;YAC9B,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,OAAO;YACrB,IAAI,EAAE,CAAC,KAAK,CAAC,aAA8B,CAAC;SAC7C,CAAC,CAMD,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3C,kEAAkE;QAClE,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;gBACR,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI;gBACZ,gBAAgB,EAAE,qBAAqB;gBACvC,OAAO,EAAE,yCAAyC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,EAAE,CAAC;YACR,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,KAAK,EAAE,IAAI;YACX,MAAM,EAAE;gBACN,KAAK;gBACL,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,SAAS,EAAE,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBACnD,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B;YACD,gBAAgB,EAAE,qBAAqB;SACxC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,uBAAuB,EAAE,6BAA8B,GAAa,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safehandsSafeExecute.d.ts","sourceRoot":"","sources":["../../src/tools/safehandsSafeExecute.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"safehandsSafeExecute.d.ts","sourceRoot":"","sources":["../../src/tools/safehandsSafeExecute.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAsC,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAQ/F,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKrC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAenF,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAyD/G"}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// ───────────────────────────────────────────────────────────────────────
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { fail, ok, requireWriteToolsEnabled } from "../lib/toolResponse.js";
|
|
6
|
+
import { getSigner, isSignerFailure } from "../lib/signer/index.js";
|
|
6
7
|
import { handleSafeHandsPreflightCheck } from "./safehandsPreflightCheck.js";
|
|
7
8
|
import { handleSendPayment } from "./sendPayment.js";
|
|
8
9
|
import { handleApproveToken } from "./approveToken.js";
|
|
@@ -14,24 +15,29 @@ export const safehandsSafeExecuteSchema = z.object({
|
|
|
14
15
|
confirmExecution: z.boolean().optional().default(false).describe("Additional explicit runtime confirmation."),
|
|
15
16
|
action: z.record(z.any()).describe("Underlying tool input object"),
|
|
16
17
|
});
|
|
17
|
-
function toPreflight(path, action) {
|
|
18
|
+
function toPreflight(path, action, signerAvailable) {
|
|
18
19
|
if (path === "safe_execute_send_payment") {
|
|
19
|
-
return { actionType: "send_payment", amount: String(action.amount || ""), amountUnit: "PHRS", recipient: String(action.toAddress || ""), recipientVerified: false, requiresSigner: true, signerAvailable
|
|
20
|
+
return { actionType: "send_payment", amount: String(action.amount || ""), amountUnit: "PHRS", recipient: String(action.toAddress || ""), recipientVerified: false, requiresSigner: true, signerAvailable };
|
|
20
21
|
}
|
|
21
22
|
if (path === "safe_execute_approve_token") {
|
|
22
|
-
return { actionType: "approve_token", approvalAmount: String(action.amount || ""), approvalToken: String(action.token || ""), approvalUnlimited: action.amount === "max", requiresSigner: true, signerAvailable
|
|
23
|
+
return { actionType: "approve_token", approvalAmount: String(action.amount || ""), approvalToken: String(action.token || ""), approvalUnlimited: action.amount === "max", requiresSigner: true, signerAvailable };
|
|
23
24
|
}
|
|
24
25
|
if (path === "safe_execute_swap") {
|
|
25
|
-
return { actionType: "execute_swap", amount: String(action.amountIn || ""), tokenIn: String(action.tokenIn || ""), tokenOut: String(action.tokenOut || ""), requiresSigner: true, signerAvailable
|
|
26
|
+
return { actionType: "execute_swap", amount: String(action.amountIn || ""), tokenIn: String(action.tokenIn || ""), tokenOut: String(action.tokenOut || ""), requiresSigner: true, signerAvailable };
|
|
26
27
|
}
|
|
27
|
-
return { actionType: "x402_pay_and_fetch", url: String(action.url || ""), paymentAmountUsdc: String(action.maxPaymentUsdc || "0.001"), requiresSigner: true, signerAvailable
|
|
28
|
+
return { actionType: "x402_pay_and_fetch", url: String(action.url || ""), paymentAmountUsdc: String(action.maxPaymentUsdc || "0.001"), requiresSigner: true, signerAvailable };
|
|
28
29
|
}
|
|
29
30
|
export async function handleSafeHandsSafeExecute(raw) {
|
|
30
31
|
const input = safehandsSafeExecuteSchema.parse(raw);
|
|
31
32
|
const writeGuard = requireWriteToolsEnabled("safehands_safe_execute");
|
|
32
33
|
if (writeGuard)
|
|
33
34
|
return writeGuard;
|
|
34
|
-
|
|
35
|
+
// Resolve actual signer availability so the preflight report is truthful
|
|
36
|
+
const purpose = input.path === "safe_x402_pay_and_fetch" ? "x402" : "write";
|
|
37
|
+
const agentId = typeof input.action.agentId === "string" ? input.action.agentId : undefined;
|
|
38
|
+
const signerResult = await getSigner(agentId, { purpose });
|
|
39
|
+
const signerAvailable = !isSignerFailure(signerResult);
|
|
40
|
+
const preflight = await handleSafeHandsPreflightCheck(toPreflight(input.path, input.action, signerAvailable));
|
|
35
41
|
if (!preflight.success)
|
|
36
42
|
return preflight;
|
|
37
43
|
const report = preflight.data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safehandsSafeExecute.js","sourceRoot":"","sources":["../../src/tools/safehandsSafeExecute.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,0EAA0E;AAE1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,wBAAwB,EAAqB,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,2BAA2B,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,yBAAyB,CAAC,CAAC;IACzH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,qEAAqE,CAAC;IAC9H,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAC7G,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACnE,CAAC,CAAC;AAIH,SAAS,WAAW,CAAC,IAAY,EAAE,MAA+B;
|
|
1
|
+
{"version":3,"file":"safehandsSafeExecute.js","sourceRoot":"","sources":["../../src/tools/safehandsSafeExecute.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,6 @@ export declare const sendPaymentTool: {
|
|
|
37
37
|
}>;
|
|
38
38
|
};
|
|
39
39
|
export declare function handleSendPayment(raw: SendPaymentInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
|
|
40
|
-
txSuccess: boolean;
|
|
41
40
|
txHash: `0x${string}`;
|
|
42
41
|
explorerUrl: string;
|
|
43
42
|
amountSent: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendPayment.d.ts","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"sendPayment.d.ts","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAI3B,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;IAwH5D"}
|
|
@@ -7,6 +7,7 @@ import { fail, ok, classifyExternalError } from "../lib/toolResponse.js";
|
|
|
7
7
|
import { MAX_BALANCE_USAGE_PCT, RISK_BLOCK_THRESHOLD, MAX_TX_AMOUNT_PHRS, CHAIN_ID, PHAROS_ENVIRONMENT } from "../lib/constants.js";
|
|
8
8
|
import { getSigner, isSignerFailure } from "../lib/signer/index.js";
|
|
9
9
|
import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
|
|
10
|
+
import { checkDailyLimit, recordSpend, estimateUsd } from "../lib/spendAccumulator.js";
|
|
10
11
|
export const sendPaymentSchema = z.object({
|
|
11
12
|
toAddress: z.string(),
|
|
12
13
|
amount: z.string(),
|
|
@@ -46,6 +47,11 @@ export async function handleSendPayment(raw) {
|
|
|
46
47
|
if (Number(input.amount) > Number(MAX_TX_AMOUNT_PHRS)) {
|
|
47
48
|
return fail("TX_LIMIT_EXCEEDED", `Payment amount exceeds configured testnet limit (${MAX_TX_AMOUNT_PHRS} PHRS).`, false, "send_payment");
|
|
48
49
|
}
|
|
50
|
+
const amountUsd = estimateUsd(input.amount, "PHRS");
|
|
51
|
+
const dailyCheck = checkDailyLimit(walletAddress, amountUsd);
|
|
52
|
+
if (!dailyCheck.allowed) {
|
|
53
|
+
return fail("DAILY_SPEND_LIMIT_EXCEEDED", `Daily spend limit reached. Spent $${dailyCheck.currentUsd.toFixed(2)} of $${dailyCheck.limitUsd.toFixed(2)} USD today. Remaining: $${dailyCheck.remainingUsd.toFixed(2)}. Resets at UTC midnight.`, false, "send_payment");
|
|
54
|
+
}
|
|
49
55
|
const warnings = [];
|
|
50
56
|
const validation = { addressValid: false, balanceSufficient: false, warnings };
|
|
51
57
|
if (!isAddress(input.toAddress)) {
|
|
@@ -85,8 +91,11 @@ export async function handleSendPayment(raw) {
|
|
|
85
91
|
value: amountWei,
|
|
86
92
|
});
|
|
87
93
|
const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
94
|
+
if (receipt.status !== "success") {
|
|
95
|
+
return fail("TX_REVERTED", "send_payment transaction was mined but reverted on-chain.", false, "send_payment");
|
|
96
|
+
}
|
|
97
|
+
recordSpend(walletAddress, amountUsd);
|
|
88
98
|
return ok({
|
|
89
|
-
txSuccess: receipt.status === "success",
|
|
90
99
|
txHash,
|
|
91
100
|
explorerUrl: getExplorerUrl(txHash),
|
|
92
101
|
amountSent: input.amount,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendPayment.js","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,mCAAmC,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,EAAE,EAA4B,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACnG,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACpI,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"sendPayment.js","sourceRoot":"","sources":["../../src/tools/sendPayment.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,27 +48,7 @@ export declare const simulateTransactionTool: {
|
|
|
48
48
|
toAddress?: string | undefined;
|
|
49
49
|
}>;
|
|
50
50
|
};
|
|
51
|
-
export declare function handleSimulateTransaction(input: SimulateTransactionInput): Promise<{
|
|
52
|
-
wouldSucceed: boolean;
|
|
53
|
-
gasEstimate: string;
|
|
54
|
-
revertReason: string;
|
|
55
|
-
balanceChanges: {
|
|
56
|
-
token: string;
|
|
57
|
-
delta: string;
|
|
58
|
-
}[];
|
|
59
|
-
warnings: string[];
|
|
60
|
-
expectedOutput?: undefined;
|
|
61
|
-
} | {
|
|
62
|
-
wouldSucceed: boolean;
|
|
63
|
-
expectedOutput: string;
|
|
64
|
-
gasEstimate: string;
|
|
65
|
-
revertReason: string;
|
|
66
|
-
balanceChanges: {
|
|
67
|
-
token: string;
|
|
68
|
-
delta: string;
|
|
69
|
-
}[];
|
|
70
|
-
warnings: string[];
|
|
71
|
-
} | {
|
|
51
|
+
export declare function handleSimulateTransaction(input: SimulateTransactionInput): Promise<import("../lib/toolResponse.js").ToolFailure | import("../lib/toolResponse.js").ToolSuccess<{
|
|
72
52
|
wouldSucceed: boolean;
|
|
73
53
|
expectedOutput: string;
|
|
74
54
|
gasEstimate: string;
|
|
@@ -77,6 +57,5 @@ export declare function handleSimulateTransaction(input: SimulateTransactionInpu
|
|
|
77
57
|
delta: string;
|
|
78
58
|
}[];
|
|
79
59
|
warnings: string[];
|
|
80
|
-
|
|
81
|
-
}>;
|
|
60
|
+
}>>;
|
|
82
61
|
//# sourceMappingURL=simulateTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulateTransaction.d.ts","sourceRoot":"","sources":["../../src/tools/simulateTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"simulateTransaction.d.ts","sourceRoot":"","sources":["../../src/tools/simulateTransaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;EAOpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEjF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;CAInC,CAAC;AAEF,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,wBAAwB;;;;;eAExC,MAAM;eAAS,MAAM;;;IA4E3D"}
|
|
@@ -3,6 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { publicClient } from "../lib/pharosClient.js";
|
|
4
4
|
import { getDodoRoute } from "../lib/dodoApi.js";
|
|
5
5
|
import { parseEther, formatEther } from "viem";
|
|
6
|
+
import { ok, fail } from "../lib/toolResponse.js";
|
|
6
7
|
export const simulateTransactionSchema = z.object({
|
|
7
8
|
action: z.enum(["swap", "transfer"]),
|
|
8
9
|
tokenIn: z.string().optional(),
|
|
@@ -22,7 +23,7 @@ export async function handleSimulateTransaction(input) {
|
|
|
22
23
|
try {
|
|
23
24
|
if (input.action === "swap") {
|
|
24
25
|
if (!input.tokenIn || !input.tokenOut) {
|
|
25
|
-
return
|
|
26
|
+
return fail("INVALID_INPUT", "tokenIn and tokenOut required for swap simulation", false, "simulate_transaction");
|
|
26
27
|
}
|
|
27
28
|
const quote = await getDodoRoute({
|
|
28
29
|
fromToken: input.tokenIn,
|
|
@@ -31,7 +32,7 @@ export async function handleSimulateTransaction(input) {
|
|
|
31
32
|
walletAddress: input.walletAddress,
|
|
32
33
|
});
|
|
33
34
|
if (!quote.routeAvailable) {
|
|
34
|
-
return
|
|
35
|
+
return fail("NO_ROUTE_AVAILABLE", "No swap route available", true, "simulate_transaction");
|
|
35
36
|
}
|
|
36
37
|
// Simulate via eth_call
|
|
37
38
|
try {
|
|
@@ -45,28 +46,22 @@ export async function handleSimulateTransaction(input) {
|
|
|
45
46
|
catch (err) {
|
|
46
47
|
const msg = err.message;
|
|
47
48
|
if (msg.includes("revert")) {
|
|
48
|
-
return
|
|
49
|
+
return fail("SIMULATION_REVERTED", msg, false, "simulate_transaction");
|
|
49
50
|
}
|
|
50
51
|
warnings.push(`Simulation warning: ${msg}`);
|
|
51
52
|
}
|
|
52
53
|
balanceChanges.push({ token: input.tokenIn, delta: `-${input.amount}` });
|
|
53
54
|
balanceChanges.push({ token: input.tokenOut, delta: `+${quote.amountOut}` });
|
|
54
|
-
return { wouldSucceed: true, expectedOutput: quote.amountOut, gasEstimate: quote.gasLimit, balanceChanges, warnings };
|
|
55
|
+
return ok({ wouldSucceed: true, expectedOutput: quote.amountOut, gasEstimate: quote.gasLimit, balanceChanges, warnings });
|
|
55
56
|
}
|
|
56
57
|
// Transfer simulation
|
|
57
58
|
if (!input.toAddress) {
|
|
58
|
-
return
|
|
59
|
+
return fail("INVALID_INPUT", "toAddress required for transfer simulation", false, "simulate_transaction");
|
|
59
60
|
}
|
|
60
61
|
const amountWei = parseEther(input.amount);
|
|
61
62
|
const balance = await publicClient.getBalance({ address: input.walletAddress });
|
|
62
63
|
if (balance < amountWei) {
|
|
63
|
-
return {
|
|
64
|
-
wouldSucceed: false,
|
|
65
|
-
gasEstimate: "21000",
|
|
66
|
-
revertReason: `Insufficient balance: have ${formatEther(balance)}, need ${input.amount}`,
|
|
67
|
-
balanceChanges,
|
|
68
|
-
warnings,
|
|
69
|
-
};
|
|
64
|
+
return fail("INSUFFICIENT_TESTNET_BALANCE", `Insufficient balance: have ${formatEther(balance)}, need ${input.amount}`, false, "simulate_transaction");
|
|
70
65
|
}
|
|
71
66
|
const gasEstimate = await publicClient.estimateGas({
|
|
72
67
|
to: input.toAddress,
|
|
@@ -74,16 +69,16 @@ export async function handleSimulateTransaction(input) {
|
|
|
74
69
|
account: input.walletAddress,
|
|
75
70
|
});
|
|
76
71
|
balanceChanges.push({ token: "PHRS", delta: `-${input.amount}` });
|
|
77
|
-
return {
|
|
72
|
+
return ok({
|
|
78
73
|
wouldSucceed: true,
|
|
79
74
|
expectedOutput: input.amount,
|
|
80
75
|
gasEstimate: gasEstimate.toString(),
|
|
81
76
|
balanceChanges,
|
|
82
77
|
warnings,
|
|
83
|
-
};
|
|
78
|
+
});
|
|
84
79
|
}
|
|
85
80
|
catch (err) {
|
|
86
|
-
return
|
|
81
|
+
return fail("SIMULATION_FAILED", err.message, true, "simulate_transaction");
|
|
87
82
|
}
|
|
88
83
|
}
|
|
89
84
|
//# sourceMappingURL=simulateTransaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulateTransaction.js","sourceRoot":"","sources":["../../src/tools/simulateTransaction.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAgD,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"simulateTransaction.js","sourceRoot":"","sources":["../../src/tools/simulateTransaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402PayAndFetch.d.ts","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAC;AA0BF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"x402PayAndFetch.d.ts","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;CAM/B,CAAC;AA0BF,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6HpE"}
|
|
@@ -7,7 +7,7 @@ import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
|
|
|
7
7
|
import { registerExactEvmScheme } from "@x402/evm/exact/client";
|
|
8
8
|
import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, MAX_X402_PAYMENT_USDC, X402_PAYMENT_TOKEN_ADDRESS } from "../lib/constants.js";
|
|
9
9
|
import { assertSafeFetchUrl, fetchWithTimeoutAndRetry } from "../lib/http.js";
|
|
10
|
-
import { fail, ok } from "../lib/toolResponse.js";
|
|
10
|
+
import { fail, ok, requireWriteToolsEnabled } from "../lib/toolResponse.js";
|
|
11
11
|
import { getSigner, isSignerFailure } from "../lib/signer/index.js";
|
|
12
12
|
import { evaluateActionPolicy } from "../lib/policy/actionPolicyEngine.js";
|
|
13
13
|
export const x402PayAndFetchSchema = z.object({
|
|
@@ -90,6 +90,9 @@ export async function handleX402PayAndFetch(raw) {
|
|
|
90
90
|
source: "x402_fetch",
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
+
const writeGuard = requireWriteToolsEnabled("x402_pay_and_fetch");
|
|
94
|
+
if (writeGuard)
|
|
95
|
+
return writeGuard;
|
|
93
96
|
const signer = await getSigner(input.agentId, { purpose: "x402" });
|
|
94
97
|
if (isSignerFailure(signer)) {
|
|
95
98
|
return fail("X402_PAYMENT_REQUIRED", `The resource returned HTTP 402, but no safe x402 signer is available: ${signer.error.message}`, false, "x402_pay_and_fetch");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402PayAndFetch.js","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,qEAAqE;AACrE,gFAAgF;AAChF,4EAA4E;AAE5E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAC/H,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"x402PayAndFetch.js","sourceRoot":"","sources":["../../src/tools/x402PayAndFetch.ts"],"names":[],"mappings":"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"}
|
package/dist/x402Server.js
CHANGED
|
@@ -17,6 +17,7 @@ import { paymentMiddleware, x402ResourceServer } from "@x402/express";
|
|
|
17
17
|
import { handleAssessRisk } from "./tools/assessRisk.js";
|
|
18
18
|
import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
|
|
19
19
|
import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
|
|
20
|
+
import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
|
|
20
21
|
import { CHAIN_ID, PHAROS_ENVIRONMENT, RPC_URL, X402_PAYMENT_TOKEN_ADDRESS } from "./lib/constants.js";
|
|
21
22
|
import { fail, ok } from "./lib/toolResponse.js";
|
|
22
23
|
function loadEnv() {
|
|
@@ -39,7 +40,7 @@ function loadEnv() {
|
|
|
39
40
|
loadEnv();
|
|
40
41
|
const receiverAddress = (process.env.X402_PAY_TO || process.env.WALLET_ADDRESS || "");
|
|
41
42
|
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 port = parseInt(process.env.PORT || process.env.X402_SERVER_PORT || process.env.X402_PORT || "4021", 10);
|
|
43
44
|
const rpcUrl = process.env.PHAROS_RPC_URL || RPC_URL;
|
|
44
45
|
const usdcAddress = X402_PAYMENT_TOKEN_ADDRESS;
|
|
45
46
|
const priceUsdc = process.env.X402_PRICE_USDC || "0.001";
|
|
@@ -54,6 +55,11 @@ const pharos = defineChain({
|
|
|
54
55
|
const app = express();
|
|
55
56
|
app.disable("x-powered-by");
|
|
56
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);
|
|
57
63
|
req.setTimeout(15_000);
|
|
58
64
|
res.setHeader("X-Content-Type-Options", "nosniff");
|
|
59
65
|
res.setHeader("Referrer-Policy", "no-referrer");
|
|
@@ -117,7 +123,10 @@ app.post("/verify", async (req, res) => {
|
|
|
117
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"));
|
|
118
124
|
}
|
|
119
125
|
try {
|
|
120
|
-
const { paymentPayload, paymentRequirements } = req.body;
|
|
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
|
+
}
|
|
121
130
|
const result = await facilitator.verify(paymentPayload, paymentRequirements);
|
|
122
131
|
res.json(result);
|
|
123
132
|
}
|
|
@@ -130,7 +139,10 @@ app.post("/settle", async (req, res) => {
|
|
|
130
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"));
|
|
131
140
|
}
|
|
132
141
|
try {
|
|
133
|
-
const { paymentPayload, paymentRequirements } = req.body;
|
|
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
|
+
}
|
|
134
146
|
const result = await facilitator.settle(paymentPayload, paymentRequirements);
|
|
135
147
|
res.json(result);
|
|
136
148
|
}
|
|
@@ -241,6 +253,42 @@ app.get("/simulate-transaction", async (req, res) => {
|
|
|
241
253
|
res.status(400).json(fail("BAD_REQUEST", e.message, false, "x402_server"));
|
|
242
254
|
}
|
|
243
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
|
+
});
|
|
244
292
|
app.listen(port, () => {
|
|
245
293
|
console.log(`✅ SafeHands x402 Server listening on http://localhost:${port}`);
|
|
246
294
|
console.log(`📡 Network: eip155:${CHAIN_ID} (Pharos ${PHAROS_ENVIRONMENT})`);
|