safehands-pharos 1.2.6 → 1.4.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 (153) hide show
  1. package/.env.example +64 -26
  2. package/README.md +333 -445
  3. package/dist/cli.d.ts +5 -5
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +124 -98
  6. package/dist/cli.js.map +1 -1
  7. package/dist/demo.d.ts +1 -1
  8. package/dist/demo.js +171 -171
  9. package/dist/index.d.ts +2 -2
  10. package/dist/index.js +138 -87
  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/auditLog.d.ts +9 -0
  15. package/dist/lib/auditLog.d.ts.map +1 -0
  16. package/dist/lib/auditLog.js +30 -0
  17. package/dist/lib/auditLog.js.map +1 -0
  18. package/dist/lib/constants.d.ts +291 -291
  19. package/dist/lib/constants.js +292 -292
  20. package/dist/lib/dodoApi.d.ts +78 -70
  21. package/dist/lib/dodoApi.d.ts.map +1 -1
  22. package/dist/lib/dodoApi.js +196 -178
  23. package/dist/lib/dodoApi.js.map +1 -1
  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.d.ts.map +1 -1
  28. package/dist/lib/pharosClient.js +63 -53
  29. package/dist/lib/pharosClient.js.map +1 -1
  30. package/dist/lib/policy/actionPolicyEngine.d.ts +53 -53
  31. package/dist/lib/policy/actionPolicyEngine.js +212 -212
  32. package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
  33. package/dist/lib/riskEngine.d.ts +26 -26
  34. package/dist/lib/riskEngine.js +283 -283
  35. package/dist/lib/signer/index.d.ts +24 -24
  36. package/dist/lib/signer/index.d.ts.map +1 -1
  37. package/dist/lib/signer/index.js +88 -89
  38. package/dist/lib/signer/index.js.map +1 -1
  39. package/dist/lib/spendAccumulator.d.ts +10 -0
  40. package/dist/lib/spendAccumulator.d.ts.map +1 -0
  41. package/dist/lib/spendAccumulator.js +54 -0
  42. package/dist/lib/spendAccumulator.js.map +1 -0
  43. package/dist/lib/testDodoLive.d.ts +1 -1
  44. package/dist/lib/testDodoLive.js +104 -104
  45. package/dist/lib/testLiveSafehands.d.ts +1 -1
  46. package/dist/lib/testLiveSafehands.js +92 -92
  47. package/dist/lib/testRpc.d.ts +1 -1
  48. package/dist/lib/testRpc.js +29 -29
  49. package/dist/lib/testRpcLive.d.ts +1 -1
  50. package/dist/lib/testRpcLive.js +88 -88
  51. package/dist/lib/testTools.d.ts +1 -1
  52. package/dist/lib/testTools.js +397 -397
  53. package/dist/lib/testX402Live.d.ts +1 -1
  54. package/dist/lib/testX402Live.js +159 -159
  55. package/dist/lib/toolResponse.d.ts +25 -25
  56. package/dist/lib/toolResponse.js +53 -53
  57. package/dist/lib/wallet/index.d.ts +37 -18
  58. package/dist/lib/wallet/index.d.ts.map +1 -1
  59. package/dist/lib/wallet/index.js +128 -70
  60. package/dist/lib/wallet/index.js.map +1 -1
  61. package/dist/scripts/checkDeploy.d.ts +1 -1
  62. package/dist/scripts/checkDeploy.js +24 -24
  63. package/dist/scripts/deployRegistry.d.ts +1 -1
  64. package/dist/scripts/deployRegistry.js +100 -100
  65. package/dist/scripts/testRegistry.d.ts +1 -1
  66. package/dist/scripts/testRegistry.js +43 -43
  67. package/dist/tools/approveToken.d.ts +45 -46
  68. package/dist/tools/approveToken.d.ts.map +1 -1
  69. package/dist/tools/approveToken.js +85 -83
  70. package/dist/tools/approveToken.js.map +1 -1
  71. package/dist/tools/assessRisk.d.ts +79 -79
  72. package/dist/tools/assessRisk.d.ts.map +1 -1
  73. package/dist/tools/assessRisk.js +104 -93
  74. package/dist/tools/assessRisk.js.map +1 -1
  75. package/dist/tools/checkAllowance.d.ts +43 -36
  76. package/dist/tools/checkAllowance.d.ts.map +1 -1
  77. package/dist/tools/checkAllowance.js +56 -42
  78. package/dist/tools/checkAllowance.js.map +1 -1
  79. package/dist/tools/checkTokenSecurity.d.ts +46 -46
  80. package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
  81. package/dist/tools/checkTokenSecurity.js +95 -88
  82. package/dist/tools/checkTokenSecurity.js.map +1 -1
  83. package/dist/tools/createAgentWallet.d.ts +26 -26
  84. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  85. package/dist/tools/createAgentWallet.js +58 -59
  86. package/dist/tools/createAgentWallet.js.map +1 -1
  87. package/dist/tools/estimateGas.d.ts +79 -79
  88. package/dist/tools/estimateGas.js +124 -124
  89. package/dist/tools/executeSwap.d.ts +61 -59
  90. package/dist/tools/executeSwap.d.ts.map +1 -1
  91. package/dist/tools/executeSwap.js +141 -129
  92. package/dist/tools/executeSwap.js.map +1 -1
  93. package/dist/tools/explainRisk.d.ts +29 -29
  94. package/dist/tools/explainRisk.js +32 -32
  95. package/dist/tools/getAgentWallet.d.ts +21 -21
  96. package/dist/tools/getAgentWallet.js +27 -27
  97. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  98. package/dist/tools/getAgentWalletBalance.js +70 -70
  99. package/dist/tools/getExecutionHistory.d.ts +49 -51
  100. package/dist/tools/getExecutionHistory.d.ts.map +1 -1
  101. package/dist/tools/getExecutionHistory.js +154 -93
  102. package/dist/tools/getExecutionHistory.js.map +1 -1
  103. package/dist/tools/getGasPrice.d.ts +43 -43
  104. package/dist/tools/getGasPrice.js +59 -59
  105. package/dist/tools/getPoolInfo.d.ts +75 -75
  106. package/dist/tools/getPoolInfo.js +137 -137
  107. package/dist/tools/getTokenPrice.d.ts +113 -113
  108. package/dist/tools/getTokenPrice.js +117 -117
  109. package/dist/tools/getTransactionStatus.d.ts +43 -57
  110. package/dist/tools/getTransactionStatus.d.ts.map +1 -1
  111. package/dist/tools/getTransactionStatus.js +59 -67
  112. package/dist/tools/getTransactionStatus.js.map +1 -1
  113. package/dist/tools/getWalletBalance.d.ts +68 -68
  114. package/dist/tools/getWalletBalance.js +87 -87
  115. package/dist/tools/publishRiskScore.d.ts +63 -63
  116. package/dist/tools/publishRiskScore.d.ts.map +1 -1
  117. package/dist/tools/publishRiskScore.js +88 -85
  118. package/dist/tools/publishRiskScore.js.map +1 -1
  119. package/dist/tools/queryRiskRegistry.d.ts +38 -48
  120. package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
  121. package/dist/tools/queryRiskRegistry.js +55 -60
  122. package/dist/tools/queryRiskRegistry.js.map +1 -1
  123. package/dist/tools/safehandsPreflightCheck.d.ts +77 -77
  124. package/dist/tools/safehandsPreflightCheck.js +47 -47
  125. package/dist/tools/safehandsRiskReport.d.ts +81 -81
  126. package/dist/tools/safehandsRiskReport.js +28 -28
  127. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  128. package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
  129. package/dist/tools/safehandsSafeExecute.js +81 -75
  130. package/dist/tools/safehandsSafeExecute.js.map +1 -1
  131. package/dist/tools/safehandsWalletHealth.d.ts +14 -14
  132. package/dist/tools/safehandsWalletHealth.js +103 -103
  133. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  134. package/dist/tools/safehandsX402Preflight.js +65 -65
  135. package/dist/tools/sendPayment.d.ts +57 -58
  136. package/dist/tools/sendPayment.d.ts.map +1 -1
  137. package/dist/tools/sendPayment.js +117 -108
  138. package/dist/tools/sendPayment.js.map +1 -1
  139. package/dist/tools/simulateTransaction.d.ts +60 -81
  140. package/dist/tools/simulateTransaction.d.ts.map +1 -1
  141. package/dist/tools/simulateTransaction.js +83 -88
  142. package/dist/tools/simulateTransaction.js.map +1 -1
  143. package/dist/tools/tokenRegistryStatus.d.ts +26 -26
  144. package/dist/tools/tokenRegistryStatus.js +96 -96
  145. package/dist/tools/x402PayAndFetch.d.ts +81 -81
  146. package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
  147. package/dist/tools/x402PayAndFetch.js +152 -149
  148. package/dist/tools/x402PayAndFetch.js.map +1 -1
  149. package/dist/x402Server.d.ts +1 -1
  150. package/dist/x402Server.js +252 -252
  151. package/examples/dashboard/index.html +337 -0
  152. package/package.json +83 -82
  153. package/skill/SKILL.md +133 -133
@@ -1,71 +1,79 @@
1
- export interface DodoRouteResponse {
2
- status: number;
3
- data: {
4
- resAmount: string | number;
5
- priceImpact: string | number;
6
- targetDecimals: number;
7
- targetApproveAddr: string;
8
- to: string;
9
- data: string;
10
- value: string | number;
11
- gasLimit: string | number;
12
- } | null;
13
- message?: string;
14
- }
15
- export interface DodoQuote {
16
- amountOut: string;
17
- amountOutWei: string;
18
- priceImpact: number;
19
- gasLimit: string;
20
- value: string;
21
- calldata: string;
22
- to: string;
23
- approveAddress: string;
24
- routeAvailable: boolean;
25
- sourceStatus: "ok" | "no_route_available" | "auth_required" | "unavailable";
26
- usedApiKey: boolean;
27
- rawResponse: DodoRouteResponse;
28
- }
29
- /**
30
- * Resolves a token symbol (e.g. "PHRS") or address to its on-chain address.
31
- */
32
- export declare function resolveTokenAddress(token: string): `0x${string}`;
33
- /**
34
- * Resolves the decimal count for a token symbol or address.
35
- */
36
- export declare function resolveTokenDecimals(token: string): number;
37
- /**
38
- * Converts a human-readable amount to wei string.
39
- */
40
- export declare function toWei(amount: string, decimals: number): string;
41
- /**
42
- * Converts a wei string to human-readable amount.
43
- * Also handles the case where the API returns a decimal string directly.
44
- */
45
- export declare function fromWei(weiInput: string | number, decimals: number): string;
46
- /**
47
- * Fetches a swap route from the DODO aggregation API.
48
- */
49
- export declare function _getDodoRouteCore(params: {
50
- fromToken: string;
51
- toToken: string;
52
- amountHuman: string;
53
- walletAddress: string;
54
- slippage?: number;
55
- }): Promise<DodoQuote>;
56
- /**
57
- * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
58
- * (like Circle USDC) if the canonical tokens have no liquidity on the testnet.
59
- */
60
- export declare function getDodoRoute(params: {
61
- fromToken: string;
62
- toToken: string;
63
- amountHuman: string;
64
- walletAddress: string;
65
- slippage?: number;
66
- }): Promise<DodoQuote>;
67
- /**
68
- * Checks whether a token is the native PHRS token.
69
- */
70
- export declare function isNativeToken(token: string): boolean;
1
+ export interface DodoRouteResponse {
2
+ status: number;
3
+ data: {
4
+ resAmount: string | number;
5
+ priceImpact: string | number;
6
+ targetDecimals: number;
7
+ targetApproveAddr: string;
8
+ to: string;
9
+ data: string;
10
+ value: string | number;
11
+ gasLimit: string | number;
12
+ } | null;
13
+ message?: string;
14
+ }
15
+ export interface DodoQuote {
16
+ amountOut: string;
17
+ amountOutWei: string;
18
+ priceImpact: number;
19
+ gasLimit: string;
20
+ value: string;
21
+ calldata: string;
22
+ to: string;
23
+ approveAddress: string;
24
+ routeAvailable: boolean;
25
+ sourceStatus: "ok" | "no_route_available" | "auth_required" | "unavailable";
26
+ usedApiKey: boolean;
27
+ /** Actual on-chain address used for fromToken (may differ from input if USDC fallback triggered) */
28
+ usedFromToken: string;
29
+ /** Actual on-chain address used for toToken (may differ from input if USDC fallback triggered) */
30
+ usedToToken: string;
31
+ /** True when a silent token substitution occurred (e.g. canonical USDC → altUSDC) */
32
+ wasSubstituted: boolean;
33
+ /** Human-readable explanation when wasSubstituted is true */
34
+ substitutionNote?: string;
35
+ rawResponse: DodoRouteResponse;
36
+ }
37
+ /**
38
+ * Resolves a token symbol (e.g. "PHRS") or address to its on-chain address.
39
+ */
40
+ export declare function resolveTokenAddress(token: string): `0x${string}`;
41
+ /**
42
+ * Resolves the decimal count for a token symbol or address.
43
+ */
44
+ export declare function resolveTokenDecimals(token: string): number;
45
+ /**
46
+ * Converts a human-readable amount to wei string.
47
+ */
48
+ export declare function toWei(amount: string, decimals: number): string;
49
+ /**
50
+ * Converts a wei string to human-readable amount.
51
+ * Also handles the case where the API returns a decimal string directly.
52
+ */
53
+ export declare function fromWei(weiInput: string | number, decimals: number): string;
54
+ /**
55
+ * Fetches a swap route from the DODO aggregation API.
56
+ */
57
+ export declare function _getDodoRouteCore(params: {
58
+ fromToken: string;
59
+ toToken: string;
60
+ amountHuman: string;
61
+ walletAddress: string;
62
+ slippage?: number;
63
+ }): Promise<DodoQuote>;
64
+ /**
65
+ * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
66
+ * (like Circle USDC) if the canonical tokens have no liquidity on the testnet.
67
+ */
68
+ export declare function getDodoRoute(params: {
69
+ fromToken: string;
70
+ toToken: string;
71
+ amountHuman: string;
72
+ walletAddress: string;
73
+ slippage?: number;
74
+ }): Promise<DodoQuote>;
75
+ /**
76
+ * Checks whether a token is the native PHRS token.
77
+ */
78
+ export declare function isNativeToken(token: string): boolean;
71
79
  //# sourceMappingURL=dodoApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dodoApi.d.ts","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;KAC3B,GAAG,IAAI,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,IAAI,GAAG,oBAAoB,GAAG,eAAe,GAAG,aAAa,CAAC;IAC5E,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAKhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3E;AAID;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CA6FrB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAqBrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD"}
1
+ {"version":3,"file":"dodoApi.d.ts","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;QAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;KAC3B,GAAG,IAAI,CAAC;IACT,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,IAAI,GAAG,oBAAoB,GAAG,eAAe,GAAG,aAAa,CAAC;IAC5E,UAAU,EAAE,OAAO,CAAC;IACpB,oGAAoG;IACpG,aAAa,EAAE,MAAM,CAAC;IACtB,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,cAAc,EAAE,OAAO,CAAC;IACxB,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,iBAAiB,CAAC;CAChC;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,CAKhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAO9D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAU3E;AAID;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAqGrB;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAiCrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAIpD"}
@@ -1,179 +1,197 @@
1
- // ─── DODO Route API Client ─────────────────────────────────────────────
2
- // Fetches swap routes from DODO's aggregation API for FaroSwap on
3
- // Pharos Atlantic Testnet.
4
- // ────────────────────────────────────────────────────────────────────────
5
- import { isAddress } from "viem";
6
- import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID, TOKEN_MAP, TOKEN_DECIMALS, PHRS_ADDRESS, USDC_ADDRESS, CIRCLE_USDC_ADDRESS, } from "./constants.js";
7
- import { fetchWithTimeoutAndRetry } from "./http.js";
8
- // ─── Helpers ───────────────────────────────────────────────────────────
9
- /**
10
- * Resolves a token symbol (e.g. "PHRS") or address to its on-chain address.
11
- */
12
- export function resolveTokenAddress(token) {
13
- const upper = token.toUpperCase();
14
- if (TOKEN_MAP[upper])
15
- return TOKEN_MAP[upper];
16
- if (isAddress(token))
17
- return token;
18
- throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
19
- }
20
- /**
21
- * Resolves the decimal count for a token symbol or address.
22
- */
23
- export function resolveTokenDecimals(token) {
24
- const upper = token.toUpperCase();
25
- if (TOKEN_DECIMALS[upper] !== undefined)
26
- return TOKEN_DECIMALS[upper];
27
- const lower = token.toLowerCase();
28
- if (TOKEN_DECIMALS[lower] !== undefined)
29
- return TOKEN_DECIMALS[lower];
30
- return 18; // unknown custom token fallback
31
- }
32
- /**
33
- * Converts a human-readable amount to wei string.
34
- */
35
- export function toWei(amount, decimals) {
36
- if (!/^\d+(\.\d+)?$/.test(amount)) {
37
- throw new Error(`INVALID_AMOUNT: ${amount}`);
38
- }
39
- const [whole, frac = ""] = amount.split(".");
40
- const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
41
- return BigInt(whole + paddedFrac).toString();
42
- }
43
- /**
44
- * Converts a wei string to human-readable amount.
45
- * Also handles the case where the API returns a decimal string directly.
46
- */
47
- export function fromWei(weiInput, decimals) {
48
- const weiStr = String(weiInput);
49
- if (weiStr.includes("."))
50
- return weiStr;
51
- const wei = BigInt(weiStr);
52
- const divisor = BigInt(10) ** BigInt(decimals);
53
- const whole = wei / divisor;
54
- const remainder = wei % divisor;
55
- if (remainder === 0n)
56
- return whole.toString();
57
- const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
58
- return `${whole}.${fracStr}`;
59
- }
60
- // ─── DODO Route Fetch ──────────────────────────────────────────────────
61
- /**
62
- * Fetches a swap route from the DODO aggregation API.
63
- */
64
- export async function _getDodoRouteCore(params) {
65
- const trimmedApiKey = DODO_API_KEY?.trim();
66
- const usedApiKey = Boolean(trimmedApiKey);
67
- if (!isAddress(params.walletAddress)) {
68
- throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
69
- }
70
- const fromAddress = resolveTokenAddress(params.fromToken);
71
- const toAddress = resolveTokenAddress(params.toToken);
72
- const fromDecimals = resolveTokenDecimals(params.fromToken);
73
- const toDecimals = resolveTokenDecimals(params.toToken);
74
- const amountInWei = toWei(params.amountHuman, fromDecimals);
75
- const slippage = params.slippage ?? DODO_DEFAULT_SLIPPAGE;
76
- const deadline = Math.floor(Date.now() / 1000) + 600;
77
- const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
78
- url.searchParams.set("chainId", String(CHAIN_ID));
79
- url.searchParams.set("fromTokenAddress", fromAddress);
80
- url.searchParams.set("toTokenAddress", toAddress);
81
- url.searchParams.set("fromAmount", amountInWei);
82
- url.searchParams.set("userAddr", params.walletAddress);
83
- url.searchParams.set("slippage", String(slippage));
84
- url.searchParams.set("source", "dodoV2AndMixWasm");
85
- url.searchParams.set("estimateGas", "true");
86
- // DODO/FaroSwap read-only route queries should prefer public mode when no
87
- // API key is configured. Never hardcode a default credential. If the
88
- // provider rejects public mode, surface a structured auth-required error
89
- // at the tool layer.
90
- if (trimmedApiKey) {
91
- url.searchParams.set("apikey", trimmedApiKey);
92
- }
93
- url.searchParams.set("deadLine", String(deadline));
94
- const response = await fetchWithTimeoutAndRetry(url, {
95
- timeoutMs: 10_000,
96
- retries: 2,
97
- retryDelayMs: 300,
98
- });
99
- if (!response.ok) {
100
- if (response.status === 401 || response.status === 403) {
101
- throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
102
- }
103
- if (response.status === 429) {
104
- throw new Error(`DODO_API_RATE_LIMITED: ${response.status} ${response.statusText}`);
105
- }
106
- throw new Error(`DODO_API_UNAVAILABLE: ${response.status} ${response.statusText}`);
107
- }
108
- const json = (await response.json());
109
- if (!json.data || json.status !== 200) {
110
- const message = (json.message || "").toLowerCase();
111
- if (message.includes("api key") || message.includes("apikey") || message.includes("unauthorized") || message.includes("forbidden")) {
112
- throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
113
- }
114
- return {
115
- amountOut: "0",
116
- amountOutWei: "0",
117
- priceImpact: 100,
118
- gasLimit: "0",
119
- value: "0",
120
- calldata: "0x",
121
- to: "",
122
- approveAddress: "",
123
- routeAvailable: false,
124
- sourceStatus: "no_route_available",
125
- usedApiKey,
126
- rawResponse: json,
127
- };
128
- }
129
- const d = json.data;
130
- const resAmountStr = String(d.resAmount);
131
- return {
132
- amountOut: fromWei(resAmountStr, toDecimals),
133
- amountOutWei: resAmountStr,
134
- priceImpact: parseFloat(String(d.priceImpact)) || 0,
135
- gasLimit: String(d.gasLimit),
136
- value: String(d.value),
137
- calldata: d.data,
138
- to: d.to,
139
- approveAddress: d.targetApproveAddr,
140
- routeAvailable: true,
141
- sourceStatus: "ok",
142
- usedApiKey,
143
- rawResponse: json,
144
- };
145
- }
146
- /**
147
- * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
148
- * (like Circle USDC) if the canonical tokens have no liquidity on the testnet.
149
- */
150
- export async function getDodoRoute(params) {
151
- let quote = await _getDodoRouteCore(params);
152
- if (!quote.routeAvailable) {
153
- const fromUpper = params.fromToken.toUpperCase();
154
- const toUpper = params.toToken.toUpperCase();
155
- // Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
156
- if (toUpper === "USDC" || toUpper === USDC_ADDRESS.toUpperCase()) {
157
- const fallbackQuote = await _getDodoRouteCore({ ...params, toToken: CIRCLE_USDC_ADDRESS });
158
- if (fallbackQuote.routeAvailable)
159
- return fallbackQuote;
160
- }
161
- // Smart Fallback: If swapping FROM canonical USDC failed, try Alternate Circle USDC
162
- if (fromUpper === "USDC" || fromUpper === USDC_ADDRESS.toUpperCase()) {
163
- const fallbackQuote = await _getDodoRouteCore({ ...params, fromToken: CIRCLE_USDC_ADDRESS });
164
- if (fallbackQuote.routeAvailable)
165
- return fallbackQuote;
166
- }
167
- }
168
- return quote;
169
- }
170
- /**
171
- * Checks whether a token is the native PHRS token.
172
- */
173
- export function isNativeToken(token) {
174
- const upper = token.toUpperCase();
175
- if (upper === "PHRS")
176
- return true;
177
- return token.toLowerCase() === PHRS_ADDRESS.toLowerCase();
178
- }
1
+ // ─── DODO Route API Client ─────────────────────────────────────────────
2
+ // Fetches swap routes from DODO's aggregation API for FaroSwap on
3
+ // Pharos Atlantic Testnet.
4
+ // ────────────────────────────────────────────────────────────────────────
5
+ import { isAddress } from "viem";
6
+ import { DODO_API_BASE, DODO_API_KEY, DODO_DEFAULT_SLIPPAGE, DODO_ROUTE_ENDPOINT, CHAIN_ID, TOKEN_MAP, TOKEN_DECIMALS, PHRS_ADDRESS, USDC_ADDRESS, CIRCLE_USDC_ADDRESS, } from "./constants.js";
7
+ import { fetchWithTimeoutAndRetry } from "./http.js";
8
+ // ─── Helpers ───────────────────────────────────────────────────────────
9
+ /**
10
+ * Resolves a token symbol (e.g. "PHRS") or address to its on-chain address.
11
+ */
12
+ export function resolveTokenAddress(token) {
13
+ const upper = token.toUpperCase();
14
+ if (TOKEN_MAP[upper])
15
+ return TOKEN_MAP[upper];
16
+ if (isAddress(token))
17
+ return token;
18
+ throw new Error(`INVALID_TOKEN_ADDRESS: Unknown token or invalid address: ${token}`);
19
+ }
20
+ /**
21
+ * Resolves the decimal count for a token symbol or address.
22
+ */
23
+ export function resolveTokenDecimals(token) {
24
+ const upper = token.toUpperCase();
25
+ if (TOKEN_DECIMALS[upper] !== undefined)
26
+ return TOKEN_DECIMALS[upper];
27
+ const lower = token.toLowerCase();
28
+ if (TOKEN_DECIMALS[lower] !== undefined)
29
+ return TOKEN_DECIMALS[lower];
30
+ return 18; // unknown custom token fallback
31
+ }
32
+ /**
33
+ * Converts a human-readable amount to wei string.
34
+ */
35
+ export function toWei(amount, decimals) {
36
+ if (!/^\d+(\.\d+)?$/.test(amount)) {
37
+ throw new Error(`INVALID_AMOUNT: ${amount}`);
38
+ }
39
+ const [whole, frac = ""] = amount.split(".");
40
+ const paddedFrac = frac.padEnd(decimals, "0").slice(0, decimals);
41
+ return BigInt(whole + paddedFrac).toString();
42
+ }
43
+ /**
44
+ * Converts a wei string to human-readable amount.
45
+ * Also handles the case where the API returns a decimal string directly.
46
+ */
47
+ export function fromWei(weiInput, decimals) {
48
+ const weiStr = String(weiInput);
49
+ if (weiStr.includes("."))
50
+ return weiStr;
51
+ const wei = BigInt(weiStr);
52
+ const divisor = BigInt(10) ** BigInt(decimals);
53
+ const whole = wei / divisor;
54
+ const remainder = wei % divisor;
55
+ if (remainder === 0n)
56
+ return whole.toString();
57
+ const fracStr = remainder.toString().padStart(decimals, "0").replace(/0+$/, "");
58
+ return `${whole}.${fracStr}`;
59
+ }
60
+ // ─── DODO Route Fetch ──────────────────────────────────────────────────
61
+ /**
62
+ * Fetches a swap route from the DODO aggregation API.
63
+ */
64
+ export async function _getDodoRouteCore(params) {
65
+ const trimmedApiKey = DODO_API_KEY?.trim();
66
+ const usedApiKey = Boolean(trimmedApiKey);
67
+ if (!isAddress(params.walletAddress)) {
68
+ throw new Error(`INVALID_WALLET_ADDRESS: ${params.walletAddress}`);
69
+ }
70
+ const fromAddress = resolveTokenAddress(params.fromToken);
71
+ const toAddress = resolveTokenAddress(params.toToken);
72
+ const usedFromToken = fromAddress;
73
+ const usedToToken = toAddress;
74
+ const fromDecimals = resolveTokenDecimals(params.fromToken);
75
+ const toDecimals = resolveTokenDecimals(params.toToken);
76
+ const amountInWei = toWei(params.amountHuman, fromDecimals);
77
+ const slippage = params.slippage ?? DODO_DEFAULT_SLIPPAGE;
78
+ const deadline = Math.floor(Date.now() / 1000) + 600;
79
+ const url = new URL(`${DODO_API_BASE}${DODO_ROUTE_ENDPOINT}`);
80
+ url.searchParams.set("chainId", String(CHAIN_ID));
81
+ url.searchParams.set("fromTokenAddress", fromAddress);
82
+ url.searchParams.set("toTokenAddress", toAddress);
83
+ url.searchParams.set("fromAmount", amountInWei);
84
+ url.searchParams.set("userAddr", params.walletAddress);
85
+ url.searchParams.set("slippage", String(slippage));
86
+ url.searchParams.set("source", "dodoV2AndMixWasm");
87
+ url.searchParams.set("estimateGas", "true");
88
+ // DODO/FaroSwap read-only route queries should prefer public mode when no
89
+ // API key is configured. Never hardcode a default credential. If the
90
+ // provider rejects public mode, surface a structured auth-required error
91
+ // at the tool layer.
92
+ if (trimmedApiKey) {
93
+ url.searchParams.set("apikey", trimmedApiKey);
94
+ }
95
+ url.searchParams.set("deadLine", String(deadline));
96
+ const response = await fetchWithTimeoutAndRetry(url, {
97
+ timeoutMs: 10_000,
98
+ retries: 2,
99
+ retryDelayMs: 300,
100
+ });
101
+ if (!response.ok) {
102
+ if (response.status === 401 || response.status === 403) {
103
+ throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
104
+ }
105
+ if (response.status === 429) {
106
+ throw new Error(`DODO_API_RATE_LIMITED: ${response.status} ${response.statusText}`);
107
+ }
108
+ throw new Error(`DODO_API_UNAVAILABLE: ${response.status} ${response.statusText}`);
109
+ }
110
+ const json = (await response.json());
111
+ if (!json.data || json.status !== 200) {
112
+ const message = (json.message || "").toLowerCase();
113
+ if (message.includes("api key") || message.includes("apikey") || message.includes("unauthorized") || message.includes("forbidden")) {
114
+ throw new Error(`DODO_API_AUTH_REQUIRED: DODO route API rejected public mode${usedApiKey ? " or provided key" : "; configure DODO_API_KEY if this endpoint requires authentication"}`);
115
+ }
116
+ return {
117
+ amountOut: "0",
118
+ amountOutWei: "0",
119
+ priceImpact: 100,
120
+ gasLimit: "0",
121
+ value: "0",
122
+ calldata: "0x",
123
+ to: "",
124
+ approveAddress: "",
125
+ routeAvailable: false,
126
+ sourceStatus: "no_route_available",
127
+ usedApiKey,
128
+ usedFromToken,
129
+ usedToToken,
130
+ wasSubstituted: false,
131
+ rawResponse: json,
132
+ };
133
+ }
134
+ const d = json.data;
135
+ const resAmountStr = String(d.resAmount);
136
+ return {
137
+ amountOut: fromWei(resAmountStr, toDecimals),
138
+ amountOutWei: resAmountStr,
139
+ priceImpact: parseFloat(String(d.priceImpact)) || 0,
140
+ gasLimit: String(d.gasLimit),
141
+ value: String(d.value),
142
+ calldata: d.data,
143
+ to: d.to,
144
+ approveAddress: d.targetApproveAddr,
145
+ routeAvailable: true,
146
+ sourceStatus: "ok",
147
+ usedApiKey,
148
+ usedFromToken,
149
+ usedToToken,
150
+ wasSubstituted: false,
151
+ rawResponse: json,
152
+ };
153
+ }
154
+ /**
155
+ * Smart wrapper around _getDodoRouteCore that automatically falls back to alternative token sources
156
+ * (like Circle USDC) if the canonical tokens have no liquidity on the testnet.
157
+ */
158
+ export async function getDodoRoute(params) {
159
+ let quote = await _getDodoRouteCore(params);
160
+ if (!quote.routeAvailable) {
161
+ const fromUpper = params.fromToken.toUpperCase();
162
+ const toUpper = params.toToken.toUpperCase();
163
+ // Smart Fallback: If swapping TO canonical USDC failed, try Alternate Circle USDC
164
+ if (toUpper === "USDC" || toUpper === USDC_ADDRESS.toUpperCase()) {
165
+ const fallbackQuote = await _getDodoRouteCore({ ...params, toToken: CIRCLE_USDC_ADDRESS });
166
+ if (fallbackQuote.routeAvailable) {
167
+ return {
168
+ ...fallbackQuote,
169
+ wasSubstituted: true,
170
+ substitutionNote: `toToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your approval targets the correct address.`,
171
+ };
172
+ }
173
+ }
174
+ // Smart Fallback: If swapping FROM canonical USDC failed, try Alternate Circle USDC
175
+ if (fromUpper === "USDC" || fromUpper === USDC_ADDRESS.toUpperCase()) {
176
+ const fallbackQuote = await _getDodoRouteCore({ ...params, fromToken: CIRCLE_USDC_ADDRESS });
177
+ if (fallbackQuote.routeAvailable) {
178
+ return {
179
+ ...fallbackQuote,
180
+ wasSubstituted: true,
181
+ substitutionNote: `fromToken substituted: canonical USDC (${USDC_ADDRESS}) had no route; used altUSDC (${CIRCLE_USDC_ADDRESS}). Ensure your allowance covers the correct address.`,
182
+ };
183
+ }
184
+ }
185
+ }
186
+ return quote;
187
+ }
188
+ /**
189
+ * Checks whether a token is the native PHRS token.
190
+ */
191
+ export function isNativeToken(token) {
192
+ const upper = token.toUpperCase();
193
+ if (upper === "PHRS")
194
+ return true;
195
+ return token.toLowerCase() === PHRS_ADDRESS.toLowerCase();
196
+ }
179
197
  //# sourceMappingURL=dodoApi.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
- export declare class HttpError extends Error {
2
- readonly status?: number | undefined;
3
- readonly statusText?: string | undefined;
4
- constructor(message: string, status?: number | undefined, statusText?: string | undefined);
5
- }
6
- export interface FetchWithRetryOptions extends RequestInit {
7
- timeoutMs?: number;
8
- retries?: number;
9
- retryDelayMs?: number;
10
- }
11
- export declare function fetchWithTimeoutAndRetry(url: string | URL, options?: FetchWithRetryOptions): Promise<Response>;
12
- export declare function redactSensitive(value: unknown): unknown;
13
- export declare function isBlockedIp(ip: string): boolean;
14
- export declare function assertSafeFetchUrl(rawUrl: string): Promise<void>;
1
+ export declare class HttpError extends Error {
2
+ readonly status?: number | undefined;
3
+ readonly statusText?: string | undefined;
4
+ constructor(message: string, status?: number | undefined, statusText?: string | undefined);
5
+ }
6
+ export interface FetchWithRetryOptions extends RequestInit {
7
+ timeoutMs?: number;
8
+ retries?: number;
9
+ retryDelayMs?: number;
10
+ }
11
+ export declare function fetchWithTimeoutAndRetry(url: string | URL, options?: FetchWithRetryOptions): Promise<Response>;
12
+ export declare function redactSensitive(value: unknown): unknown;
13
+ export declare function isBlockedIp(ip: string): boolean;
14
+ export declare function assertSafeFetchUrl(rawUrl: string): Promise<void>;
15
15
  //# sourceMappingURL=http.d.ts.map