@elizaos/plugin-steward-app 2.0.3-beta.6 → 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,206 @@
1
+ import { loadElizaConfig } from "@elizaos/agent/config/config";
2
+ import {
3
+ ensureCompatApiAuthorized,
4
+ ensureCompatSensitiveRouteAuthorized,
5
+ getCompatApiToken,
6
+ isDevEnvironment
7
+ } from "@elizaos/app-core/api/auth";
8
+ import {
9
+ isLoopbackRemoteAddress,
10
+ readCompatJsonBody
11
+ } from "@elizaos/app-core/api/compat-route-shared";
12
+ import {
13
+ sendJsonError as sendJsonErrorResponse,
14
+ sendJson as sendJsonResponse
15
+ } from "@elizaos/app-core/api/response";
16
+ import { deriveAgentVaultId } from "@elizaos/app-core/security/agent-vault-id";
17
+ import {
18
+ createNodePlatformSecureStore,
19
+ isWalletOsStoreReadEnabled
20
+ } from "@elizaos/app-core/security/platform-secure-store-node";
21
+ import { logger } from "@elizaos/core";
22
+ import { getWalletAddresses } from "../api/wallet.js";
23
+ import { fetchEvmNfts } from "../api/wallet-evm-balance.js";
24
+ import { resolveWalletRpcReadiness } from "../api/wallet-rpc.js";
25
+ import {
26
+ deleteWalletSecretsFromOsStore,
27
+ migrateWalletPrivateKeysToOsStore
28
+ } from "../security/wallet-os-store-actions.js";
29
+ import { getStewardBridgeStatus, isStewardConfigured } from "./steward-bridge.js";
30
+ async function handleWalletCompatRoutes(req, res, _state) {
31
+ const method = (req.method ?? "GET").toUpperCase();
32
+ const url = new URL(req.url ?? "/", "http://localhost");
33
+ if (!url.pathname.startsWith("/api/wallet/")) {
34
+ return false;
35
+ }
36
+ if (method === "GET" && url.pathname === "/api/wallet/os-store") {
37
+ if (!ensureCompatApiAuthorized(req, res)) {
38
+ return true;
39
+ }
40
+ try {
41
+ const store = createNodePlatformSecureStore();
42
+ const available = await store.isAvailable();
43
+ sendJsonResponse(res, 200, {
44
+ backend: store.backend,
45
+ available,
46
+ readEnabled: isWalletOsStoreReadEnabled(),
47
+ vaultId: deriveAgentVaultId()
48
+ });
49
+ } catch (err) {
50
+ logger.warn(
51
+ `[wallet][os-store] GET status failed: ${err instanceof Error ? err.message : String(err)}`
52
+ );
53
+ sendJsonResponse(res, 500, { error: "os-store status failed" });
54
+ }
55
+ return true;
56
+ }
57
+ if (method === "POST" && url.pathname === "/api/wallet/os-store") {
58
+ if (!ensureCompatSensitiveRouteAuthorized(req, res)) {
59
+ return true;
60
+ }
61
+ const body = await readCompatJsonBody(req, res);
62
+ if (!body) {
63
+ return true;
64
+ }
65
+ const action = typeof body.action === "string" ? body.action.trim() : "";
66
+ try {
67
+ if (action === "migrate") {
68
+ const result = await migrateWalletPrivateKeysToOsStore();
69
+ if (result.unavailable) {
70
+ sendJsonResponse(res, 503, {
71
+ ok: false,
72
+ error: "OS secret store unavailable on this host"
73
+ });
74
+ return true;
75
+ }
76
+ sendJsonResponse(res, 200, {
77
+ ok: true,
78
+ migrated: result.migrated,
79
+ failed: result.failed
80
+ });
81
+ return true;
82
+ }
83
+ if (action === "delete") {
84
+ await deleteWalletSecretsFromOsStore();
85
+ sendJsonResponse(res, 200, { ok: true });
86
+ return true;
87
+ }
88
+ } catch (err) {
89
+ logger.warn(
90
+ `[wallet][os-store] POST failed: ${err instanceof Error ? err.message : String(err)}`
91
+ );
92
+ sendJsonResponse(res, 500, {
93
+ error: err instanceof Error ? err.message : "os-store action failed"
94
+ });
95
+ return true;
96
+ }
97
+ sendJsonResponse(res, 400, { error: "Unknown action" });
98
+ return true;
99
+ }
100
+ if (method === "GET" && url.pathname === "/api/wallet/keys") {
101
+ if (!isLoopbackRemoteAddress(req.socket.remoteAddress)) {
102
+ sendJsonErrorResponse(res, 403, "loopback only");
103
+ return true;
104
+ }
105
+ if (!isDevEnvironment() && !getCompatApiToken()) {
106
+ sendJsonErrorResponse(
107
+ res,
108
+ 403,
109
+ "Sensitive endpoint requires API token authentication"
110
+ );
111
+ return true;
112
+ }
113
+ if (!ensureCompatSensitiveRouteAuthorized(req, res)) {
114
+ return true;
115
+ }
116
+ const config = loadElizaConfig();
117
+ if (config.meta?.firstRunComplete === true) {
118
+ sendJsonResponse(res, 403, {
119
+ error: "Wallet keys are only available during first run"
120
+ });
121
+ return true;
122
+ }
123
+ if (isStewardConfigured()) {
124
+ try {
125
+ const addresses = getWalletAddresses();
126
+ const stewardStatus = await getStewardBridgeStatus({
127
+ evmAddress: addresses.evmAddress
128
+ });
129
+ sendJsonResponse(res, 200, {
130
+ evmPrivateKey: "[managed-by-steward]",
131
+ evmAddress: addresses.evmAddress ?? stewardStatus.evmAddress ?? "",
132
+ solanaPrivateKey: "[managed-by-steward]",
133
+ solanaAddress: addresses.solanaAddress ?? "",
134
+ steward: {
135
+ configured: true,
136
+ connected: stewardStatus.connected,
137
+ agentId: stewardStatus.agentId
138
+ }
139
+ });
140
+ return true;
141
+ } catch {
142
+ }
143
+ }
144
+ const evmKey = process.env.EVM_PRIVATE_KEY ?? "";
145
+ const solKey = process.env.SOLANA_PRIVATE_KEY ?? "";
146
+ try {
147
+ const addresses = getWalletAddresses();
148
+ sendJsonResponse(res, 200, {
149
+ evmPrivateKey: evmKey,
150
+ evmAddress: addresses.evmAddress ?? "",
151
+ solanaPrivateKey: solKey,
152
+ solanaAddress: addresses.solanaAddress ?? ""
153
+ });
154
+ } catch {
155
+ sendJsonResponse(res, 200, {
156
+ evmPrivateKey: evmKey,
157
+ evmAddress: "",
158
+ solanaPrivateKey: solKey,
159
+ solanaAddress: ""
160
+ });
161
+ }
162
+ return true;
163
+ }
164
+ if (method === "GET" && url.pathname === "/api/wallet/nfts") {
165
+ if (!ensureCompatApiAuthorized(req, res)) {
166
+ return true;
167
+ }
168
+ const config = loadElizaConfig();
169
+ const addresses = getWalletAddresses();
170
+ const rpcReadiness = resolveWalletRpcReadiness(config);
171
+ const alchemyKey = process.env.ALCHEMY_API_KEY?.trim() || null;
172
+ const ankrKey = process.env.ANKR_API_KEY?.trim() || null;
173
+ const result = {
174
+ evm: [],
175
+ solana: null
176
+ };
177
+ if (addresses.evmAddress && rpcReadiness.evmBalanceReady) {
178
+ try {
179
+ result.evm = await fetchEvmNfts(addresses.evmAddress, {
180
+ alchemyKey,
181
+ ankrKey,
182
+ cloudManagedAccess: rpcReadiness.cloudManagedAccess,
183
+ bscRpcUrls: rpcReadiness.bscRpcUrls,
184
+ ethereumRpcUrls: rpcReadiness.ethereumRpcUrls,
185
+ baseRpcUrls: rpcReadiness.baseRpcUrls,
186
+ avaxRpcUrls: rpcReadiness.avalancheRpcUrls,
187
+ nodeRealBscRpcUrl: process.env.NODEREAL_BSC_RPC_URL,
188
+ quickNodeBscRpcUrl: process.env.QUICKNODE_BSC_RPC_URL,
189
+ bscRpcUrl: process.env.BSC_RPC_URL,
190
+ ethereumRpcUrl: process.env.ETHEREUM_RPC_URL,
191
+ baseRpcUrl: process.env.BASE_RPC_URL,
192
+ avaxRpcUrl: process.env.AVALANCHE_RPC_URL
193
+ });
194
+ } catch (err) {
195
+ logger.warn(`[wallet] EVM NFT fetch failed: ${err}`);
196
+ }
197
+ }
198
+ sendJsonResponse(res, 200, result);
199
+ return true;
200
+ }
201
+ return false;
202
+ }
203
+ export {
204
+ handleWalletCompatRoutes
205
+ };
206
+ //# sourceMappingURL=wallet-compat-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/wallet-compat-routes.ts"],"sourcesContent":["/**\n * Wallet OS-store, keys, and NFT compat routes.\n *\n * Handles:\n * GET /api/wallet/os-store — keychain/secret-service backend status\n * POST /api/wallet/os-store — migrate / delete wallet secrets in OS store\n * GET /api/wallet/keys — EVM + Solana keys (loopback + first-run gate)\n * GET /api/wallet/nfts — EVM NFT fetch\n */\nimport type http from \"node:http\";\nimport { loadElizaConfig } from \"@elizaos/agent/config/config\";\nimport {\n ensureCompatApiAuthorized,\n ensureCompatSensitiveRouteAuthorized,\n getCompatApiToken,\n isDevEnvironment,\n} from \"@elizaos/app-core/api/auth\";\nimport {\n type CompatRuntimeState,\n isLoopbackRemoteAddress,\n readCompatJsonBody,\n} from \"@elizaos/app-core/api/compat-route-shared\";\nimport {\n sendJsonError as sendJsonErrorResponse,\n sendJson as sendJsonResponse,\n} from \"@elizaos/app-core/api/response\";\nimport { deriveAgentVaultId } from \"@elizaos/app-core/security/agent-vault-id\";\nimport {\n createNodePlatformSecureStore,\n isWalletOsStoreReadEnabled,\n} from \"@elizaos/app-core/security/platform-secure-store-node\";\nimport { logger } from \"@elizaos/core\";\nimport type { ElizaConfig } from \"@elizaos/shared\";\nimport { getWalletAddresses } from \"../api/wallet.js\";\nimport { fetchEvmNfts } from \"../api/wallet-evm-balance.js\";\nimport { resolveWalletRpcReadiness } from \"../api/wallet-rpc.js\";\nimport {\n deleteWalletSecretsFromOsStore,\n migrateWalletPrivateKeysToOsStore,\n} from \"../security/wallet-os-store-actions.js\";\nimport { getStewardBridgeStatus, isStewardConfigured } from \"./steward-bridge.js\";\n\nexport async function handleWalletCompatRoutes(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n _state: CompatRuntimeState,\n): Promise<boolean> {\n const method = (req.method ?? \"GET\").toUpperCase();\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n\n // Quick prefix check — all routes here live under /api/wallet/\n if (!url.pathname.startsWith(\"/api/wallet/\")) {\n return false;\n }\n\n // ── GET /api/wallet/os-store ─────────────────────────────────────────\n if (method === \"GET\" && url.pathname === \"/api/wallet/os-store\") {\n if (!ensureCompatApiAuthorized(req, res)) {\n return true;\n }\n\n try {\n const store = createNodePlatformSecureStore();\n const available = await store.isAvailable();\n sendJsonResponse(res, 200, {\n backend: store.backend,\n available,\n readEnabled: isWalletOsStoreReadEnabled(),\n vaultId: deriveAgentVaultId(),\n });\n } catch (err) {\n logger.warn(\n `[wallet][os-store] GET status failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n sendJsonResponse(res, 500, { error: \"os-store status failed\" });\n }\n return true;\n }\n\n // ── POST /api/wallet/os-store ────────────────────────────────────────\n if (method === \"POST\" && url.pathname === \"/api/wallet/os-store\") {\n if (!ensureCompatSensitiveRouteAuthorized(req, res)) {\n return true;\n }\n\n const body = await readCompatJsonBody(req, res);\n if (!body) {\n return true;\n }\n\n const action = typeof body.action === \"string\" ? body.action.trim() : \"\";\n\n try {\n if (action === \"migrate\") {\n const result = await migrateWalletPrivateKeysToOsStore();\n if (result.unavailable) {\n sendJsonResponse(res, 503, {\n ok: false,\n error: \"OS secret store unavailable on this host\",\n });\n return true;\n }\n sendJsonResponse(res, 200, {\n ok: true,\n migrated: result.migrated,\n failed: result.failed,\n });\n return true;\n }\n if (action === \"delete\") {\n await deleteWalletSecretsFromOsStore();\n sendJsonResponse(res, 200, { ok: true });\n return true;\n }\n } catch (err) {\n logger.warn(\n `[wallet][os-store] POST failed: ${err instanceof Error ? err.message : String(err)}`,\n );\n sendJsonResponse(res, 500, {\n error: err instanceof Error ? err.message : \"os-store action failed\",\n });\n return true;\n }\n\n sendJsonResponse(res, 400, { error: \"Unknown action\" });\n return true;\n }\n\n // ── GET /api/wallet/keys (first-run only, loopback only) ─────────────\n // Security note: this compat route exists only for the embedded desktop\n // first-run flow, where the renderer needs to display the keys already\n // generated inside the local runtime. Electrobun injects a loopback\n // `http://127.0.0.1:<port>` API base plus a generated API token before the\n // renderer mounts, and ensureCompatSensitiveRouteAuthorized fails closed if\n // that token is missing. The route is also permanently disabled once\n // firstRunComplete flips true so the backup screen cannot be reopened as a\n // general-purpose key export endpoint.\n if (method === \"GET\" && url.pathname === \"/api/wallet/keys\") {\n if (!isLoopbackRemoteAddress(req.socket.remoteAddress)) {\n sendJsonErrorResponse(res, 403, \"loopback only\");\n return true;\n }\n\n // In production without a configured token, reject even from loopback.\n // Electrobun injects a generated token before the renderer mounts; a\n // missing token signals the renderer has not been properly initialised.\n if (!isDevEnvironment() && !getCompatApiToken()) {\n sendJsonErrorResponse(\n res,\n 403,\n \"Sensitive endpoint requires API token authentication\",\n );\n return true;\n }\n\n if (!ensureCompatSensitiveRouteAuthorized(req, res)) {\n return true;\n }\n\n const config = loadElizaConfig();\n if (config.meta?.firstRunComplete === true) {\n sendJsonResponse(res, 403, {\n error: \"Wallet keys are only available during first run\",\n });\n return true;\n }\n\n // When Steward is configured, return masked keys with Steward status\n if (isStewardConfigured()) {\n try {\n const addresses = getWalletAddresses();\n const stewardStatus = await getStewardBridgeStatus({\n evmAddress: addresses.evmAddress,\n });\n sendJsonResponse(res, 200, {\n evmPrivateKey: \"[managed-by-steward]\",\n evmAddress: addresses.evmAddress ?? stewardStatus.evmAddress ?? \"\",\n solanaPrivateKey: \"[managed-by-steward]\",\n solanaAddress: addresses.solanaAddress ?? \"\",\n steward: {\n configured: true,\n connected: stewardStatus.connected,\n agentId: stewardStatus.agentId,\n },\n });\n return true;\n } catch {\n // fall through to legacy path\n }\n }\n\n const evmKey = process.env.EVM_PRIVATE_KEY ?? \"\";\n const solKey = process.env.SOLANA_PRIVATE_KEY ?? \"\";\n\n try {\n const addresses = getWalletAddresses();\n sendJsonResponse(res, 200, {\n evmPrivateKey: evmKey,\n evmAddress: addresses.evmAddress ?? \"\",\n solanaPrivateKey: solKey,\n solanaAddress: addresses.solanaAddress ?? \"\",\n });\n } catch {\n sendJsonResponse(res, 200, {\n evmPrivateKey: evmKey,\n evmAddress: \"\",\n solanaPrivateKey: solKey,\n solanaAddress: \"\",\n });\n }\n return true;\n }\n\n // ── GET /api/wallet/nfts ─────────────────────────────────────────────\n if (method === \"GET\" && url.pathname === \"/api/wallet/nfts\") {\n if (!ensureCompatApiAuthorized(req, res)) {\n return true;\n }\n\n const config: ElizaConfig = loadElizaConfig();\n const addresses = getWalletAddresses();\n const rpcReadiness = resolveWalletRpcReadiness(config);\n const alchemyKey = process.env.ALCHEMY_API_KEY?.trim() || null;\n const ankrKey = process.env.ANKR_API_KEY?.trim() || null;\n const result: {\n evm: Array<{ chain: string; nfts: unknown[] }>;\n solana: { nfts: unknown[] } | null;\n } = {\n evm: [],\n solana: null,\n };\n\n if (addresses.evmAddress && rpcReadiness.evmBalanceReady) {\n try {\n result.evm = await fetchEvmNfts(addresses.evmAddress, {\n alchemyKey,\n ankrKey,\n cloudManagedAccess: rpcReadiness.cloudManagedAccess,\n bscRpcUrls: rpcReadiness.bscRpcUrls,\n ethereumRpcUrls: rpcReadiness.ethereumRpcUrls,\n baseRpcUrls: rpcReadiness.baseRpcUrls,\n avaxRpcUrls: rpcReadiness.avalancheRpcUrls,\n nodeRealBscRpcUrl: process.env.NODEREAL_BSC_RPC_URL,\n quickNodeBscRpcUrl: process.env.QUICKNODE_BSC_RPC_URL,\n bscRpcUrl: process.env.BSC_RPC_URL,\n ethereumRpcUrl: process.env.ETHEREUM_RPC_URL,\n baseRpcUrl: process.env.BASE_RPC_URL,\n avaxRpcUrl: process.env.AVALANCHE_RPC_URL,\n });\n } catch (err) {\n logger.warn(`[wallet] EVM NFT fetch failed: ${err}`);\n }\n }\n\n sendJsonResponse(res, 200, result);\n return true;\n }\n\n return false;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Core wallet routes — wraps handleWalletRoutes from the local api/ copy
3
+ * for registration as plugin routes.
4
+ *
5
+ * Handles:
6
+ * GET /api/wallet/addresses
7
+ * GET /api/wallet/balances
8
+ * POST /api/wallet/import
9
+ * POST /api/wallet/generate
10
+ * GET /api/wallet/config
11
+ * PUT /api/wallet/config
12
+ * POST /api/wallet/export
13
+ */
14
+ import type http from "node:http";
15
+ export declare function handleWalletCoreRoutes(req: http.IncomingMessage, res: http.ServerResponse, state: unknown): Promise<boolean>;
16
+ //# sourceMappingURL=wallet-core-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-core-routes.d.ts","sourceRoot":"","sources":["../../src/routes/wallet-core-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAkBlC,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,OAAO,CAAC,CA6DlB"}
@@ -0,0 +1,48 @@
1
+ import { loadElizaConfig, saveElizaConfig } from "@elizaos/agent/config/config";
2
+ import { readCompatJsonBody } from "@elizaos/app-core/api/compat-route-shared";
3
+ import { sendJson, sendJsonError } from "@elizaos/app-core/api/response";
4
+ import { resolveWalletExportRejection } from "@elizaos/plugin-wallet";
5
+ import {
6
+ DEFAULT_WALLET_ROUTE_DEPENDENCIES,
7
+ handleWalletRoutes
8
+ } from "../api/wallet-routes.js";
9
+ function ensureWalletKeysInEnvAndConfig(_config) {
10
+ return false;
11
+ }
12
+ async function handleWalletCoreRoutes(req, res, state) {
13
+ const method = req.method?.toUpperCase() ?? "GET";
14
+ const url = new URL(
15
+ req.url ?? "/",
16
+ `http://${req.headers.host ?? "localhost"}`
17
+ );
18
+ const pathname = url.pathname;
19
+ if (!pathname.startsWith("/api/wallet/")) return false;
20
+ if (pathname.startsWith("/api/wallet/trade/") || pathname.startsWith("/api/wallet/transfer/") || pathname.startsWith("/api/wallet/steward") || pathname.startsWith("/api/wallet/browser-") || pathname === "/api/wallet/os-store" || pathname === "/api/wallet/keys" || pathname === "/api/wallet/nfts" || pathname === "/api/wallet/production-defaults" || pathname === "/api/wallet/trading/profile") {
21
+ return false;
22
+ }
23
+ const config = loadElizaConfig();
24
+ const routeState = state && typeof state === "object" ? state : null;
25
+ const restartRuntime = typeof routeState?.restartRuntime === "function" ? routeState.restartRuntime : void 0;
26
+ const scheduleRuntimeRestart = typeof routeState?.scheduleRuntimeRestart === "function" ? routeState.scheduleRuntimeRestart : void 0;
27
+ return handleWalletRoutes({
28
+ req,
29
+ res,
30
+ method,
31
+ pathname,
32
+ config,
33
+ saveConfig: saveElizaConfig,
34
+ ensureWalletKeysInEnvAndConfig,
35
+ resolveWalletExportRejection: (r, body) => resolveWalletExportRejection(r, body),
36
+ readJsonBody: readCompatJsonBody,
37
+ json: (r, data, status) => sendJson(r, status ?? 200, data),
38
+ error: (r, message, status) => sendJsonError(r, status ?? 500, message),
39
+ deps: DEFAULT_WALLET_ROUTE_DEPENDENCIES,
40
+ restartRuntime,
41
+ scheduleRuntimeRestart,
42
+ runtime: routeState?.runtime ?? null
43
+ });
44
+ }
45
+ export {
46
+ handleWalletCoreRoutes
47
+ };
48
+ //# sourceMappingURL=wallet-core-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/routes/wallet-core-routes.ts"],"sourcesContent":["/**\n * Core wallet routes — wraps handleWalletRoutes from the local api/ copy\n * for registration as plugin routes.\n *\n * Handles:\n * GET /api/wallet/addresses\n * GET /api/wallet/balances\n * POST /api/wallet/import\n * POST /api/wallet/generate\n * GET /api/wallet/config\n * PUT /api/wallet/config\n * POST /api/wallet/export\n */\nimport type http from \"node:http\";\nimport { loadElizaConfig, saveElizaConfig } from \"@elizaos/agent/config/config\";\nimport { readCompatJsonBody } from \"@elizaos/app-core/api/compat-route-shared\";\nimport { sendJson, sendJsonError } from \"@elizaos/app-core/api/response\";\nimport type { AgentRuntime } from \"@elizaos/core\";\nimport { resolveWalletExportRejection } from \"@elizaos/plugin-wallet\";\nimport type { ElizaConfig } from \"@elizaos/shared\";\nimport {\n DEFAULT_WALLET_ROUTE_DEPENDENCIES,\n handleWalletRoutes,\n} from \"../api/wallet-routes.js\";\n\nfunction ensureWalletKeysInEnvAndConfig(_config: ElizaConfig): boolean {\n // Auto-provisioning is disabled by default; the wallet generate route handles\n // key creation explicitly.\n return false;\n}\n\nexport async function handleWalletCoreRoutes(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n state: unknown,\n): Promise<boolean> {\n const method = req.method?.toUpperCase() ?? \"GET\";\n const url = new URL(\n req.url ?? \"/\",\n `http://${req.headers.host ?? \"localhost\"}`,\n );\n const pathname = url.pathname;\n\n // Only handle /api/wallet/* paths (not trade/steward sub-paths handled elsewhere)\n if (!pathname.startsWith(\"/api/wallet/\")) return false;\n // Skip paths handled by other compat handlers\n if (\n pathname.startsWith(\"/api/wallet/trade/\") ||\n pathname.startsWith(\"/api/wallet/transfer/\") ||\n pathname.startsWith(\"/api/wallet/steward\") ||\n pathname.startsWith(\"/api/wallet/browser-\") ||\n pathname === \"/api/wallet/os-store\" ||\n pathname === \"/api/wallet/keys\" ||\n pathname === \"/api/wallet/nfts\" ||\n pathname === \"/api/wallet/production-defaults\" ||\n pathname === \"/api/wallet/trading/profile\"\n ) {\n return false;\n }\n\n const config = loadElizaConfig();\n const routeState =\n state && typeof state === \"object\"\n ? (state as {\n runtime?: unknown;\n restartRuntime?: unknown;\n scheduleRuntimeRestart?: unknown;\n })\n : null;\n const restartRuntime =\n typeof routeState?.restartRuntime === \"function\"\n ? (routeState.restartRuntime as (reason: string) => Promise<boolean>)\n : undefined;\n const scheduleRuntimeRestart =\n typeof routeState?.scheduleRuntimeRestart === \"function\"\n ? (routeState.scheduleRuntimeRestart as (reason: string) => void)\n : undefined;\n\n return handleWalletRoutes({\n req,\n res,\n method,\n pathname,\n config,\n saveConfig: saveElizaConfig,\n ensureWalletKeysInEnvAndConfig,\n resolveWalletExportRejection: (r, body) =>\n resolveWalletExportRejection(r, body as never) as never,\n readJsonBody: readCompatJsonBody as never,\n json: (r, data, status) => sendJson(r, status ?? 200, data),\n error: (r, message, status) => sendJsonError(r, status ?? 500, message),\n deps: DEFAULT_WALLET_ROUTE_DEPENDENCIES,\n restartRuntime,\n scheduleRuntimeRestart,\n runtime: (routeState?.runtime as AgentRuntime | null | undefined) ?? null,\n });\n}\n"],"mappings":"AAcA,SAAS,iBAAiB,uBAAuB;AACjD,SAAS,0BAA0B;AACnC,SAAS,UAAU,qBAAqB;AAExC,SAAS,oCAAoC;AAE7C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,+BAA+B,SAA+B;AAGrE,SAAO;AACT;AAEA,eAAsB,uBACpB,KACA,KACA,OACkB;AAClB,QAAM,SAAS,IAAI,QAAQ,YAAY,KAAK;AAC5C,QAAM,MAAM,IAAI;AAAA,IACd,IAAI,OAAO;AAAA,IACX,UAAU,IAAI,QAAQ,QAAQ,WAAW;AAAA,EAC3C;AACA,QAAM,WAAW,IAAI;AAGrB,MAAI,CAAC,SAAS,WAAW,cAAc,EAAG,QAAO;AAEjD,MACE,SAAS,WAAW,oBAAoB,KACxC,SAAS,WAAW,uBAAuB,KAC3C,SAAS,WAAW,qBAAqB,KACzC,SAAS,WAAW,sBAAsB,KAC1C,aAAa,0BACb,aAAa,sBACb,aAAa,sBACb,aAAa,qCACb,aAAa,+BACb;AACA,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,gBAAgB;AAC/B,QAAM,aACJ,SAAS,OAAO,UAAU,WACrB,QAKD;AACN,QAAM,iBACJ,OAAO,YAAY,mBAAmB,aACjC,WAAW,iBACZ;AACN,QAAM,yBACJ,OAAO,YAAY,2BAA2B,aACzC,WAAW,yBACZ;AAEN,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,8BAA8B,CAAC,GAAG,SAChC,6BAA6B,GAAG,IAAa;AAAA,IAC/C,cAAc;AAAA,IACd,MAAM,CAAC,GAAG,MAAM,WAAW,SAAS,GAAG,UAAU,KAAK,IAAI;AAAA,IAC1D,OAAO,CAAC,GAAG,SAAS,WAAW,cAAc,GAAG,UAAU,KAAK,OAAO;AAAA,IACtE,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,SAAU,YAAY,WAA+C;AAAA,EACvE,CAAC;AACH;","names":[]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Wallet trade / transfer compat routes.
3
+ *
4
+ * Handles:
5
+ * POST /api/wallet/trade/execute — BSC DEX trade execution
6
+ * POST /api/wallet/transfer/execute — token / BNB transfer execution
7
+ */
8
+ import type http from "node:http";
9
+ import { type CompatRuntimeState } from "@elizaos/app-core/api/compat-route-shared";
10
+ export declare function handleWalletTradeCompatRoutes(req: http.IncomingMessage, res: http.ServerResponse, _state: CompatRuntimeState): Promise<boolean>;
11
+ //# sourceMappingURL=wallet-trade-compat-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-trade-compat-routes.d.ts","sourceRoot":"","sources":["../../src/routes/wallet-trade-compat-routes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EACL,KAAK,kBAAkB,EAExB,MAAM,2CAA2C,CAAC;AAuInD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,OAAO,CAAC,CAsjBlB"}