@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,776 @@
1
+ import { loadElizaConfig } from "@elizaos/agent/config/config";
2
+ import {
3
+ loadStewardCredentials,
4
+ resolveEffectiveStewardConfig,
5
+ saveStewardCredentials
6
+ } from "@elizaos/app-core/services/steward-credentials";
7
+ import { fingerprintRandomToken } from "@elizaos/app-core/services/steward-sidecar/helpers";
8
+ import {
9
+ StewardApiError,
10
+ StewardClient
11
+ } from "@stwd/sdk";
12
+ import { fetchSolanaNativeBalanceViaRpc } from "../api/wallet.js";
13
+ import { fetchEvmNativeBalanceViaRpc } from "../api/wallet-evm-balance.js";
14
+ import { resolveWalletRpcReadiness } from "../api/wallet-rpc.js";
15
+ function normalizeEnvValue(value) {
16
+ if (typeof value !== "string") {
17
+ return null;
18
+ }
19
+ const trimmed = value.trim();
20
+ return trimmed || null;
21
+ }
22
+ function resolveStewardConnection(env = process.env) {
23
+ const persisted = resolveEffectiveStewardConfig(env);
24
+ const baseUrl = normalizeEnvValue(env.STEWARD_API_URL) ?? normalizeEnvValue(persisted?.apiUrl) ?? null;
25
+ const apiKey = normalizeEnvValue(env.STEWARD_API_KEY) ?? normalizeEnvValue(persisted?.apiKey) ?? null;
26
+ const tenantId = normalizeEnvValue(env.STEWARD_TENANT_ID) ?? normalizeEnvValue(persisted?.tenantId) ?? null;
27
+ const agentId = normalizeEnvValue(env.STEWARD_AGENT_ID) ?? normalizeEnvValue(env.ELIZA_STEWARD_AGENT_ID) ?? normalizeEnvValue(persisted?.agentId) ?? null;
28
+ const agentToken = normalizeEnvValue(env.STEWARD_AGENT_TOKEN) ?? normalizeEnvValue(persisted?.agentToken) ?? null;
29
+ return {
30
+ baseUrl,
31
+ apiKey,
32
+ tenantId,
33
+ bearerToken: apiKey ? null : agentToken,
34
+ agentId
35
+ };
36
+ }
37
+ function resolveStewardRpcReadinessSafe() {
38
+ try {
39
+ return resolveWalletRpcReadiness(loadElizaConfig());
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+ function firstRpcUrl(urls) {
45
+ return urls.find((candidate) => typeof candidate === "string" && candidate.trim())?.trim() ?? null;
46
+ }
47
+ function resolveEvmNativeBalanceFallback(chainId, readiness) {
48
+ switch (chainId) {
49
+ case 1: {
50
+ const rpcUrl = firstRpcUrl(readiness.ethereumRpcUrls);
51
+ return rpcUrl ? { rpcUrl, symbol: "ETH", chainId } : null;
52
+ }
53
+ case 8453: {
54
+ const rpcUrl = firstRpcUrl(readiness.baseRpcUrls);
55
+ return rpcUrl ? { rpcUrl, symbol: "ETH", chainId } : null;
56
+ }
57
+ case 56:
58
+ case 97: {
59
+ const rpcUrl = firstRpcUrl(readiness.bscRpcUrls);
60
+ return rpcUrl ? { rpcUrl, symbol: "BNB", chainId } : null;
61
+ }
62
+ case 43114: {
63
+ const rpcUrl = firstRpcUrl(readiness.avalancheRpcUrls);
64
+ return rpcUrl ? { rpcUrl, symbol: "AVAX", chainId } : null;
65
+ }
66
+ default:
67
+ return null;
68
+ }
69
+ }
70
+ function resolveStewardAgentId(env = process.env, evmAddress) {
71
+ return resolveStewardConnection(env).agentId ?? evmAddress?.trim() ?? null;
72
+ }
73
+ function createStewardClient(options = {}) {
74
+ if (options.client !== void 0) {
75
+ return options.client;
76
+ }
77
+ const env = options.env ?? process.env;
78
+ const connection = resolveStewardConnection(env);
79
+ const baseUrl = connection.baseUrl;
80
+ if (!baseUrl) {
81
+ return null;
82
+ }
83
+ return new StewardClient({
84
+ baseUrl,
85
+ bearerToken: connection.bearerToken ?? void 0,
86
+ apiKey: connection.apiKey ?? void 0,
87
+ tenantId: connection.tenantId ?? void 0
88
+ });
89
+ }
90
+ async function getStewardBridgeStatus(options = {}) {
91
+ const env = options.env ?? process.env;
92
+ const baseUrl = normalizeEnvValue(env.STEWARD_API_URL);
93
+ const evmAddress = options.evmAddress ?? null;
94
+ const agentId = options.agentId ?? resolveStewardAgentId(env, evmAddress);
95
+ const client = createStewardClient(options);
96
+ if (!baseUrl || !client) {
97
+ const persisted = resolveEffectiveStewardConfig(env);
98
+ if (!persisted?.apiUrl) {
99
+ return {
100
+ configured: false,
101
+ available: false,
102
+ connected: false,
103
+ baseUrl,
104
+ agentId,
105
+ evmAddress,
106
+ error: null
107
+ };
108
+ }
109
+ const fallbackClient = new StewardClient({
110
+ baseUrl: persisted.apiUrl,
111
+ bearerToken: persisted.agentToken || void 0,
112
+ apiKey: persisted.apiKey || void 0,
113
+ tenantId: persisted.tenantId || void 0
114
+ });
115
+ const fallbackAgentId = persisted.agentId || agentId;
116
+ if (!fallbackClient || !fallbackAgentId) {
117
+ return {
118
+ configured: false,
119
+ available: false,
120
+ connected: false,
121
+ baseUrl: persisted.apiUrl,
122
+ agentId: fallbackAgentId,
123
+ evmAddress,
124
+ error: null
125
+ };
126
+ }
127
+ try {
128
+ let agentData = null;
129
+ if (fallbackAgentId) {
130
+ try {
131
+ agentData = await fallbackClient.getAgent(
132
+ fallbackAgentId
133
+ );
134
+ } catch (error) {
135
+ if (!(error instanceof StewardApiError) || error.status !== 404 && error.status !== 400) {
136
+ throw error;
137
+ }
138
+ }
139
+ }
140
+ const walletAddresses = agentData ? {
141
+ evm: agentData.walletAddresses?.evm?.trim() || agentData.walletAddress?.trim() || null,
142
+ solana: agentData.walletAddresses?.solana?.trim() || null
143
+ } : void 0;
144
+ return {
145
+ configured: true,
146
+ available: true,
147
+ connected: true,
148
+ baseUrl: persisted.apiUrl,
149
+ agentId: fallbackAgentId,
150
+ evmAddress: walletAddresses?.evm ?? evmAddress,
151
+ error: null,
152
+ walletAddresses,
153
+ agentName: agentData?.name || void 0,
154
+ vaultHealth: fallbackAgentId && !agentData ? "degraded" : "ok"
155
+ };
156
+ } catch (error) {
157
+ return {
158
+ configured: true,
159
+ available: false,
160
+ connected: false,
161
+ baseUrl: persisted.apiUrl,
162
+ agentId: fallbackAgentId,
163
+ evmAddress,
164
+ error: formatStewardError(error),
165
+ vaultHealth: "error"
166
+ };
167
+ }
168
+ }
169
+ try {
170
+ let agentData = null;
171
+ if (agentId) {
172
+ try {
173
+ agentData = await client.getAgent(agentId);
174
+ } catch (error) {
175
+ if (!(error instanceof StewardApiError) || error.status !== 404 && error.status !== 400) {
176
+ throw error;
177
+ }
178
+ }
179
+ } else {
180
+ await client.listAgents();
181
+ }
182
+ const walletAddresses = agentData ? {
183
+ evm: agentData.walletAddresses?.evm?.trim() || agentData.walletAddress?.trim() || null,
184
+ solana: agentData.walletAddresses?.solana?.trim() || null
185
+ } : void 0;
186
+ const agentName = agentData?.name || void 0;
187
+ let vaultHealth = "ok";
188
+ if (agentId && !agentData) {
189
+ vaultHealth = "degraded";
190
+ }
191
+ return {
192
+ configured: true,
193
+ available: true,
194
+ connected: true,
195
+ baseUrl,
196
+ agentId,
197
+ evmAddress: walletAddresses?.evm ?? evmAddress,
198
+ error: null,
199
+ walletAddresses,
200
+ agentName,
201
+ vaultHealth
202
+ };
203
+ } catch (error) {
204
+ return {
205
+ configured: true,
206
+ available: false,
207
+ connected: false,
208
+ baseUrl,
209
+ agentId,
210
+ evmAddress,
211
+ error: formatStewardError(error),
212
+ vaultHealth: "error"
213
+ };
214
+ }
215
+ }
216
+ function isStewardConfigured(env = process.env) {
217
+ const connection = resolveStewardConnection(env);
218
+ return Boolean(connection.baseUrl && connection.agentId);
219
+ }
220
+ function formatStewardError(error) {
221
+ if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") {
222
+ return error.message;
223
+ }
224
+ return String(error);
225
+ }
226
+ async function signTransactionWithOptionalSteward(params) {
227
+ const env = params.env ?? process.env;
228
+ const evmAddress = params.evmAddress ?? null;
229
+ const agentId = params.agentId ?? resolveStewardAgentId(env, evmAddress) ?? null;
230
+ const client = createStewardClient({
231
+ env,
232
+ evmAddress,
233
+ agentId,
234
+ client: params.client
235
+ });
236
+ if (!client || !agentId) {
237
+ throw new Error(
238
+ "Steward credentials and agent ID must be provided to sign transactions."
239
+ );
240
+ }
241
+ const tx = params.tx;
242
+ if (!tx || typeof tx !== "object") {
243
+ throw new Error("Transaction input is required and must be an object.");
244
+ }
245
+ if (!("to" in tx) || typeof tx.to !== "string" || !tx.to.trim()) {
246
+ throw new Error("Transaction must include a valid 'to' address.");
247
+ }
248
+ const result = await client.signTransaction(agentId, tx);
249
+ if ("txHash" in result) {
250
+ return {
251
+ mode: "steward",
252
+ pendingApproval: false,
253
+ txHash: result.txHash
254
+ };
255
+ }
256
+ if ("results" in result) {
257
+ return {
258
+ mode: "steward",
259
+ pendingApproval: true,
260
+ policyResults: result.results
261
+ };
262
+ }
263
+ throw new Error("Steward returned an unsigned transaction unexpectedly");
264
+ }
265
+ async function getStewardWalletAddresses(options = {}) {
266
+ const env = options.env ?? process.env;
267
+ const evmAddr = options.evmAddress ?? null;
268
+ const agentId = options.agentId ?? resolveStewardAgentId(env, evmAddr) ?? null;
269
+ const client = createStewardClient(options);
270
+ if (!client || !agentId) {
271
+ return { evmAddress: null, solanaAddress: null };
272
+ }
273
+ const agent = await client.getAgent(agentId);
274
+ const evmAddress = agent.walletAddresses?.evm?.trim() || agent.walletAddress?.trim() || null;
275
+ const solanaAddress = agent.walletAddresses?.solana?.trim() || null;
276
+ return { evmAddress, solanaAddress };
277
+ }
278
+ async function getStewardBalance(agentId, chainId, options = {}) {
279
+ const client = createStewardClient(options);
280
+ if (!client) throw new Error("Steward not configured");
281
+ try {
282
+ const result = await client.getBalance(agentId, chainId);
283
+ return {
284
+ balance: result.balances.native,
285
+ formatted: result.balances.nativeFormatted,
286
+ symbol: result.balances.symbol,
287
+ chainId: result.balances.chainId
288
+ };
289
+ } catch (error) {
290
+ const readiness = resolveStewardRpcReadinessSafe();
291
+ const walletAddresses = await getStewardWalletAddresses({
292
+ ...options,
293
+ agentId
294
+ });
295
+ if (chainId === 101 && walletAddresses.solanaAddress && readiness && readiness.solanaRpcUrls.length > 0) {
296
+ const result = await fetchSolanaNativeBalanceViaRpc(
297
+ walletAddresses.solanaAddress,
298
+ readiness.solanaRpcUrls
299
+ );
300
+ return {
301
+ balance: result.solBalance,
302
+ formatted: result.solBalance,
303
+ symbol: "SOL",
304
+ chainId
305
+ };
306
+ }
307
+ const evmFallback = readiness && chainId != null ? resolveEvmNativeBalanceFallback(chainId, readiness) : null;
308
+ if (evmFallback && walletAddresses.evmAddress) {
309
+ const balance = await fetchEvmNativeBalanceViaRpc(
310
+ evmFallback.rpcUrl,
311
+ walletAddresses.evmAddress
312
+ );
313
+ return {
314
+ balance,
315
+ formatted: balance,
316
+ symbol: evmFallback.symbol,
317
+ chainId: evmFallback.chainId
318
+ };
319
+ }
320
+ throw error;
321
+ }
322
+ }
323
+ async function getStewardTokenBalances(agentId, chainId, options = {}) {
324
+ const env = options.env ?? process.env;
325
+ const baseUrl = getStewardBaseUrl(env);
326
+ if (!baseUrl) throw new Error("Steward not configured");
327
+ const headers = buildStewardHeaders(env);
328
+ const qs = chainId != null ? `?chainId=${encodeURIComponent(chainId)}` : "";
329
+ try {
330
+ const res = await fetch(
331
+ `${baseUrl}/agents/${encodeURIComponent(agentId)}/tokens${qs}`,
332
+ { headers }
333
+ );
334
+ if (!res.ok) {
335
+ const errText = await res.text().catch(() => "Unknown error");
336
+ throw new Error(
337
+ `Steward token balances failed (${res.status}): ${errText}`
338
+ );
339
+ }
340
+ const body = await res.json();
341
+ return body.data ?? {
342
+ native: {
343
+ balance: "0",
344
+ formatted: "0",
345
+ symbol: "???",
346
+ chainId: chainId ?? 0
347
+ },
348
+ tokens: []
349
+ };
350
+ } catch (error) {
351
+ const readiness = resolveStewardRpcReadinessSafe();
352
+ const walletAddresses = await getStewardWalletAddresses({
353
+ ...options,
354
+ agentId
355
+ });
356
+ if (chainId === 101 && walletAddresses.solanaAddress && readiness && readiness.solanaRpcUrls.length > 0) {
357
+ const native = await fetchSolanaNativeBalanceViaRpc(
358
+ walletAddresses.solanaAddress,
359
+ readiness.solanaRpcUrls
360
+ );
361
+ return {
362
+ native: {
363
+ balance: native.solBalance,
364
+ formatted: native.solBalance,
365
+ symbol: "SOL",
366
+ chainId
367
+ },
368
+ tokens: []
369
+ };
370
+ }
371
+ const evmFallback = readiness && chainId != null ? resolveEvmNativeBalanceFallback(chainId, readiness) : null;
372
+ if (evmFallback && walletAddresses.evmAddress) {
373
+ const nativeBalance = await fetchEvmNativeBalanceViaRpc(
374
+ evmFallback.rpcUrl,
375
+ walletAddresses.evmAddress
376
+ );
377
+ return {
378
+ native: {
379
+ balance: nativeBalance,
380
+ formatted: nativeBalance,
381
+ symbol: evmFallback.symbol,
382
+ chainId: evmFallback.chainId
383
+ },
384
+ tokens: []
385
+ };
386
+ }
387
+ throw error;
388
+ }
389
+ }
390
+ function buildStewardHeaders(env = process.env) {
391
+ const headers = new Headers();
392
+ headers.set("Content-Type", "application/json");
393
+ headers.set("Accept", "application/json");
394
+ const connection = resolveStewardConnection(env);
395
+ const bearerToken = connection.bearerToken;
396
+ const apiKey = connection.apiKey;
397
+ const tenantId = connection.tenantId;
398
+ if (bearerToken) {
399
+ headers.set("Authorization", `Bearer ${bearerToken}`);
400
+ } else if (apiKey) {
401
+ headers.set("X-Steward-Key", apiKey);
402
+ }
403
+ if (tenantId) {
404
+ headers.set("X-Steward-Tenant", tenantId);
405
+ }
406
+ return headers;
407
+ }
408
+ function getStewardBaseUrl(env = process.env) {
409
+ return resolveStewardConnection(env).baseUrl;
410
+ }
411
+ async function getStewardPendingApprovals(agentId, env = process.env) {
412
+ const baseUrl = getStewardBaseUrl(env);
413
+ if (!baseUrl) throw new Error("Steward not configured");
414
+ const headers = buildStewardHeaders(env);
415
+ const res = await fetch(
416
+ `${baseUrl}/vault/${encodeURIComponent(agentId)}/pending`,
417
+ { headers }
418
+ );
419
+ if (res.status === 404) return [];
420
+ if (!res.ok) {
421
+ const errText = await res.text().catch(() => "Unknown error");
422
+ throw new Error(
423
+ `Steward pending approvals failed (${res.status}): ${errText}`
424
+ );
425
+ }
426
+ const body = await res.json();
427
+ return body.data ?? body ?? [];
428
+ }
429
+ async function approveStewardTransaction(agentId, txId, env = process.env) {
430
+ const baseUrl = getStewardBaseUrl(env);
431
+ if (!baseUrl) throw new Error("Steward not configured");
432
+ const headers = buildStewardHeaders(env);
433
+ const res = await fetch(
434
+ `${baseUrl}/vault/${encodeURIComponent(agentId)}/approve/${encodeURIComponent(txId)}`,
435
+ { method: "POST", headers }
436
+ );
437
+ if (!res.ok) {
438
+ const errText = await res.text().catch(() => "Unknown error");
439
+ throw new Error(`Steward approve failed (${res.status}): ${errText}`);
440
+ }
441
+ const body = await res.json();
442
+ return body.data ?? body;
443
+ }
444
+ async function denyStewardTransaction(agentId, txId, reason, env = process.env) {
445
+ const baseUrl = getStewardBaseUrl(env);
446
+ if (!baseUrl) throw new Error("Steward not configured");
447
+ const headers = buildStewardHeaders(env);
448
+ const reqBody = {};
449
+ if (reason) reqBody.reason = reason;
450
+ const res = await fetch(
451
+ `${baseUrl}/vault/${encodeURIComponent(agentId)}/reject/${encodeURIComponent(txId)}`,
452
+ { method: "POST", headers, body: JSON.stringify(reqBody) }
453
+ );
454
+ if (!res.ok) {
455
+ const errText = await res.text().catch(() => "Unknown error");
456
+ throw new Error(`Steward deny failed (${res.status}): ${errText}`);
457
+ }
458
+ const body = await res.json().catch(() => ({}));
459
+ return body.data ?? body ?? { txId };
460
+ }
461
+ async function getStewardHistory(agentId, opts, env = process.env) {
462
+ const baseUrl = getStewardBaseUrl(env);
463
+ if (!baseUrl) throw new Error("Steward not configured");
464
+ const headers = buildStewardHeaders(env);
465
+ const params = new URLSearchParams();
466
+ if (opts?.limit != null) params.set("limit", String(opts.limit));
467
+ if (opts?.offset != null) params.set("offset", String(opts.offset));
468
+ const qs = params.toString() ? `?${params.toString()}` : "";
469
+ const res = await fetch(
470
+ `${baseUrl}/vault/${encodeURIComponent(agentId)}/history${qs}`,
471
+ { headers }
472
+ );
473
+ if (!res.ok) {
474
+ const errText = await res.text().catch(() => "Unknown error");
475
+ throw new Error(`Steward history failed (${res.status}): ${errText}`);
476
+ }
477
+ const body = await res.json();
478
+ return body.data ?? body ?? [];
479
+ }
480
+ async function provisionStewardWallet(params) {
481
+ const env = params.env ?? process.env;
482
+ const client = createStewardClient({ env });
483
+ if (!client) {
484
+ throw new Error("Steward not configured \u2014 cannot provision wallet");
485
+ }
486
+ const identity = await client.createWallet(
487
+ params.agentId,
488
+ params.agentName,
489
+ params.platformId
490
+ );
491
+ if (params.defaultPolicies && params.defaultPolicies.length > 0) {
492
+ await client.setPolicies(params.agentId, params.defaultPolicies);
493
+ }
494
+ return { walletAddress: identity.walletAddress };
495
+ }
496
+ async function signViaSteward(request, env = process.env) {
497
+ const baseUrl = getStewardBaseUrl(env);
498
+ if (!baseUrl) throw new Error("Steward not configured");
499
+ const evmAddress = normalizeEnvValue(env.EVM_ADDRESS) ?? normalizeEnvValue(env.ELIZA_EVM_ADDRESS) ?? null;
500
+ const agentId = resolveStewardAgentId(env, evmAddress);
501
+ if (!agentId) throw new Error("Steward agent ID not resolved");
502
+ const headers = buildStewardHeaders(env);
503
+ const res = await fetch(
504
+ `${baseUrl}/vault/${encodeURIComponent(agentId)}/sign`,
505
+ {
506
+ method: "POST",
507
+ headers,
508
+ body: JSON.stringify({
509
+ to: request.to,
510
+ value: request.value,
511
+ chainId: request.chainId,
512
+ data: request.data,
513
+ broadcast: request.broadcast ?? true,
514
+ description: request.description
515
+ })
516
+ }
517
+ );
518
+ const body = await res.json().catch(() => ({}));
519
+ if (res.ok && body.ok === true) {
520
+ const data = body.data ?? {};
521
+ return {
522
+ approved: true,
523
+ txHash: typeof data.txHash === "string" ? data.txHash : void 0
524
+ };
525
+ }
526
+ if (res.status === 202) {
527
+ const data = body.data ?? {};
528
+ return {
529
+ approved: false,
530
+ pending: true,
531
+ txId: typeof data.txId === "string" ? data.txId : void 0,
532
+ violations: normalizeViolations(data.violations)
533
+ };
534
+ }
535
+ if (res.status === 403) {
536
+ const data = body.data ?? {};
537
+ return {
538
+ approved: false,
539
+ denied: true,
540
+ violations: normalizeViolations(data.violations)
541
+ };
542
+ }
543
+ const errMsg = typeof body.error === "string" ? body.error : `Steward sign failed (${res.status})`;
544
+ throw new Error(errMsg);
545
+ }
546
+ function normalizeViolations(raw) {
547
+ if (!Array.isArray(raw)) return void 0;
548
+ return raw.filter(
549
+ (v) => !!v && typeof v === "object" && typeof v.policy === "string" && typeof v.reason === "string"
550
+ ).map((v) => ({ policy: v.policy, reason: v.reason }));
551
+ }
552
+ const MAX_WEBHOOK_EVENTS = 200;
553
+ const recentWebhookEvents = [];
554
+ function pushWebhookEvent(event) {
555
+ recentWebhookEvents.push(event);
556
+ if (recentWebhookEvents.length > MAX_WEBHOOK_EVENTS) {
557
+ recentWebhookEvents.splice(
558
+ 0,
559
+ recentWebhookEvents.length - MAX_WEBHOOK_EVENTS
560
+ );
561
+ }
562
+ }
563
+ function getRecentWebhookEvents(eventType, sinceIndex = 0) {
564
+ const all = eventType ? recentWebhookEvents.filter((e) => e.event === eventType) : recentWebhookEvents;
565
+ const events = all.slice(sinceIndex);
566
+ return { events, nextIndex: recentWebhookEvents.length };
567
+ }
568
+ async function registerStewardWebhook(webhookUrl, env = process.env) {
569
+ const baseUrl = getStewardBaseUrl(env);
570
+ if (!baseUrl) throw new Error("Steward not configured");
571
+ const tenantId = normalizeEnvValue(env.STEWARD_TENANT_ID);
572
+ if (!tenantId)
573
+ throw new Error("STEWARD_TENANT_ID not set \u2014 cannot register webhook");
574
+ const headers = buildStewardHeaders(env);
575
+ const res = await fetch(
576
+ `${baseUrl}/tenants/${encodeURIComponent(tenantId)}`,
577
+ {
578
+ method: "PUT",
579
+ headers,
580
+ body: JSON.stringify({ webhookUrl })
581
+ }
582
+ );
583
+ if (!res.ok) {
584
+ const errText = await res.text().catch(() => "Unknown error");
585
+ throw new Error(
586
+ `Steward webhook registration failed (${res.status}): ${errText}`
587
+ );
588
+ }
589
+ }
590
+ async function tryRegisterStewardWebhook(port = Number(
591
+ process.env.ELIZA_API_PORT?.trim() || process.env.ELIZA_PORT?.trim() || "31337"
592
+ ) || 31337, env = process.env) {
593
+ if (!isStewardConfigured(env)) return;
594
+ const webhookUrl = `http://127.0.0.1:${port}/api/wallet/steward-webhook`;
595
+ try {
596
+ await registerStewardWebhook(webhookUrl, env);
597
+ console.info(`[steward] Webhook registered: ${webhookUrl}`);
598
+ } catch (err) {
599
+ console.warn(
600
+ `[steward] Webhook registration failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`
601
+ );
602
+ }
603
+ }
604
+ let ensureStewardAgentPromise = null;
605
+ function ensureStewardAgent(options = {}) {
606
+ if (!ensureStewardAgentPromise) {
607
+ ensureStewardAgentPromise = doEnsureStewardAgent(options);
608
+ }
609
+ return ensureStewardAgentPromise;
610
+ }
611
+ async function doEnsureStewardAgent(options = {}) {
612
+ const env = options.env ?? process.env;
613
+ const baseUrl = normalizeEnvValue(env.STEWARD_API_URL);
614
+ if (!baseUrl) {
615
+ return null;
616
+ }
617
+ const agentId = options.agentId ?? resolveStewardAgentId(env) ?? null;
618
+ if (!agentId) {
619
+ return null;
620
+ }
621
+ const agentName = options.agentName ?? agentId;
622
+ try {
623
+ const client = createStewardClient({ env });
624
+ if (!client) {
625
+ return null;
626
+ }
627
+ try {
628
+ const agent = await client.getAgent(agentId);
629
+ const result2 = {
630
+ agentId,
631
+ agentName: agent.name || agentName,
632
+ walletAddresses: {
633
+ evm: agent.walletAddresses?.evm?.trim() || agent.walletAddress?.trim() || null,
634
+ solana: agent.walletAddresses?.solana?.trim() || null
635
+ },
636
+ created: false
637
+ };
638
+ persistAgentCredentials(baseUrl, env, result2);
639
+ return result2;
640
+ } catch (err) {
641
+ if (!(err instanceof StewardApiError) || err.status !== 404) {
642
+ throw err;
643
+ }
644
+ }
645
+ console.info(`[steward] Agent "${agentId}" not found, creating...`);
646
+ const tenantId = normalizeEnvValue(env.STEWARD_TENANT_ID);
647
+ const apiKey = normalizeEnvValue(env.STEWARD_API_KEY);
648
+ if (tenantId && apiKey) {
649
+ try {
650
+ const tenantRes = await fetch(`${baseUrl}/tenants`, {
651
+ method: "POST",
652
+ headers: {
653
+ "Content-Type": "application/json",
654
+ "X-Api-Key": normalizeEnvValue(env.STEWARD_MASTER_PASSWORD) ?? ""
655
+ },
656
+ body: JSON.stringify({
657
+ id: tenantId,
658
+ name: "Desktop",
659
+ apiKeyHash: fingerprintRandomToken(apiKey)
660
+ })
661
+ });
662
+ if (!tenantRes.ok) {
663
+ const body = await tenantRes.json().catch(() => ({}));
664
+ if (!body.error?.includes("already exists")) {
665
+ console.warn(
666
+ `[steward] Tenant creation returned ${tenantRes.status}: ${body.error}`
667
+ );
668
+ }
669
+ }
670
+ } catch (tenantErr) {
671
+ console.warn(
672
+ `[steward] Tenant creation failed (non-fatal): ${tenantErr instanceof Error ? tenantErr.message : String(tenantErr)}`
673
+ );
674
+ }
675
+ }
676
+ const headers = buildStewardHeaders(env);
677
+ const agentRes = await fetch(`${baseUrl}/agents`, {
678
+ method: "POST",
679
+ headers,
680
+ body: JSON.stringify({ id: agentId, name: agentName })
681
+ });
682
+ if (!agentRes.ok) {
683
+ const errText = await agentRes.text().catch(() => "Unknown error");
684
+ console.warn(
685
+ `[steward] Agent creation failed (${agentRes.status}): ${errText}`
686
+ );
687
+ return null;
688
+ }
689
+ const agentBody = await agentRes.json();
690
+ if (!agentBody.ok || !agentBody.data) {
691
+ console.warn("[steward] Agent creation returned unexpected response");
692
+ return null;
693
+ }
694
+ let agentToken = "";
695
+ try {
696
+ const tokenRes = await fetch(
697
+ `${baseUrl}/agents/${encodeURIComponent(agentId)}/token`,
698
+ { method: "POST", headers }
699
+ );
700
+ if (tokenRes.ok) {
701
+ const tokenBody = await tokenRes.json();
702
+ agentToken = tokenBody.data?.token ?? "";
703
+ }
704
+ } catch {
705
+ console.warn("[steward] Token generation failed (non-fatal)");
706
+ }
707
+ const result = {
708
+ agentId,
709
+ agentName,
710
+ walletAddresses: {
711
+ evm: agentBody.data.walletAddresses?.evm?.trim() || agentBody.data.walletAddress?.trim() || null,
712
+ solana: agentBody.data.walletAddresses?.solana?.trim() || null
713
+ },
714
+ created: true
715
+ };
716
+ console.info(
717
+ `[steward] Agent "${agentId}" created with wallet ${result.walletAddresses.evm ?? "(none)"}`
718
+ );
719
+ persistAgentCredentials(baseUrl, env, result, agentToken);
720
+ return result;
721
+ } catch (err) {
722
+ console.warn(
723
+ `[steward] Auto-setup failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`
724
+ );
725
+ return null;
726
+ }
727
+ }
728
+ function persistAgentCredentials(apiUrl, env, result, agentToken) {
729
+ try {
730
+ const existing = loadStewardCredentials();
731
+ saveStewardCredentials({
732
+ apiUrl,
733
+ tenantId: normalizeEnvValue(env.STEWARD_TENANT_ID) ?? existing?.tenantId ?? "",
734
+ agentId: result.agentId,
735
+ apiKey: normalizeEnvValue(env.STEWARD_API_KEY) ?? existing?.apiKey ?? "",
736
+ agentToken: agentToken ?? normalizeEnvValue(env.STEWARD_AGENT_TOKEN) ?? existing?.agentToken ?? "",
737
+ walletAddresses: {
738
+ evm: result.walletAddresses.evm ?? void 0,
739
+ solana: result.walletAddresses.solana ?? void 0
740
+ },
741
+ agentName: result.agentName
742
+ });
743
+ } catch (credErr) {
744
+ console.warn(
745
+ `[steward] Failed to persist credentials (non-fatal): ${credErr instanceof Error ? credErr.message : String(credErr)}`
746
+ );
747
+ }
748
+ }
749
+ function __resetStewardAgentEnsured() {
750
+ ensureStewardAgentPromise = null;
751
+ }
752
+ export {
753
+ __resetStewardAgentEnsured,
754
+ approveStewardTransaction,
755
+ buildStewardHeaders,
756
+ createStewardClient,
757
+ denyStewardTransaction,
758
+ ensureStewardAgent,
759
+ formatStewardError,
760
+ getRecentWebhookEvents,
761
+ getStewardBalance,
762
+ getStewardBridgeStatus,
763
+ getStewardHistory,
764
+ getStewardPendingApprovals,
765
+ getStewardTokenBalances,
766
+ getStewardWalletAddresses,
767
+ isStewardConfigured,
768
+ provisionStewardWallet,
769
+ pushWebhookEvent,
770
+ registerStewardWebhook,
771
+ resolveStewardAgentId,
772
+ signTransactionWithOptionalSteward,
773
+ signViaSteward,
774
+ tryRegisterStewardWebhook
775
+ };
776
+ //# sourceMappingURL=steward-bridge.js.map