@elizaos/plugin-steward-app 2.0.3-beta.5 → 2.0.3-beta.7

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 (219) hide show
  1. package/dist/ApprovalQueue.d.ts +18 -0
  2. package/dist/ApprovalQueue.d.ts.map +1 -0
  3. package/dist/ApprovalQueue.js +420 -0
  4. package/dist/ApprovalQueue.js.map +1 -0
  5. package/dist/StewardLogo.d.ts +11 -0
  6. package/dist/StewardLogo.d.ts.map +1 -0
  7. package/dist/StewardLogo.js +36 -0
  8. package/dist/StewardLogo.js.map +1 -0
  9. package/dist/StewardView.d.ts +13 -0
  10. package/dist/StewardView.d.ts.map +1 -0
  11. package/dist/StewardView.helpers.d.ts +15 -0
  12. package/dist/StewardView.helpers.d.ts.map +1 -0
  13. package/dist/StewardView.helpers.js +45 -0
  14. package/dist/StewardView.helpers.js.map +1 -0
  15. package/dist/StewardView.interact.d.ts +2 -0
  16. package/dist/StewardView.interact.d.ts.map +1 -0
  17. package/dist/StewardView.interact.js +54 -0
  18. package/dist/StewardView.interact.js.map +1 -0
  19. package/dist/StewardView.js +249 -0
  20. package/dist/StewardView.js.map +1 -0
  21. package/dist/TransactionHistory.d.ts +22 -0
  22. package/dist/TransactionHistory.d.ts.map +1 -0
  23. package/dist/TransactionHistory.js +361 -0
  24. package/dist/TransactionHistory.js.map +1 -0
  25. package/dist/__fixtures__/steward-sdk-fixtures.d.ts +10 -0
  26. package/dist/__fixtures__/steward-sdk-fixtures.d.ts.map +1 -0
  27. package/dist/__fixtures__/steward-sdk-fixtures.js +60 -0
  28. package/dist/__fixtures__/steward-sdk-fixtures.js.map +1 -0
  29. package/dist/actions/wallet-action-shared.d.ts +15 -0
  30. package/dist/actions/wallet-action-shared.d.ts.map +1 -0
  31. package/dist/actions/wallet-action-shared.js +16 -0
  32. package/dist/actions/wallet-action-shared.js.map +1 -0
  33. package/dist/api/binance-skill-helpers.d.ts +21 -0
  34. package/dist/api/binance-skill-helpers.d.ts.map +1 -0
  35. package/dist/api/binance-skill-helpers.js +790 -0
  36. package/dist/api/binance-skill-helpers.js.map +1 -0
  37. package/dist/api/bsc-trade.d.ts +36 -0
  38. package/dist/api/bsc-trade.d.ts.map +1 -0
  39. package/dist/api/bsc-trade.js +796 -0
  40. package/dist/api/bsc-trade.js.map +1 -0
  41. package/dist/api/trade-safety.d.ts +35 -0
  42. package/dist/api/trade-safety.d.ts.map +1 -0
  43. package/dist/api/trade-safety.js +56 -0
  44. package/dist/api/trade-safety.js.map +1 -0
  45. package/dist/api/tx-service.d.ts +53 -0
  46. package/dist/api/tx-service.d.ts.map +1 -0
  47. package/dist/api/tx-service.js +206 -0
  48. package/dist/api/tx-service.js.map +1 -0
  49. package/dist/api/wallet-bsc-routes.d.ts +63 -0
  50. package/dist/api/wallet-bsc-routes.d.ts.map +1 -0
  51. package/dist/api/wallet-bsc-routes.js +337 -0
  52. package/dist/api/wallet-bsc-routes.js.map +1 -0
  53. package/dist/api/wallet-capability.d.ts +2 -0
  54. package/dist/api/wallet-capability.d.ts.map +1 -0
  55. package/dist/api/wallet-capability.js +15 -0
  56. package/dist/api/wallet-capability.js.map +1 -0
  57. package/dist/api/wallet-dex-prices.d.ts +43 -0
  58. package/dist/api/wallet-dex-prices.d.ts.map +1 -0
  59. package/dist/api/wallet-dex-prices.js +132 -0
  60. package/dist/api/wallet-dex-prices.js.map +1 -0
  61. package/dist/api/wallet-evm-balance.d.ts +72 -0
  62. package/dist/api/wallet-evm-balance.d.ts.map +1 -0
  63. package/dist/api/wallet-evm-balance.js +697 -0
  64. package/dist/api/wallet-evm-balance.js.map +1 -0
  65. package/dist/api/wallet-routes.d.ts +27 -0
  66. package/dist/api/wallet-routes.d.ts.map +1 -0
  67. package/dist/api/wallet-routes.js +556 -0
  68. package/dist/api/wallet-routes.js.map +1 -0
  69. package/dist/api/wallet-rpc.d.ts +73 -0
  70. package/dist/api/wallet-rpc.d.ts.map +1 -0
  71. package/dist/api/wallet-rpc.js +460 -0
  72. package/dist/api/wallet-rpc.js.map +1 -0
  73. package/dist/api/wallet-trade-routes.d.ts +104 -0
  74. package/dist/api/wallet-trade-routes.d.ts.map +1 -0
  75. package/dist/api/wallet-trade-routes.js +353 -0
  76. package/dist/api/wallet-trade-routes.js.map +1 -0
  77. package/dist/api/wallet-trading-profile.d.ts +31 -0
  78. package/dist/api/wallet-trading-profile.d.ts.map +1 -0
  79. package/dist/api/wallet-trading-profile.js +500 -0
  80. package/dist/api/wallet-trading-profile.js.map +1 -0
  81. package/dist/api/wallet.d.ts +60 -0
  82. package/dist/api/wallet.d.ts.map +1 -0
  83. package/dist/api/wallet.js +617 -0
  84. package/dist/api/wallet.js.map +1 -0
  85. package/dist/chain-utils.d.ts +10 -0
  86. package/dist/chain-utils.d.ts.map +1 -0
  87. package/dist/chain-utils.js +81 -0
  88. package/dist/chain-utils.js.map +1 -0
  89. package/dist/components/StewardSpatialView.d.ts +74 -0
  90. package/dist/components/StewardSpatialView.d.ts.map +1 -0
  91. package/dist/components/StewardSpatialView.js +309 -0
  92. package/dist/components/StewardSpatialView.js.map +1 -0
  93. package/dist/index.d.ts +20 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +77 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/plugin.d.ts +21 -0
  98. package/dist/plugin.d.ts.map +1 -0
  99. package/dist/plugin.js +319 -0
  100. package/dist/plugin.js.map +1 -0
  101. package/dist/providers/steward-balance.d.ts +12 -0
  102. package/dist/providers/steward-balance.d.ts.map +1 -0
  103. package/dist/providers/steward-balance.js +85 -0
  104. package/dist/providers/steward-balance.js.map +1 -0
  105. package/dist/providers/steward-receive-address.d.ts +12 -0
  106. package/dist/providers/steward-receive-address.d.ts.map +1 -0
  107. package/dist/providers/steward-receive-address.js +47 -0
  108. package/dist/providers/steward-receive-address.js.map +1 -0
  109. package/dist/register-routes.d.ts +2 -0
  110. package/dist/register-routes.d.ts.map +1 -0
  111. package/dist/register-routes.js +6 -0
  112. package/dist/register-routes.js.map +1 -0
  113. package/dist/register-terminal-view.d.ts +15 -0
  114. package/dist/register-terminal-view.d.ts.map +1 -0
  115. package/dist/register-terminal-view.js +34 -0
  116. package/dist/register-terminal-view.js.map +1 -0
  117. package/dist/routes/steward-bridge.d.ts +202 -0
  118. package/dist/routes/steward-bridge.d.ts.map +1 -0
  119. package/dist/routes/steward-bridge.js +776 -0
  120. package/dist/routes/steward-bridge.js.map +1 -0
  121. package/dist/routes/steward-compat-routes.d.ts +21 -0
  122. package/dist/routes/steward-compat-routes.d.ts.map +1 -0
  123. package/dist/routes/steward-compat-routes.js +350 -0
  124. package/dist/routes/steward-compat-routes.js.map +1 -0
  125. package/dist/routes/wallet-browser-compat-routes.d.ts +6 -0
  126. package/dist/routes/wallet-browser-compat-routes.d.ts.map +1 -0
  127. package/dist/routes/wallet-browser-compat-routes.js +402 -0
  128. package/dist/routes/wallet-browser-compat-routes.js.map +1 -0
  129. package/dist/routes/wallet-bsc-core-routes.d.ts +15 -0
  130. package/dist/routes/wallet-bsc-core-routes.d.ts.map +1 -0
  131. package/dist/routes/wallet-bsc-core-routes.js +59 -0
  132. package/dist/routes/wallet-bsc-core-routes.js.map +1 -0
  133. package/dist/routes/wallet-compat-routes.d.ts +13 -0
  134. package/dist/routes/wallet-compat-routes.d.ts.map +1 -0
  135. package/dist/routes/wallet-compat-routes.js +206 -0
  136. package/dist/routes/wallet-compat-routes.js.map +1 -0
  137. package/dist/routes/wallet-core-routes.d.ts +16 -0
  138. package/dist/routes/wallet-core-routes.d.ts.map +1 -0
  139. package/dist/routes/wallet-core-routes.js +48 -0
  140. package/dist/routes/wallet-core-routes.js.map +1 -0
  141. package/dist/routes/wallet-trade-compat-routes.d.ts +11 -0
  142. package/dist/routes/wallet-trade-compat-routes.d.ts.map +1 -0
  143. package/dist/routes/wallet-trade-compat-routes.js +570 -0
  144. package/dist/routes/wallet-trade-compat-routes.js.map +1 -0
  145. package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts +7 -0
  146. package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -0
  147. package/dist/security/hydrate-wallet-keys-from-platform-store.js +43 -0
  148. package/dist/security/hydrate-wallet-keys-from-platform-store.js.map +1 -0
  149. package/dist/security/wallet-os-store-actions.d.ts +14 -0
  150. package/dist/security/wallet-os-store-actions.d.ts.map +1 -0
  151. package/dist/security/wallet-os-store-actions.js +63 -0
  152. package/dist/security/wallet-os-store-actions.js.map +1 -0
  153. package/dist/services/steward-credentials.d.ts +2 -0
  154. package/dist/services/steward-credentials.d.ts.map +1 -0
  155. package/dist/services/steward-credentials.js +2 -0
  156. package/dist/services/steward-credentials.js.map +1 -0
  157. package/dist/services/steward-evm-account.d.ts +75 -0
  158. package/dist/services/steward-evm-account.d.ts.map +1 -0
  159. package/dist/services/steward-evm-account.js +279 -0
  160. package/dist/services/steward-evm-account.js.map +1 -0
  161. package/dist/services/steward-evm-bridge.d.ts +36 -0
  162. package/dist/services/steward-evm-bridge.d.ts.map +1 -0
  163. package/dist/services/steward-evm-bridge.js +78 -0
  164. package/dist/services/steward-evm-bridge.js.map +1 -0
  165. package/dist/services/steward-sidecar/health-check.d.ts +2 -0
  166. package/dist/services/steward-sidecar/health-check.d.ts.map +1 -0
  167. package/dist/services/steward-sidecar/health-check.js +2 -0
  168. package/dist/services/steward-sidecar/health-check.js.map +1 -0
  169. package/dist/services/steward-sidecar/helpers.d.ts +2 -0
  170. package/dist/services/steward-sidecar/helpers.d.ts.map +1 -0
  171. package/dist/services/steward-sidecar/helpers.js +2 -0
  172. package/dist/services/steward-sidecar/helpers.js.map +1 -0
  173. package/dist/services/steward-sidecar/process-management.d.ts +2 -0
  174. package/dist/services/steward-sidecar/process-management.d.ts.map +1 -0
  175. package/dist/services/steward-sidecar/process-management.js +2 -0
  176. package/dist/services/steward-sidecar/process-management.js.map +1 -0
  177. package/dist/services/steward-sidecar/types.d.ts +2 -0
  178. package/dist/services/steward-sidecar/types.d.ts.map +1 -0
  179. package/dist/services/steward-sidecar/types.js +2 -0
  180. package/dist/services/steward-sidecar/types.js.map +1 -0
  181. package/dist/services/steward-sidecar/wallet-setup.d.ts +2 -0
  182. package/dist/services/steward-sidecar/wallet-setup.d.ts.map +1 -0
  183. package/dist/services/steward-sidecar/wallet-setup.js +2 -0
  184. package/dist/services/steward-sidecar/wallet-setup.js.map +1 -0
  185. package/dist/services/steward-sidecar.d.ts +2 -0
  186. package/dist/services/steward-sidecar.d.ts.map +1 -0
  187. package/dist/services/steward-sidecar.js +2 -0
  188. package/dist/services/steward-sidecar.js.map +1 -0
  189. package/dist/services/steward-wallet.d.ts +25 -0
  190. package/dist/services/steward-wallet.d.ts.map +1 -0
  191. package/dist/services/steward-wallet.js +333 -0
  192. package/dist/services/steward-wallet.js.map +1 -0
  193. package/dist/steward-ui-state.d.ts +14 -0
  194. package/dist/steward-ui-state.d.ts.map +1 -0
  195. package/dist/steward-ui-state.js +46 -0
  196. package/dist/steward-ui-state.js.map +1 -0
  197. package/dist/steward-view-bundle.d.ts +3 -0
  198. package/dist/steward-view-bundle.d.ts.map +1 -0
  199. package/dist/steward-view-bundle.js +7 -0
  200. package/dist/steward-view-bundle.js.map +1 -0
  201. package/dist/types/bsc-trade.d.ts +180 -0
  202. package/dist/types/bsc-trade.d.ts.map +1 -0
  203. package/dist/types/bsc-trade.js +1 -0
  204. package/dist/types/bsc-trade.js.map +1 -0
  205. package/dist/types/index.d.ts +3 -0
  206. package/dist/types/index.d.ts.map +1 -0
  207. package/dist/types/index.js +3 -0
  208. package/dist/types/index.js.map +1 -0
  209. package/dist/types/steward.d.ts +83 -0
  210. package/dist/types/steward.d.ts.map +1 -0
  211. package/dist/types/steward.js +1 -0
  212. package/dist/types/steward.js.map +1 -0
  213. package/dist/ui.d.ts +7 -0
  214. package/dist/ui.d.ts.map +1 -0
  215. package/dist/ui.js +7 -0
  216. package/dist/ui.js.map +1 -0
  217. package/dist/views/bundle.js +601 -0
  218. package/dist/views/bundle.js.map +1 -0
  219. package/package.json +8 -8
@@ -0,0 +1,104 @@
1
+ import type { ElizaConfig } from "@elizaos/agent";
2
+ import type { BscTradeQuoteResponse, BscUnsignedApprovalTx, BscUnsignedTradeTx, RouteRequestContext } from "@elizaos/core";
3
+ import type { ethers } from "ethers";
4
+ import type { TradePermissionMode } from "./trade-safety.js";
5
+ import type { WalletTradeLedgerRecordInput } from "./wallet-trading-profile.js";
6
+ type WalletAddresses = {
7
+ evmAddress: string | null;
8
+ solanaAddress: string | null;
9
+ };
10
+ type WalletRpcReadiness = {
11
+ bscRpcUrls: string[];
12
+ cloudManagedAccess: boolean;
13
+ };
14
+ type WalletForExecution = {
15
+ address: string;
16
+ sendTransaction: (tx: ethers.TransactionRequest) => Promise<{
17
+ hash: string;
18
+ gasLimit?: bigint;
19
+ wait: (confirmations?: number) => Promise<{
20
+ status?: number | null;
21
+ } | null>;
22
+ }>;
23
+ };
24
+ type ProviderForExecution = {
25
+ getTransactionCount: (address: string, blockTag?: "pending" | "latest") => Promise<number>;
26
+ destroy: () => void;
27
+ };
28
+ /** Result from steward signing: either a tx hash or a pending approval. */
29
+ export interface StewardSignResult {
30
+ mode: "steward";
31
+ pendingApproval: boolean;
32
+ txHash?: string;
33
+ policyResults?: Array<{
34
+ policyId?: string;
35
+ type?: string;
36
+ passed?: boolean;
37
+ reason?: string;
38
+ name?: string;
39
+ status?: string;
40
+ }>;
41
+ }
42
+ export interface WalletTradeExecuteDeps {
43
+ getWalletAddresses: () => WalletAddresses;
44
+ resolveWalletRpcReadiness: (config: ElizaConfig) => WalletRpcReadiness;
45
+ resolveTradePermissionMode: (config: ElizaConfig) => TradePermissionMode;
46
+ isAgentAutomationRequest: (req: RouteRequestContext["req"]) => boolean;
47
+ canUseLocalTradeExecution: (mode: TradePermissionMode, isAgentRequest: boolean) => boolean;
48
+ buildBscTradeQuote: (args: {
49
+ walletAddress: string | null;
50
+ rpcUrls: string[];
51
+ cloudManagedAccess: boolean;
52
+ request: {
53
+ side: "buy" | "sell";
54
+ tokenAddress: string;
55
+ amount: string;
56
+ slippageBps?: number;
57
+ routeProvider?: "auto" | "pancakeswap-v2" | "0x";
58
+ };
59
+ }) => Promise<BscTradeQuoteResponse>;
60
+ buildBscBuyUnsignedTx: (quote: BscTradeQuoteResponse, walletAddress: string | null, deadlineSeconds?: number) => BscUnsignedTradeTx;
61
+ buildBscSellUnsignedTx: (quote: BscTradeQuoteResponse, walletAddress: string | null, deadlineSeconds?: number) => BscUnsignedTradeTx;
62
+ buildBscApproveUnsignedTx: (tokenAddress: string, walletAddress: string | null, spender: string, amountWei: string) => BscUnsignedApprovalTx;
63
+ resolveBscApprovalSpender: (quote: BscTradeQuoteResponse) => string;
64
+ resolvePrimaryBscRpcUrl: (args: {
65
+ rpcUrls: string[];
66
+ cloudManagedAccess: boolean;
67
+ }) => string | null;
68
+ assertQuoteFresh: (quotedAt?: number) => void;
69
+ recordWalletTradeLedgerEntry: (input: WalletTradeLedgerRecordInput) => void;
70
+ createProvider: (rpcUrl: string) => ProviderForExecution;
71
+ createWallet: (privateKey: string, provider: ProviderForExecution) => WalletForExecution;
72
+ logger: {
73
+ warn: (message: string) => void;
74
+ error: (message: string) => void;
75
+ };
76
+ /** Return true when steward vault signing is configured (env vars present). */
77
+ isStewardConfigured?: () => boolean;
78
+ /** Sign a transaction via steward vault. Returns hash or pending approval. */
79
+ signTransactionWithSteward?: (tx: {
80
+ to: string;
81
+ value: string;
82
+ data?: string;
83
+ chainId: number;
84
+ broadcast?: boolean;
85
+ }) => Promise<StewardSignResult>;
86
+ /** Return true when the error represents a steward 403 policy rejection. */
87
+ isStewardPolicyRejection?: (error: unknown) => boolean;
88
+ /** Extract policy results from a steward rejection error. */
89
+ getStewardPolicyResults?: (error: unknown) => Array<{
90
+ policyId?: string;
91
+ name?: string;
92
+ status?: string;
93
+ reason?: string;
94
+ }>;
95
+ }
96
+ export interface WalletTradeExecuteRouteContext extends RouteRequestContext {
97
+ state: {
98
+ config: ElizaConfig;
99
+ };
100
+ deps: WalletTradeExecuteDeps;
101
+ }
102
+ export declare function handleWalletTradeExecuteRoute(ctx: WalletTradeExecuteRouteContext): Promise<boolean>;
103
+ export {};
104
+ //# sourceMappingURL=wallet-trade-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-trade-routes.d.ts","sourceRoot":"","sources":["../../src/api/wallet-trade-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,353 @@
1
+ async function handleWalletTradeExecuteRoute(ctx) {
2
+ const { req, res, method, pathname, readJsonBody, json, error, state, deps } = ctx;
3
+ if (!(method === "POST" && pathname === "/api/wallet/trade/execute")) {
4
+ return false;
5
+ }
6
+ const body = await readJsonBody(req, res);
7
+ if (!body) return true;
8
+ if (!body.side || !body.tokenAddress || !body.amount) {
9
+ error(res, "side, tokenAddress, and amount are required", 400);
10
+ return true;
11
+ }
12
+ const tradePermissionMode = deps.resolveTradePermissionMode(state.config);
13
+ const isAgentRequest = deps.isAgentAutomationRequest(req);
14
+ const hasLocalKey = Boolean(process.env.EVM_PRIVATE_KEY?.trim());
15
+ const hasStewardSigner = typeof deps.isStewardConfigured === "function" && deps.isStewardConfigured();
16
+ const canSign = hasLocalKey || hasStewardSigner;
17
+ const canExecuteLocally = deps.canUseLocalTradeExecution(
18
+ tradePermissionMode,
19
+ isAgentRequest
20
+ );
21
+ const addrs = deps.getWalletAddresses();
22
+ const walletRpcReadiness = deps.resolveWalletRpcReadiness(state.config);
23
+ try {
24
+ const quote = await deps.buildBscTradeQuote({
25
+ walletAddress: addrs.evmAddress ?? null,
26
+ rpcUrls: walletRpcReadiness.bscRpcUrls,
27
+ cloudManagedAccess: walletRpcReadiness.cloudManagedAccess,
28
+ request: {
29
+ side: body.side,
30
+ tokenAddress: body.tokenAddress,
31
+ amount: body.amount,
32
+ slippageBps: body.slippageBps,
33
+ routeProvider: body.routeProvider
34
+ }
35
+ });
36
+ const walletAddress = addrs.evmAddress ?? null;
37
+ const unsignedTx = quote.side === "buy" ? deps.buildBscBuyUnsignedTx(quote, walletAddress, body.deadlineSeconds) : deps.buildBscSellUnsignedTx(
38
+ quote,
39
+ walletAddress,
40
+ body.deadlineSeconds
41
+ );
42
+ let unsignedApprovalTx;
43
+ let requiresApproval = false;
44
+ if (quote.side === "sell" && walletAddress) {
45
+ unsignedApprovalTx = deps.buildBscApproveUnsignedTx(
46
+ quote.tokenAddress,
47
+ walletAddress,
48
+ deps.resolveBscApprovalSpender(quote),
49
+ quote.quoteIn.amountWei
50
+ );
51
+ requiresApproval = true;
52
+ }
53
+ const resolvedMode = !canSign || !canExecuteLocally ? "user-sign" : hasStewardSigner ? "steward" : "local-key";
54
+ if (!canSign || !canExecuteLocally || body.confirm !== true) {
55
+ json(res, {
56
+ ok: true,
57
+ side: quote.side,
58
+ mode: resolvedMode,
59
+ quote,
60
+ executed: false,
61
+ requiresUserSignature: true,
62
+ unsignedTx,
63
+ unsignedApprovalTx,
64
+ requiresApproval
65
+ });
66
+ return true;
67
+ }
68
+ if (hasStewardSigner && typeof deps.signTransactionWithSteward === "function") {
69
+ let approvalHash2;
70
+ if (requiresApproval && unsignedApprovalTx) {
71
+ const approvalResult = await deps.signTransactionWithSteward({
72
+ to: unsignedApprovalTx.to,
73
+ data: unsignedApprovalTx.data,
74
+ value: unsignedApprovalTx.valueWei,
75
+ chainId: unsignedApprovalTx.chainId,
76
+ broadcast: true
77
+ });
78
+ if (approvalResult.pendingApproval) {
79
+ json(res, {
80
+ ok: true,
81
+ side: quote.side,
82
+ mode: "steward",
83
+ quote,
84
+ executed: false,
85
+ requiresUserSignature: false,
86
+ unsignedTx,
87
+ unsignedApprovalTx,
88
+ requiresApproval,
89
+ approval: {
90
+ status: "pending_approval",
91
+ policyResults: approvalResult.policyResults ?? []
92
+ }
93
+ });
94
+ return true;
95
+ }
96
+ approvalHash2 = approvalResult.txHash ?? "";
97
+ const rpcUrl2 = deps.resolvePrimaryBscRpcUrl({
98
+ rpcUrls: walletRpcReadiness.bscRpcUrls,
99
+ cloudManagedAccess: walletRpcReadiness.cloudManagedAccess
100
+ });
101
+ if (rpcUrl2 && approvalHash2) {
102
+ const provider2 = deps.createProvider(rpcUrl2);
103
+ try {
104
+ const prov = provider2;
105
+ if (typeof prov.waitForTransaction === "function") {
106
+ await prov.waitForTransaction(approvalHash2, 1);
107
+ }
108
+ } finally {
109
+ provider2.destroy();
110
+ }
111
+ }
112
+ }
113
+ deps.assertQuoteFresh(quote.quotedAt);
114
+ const executionResult2 = await deps.signTransactionWithSteward({
115
+ to: unsignedTx.to,
116
+ data: unsignedTx.data,
117
+ value: unsignedTx.valueWei,
118
+ chainId: unsignedTx.chainId,
119
+ broadcast: true
120
+ });
121
+ if (executionResult2.pendingApproval) {
122
+ json(res, {
123
+ ok: true,
124
+ side: quote.side,
125
+ mode: "steward",
126
+ quote,
127
+ executed: false,
128
+ requiresUserSignature: false,
129
+ unsignedTx,
130
+ unsignedApprovalTx,
131
+ requiresApproval,
132
+ approvalHash: approvalHash2,
133
+ execution: {
134
+ status: "pending_approval",
135
+ policyResults: executionResult2.policyResults ?? []
136
+ }
137
+ });
138
+ return true;
139
+ }
140
+ const finalHash = executionResult2.txHash ?? "";
141
+ const source2 = body.source ?? "manual";
142
+ try {
143
+ deps.recordWalletTradeLedgerEntry({
144
+ hash: finalHash,
145
+ source: source2,
146
+ side: quote.side,
147
+ tokenAddress: quote.tokenAddress,
148
+ slippageBps: quote.slippageBps,
149
+ route: quote.route,
150
+ quoteIn: {
151
+ symbol: quote.quoteIn.symbol,
152
+ amount: quote.quoteIn.amount,
153
+ amountWei: quote.quoteIn.amountWei
154
+ },
155
+ quoteOut: {
156
+ symbol: quote.quoteOut.symbol,
157
+ amount: quote.quoteOut.amount,
158
+ amountWei: quote.quoteOut.amountWei
159
+ },
160
+ status: "pending",
161
+ confirmations: 0,
162
+ nonce: null,
163
+ blockNumber: null,
164
+ gasUsed: null,
165
+ effectiveGasPriceWei: null,
166
+ explorerUrl: `https://bscscan.com/tx/${finalHash}`
167
+ });
168
+ } catch (ledgerErr) {
169
+ deps.logger.warn(
170
+ `[api] Failed to record steward trade ledger entry: ${ledgerErr instanceof Error ? ledgerErr.message : ledgerErr}`
171
+ );
172
+ }
173
+ json(res, {
174
+ ok: true,
175
+ side: quote.side,
176
+ mode: "steward",
177
+ quote,
178
+ executed: true,
179
+ requiresUserSignature: false,
180
+ unsignedTx,
181
+ unsignedApprovalTx,
182
+ requiresApproval,
183
+ execution: {
184
+ hash: finalHash,
185
+ nonce: null,
186
+ gasLimit: "0",
187
+ valueWei: unsignedTx.valueWei,
188
+ explorerUrl: `https://bscscan.com/tx/${finalHash}`,
189
+ blockNumber: null,
190
+ status: "pending",
191
+ approvalHash: approvalHash2
192
+ }
193
+ });
194
+ return true;
195
+ }
196
+ const rpcUrl = deps.resolvePrimaryBscRpcUrl({
197
+ rpcUrls: walletRpcReadiness.bscRpcUrls,
198
+ cloudManagedAccess: walletRpcReadiness.cloudManagedAccess
199
+ });
200
+ if (!rpcUrl) {
201
+ error(res, "BSC RPC not configured for local execution.", 503);
202
+ return true;
203
+ }
204
+ const evmKey = process.env.EVM_PRIVATE_KEY ?? "";
205
+ const provider = deps.createProvider(rpcUrl);
206
+ const wallet = deps.createWallet(
207
+ evmKey.startsWith("0x") ? evmKey : `0x${evmKey}`,
208
+ provider
209
+ );
210
+ deps.assertQuoteFresh(quote.quotedAt);
211
+ const nonce = await provider.getTransactionCount(wallet.address, "pending");
212
+ let approvalHash;
213
+ if (requiresApproval && unsignedApprovalTx) {
214
+ const approvalTxReq = {
215
+ to: unsignedApprovalTx.to,
216
+ data: unsignedApprovalTx.data,
217
+ value: BigInt(unsignedApprovalTx.valueWei),
218
+ chainId: unsignedApprovalTx.chainId,
219
+ nonce
220
+ };
221
+ const approvalResponse = await wallet.sendTransaction(approvalTxReq);
222
+ approvalHash = approvalResponse.hash;
223
+ const approvalReceipt = await approvalResponse.wait(1);
224
+ if (!approvalReceipt || approvalReceipt.status === 0) {
225
+ throw new Error("Token approval transaction reverted on-chain");
226
+ }
227
+ }
228
+ const tradeNonce = requiresApproval ? await provider.getTransactionCount(wallet.address, "pending") : nonce;
229
+ const tradeTxReq = {
230
+ to: unsignedTx.to,
231
+ data: unsignedTx.data,
232
+ value: BigInt(unsignedTx.valueWei),
233
+ chainId: unsignedTx.chainId,
234
+ nonce: tradeNonce
235
+ };
236
+ const tradeTxResponse = await wallet.sendTransaction(tradeTxReq);
237
+ const executionResult = {
238
+ hash: tradeTxResponse.hash,
239
+ nonce: tradeNonce,
240
+ gasLimit: tradeTxResponse.gasLimit?.toString() ?? "0",
241
+ valueWei: unsignedTx.valueWei,
242
+ explorerUrl: `https://bscscan.com/tx/${tradeTxResponse.hash}`,
243
+ blockNumber: null,
244
+ status: "submitted",
245
+ approvalHash
246
+ };
247
+ const source = body.source ?? "manual";
248
+ try {
249
+ deps.recordWalletTradeLedgerEntry({
250
+ hash: tradeTxResponse.hash,
251
+ source,
252
+ side: quote.side,
253
+ tokenAddress: quote.tokenAddress,
254
+ slippageBps: quote.slippageBps,
255
+ route: quote.route,
256
+ quoteIn: {
257
+ symbol: quote.quoteIn.symbol,
258
+ amount: quote.quoteIn.amount,
259
+ amountWei: quote.quoteIn.amountWei
260
+ },
261
+ quoteOut: {
262
+ symbol: quote.quoteOut.symbol,
263
+ amount: quote.quoteOut.amount,
264
+ amountWei: quote.quoteOut.amountWei
265
+ },
266
+ status: "pending",
267
+ confirmations: 0,
268
+ nonce: tradeNonce,
269
+ blockNumber: null,
270
+ gasUsed: null,
271
+ effectiveGasPriceWei: null,
272
+ explorerUrl: executionResult.explorerUrl
273
+ });
274
+ } catch (ledgerErr) {
275
+ deps.logger.warn(
276
+ `[api] Failed to record trade ledger entry (attempt 1): ${ledgerErr instanceof Error ? ledgerErr.message : ledgerErr}`
277
+ );
278
+ try {
279
+ deps.recordWalletTradeLedgerEntry({
280
+ hash: tradeTxResponse.hash,
281
+ source,
282
+ side: quote.side,
283
+ tokenAddress: quote.tokenAddress,
284
+ slippageBps: quote.slippageBps,
285
+ route: quote.route,
286
+ quoteIn: {
287
+ symbol: quote.quoteIn.symbol,
288
+ amount: quote.quoteIn.amount,
289
+ amountWei: quote.quoteIn.amountWei
290
+ },
291
+ quoteOut: {
292
+ symbol: quote.quoteOut.symbol,
293
+ amount: quote.quoteOut.amount,
294
+ amountWei: quote.quoteOut.amountWei
295
+ },
296
+ status: "pending",
297
+ confirmations: 0,
298
+ nonce: tradeNonce,
299
+ blockNumber: null,
300
+ gasUsed: null,
301
+ effectiveGasPriceWei: null,
302
+ explorerUrl: executionResult.explorerUrl
303
+ });
304
+ } catch (retryErr) {
305
+ deps.logger.error(
306
+ `[api] Ledger entry retry also failed: ${retryErr instanceof Error ? retryErr.message : retryErr}`
307
+ );
308
+ }
309
+ }
310
+ provider.destroy();
311
+ json(res, {
312
+ ok: true,
313
+ side: quote.side,
314
+ mode: "local-key",
315
+ quote,
316
+ executed: true,
317
+ requiresUserSignature: false,
318
+ unsignedTx,
319
+ unsignedApprovalTx,
320
+ requiresApproval,
321
+ execution: executionResult
322
+ });
323
+ } catch (err) {
324
+ if (typeof deps.isStewardPolicyRejection === "function" && deps.isStewardPolicyRejection(err)) {
325
+ const policyResults = typeof deps.getStewardPolicyResults === "function" ? deps.getStewardPolicyResults(err) : [];
326
+ json(res, {
327
+ ok: false,
328
+ mode: "steward",
329
+ executed: false,
330
+ requiresUserSignature: false,
331
+ error: err instanceof Error ? err.message : "Policy rejected",
332
+ execution: {
333
+ status: "rejected",
334
+ policyResults
335
+ }
336
+ });
337
+ return true;
338
+ }
339
+ deps.logger.error(
340
+ `[api] BSC trade execute failed: ${err instanceof Error ? err.message : err}`
341
+ );
342
+ error(
343
+ res,
344
+ `Trade execution failed: ${err instanceof Error ? err.message : "unknown error"}`,
345
+ 500
346
+ );
347
+ }
348
+ return true;
349
+ }
350
+ export {
351
+ handleWalletTradeExecuteRoute
352
+ };
353
+ //# sourceMappingURL=wallet-trade-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/api/wallet-trade-routes.ts"],"sourcesContent":["import type { ElizaConfig } from \"@elizaos/agent\";\nimport type {\n BscTradeQuoteResponse,\n BscUnsignedApprovalTx,\n BscUnsignedTradeTx,\n RouteRequestContext,\n} from \"@elizaos/core\";\nimport type { ethers } from \"ethers\";\nimport type { TradePermissionMode } from \"./trade-safety.js\";\nimport type { WalletTradeLedgerRecordInput } from \"./wallet-trading-profile.js\";\n\ntype WalletAddresses = {\n evmAddress: string | null;\n solanaAddress: string | null;\n};\n\ntype WalletRpcReadiness = {\n bscRpcUrls: string[];\n cloudManagedAccess: boolean;\n};\n\ntype WalletForExecution = {\n address: string;\n sendTransaction: (tx: ethers.TransactionRequest) => Promise<{\n hash: string;\n gasLimit?: bigint;\n wait: (\n confirmations?: number,\n ) => Promise<{ status?: number | null } | null>;\n }>;\n};\n\ntype ProviderForExecution = {\n getTransactionCount: (\n address: string,\n blockTag?: \"pending\" | \"latest\",\n ) => Promise<number>;\n destroy: () => void;\n};\n\n/** Result from steward signing: either a tx hash or a pending approval. */\nexport interface StewardSignResult {\n mode: \"steward\";\n pendingApproval: boolean;\n txHash?: string;\n policyResults?: Array<{\n policyId?: string;\n type?: string;\n passed?: boolean;\n reason?: string;\n name?: string;\n status?: string;\n }>;\n}\n\nexport interface WalletTradeExecuteDeps {\n getWalletAddresses: () => WalletAddresses;\n resolveWalletRpcReadiness: (config: ElizaConfig) => WalletRpcReadiness;\n resolveTradePermissionMode: (config: ElizaConfig) => TradePermissionMode;\n isAgentAutomationRequest: (req: RouteRequestContext[\"req\"]) => boolean;\n canUseLocalTradeExecution: (\n mode: TradePermissionMode,\n isAgentRequest: boolean,\n ) => boolean;\n buildBscTradeQuote: (args: {\n walletAddress: string | null;\n rpcUrls: string[];\n cloudManagedAccess: boolean;\n request: {\n side: \"buy\" | \"sell\";\n tokenAddress: string;\n amount: string;\n slippageBps?: number;\n routeProvider?: \"auto\" | \"pancakeswap-v2\" | \"0x\";\n };\n }) => Promise<BscTradeQuoteResponse>;\n buildBscBuyUnsignedTx: (\n quote: BscTradeQuoteResponse,\n walletAddress: string | null,\n deadlineSeconds?: number,\n ) => BscUnsignedTradeTx;\n buildBscSellUnsignedTx: (\n quote: BscTradeQuoteResponse,\n walletAddress: string | null,\n deadlineSeconds?: number,\n ) => BscUnsignedTradeTx;\n buildBscApproveUnsignedTx: (\n tokenAddress: string,\n walletAddress: string | null,\n spender: string,\n amountWei: string,\n ) => BscUnsignedApprovalTx;\n resolveBscApprovalSpender: (quote: BscTradeQuoteResponse) => string;\n resolvePrimaryBscRpcUrl: (args: {\n rpcUrls: string[];\n cloudManagedAccess: boolean;\n }) => string | null;\n assertQuoteFresh: (quotedAt?: number) => void;\n recordWalletTradeLedgerEntry: (input: WalletTradeLedgerRecordInput) => void;\n createProvider: (rpcUrl: string) => ProviderForExecution;\n createWallet: (\n privateKey: string,\n provider: ProviderForExecution,\n ) => WalletForExecution;\n logger: {\n warn: (message: string) => void;\n error: (message: string) => void;\n };\n /** Return true when steward vault signing is configured (env vars present). */\n isStewardConfigured?: () => boolean;\n /** Sign a transaction via steward vault. Returns hash or pending approval. */\n signTransactionWithSteward?: (tx: {\n to: string;\n value: string;\n data?: string;\n chainId: number;\n broadcast?: boolean;\n }) => Promise<StewardSignResult>;\n /** Return true when the error represents a steward 403 policy rejection. */\n isStewardPolicyRejection?: (error: unknown) => boolean;\n /** Extract policy results from a steward rejection error. */\n getStewardPolicyResults?: (error: unknown) => Array<{\n policyId?: string;\n name?: string;\n status?: string;\n reason?: string;\n }>;\n}\n\nexport interface WalletTradeExecuteRouteContext extends RouteRequestContext {\n state: {\n config: ElizaConfig;\n };\n deps: WalletTradeExecuteDeps;\n}\n\nexport async function handleWalletTradeExecuteRoute(\n ctx: WalletTradeExecuteRouteContext,\n): Promise<boolean> {\n const { req, res, method, pathname, readJsonBody, json, error, state, deps } =\n ctx;\n\n if (!(method === \"POST\" && pathname === \"/api/wallet/trade/execute\")) {\n return false;\n }\n\n const body = await readJsonBody<{\n side?: string;\n tokenAddress?: string;\n amount?: string;\n slippageBps?: number;\n routeProvider?: \"auto\" | \"pancakeswap-v2\" | \"0x\";\n deadlineSeconds?: number;\n confirm?: boolean;\n source?: \"agent\" | \"manual\";\n }>(req, res);\n if (!body) return true;\n\n if (!body.side || !body.tokenAddress || !body.amount) {\n error(res, \"side, tokenAddress, and amount are required\", 400);\n return true;\n }\n\n const tradePermissionMode = deps.resolveTradePermissionMode(state.config);\n const isAgentRequest = deps.isAgentAutomationRequest(req);\n const hasLocalKey = Boolean(process.env.EVM_PRIVATE_KEY?.trim());\n const hasStewardSigner =\n typeof deps.isStewardConfigured === \"function\" &&\n deps.isStewardConfigured();\n const canSign = hasLocalKey || hasStewardSigner;\n const canExecuteLocally = deps.canUseLocalTradeExecution(\n tradePermissionMode,\n isAgentRequest,\n );\n const addrs = deps.getWalletAddresses();\n const walletRpcReadiness = deps.resolveWalletRpcReadiness(state.config);\n\n try {\n const quote = await deps.buildBscTradeQuote({\n walletAddress: addrs.evmAddress ?? null,\n rpcUrls: walletRpcReadiness.bscRpcUrls,\n cloudManagedAccess: walletRpcReadiness.cloudManagedAccess,\n request: {\n side: body.side as \"buy\" | \"sell\",\n tokenAddress: body.tokenAddress,\n amount: body.amount,\n slippageBps: body.slippageBps,\n routeProvider: body.routeProvider,\n },\n });\n\n const walletAddress = addrs.evmAddress ?? null;\n const unsignedTx =\n quote.side === \"buy\"\n ? deps.buildBscBuyUnsignedTx(quote, walletAddress, body.deadlineSeconds)\n : deps.buildBscSellUnsignedTx(\n quote,\n walletAddress,\n body.deadlineSeconds,\n );\n\n let unsignedApprovalTx: BscUnsignedApprovalTx | undefined;\n let requiresApproval = false;\n if (quote.side === \"sell\" && walletAddress) {\n unsignedApprovalTx = deps.buildBscApproveUnsignedTx(\n quote.tokenAddress,\n walletAddress,\n deps.resolveBscApprovalSpender(quote),\n quote.quoteIn.amountWei,\n );\n requiresApproval = true;\n }\n\n // Resolve execution mode\n const resolvedMode: \"local-key\" | \"steward\" | \"user-sign\" =\n !canSign || !canExecuteLocally\n ? \"user-sign\"\n : hasStewardSigner\n ? \"steward\"\n : \"local-key\";\n\n if (!canSign || !canExecuteLocally || body.confirm !== true) {\n json(res, {\n ok: true,\n side: quote.side,\n mode: resolvedMode,\n quote,\n executed: false,\n requiresUserSignature: true,\n unsignedTx,\n unsignedApprovalTx,\n requiresApproval,\n });\n return true;\n }\n\n // ── Steward signing path ──────────────────────────────────────────────\n if (\n hasStewardSigner &&\n typeof deps.signTransactionWithSteward === \"function\"\n ) {\n let approvalHash: string | undefined;\n\n // Handle token approval for sell orders via steward\n if (requiresApproval && unsignedApprovalTx) {\n const approvalResult = await deps.signTransactionWithSteward({\n to: unsignedApprovalTx.to,\n data: unsignedApprovalTx.data,\n value: unsignedApprovalTx.valueWei,\n chainId: unsignedApprovalTx.chainId,\n broadcast: true,\n });\n\n if (approvalResult.pendingApproval) {\n json(res, {\n ok: true,\n side: quote.side,\n mode: \"steward\" as const,\n quote,\n executed: false,\n requiresUserSignature: false,\n unsignedTx,\n unsignedApprovalTx,\n requiresApproval,\n approval: {\n status: \"pending_approval\",\n policyResults: approvalResult.policyResults ?? [],\n },\n });\n return true;\n }\n\n approvalHash = approvalResult.txHash ?? \"\";\n\n // Wait for approval confirmation if RPC is available\n const rpcUrl = deps.resolvePrimaryBscRpcUrl({\n rpcUrls: walletRpcReadiness.bscRpcUrls,\n cloudManagedAccess: walletRpcReadiness.cloudManagedAccess,\n });\n if (rpcUrl && approvalHash) {\n const provider = deps.createProvider(rpcUrl);\n try {\n const prov = provider as {\n waitForTransaction?: (\n hash: string,\n confirmations?: number,\n ) => Promise<unknown>;\n };\n if (typeof prov.waitForTransaction === \"function\") {\n await prov.waitForTransaction(approvalHash, 1);\n }\n } finally {\n provider.destroy();\n }\n }\n }\n\n // Execute the main swap via steward\n deps.assertQuoteFresh(quote.quotedAt);\n\n const executionResult = await deps.signTransactionWithSteward({\n to: unsignedTx.to,\n data: unsignedTx.data,\n value: unsignedTx.valueWei,\n chainId: unsignedTx.chainId,\n broadcast: true,\n });\n\n if (executionResult.pendingApproval) {\n json(res, {\n ok: true,\n side: quote.side,\n mode: \"steward\" as const,\n quote,\n executed: false,\n requiresUserSignature: false,\n unsignedTx,\n unsignedApprovalTx,\n requiresApproval,\n approvalHash,\n execution: {\n status: \"pending_approval\",\n policyResults: executionResult.policyResults ?? [],\n },\n });\n return true;\n }\n\n const finalHash = executionResult.txHash ?? \"\";\n const source = body.source ?? \"manual\";\n\n try {\n deps.recordWalletTradeLedgerEntry({\n hash: finalHash,\n source,\n side: quote.side,\n tokenAddress: quote.tokenAddress,\n slippageBps: quote.slippageBps,\n route: quote.route,\n quoteIn: {\n symbol: quote.quoteIn.symbol,\n amount: quote.quoteIn.amount,\n amountWei: quote.quoteIn.amountWei,\n },\n quoteOut: {\n symbol: quote.quoteOut.symbol,\n amount: quote.quoteOut.amount,\n amountWei: quote.quoteOut.amountWei,\n },\n status: \"pending\",\n confirmations: 0,\n nonce: null,\n blockNumber: null,\n gasUsed: null,\n effectiveGasPriceWei: null,\n explorerUrl: `https://bscscan.com/tx/${finalHash}`,\n });\n } catch (ledgerErr) {\n deps.logger.warn(\n `[api] Failed to record steward trade ledger entry: ${\n ledgerErr instanceof Error ? ledgerErr.message : ledgerErr\n }`,\n );\n }\n\n json(res, {\n ok: true,\n side: quote.side,\n mode: \"steward\" as const,\n quote,\n executed: true,\n requiresUserSignature: false,\n unsignedTx,\n unsignedApprovalTx,\n requiresApproval,\n execution: {\n hash: finalHash,\n nonce: null,\n gasLimit: \"0\",\n valueWei: unsignedTx.valueWei,\n explorerUrl: `https://bscscan.com/tx/${finalHash}`,\n blockNumber: null,\n status: \"pending\",\n approvalHash,\n },\n });\n\n return true;\n }\n\n // ── Local key signing path ────────────────────────────────────────────\n const rpcUrl = deps.resolvePrimaryBscRpcUrl({\n rpcUrls: walletRpcReadiness.bscRpcUrls,\n cloudManagedAccess: walletRpcReadiness.cloudManagedAccess,\n });\n if (!rpcUrl) {\n error(res, \"BSC RPC not configured for local execution.\", 503);\n return true;\n }\n\n const evmKey = process.env.EVM_PRIVATE_KEY ?? \"\";\n const provider = deps.createProvider(rpcUrl);\n const wallet = deps.createWallet(\n evmKey.startsWith(\"0x\") ? evmKey : `0x${evmKey}`,\n provider,\n );\n\n deps.assertQuoteFresh(quote.quotedAt);\n\n const nonce = await provider.getTransactionCount(wallet.address, \"pending\");\n let approvalHash: string | undefined;\n\n if (requiresApproval && unsignedApprovalTx) {\n const approvalTxReq: ethers.TransactionRequest = {\n to: unsignedApprovalTx.to,\n data: unsignedApprovalTx.data,\n value: BigInt(unsignedApprovalTx.valueWei),\n chainId: unsignedApprovalTx.chainId,\n nonce,\n };\n const approvalResponse = await wallet.sendTransaction(approvalTxReq);\n approvalHash = approvalResponse.hash;\n const approvalReceipt = await approvalResponse.wait(1);\n if (!approvalReceipt || approvalReceipt.status === 0) {\n throw new Error(\"Token approval transaction reverted on-chain\");\n }\n }\n\n const tradeNonce = requiresApproval\n ? await provider.getTransactionCount(wallet.address, \"pending\")\n : nonce;\n\n const tradeTxReq: ethers.TransactionRequest = {\n to: unsignedTx.to,\n data: unsignedTx.data,\n value: BigInt(unsignedTx.valueWei),\n chainId: unsignedTx.chainId,\n nonce: tradeNonce,\n };\n const tradeTxResponse = await wallet.sendTransaction(tradeTxReq);\n\n const executionResult = {\n hash: tradeTxResponse.hash,\n nonce: tradeNonce,\n gasLimit: tradeTxResponse.gasLimit?.toString() ?? \"0\",\n valueWei: unsignedTx.valueWei,\n explorerUrl: `https://bscscan.com/tx/${tradeTxResponse.hash}`,\n blockNumber: null as number | null,\n status: \"submitted\" as \"submitted\" | \"success\",\n approvalHash,\n };\n\n const source = body.source ?? \"manual\";\n try {\n deps.recordWalletTradeLedgerEntry({\n hash: tradeTxResponse.hash,\n source,\n side: quote.side,\n tokenAddress: quote.tokenAddress,\n slippageBps: quote.slippageBps,\n route: quote.route,\n quoteIn: {\n symbol: quote.quoteIn.symbol,\n amount: quote.quoteIn.amount,\n amountWei: quote.quoteIn.amountWei,\n },\n quoteOut: {\n symbol: quote.quoteOut.symbol,\n amount: quote.quoteOut.amount,\n amountWei: quote.quoteOut.amountWei,\n },\n status: \"pending\",\n confirmations: 0,\n nonce: tradeNonce,\n blockNumber: null,\n gasUsed: null,\n effectiveGasPriceWei: null,\n explorerUrl: executionResult.explorerUrl,\n });\n } catch (ledgerErr) {\n deps.logger.warn(\n `[api] Failed to record trade ledger entry (attempt 1): ${\n ledgerErr instanceof Error ? ledgerErr.message : ledgerErr\n }`,\n );\n try {\n deps.recordWalletTradeLedgerEntry({\n hash: tradeTxResponse.hash,\n source,\n side: quote.side,\n tokenAddress: quote.tokenAddress,\n slippageBps: quote.slippageBps,\n route: quote.route,\n quoteIn: {\n symbol: quote.quoteIn.symbol,\n amount: quote.quoteIn.amount,\n amountWei: quote.quoteIn.amountWei,\n },\n quoteOut: {\n symbol: quote.quoteOut.symbol,\n amount: quote.quoteOut.amount,\n amountWei: quote.quoteOut.amountWei,\n },\n status: \"pending\",\n confirmations: 0,\n nonce: tradeNonce,\n blockNumber: null,\n gasUsed: null,\n effectiveGasPriceWei: null,\n explorerUrl: executionResult.explorerUrl,\n });\n } catch (retryErr) {\n deps.logger.error(\n `[api] Ledger entry retry also failed: ${\n retryErr instanceof Error ? retryErr.message : retryErr\n }`,\n );\n }\n }\n\n provider.destroy();\n\n json(res, {\n ok: true,\n side: quote.side,\n mode: \"local-key\",\n quote,\n executed: true,\n requiresUserSignature: false,\n unsignedTx,\n unsignedApprovalTx,\n requiresApproval,\n execution: executionResult,\n });\n } catch (err) {\n // Handle steward policy rejections with structured response\n if (\n typeof deps.isStewardPolicyRejection === \"function\" &&\n deps.isStewardPolicyRejection(err)\n ) {\n const policyResults =\n typeof deps.getStewardPolicyResults === \"function\"\n ? deps.getStewardPolicyResults(err)\n : [];\n\n json(res, {\n ok: false,\n mode: \"steward\" as const,\n executed: false,\n requiresUserSignature: false,\n error: err instanceof Error ? err.message : \"Policy rejected\",\n execution: {\n status: \"rejected\",\n policyResults,\n },\n });\n return true;\n }\n\n deps.logger.error(\n `[api] BSC trade execute failed: ${err instanceof Error ? err.message : err}`,\n );\n error(\n res,\n `Trade execution failed: ${err instanceof Error ? err.message : \"unknown error\"}`,\n 500,\n );\n }\n\n return true;\n}\n"],"mappings":"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","names":["approvalHash","rpcUrl","provider","executionResult","source"]}
@@ -0,0 +1,31 @@
1
+ import type { BscTradeTxStatus, WalletTradeLedgerEntry, WalletTradeLedgerRecordInput, WalletTradingProfileResponse, WalletTradingProfileSourceFilter, WalletTradingProfileWindow } from "@elizaos/core";
2
+ interface WalletTradeLedgerStore {
3
+ version: 1;
4
+ updatedAt: string;
5
+ entries: WalletTradeLedgerEntry[];
6
+ }
7
+ export type { WalletTradeLedgerRecordInput };
8
+ export interface WalletTradeLedgerStatusPatch {
9
+ status: BscTradeTxStatus;
10
+ confirmations: number;
11
+ nonce: number | null;
12
+ blockNumber: number | null;
13
+ gasUsed: string | null;
14
+ effectiveGasPriceWei: string | null;
15
+ reason?: string;
16
+ explorerUrl?: string;
17
+ updatedAt?: string;
18
+ }
19
+ export interface WalletTradingProfileOptions {
20
+ window?: WalletTradingProfileWindow;
21
+ source?: WalletTradingProfileSourceFilter;
22
+ stateDir?: string;
23
+ }
24
+ export declare function resolveWalletTradingProfileFilePath(stateDir?: string): string;
25
+ export declare function readWalletTradeLedgerStore(stateDir?: string): WalletTradeLedgerStore;
26
+ export declare function writeWalletTradeLedgerStore(store: WalletTradeLedgerStore, stateDir?: string): WalletTradeLedgerStore;
27
+ export declare function recordWalletTradeLedgerEntry(input: WalletTradeLedgerRecordInput, stateDir?: string): WalletTradeLedgerEntry;
28
+ export declare function updateWalletTradeLedgerEntryStatus(hash: string, patch: WalletTradeLedgerStatusPatch, stateDir?: string): WalletTradeLedgerEntry | null;
29
+ export declare function buildWalletTradingProfile(entries: WalletTradeLedgerEntry[], options?: Pick<WalletTradingProfileOptions, "window" | "source">): WalletTradingProfileResponse;
30
+ export declare function loadWalletTradingProfile(options?: WalletTradingProfileOptions): WalletTradingProfileResponse;
31
+ //# sourceMappingURL=wallet-trading-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-trading-profile.d.ts","sourceRoot":"","sources":["../../src/api/wallet-trading-profile.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gBAAgB,EAChB,sBAAsB,EAEtB,4BAA4B,EAG5B,4BAA4B,EAC5B,gCAAgC,EAEhC,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAOvB,UAAU,sBAAsB;IAC9B,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAED,YAAY,EAAE,4BAA4B,EAAE,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,gCAAgC,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgPD,wBAAgB,mCAAmC,CACjD,QAAQ,GAAE,MAA0B,GACnC,MAAM,CAER;AAED,wBAAgB,0BAA0B,CACxC,QAAQ,GAAE,MAA0B,GACnC,sBAAsB,CAyBxB;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,sBAAsB,EAC7B,QAAQ,GAAE,MAA0B,GACnC,sBAAsB,CASxB;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,4BAA4B,EACnC,QAAQ,GAAE,MAA0B,GACnC,sBAAsB,CAgDxB;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,4BAA4B,EACnC,QAAQ,GAAE,MAA0B,GACnC,sBAAsB,GAAG,IAAI,CA6C/B;AA0ED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,sBAAsB,EAAE,EACjC,OAAO,GAAE,IAAI,CAAC,2BAA2B,EAAE,QAAQ,GAAG,QAAQ,CAAM,GACnE,4BAA4B,CA+K9B;AAED,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,2BAAgC,GACxC,4BAA4B,CAG9B"}