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.
- package/.env.example +64 -26
- package/README.md +333 -445
- package/dist/cli.d.ts +5 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +124 -98
- package/dist/cli.js.map +1 -1
- package/dist/demo.d.ts +1 -1
- package/dist/demo.js +171 -171
- package/dist/index.d.ts +2 -2
- package/dist/index.js +138 -87
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +1 -1
- package/dist/init.js +65 -65
- 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 +291 -291
- package/dist/lib/constants.js +292 -292
- package/dist/lib/dodoApi.d.ts +78 -70
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +196 -178
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/http.d.ts +14 -14
- package/dist/lib/http.js +118 -118
- package/dist/lib/pharosClient.d.ts +58 -58
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +63 -53
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +53 -53
- package/dist/lib/policy/actionPolicyEngine.js +212 -212
- package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
- package/dist/lib/riskEngine.d.ts +26 -26
- package/dist/lib/riskEngine.js +283 -283
- package/dist/lib/signer/index.d.ts +24 -24
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +88 -89
- 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/testDodoLive.d.ts +1 -1
- package/dist/lib/testDodoLive.js +104 -104
- package/dist/lib/testLiveSafehands.d.ts +1 -1
- package/dist/lib/testLiveSafehands.js +92 -92
- package/dist/lib/testRpc.d.ts +1 -1
- package/dist/lib/testRpc.js +29 -29
- package/dist/lib/testRpcLive.d.ts +1 -1
- package/dist/lib/testRpcLive.js +88 -88
- package/dist/lib/testTools.d.ts +1 -1
- package/dist/lib/testTools.js +397 -397
- package/dist/lib/testX402Live.d.ts +1 -1
- package/dist/lib/testX402Live.js +159 -159
- package/dist/lib/toolResponse.d.ts +25 -25
- package/dist/lib/toolResponse.js +53 -53
- package/dist/lib/wallet/index.d.ts +37 -18
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +128 -70
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/scripts/checkDeploy.d.ts +1 -1
- package/dist/scripts/checkDeploy.js +24 -24
- package/dist/scripts/deployRegistry.d.ts +1 -1
- package/dist/scripts/deployRegistry.js +100 -100
- package/dist/scripts/testRegistry.d.ts +1 -1
- package/dist/scripts/testRegistry.js +43 -43
- package/dist/tools/approveToken.d.ts +45 -46
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +85 -83
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +79 -79
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +104 -93
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +43 -36
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +56 -42
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +46 -46
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +95 -88
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +26 -26
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +58 -59
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +79 -79
- package/dist/tools/estimateGas.js +124 -124
- package/dist/tools/executeSwap.d.ts +61 -59
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +141 -129
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +29 -29
- package/dist/tools/explainRisk.js +32 -32
- package/dist/tools/getAgentWallet.d.ts +21 -21
- package/dist/tools/getAgentWallet.js +27 -27
- package/dist/tools/getAgentWalletBalance.d.ts +11 -11
- package/dist/tools/getAgentWalletBalance.js +70 -70
- package/dist/tools/getExecutionHistory.d.ts +49 -51
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +154 -93
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +43 -43
- package/dist/tools/getGasPrice.js +59 -59
- package/dist/tools/getPoolInfo.d.ts +75 -75
- package/dist/tools/getPoolInfo.js +137 -137
- package/dist/tools/getTokenPrice.d.ts +113 -113
- package/dist/tools/getTokenPrice.js +117 -117
- package/dist/tools/getTransactionStatus.d.ts +43 -57
- package/dist/tools/getTransactionStatus.d.ts.map +1 -1
- package/dist/tools/getTransactionStatus.js +59 -67
- package/dist/tools/getTransactionStatus.js.map +1 -1
- package/dist/tools/getWalletBalance.d.ts +68 -68
- package/dist/tools/getWalletBalance.js +87 -87
- package/dist/tools/publishRiskScore.d.ts +63 -63
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +88 -85
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryRiskRegistry.d.ts +38 -48
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +55 -60
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +77 -77
- package/dist/tools/safehandsPreflightCheck.js +47 -47
- package/dist/tools/safehandsRiskReport.d.ts +81 -81
- package/dist/tools/safehandsRiskReport.js +28 -28
- package/dist/tools/safehandsSafeExecute.d.ts +20 -20
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +81 -75
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +14 -14
- package/dist/tools/safehandsWalletHealth.js +103 -103
- package/dist/tools/safehandsX402Preflight.d.ts +26 -26
- package/dist/tools/safehandsX402Preflight.js +65 -65
- package/dist/tools/sendPayment.d.ts +57 -58
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +117 -108
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/simulateTransaction.d.ts +60 -81
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +83 -88
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +26 -26
- package/dist/tools/tokenRegistryStatus.js +96 -96
- package/dist/tools/x402PayAndFetch.d.ts +81 -81
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +152 -149
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/x402Server.d.ts +1 -1
- package/dist/x402Server.js +252 -252
- package/examples/dashboard/index.html +337 -0
- package/package.json +83 -82
- package/skill/SKILL.md +133 -133
package/dist/lib/dodoApi.d.ts
CHANGED
|
@@ -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
|
-
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
*
|
|
39
|
-
*/
|
|
40
|
-
export declare function
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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,
|
|
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"}
|
package/dist/lib/dodoApi.js
CHANGED
|
@@ -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
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
const
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
url
|
|
80
|
-
url.searchParams.set("
|
|
81
|
-
url.searchParams.set("
|
|
82
|
-
url.searchParams.set("
|
|
83
|
-
url.searchParams.set("
|
|
84
|
-
url.searchParams.set("
|
|
85
|
-
url.searchParams.set("
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
//
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
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
|
package/dist/lib/dodoApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,kEAAkE;AAClE,2BAA2B;AAC3B,2EAA2E;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EACL,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dodoApi.js","sourceRoot":"","sources":["../../src/lib/dodoApi.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/http.d.ts
CHANGED
|
@@ -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
|