@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.
- package/dist/ApprovalQueue.d.ts +18 -0
- package/dist/ApprovalQueue.d.ts.map +1 -0
- package/dist/ApprovalQueue.js +420 -0
- package/dist/ApprovalQueue.js.map +1 -0
- package/dist/StewardLogo.d.ts +11 -0
- package/dist/StewardLogo.d.ts.map +1 -0
- package/dist/StewardLogo.js +36 -0
- package/dist/StewardLogo.js.map +1 -0
- package/dist/StewardView.d.ts +13 -0
- package/dist/StewardView.d.ts.map +1 -0
- package/dist/StewardView.helpers.d.ts +15 -0
- package/dist/StewardView.helpers.d.ts.map +1 -0
- package/dist/StewardView.helpers.js +45 -0
- package/dist/StewardView.helpers.js.map +1 -0
- package/dist/StewardView.interact.d.ts +2 -0
- package/dist/StewardView.interact.d.ts.map +1 -0
- package/dist/StewardView.interact.js +54 -0
- package/dist/StewardView.interact.js.map +1 -0
- package/dist/StewardView.js +249 -0
- package/dist/StewardView.js.map +1 -0
- package/dist/TransactionHistory.d.ts +22 -0
- package/dist/TransactionHistory.d.ts.map +1 -0
- package/dist/TransactionHistory.js +361 -0
- package/dist/TransactionHistory.js.map +1 -0
- package/dist/__fixtures__/steward-sdk-fixtures.d.ts +10 -0
- package/dist/__fixtures__/steward-sdk-fixtures.d.ts.map +1 -0
- package/dist/__fixtures__/steward-sdk-fixtures.js +60 -0
- package/dist/__fixtures__/steward-sdk-fixtures.js.map +1 -0
- package/dist/actions/wallet-action-shared.d.ts +15 -0
- package/dist/actions/wallet-action-shared.d.ts.map +1 -0
- package/dist/actions/wallet-action-shared.js +16 -0
- package/dist/actions/wallet-action-shared.js.map +1 -0
- package/dist/api/binance-skill-helpers.d.ts +21 -0
- package/dist/api/binance-skill-helpers.d.ts.map +1 -0
- package/dist/api/binance-skill-helpers.js +790 -0
- package/dist/api/binance-skill-helpers.js.map +1 -0
- package/dist/api/bsc-trade.d.ts +36 -0
- package/dist/api/bsc-trade.d.ts.map +1 -0
- package/dist/api/bsc-trade.js +796 -0
- package/dist/api/bsc-trade.js.map +1 -0
- package/dist/api/trade-safety.d.ts +35 -0
- package/dist/api/trade-safety.d.ts.map +1 -0
- package/dist/api/trade-safety.js +56 -0
- package/dist/api/trade-safety.js.map +1 -0
- package/dist/api/tx-service.d.ts +53 -0
- package/dist/api/tx-service.d.ts.map +1 -0
- package/dist/api/tx-service.js +206 -0
- package/dist/api/tx-service.js.map +1 -0
- package/dist/api/wallet-bsc-routes.d.ts +63 -0
- package/dist/api/wallet-bsc-routes.d.ts.map +1 -0
- package/dist/api/wallet-bsc-routes.js +337 -0
- package/dist/api/wallet-bsc-routes.js.map +1 -0
- package/dist/api/wallet-capability.d.ts +2 -0
- package/dist/api/wallet-capability.d.ts.map +1 -0
- package/dist/api/wallet-capability.js +15 -0
- package/dist/api/wallet-capability.js.map +1 -0
- package/dist/api/wallet-dex-prices.d.ts +43 -0
- package/dist/api/wallet-dex-prices.d.ts.map +1 -0
- package/dist/api/wallet-dex-prices.js +132 -0
- package/dist/api/wallet-dex-prices.js.map +1 -0
- package/dist/api/wallet-evm-balance.d.ts +72 -0
- package/dist/api/wallet-evm-balance.d.ts.map +1 -0
- package/dist/api/wallet-evm-balance.js +697 -0
- package/dist/api/wallet-evm-balance.js.map +1 -0
- package/dist/api/wallet-routes.d.ts +27 -0
- package/dist/api/wallet-routes.d.ts.map +1 -0
- package/dist/api/wallet-routes.js +556 -0
- package/dist/api/wallet-routes.js.map +1 -0
- package/dist/api/wallet-rpc.d.ts +73 -0
- package/dist/api/wallet-rpc.d.ts.map +1 -0
- package/dist/api/wallet-rpc.js +460 -0
- package/dist/api/wallet-rpc.js.map +1 -0
- package/dist/api/wallet-trade-routes.d.ts +104 -0
- package/dist/api/wallet-trade-routes.d.ts.map +1 -0
- package/dist/api/wallet-trade-routes.js +353 -0
- package/dist/api/wallet-trade-routes.js.map +1 -0
- package/dist/api/wallet-trading-profile.d.ts +31 -0
- package/dist/api/wallet-trading-profile.d.ts.map +1 -0
- package/dist/api/wallet-trading-profile.js +500 -0
- package/dist/api/wallet-trading-profile.js.map +1 -0
- package/dist/api/wallet.d.ts +60 -0
- package/dist/api/wallet.d.ts.map +1 -0
- package/dist/api/wallet.js +617 -0
- package/dist/api/wallet.js.map +1 -0
- package/dist/chain-utils.d.ts +10 -0
- package/dist/chain-utils.d.ts.map +1 -0
- package/dist/chain-utils.js +81 -0
- package/dist/chain-utils.js.map +1 -0
- package/dist/components/StewardSpatialView.d.ts +74 -0
- package/dist/components/StewardSpatialView.d.ts.map +1 -0
- package/dist/components/StewardSpatialView.js +309 -0
- package/dist/components/StewardSpatialView.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +21 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +319 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/steward-balance.d.ts +12 -0
- package/dist/providers/steward-balance.d.ts.map +1 -0
- package/dist/providers/steward-balance.js +85 -0
- package/dist/providers/steward-balance.js.map +1 -0
- package/dist/providers/steward-receive-address.d.ts +12 -0
- package/dist/providers/steward-receive-address.d.ts.map +1 -0
- package/dist/providers/steward-receive-address.js +47 -0
- package/dist/providers/steward-receive-address.js.map +1 -0
- package/dist/register-routes.d.ts +2 -0
- package/dist/register-routes.d.ts.map +1 -0
- package/dist/register-routes.js +6 -0
- package/dist/register-routes.js.map +1 -0
- package/dist/register-terminal-view.d.ts +15 -0
- package/dist/register-terminal-view.d.ts.map +1 -0
- package/dist/register-terminal-view.js +34 -0
- package/dist/register-terminal-view.js.map +1 -0
- package/dist/routes/steward-bridge.d.ts +202 -0
- package/dist/routes/steward-bridge.d.ts.map +1 -0
- package/dist/routes/steward-bridge.js +776 -0
- package/dist/routes/steward-bridge.js.map +1 -0
- package/dist/routes/steward-compat-routes.d.ts +21 -0
- package/dist/routes/steward-compat-routes.d.ts.map +1 -0
- package/dist/routes/steward-compat-routes.js +350 -0
- package/dist/routes/steward-compat-routes.js.map +1 -0
- package/dist/routes/wallet-browser-compat-routes.d.ts +6 -0
- package/dist/routes/wallet-browser-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-browser-compat-routes.js +402 -0
- package/dist/routes/wallet-browser-compat-routes.js.map +1 -0
- package/dist/routes/wallet-bsc-core-routes.d.ts +15 -0
- package/dist/routes/wallet-bsc-core-routes.d.ts.map +1 -0
- package/dist/routes/wallet-bsc-core-routes.js +59 -0
- package/dist/routes/wallet-bsc-core-routes.js.map +1 -0
- package/dist/routes/wallet-compat-routes.d.ts +13 -0
- package/dist/routes/wallet-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-compat-routes.js +206 -0
- package/dist/routes/wallet-compat-routes.js.map +1 -0
- package/dist/routes/wallet-core-routes.d.ts +16 -0
- package/dist/routes/wallet-core-routes.d.ts.map +1 -0
- package/dist/routes/wallet-core-routes.js +48 -0
- package/dist/routes/wallet-core-routes.js.map +1 -0
- package/dist/routes/wallet-trade-compat-routes.d.ts +11 -0
- package/dist/routes/wallet-trade-compat-routes.d.ts.map +1 -0
- package/dist/routes/wallet-trade-compat-routes.js +570 -0
- package/dist/routes/wallet-trade-compat-routes.js.map +1 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts +7 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.d.ts.map +1 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.js +43 -0
- package/dist/security/hydrate-wallet-keys-from-platform-store.js.map +1 -0
- package/dist/security/wallet-os-store-actions.d.ts +14 -0
- package/dist/security/wallet-os-store-actions.d.ts.map +1 -0
- package/dist/security/wallet-os-store-actions.js +63 -0
- package/dist/security/wallet-os-store-actions.js.map +1 -0
- package/dist/services/steward-credentials.d.ts +2 -0
- package/dist/services/steward-credentials.d.ts.map +1 -0
- package/dist/services/steward-credentials.js +2 -0
- package/dist/services/steward-credentials.js.map +1 -0
- package/dist/services/steward-evm-account.d.ts +75 -0
- package/dist/services/steward-evm-account.d.ts.map +1 -0
- package/dist/services/steward-evm-account.js +279 -0
- package/dist/services/steward-evm-account.js.map +1 -0
- package/dist/services/steward-evm-bridge.d.ts +36 -0
- package/dist/services/steward-evm-bridge.d.ts.map +1 -0
- package/dist/services/steward-evm-bridge.js +78 -0
- package/dist/services/steward-evm-bridge.js.map +1 -0
- package/dist/services/steward-sidecar/health-check.d.ts +2 -0
- package/dist/services/steward-sidecar/health-check.d.ts.map +1 -0
- package/dist/services/steward-sidecar/health-check.js +2 -0
- package/dist/services/steward-sidecar/health-check.js.map +1 -0
- package/dist/services/steward-sidecar/helpers.d.ts +2 -0
- package/dist/services/steward-sidecar/helpers.d.ts.map +1 -0
- package/dist/services/steward-sidecar/helpers.js +2 -0
- package/dist/services/steward-sidecar/helpers.js.map +1 -0
- package/dist/services/steward-sidecar/process-management.d.ts +2 -0
- package/dist/services/steward-sidecar/process-management.d.ts.map +1 -0
- package/dist/services/steward-sidecar/process-management.js +2 -0
- package/dist/services/steward-sidecar/process-management.js.map +1 -0
- package/dist/services/steward-sidecar/types.d.ts +2 -0
- package/dist/services/steward-sidecar/types.d.ts.map +1 -0
- package/dist/services/steward-sidecar/types.js +2 -0
- package/dist/services/steward-sidecar/types.js.map +1 -0
- package/dist/services/steward-sidecar/wallet-setup.d.ts +2 -0
- package/dist/services/steward-sidecar/wallet-setup.d.ts.map +1 -0
- package/dist/services/steward-sidecar/wallet-setup.js +2 -0
- package/dist/services/steward-sidecar/wallet-setup.js.map +1 -0
- package/dist/services/steward-sidecar.d.ts +2 -0
- package/dist/services/steward-sidecar.d.ts.map +1 -0
- package/dist/services/steward-sidecar.js +2 -0
- package/dist/services/steward-sidecar.js.map +1 -0
- package/dist/services/steward-wallet.d.ts +25 -0
- package/dist/services/steward-wallet.d.ts.map +1 -0
- package/dist/services/steward-wallet.js +333 -0
- package/dist/services/steward-wallet.js.map +1 -0
- package/dist/steward-ui-state.d.ts +14 -0
- package/dist/steward-ui-state.d.ts.map +1 -0
- package/dist/steward-ui-state.js +46 -0
- package/dist/steward-ui-state.js.map +1 -0
- package/dist/steward-view-bundle.d.ts +3 -0
- package/dist/steward-view-bundle.d.ts.map +1 -0
- package/dist/steward-view-bundle.js +7 -0
- package/dist/steward-view-bundle.js.map +1 -0
- package/dist/types/bsc-trade.d.ts +180 -0
- package/dist/types/bsc-trade.d.ts.map +1 -0
- package/dist/types/bsc-trade.js +1 -0
- package/dist/types/bsc-trade.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/steward.d.ts +83 -0
- package/dist/types/steward.d.ts.map +1 -0
- package/dist/types/steward.js +1 -0
- package/dist/types/steward.js.map +1 -0
- package/dist/ui.d.ts +7 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +7 -0
- package/dist/ui.js.map +1 -0
- package/dist/views/bundle.js +601 -0
- package/dist/views/bundle.js.map +1 -0
- 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"}
|