@oracle-agent/oracle 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (449) hide show
  1. package/CONTRIBUTING.md +99 -0
  2. package/README.md +20 -14
  3. package/SECURITY.md +6 -8
  4. package/SETUP.md +25 -27
  5. package/bin/desk-server.mjs +473 -0
  6. package/bin/oracle-data-mcp.mjs +1252 -0
  7. package/bin/oracle-equities.mjs +168 -0
  8. package/bin/oracle-init.mjs +525 -0
  9. package/bin/oracle-public-server.mjs +36 -0
  10. package/bin/oracle-route.mjs +254 -0
  11. package/bin/oracle-scan.mjs +192 -0
  12. package/bin/oracle-upgrade.mjs +42 -0
  13. package/bin/oracle.mjs +34 -0
  14. package/docs/adding-a-chain.md +229 -0
  15. package/docs/architecture.md +139 -0
  16. package/docs/buzz-integration.md +115 -0
  17. package/docs/cli.md +143 -0
  18. package/docs/connectors.md +13 -0
  19. package/docs/hyperliquid-builder-code.md +50 -0
  20. package/docs/locals-only-fee-waiver.md +34 -0
  21. package/docs/oracle-pack-standard.md +29 -0
  22. package/docs/profiles.md +151 -0
  23. package/docs/public-surface.md +206 -0
  24. package/examples/add-a-chain.mjs +65 -0
  25. package/examples/oracle-pack-template.mjs +38 -0
  26. package/examples/research-a-token.mjs +70 -0
  27. package/package.json +78 -32
  28. package/plugins/oracle-owner-gate/__init__.py +288 -0
  29. package/plugins/oracle-owner-gate/plugin.yaml +9 -0
  30. package/{dist/assets/profiles → profiles}/oracle/SOUL.md +0 -14
  31. package/protocols/templates/safe-erc20/SECURITY.md +16 -0
  32. package/protocols/templates/safe-erc20/foundry.toml +12 -0
  33. package/protocols/templates/safe-erc20/remappings.txt +2 -0
  34. package/protocols/templates/safe-erc20/src/SafeERC20.sol +53 -0
  35. package/protocols/templates/safe-erc20/test/SafeERC20.t.sol +72 -0
  36. package/public/oracle-splash/_variants/ice.html +3 -3
  37. package/public/oracle-splash/_variants/ivory.html +3 -3
  38. package/public/oracle-splash/downloads/index.html +34 -223
  39. package/public/oracle-splash/index.html +11 -11
  40. package/scripts/adversarial-bench.mjs +114 -0
  41. package/scripts/build-dist.mjs +119 -0
  42. package/scripts/build-inscription.py +230 -0
  43. package/scripts/check-doc-drift.mjs +123 -0
  44. package/scripts/check-test-count.mjs +105 -0
  45. package/scripts/e2e-hl-markets.mjs +21 -0
  46. package/scripts/e2e-hl-perps.mjs +48 -0
  47. package/scripts/e2e-hypercore-staking.mjs +128 -0
  48. package/scripts/e2e-solana-bitcoin.mjs +183 -0
  49. package/scripts/guard-publish.mjs +22 -0
  50. package/scripts/protocol-template-gate.mjs +15 -0
  51. package/scripts/public-api-scan.mjs +23 -0
  52. package/scripts/publish-dist.mjs +67 -0
  53. package/scripts/record-hero-cli.sh +80 -0
  54. package/scripts/secret-scan.mjs +168 -0
  55. package/scripts/smoke-dist-bins.mjs +89 -0
  56. package/scripts/verify-dist.mjs +29 -0
  57. package/scripts/verify-v3-venues.mjs +233 -0
  58. package/skins/oracle.yaml +56 -0
  59. package/src/action-receipts.mjs +265 -0
  60. package/src/action-semantics.mjs +62 -0
  61. package/src/address-book.mjs +208 -0
  62. package/src/agent-auth.mjs +206 -0
  63. package/src/approval-guard.mjs +282 -0
  64. package/src/attestation-secret.mjs +94 -0
  65. package/src/audit-log.mjs +196 -0
  66. package/src/auth/oauth.mjs +672 -0
  67. package/src/auto-slippage.mjs +378 -0
  68. package/src/capability-posture.mjs +125 -0
  69. package/src/cards.mjs +422 -0
  70. package/src/chains.mjs +62 -0
  71. package/src/cli/chain-catalog.mjs +215 -0
  72. package/src/cli/chain-state.mjs +74 -0
  73. package/src/cli/commands/auth.mjs +193 -0
  74. package/src/cli/commands/bootstrap.mjs +87 -0
  75. package/src/cli/commands/chain.mjs +143 -0
  76. package/src/cli/commands/chat.mjs +465 -0
  77. package/src/cli/commands/credential.mjs +9 -0
  78. package/src/cli/commands/data-mcp.mjs +18 -0
  79. package/src/cli/commands/data.mjs +75 -0
  80. package/src/cli/commands/doctor.mjs +136 -0
  81. package/src/cli/commands/equities.mjs +41 -0
  82. package/src/cli/commands/farm.mjs +129 -0
  83. package/src/cli/commands/fees.mjs +109 -0
  84. package/src/cli/commands/follow.mjs +130 -0
  85. package/src/cli/commands/harness.mjs +63 -0
  86. package/src/cli/commands/help.mjs +7 -0
  87. package/src/cli/commands/init.mjs +27 -0
  88. package/src/cli/commands/mcp.mjs +154 -0
  89. package/src/cli/commands/model.mjs +106 -0
  90. package/src/cli/commands/plugins.mjs +241 -0
  91. package/src/cli/commands/prepare.mjs +12 -0
  92. package/src/cli/commands/public.mjs +20 -0
  93. package/src/cli/commands/resolve.mjs +64 -0
  94. package/src/cli/commands/route.mjs +12 -0
  95. package/src/cli/commands/runner.mjs +9 -0
  96. package/src/cli/commands/scan.mjs +12 -0
  97. package/src/cli/commands/setup.mjs +294 -0
  98. package/src/cli/commands/sign.mjs +21 -0
  99. package/src/cli/commands/signer.mjs +9 -0
  100. package/src/cli/commands/swap.mjs +102 -0
  101. package/src/cli/commands/upgrade.mjs +12 -0
  102. package/src/cli/commands/vault.mjs +9 -0
  103. package/src/cli/commands/version.mjs +22 -0
  104. package/src/cli/first-run.mjs +23 -0
  105. package/src/cli/kernel.mjs +262 -0
  106. package/src/cli/mcp-targets/chatgpt.mjs +51 -0
  107. package/src/cli/mcp-targets/claude-code.mjs +39 -0
  108. package/src/cli/mcp-targets/claude-desktop.mjs +24 -0
  109. package/src/cli/mcp-targets/codex.mjs +41 -0
  110. package/src/cli/mcp-targets/cursor.mjs +32 -0
  111. package/src/cli/mcp-targets/shared.mjs +71 -0
  112. package/src/cli/mcp-targets/vscode.mjs +39 -0
  113. package/src/cli/messaging-platforms.mjs +217 -0
  114. package/src/cli/model-config.mjs +78 -0
  115. package/src/cli/operator-dispatch.mjs +257 -0
  116. package/src/cli/oracle-harness.py +415 -0
  117. package/src/cli/paths.mjs +107 -0
  118. package/src/cli/runtime.mjs +351 -0
  119. package/src/cli/setup-state.mjs +168 -0
  120. package/src/cli/spawn-child.mjs +43 -0
  121. package/src/data/catalog.mjs +858 -0
  122. package/src/data/desk-data.mjs +877 -0
  123. package/src/data/http.mjs +253 -0
  124. package/src/data/names.mjs +188 -0
  125. package/src/data/provider-endpoint.mjs +94 -0
  126. package/src/data/providers/aave-v3.mjs +139 -0
  127. package/src/data/providers/across-bridge.mjs +41 -0
  128. package/src/data/providers/aerodrome.mjs +245 -0
  129. package/src/data/providers/aevo.mjs +33 -0
  130. package/src/data/providers/approval-indexer.mjs +133 -0
  131. package/src/data/providers/approvals.mjs +594 -0
  132. package/src/data/providers/babylon-staking.mjs +149 -0
  133. package/src/data/providers/balancer.mjs +209 -0
  134. package/src/data/providers/beefy-yields.mjs +45 -0
  135. package/src/data/providers/birdeye-tokens.mjs +33 -0
  136. package/src/data/providers/bisq-markets.mjs +145 -0
  137. package/src/data/providers/bitcoin-esplora.mjs +216 -0
  138. package/src/data/providers/bitcoin-meta.mjs +378 -0
  139. package/src/data/providers/blockscout.mjs +14 -0
  140. package/src/data/providers/bob-rootstock.mjs +198 -0
  141. package/src/data/providers/braiins-insights.mjs +103 -0
  142. package/src/data/providers/bridge-aggregator.mjs +259 -0
  143. package/src/data/providers/bridges.mjs +242 -0
  144. package/src/data/providers/bungee.mjs +29 -0
  145. package/src/data/providers/celestia-da.mjs +38 -0
  146. package/src/data/providers/changenow.mjs +135 -0
  147. package/src/data/providers/compound.mjs +32 -0
  148. package/src/data/providers/connext.mjs +28 -0
  149. package/src/data/providers/convex.mjs +30 -0
  150. package/src/data/providers/cow-protocol.mjs +110 -0
  151. package/src/data/providers/cowswap.mjs +415 -0
  152. package/src/data/providers/curve.mjs +201 -0
  153. package/src/data/providers/das-assets.mjs +59 -0
  154. package/src/data/providers/debridge.mjs +109 -0
  155. package/src/data/providers/defillama.mjs +88 -0
  156. package/src/data/providers/dexscreener.mjs +43 -0
  157. package/src/data/providers/drift.mjs +32 -0
  158. package/src/data/providers/dydx.mjs +41 -0
  159. package/src/data/providers/evm-rpc.mjs +225 -0
  160. package/src/data/providers/farming.mjs +291 -0
  161. package/src/data/providers/geckoterminal.mjs +34 -0
  162. package/src/data/providers/gmx.mjs +496 -0
  163. package/src/data/providers/hiro-stacks.mjs +150 -0
  164. package/src/data/providers/hl-assets.mjs +165 -0
  165. package/src/data/providers/hl-info.mjs +108 -0
  166. package/src/data/providers/hl-markets.mjs +210 -0
  167. package/src/data/providers/hl-outcome.mjs +61 -0
  168. package/src/data/providers/hl-perps.mjs +419 -0
  169. package/src/data/providers/hl-staking.mjs +353 -0
  170. package/src/data/providers/hl-ws.mjs +119 -0
  171. package/src/data/providers/hyperevm-dex.mjs +49 -0
  172. package/src/data/providers/jito-mev.mjs +117 -0
  173. package/src/data/providers/jupiter-venues.mjs +119 -0
  174. package/src/data/providers/jupiter.mjs +315 -0
  175. package/src/data/providers/kamino-strategies.mjs +143 -0
  176. package/src/data/providers/l2beat-tvl.mjs +42 -0
  177. package/src/data/providers/lifi.mjs +166 -0
  178. package/src/data/providers/liquid-esplora.mjs +152 -0
  179. package/src/data/providers/magiceden-ordinals.mjs +141 -0
  180. package/src/data/providers/magiceden-sol.mjs +406 -0
  181. package/src/data/providers/mempool-lightning.mjs +144 -0
  182. package/src/data/providers/mempool-mining.mjs +142 -0
  183. package/src/data/providers/meteora-dlmm.mjs +168 -0
  184. package/src/data/providers/morpho.mjs +177 -0
  185. package/src/data/providers/nft-gallery.mjs +163 -0
  186. package/src/data/providers/nft-portfolio.mjs +494 -0
  187. package/src/data/providers/odos.mjs +156 -0
  188. package/src/data/providers/ondo.mjs +31 -0
  189. package/src/data/providers/oneinch.mjs +174 -0
  190. package/src/data/providers/opensea-multichain.mjs +136 -0
  191. package/src/data/providers/opensea-nft.mjs +371 -0
  192. package/src/data/providers/orca.mjs +29 -0
  193. package/src/data/providers/ordinals-runes.mjs +180 -0
  194. package/src/data/providers/pancakeswap.mjs +28 -0
  195. package/src/data/providers/paraswap.mjs +125 -0
  196. package/src/data/providers/pendle.mjs +188 -0
  197. package/src/data/providers/poly-clob.mjs +283 -0
  198. package/src/data/providers/poly-public.mjs +96 -0
  199. package/src/data/providers/poly-ws.mjs +103 -0
  200. package/src/data/providers/polygon-staking.mjs +227 -0
  201. package/src/data/providers/portfolio-history.mjs +394 -0
  202. package/src/data/providers/portfolio.mjs +600 -0
  203. package/src/data/providers/pyth-price-feeds.mjs +172 -0
  204. package/src/data/providers/raydium.mjs +35 -0
  205. package/src/data/providers/relayscan-mev.mjs +72 -0
  206. package/src/data/providers/rfq.mjs +15 -0
  207. package/src/data/providers/rh-agent.mjs +59 -0
  208. package/src/data/providers/sanctum-lst.mjs +180 -0
  209. package/src/data/providers/satflow.mjs +341 -0
  210. package/src/data/providers/signed-material-guard.mjs +108 -0
  211. package/src/data/providers/solana-rpc.mjs +197 -0
  212. package/src/data/providers/solend-lending.mjs +166 -0
  213. package/src/data/providers/spark-lend.mjs +42 -0
  214. package/src/data/providers/squid-router.mjs +29 -0
  215. package/src/data/providers/stargate.mjs +29 -0
  216. package/src/data/providers/sushiswap.mjs +30 -0
  217. package/src/data/providers/symbiotic-restaking.mjs +41 -0
  218. package/src/data/providers/thorchain.mjs +36 -0
  219. package/src/data/providers/traderjoe.mjs +28 -0
  220. package/src/data/providers/twap.mjs +152 -0
  221. package/src/data/providers/uniswap-v3.mjs +457 -0
  222. package/src/data/providers/uniswap-v4.mjs +414 -0
  223. package/src/data/providers/vertex.mjs +41 -0
  224. package/src/data/providers/wallet-watch.mjs +264 -0
  225. package/src/data/providers/wormhole.mjs +28 -0
  226. package/src/data/providers/yearn.mjs +31 -0
  227. package/src/data/providers/zerox.mjs +167 -0
  228. package/src/data/public-api-scan.mjs +61 -0
  229. package/src/data/quote-placeholder.mjs +31 -0
  230. package/src/desk/swap-prepare.mjs +194 -0
  231. package/src/equities/bridge.mjs +388 -0
  232. package/src/equities/fixtures/bridge_routes.json +159 -0
  233. package/src/equities/fixtures/dst_transitions.json +29 -0
  234. package/src/equities/fixtures/equity_dex_pools.json +154 -0
  235. package/src/equities/fixtures/hip3_l2books.json +2711 -0
  236. package/src/equities/fixtures/nyse_holidays.json +1 -0
  237. package/src/equities/fixtures/oracles.json +100 -0
  238. package/src/equities/fixtures/rh_pool_state.json +244 -0
  239. package/src/equities/fixtures/solana_xstocks.json +704 -0
  240. package/src/equities/fixtures/ton_xstocks.json +35 -0
  241. package/src/equities/fixtures/universe.json +411 -0
  242. package/src/equities/fixtures/venues.json +3542 -0
  243. package/src/equities/fixtures.mjs +405 -0
  244. package/src/equities/funding.mjs +142 -0
  245. package/src/equities/index.mjs +166 -0
  246. package/src/equities/liveness.mjs +148 -0
  247. package/src/equities/marketHours.mjs +249 -0
  248. package/src/equities/normalize.mjs +295 -0
  249. package/src/equities/num.mjs +146 -0
  250. package/src/equities/prepare.mjs +95 -0
  251. package/src/equities/rank.mjs +260 -0
  252. package/src/equities/sourceNum.mjs +69 -0
  253. package/src/equities/types.mjs +220 -0
  254. package/src/equities/venues/arcus-perp.mjs +84 -0
  255. package/src/equities/venues/arcus-spot.mjs +105 -0
  256. package/src/equities/venues/hyperliquid-hip3.mjs +224 -0
  257. package/src/equities/venues/rh-uniswap.mjs +216 -0
  258. package/src/equities/venues/solana-xstocks.mjs +139 -0
  259. package/src/equities/venues/ton-stonfi.mjs +139 -0
  260. package/src/exact-integer.mjs +72 -0
  261. package/src/exec-policy.mjs +419 -0
  262. package/src/flags.mjs +15 -0
  263. package/src/fresh-window.mjs +76 -0
  264. package/src/gmx-attestation.mjs +176 -0
  265. package/src/index.mjs +107 -0
  266. package/src/licensing/locals-only.mjs +25 -0
  267. package/src/nft-gas-war-guard.mjs +139 -0
  268. package/src/onboarding/agent-keys.mjs +161 -0
  269. package/src/onboarding/harness-configs.mjs +102 -0
  270. package/src/onboarding/index.mjs +18 -0
  271. package/src/onboarding/tiers.mjs +139 -0
  272. package/src/oracle-env.mjs +55 -0
  273. package/src/package-manifest.mjs +42 -0
  274. package/src/plugins/agent-plugin-loader.mjs +225 -0
  275. package/src/portfolio-risk.mjs +170 -0
  276. package/src/prepare-envelope.mjs +204 -0
  277. package/src/profile-upgrade.mjs +277 -0
  278. package/src/protocol-execution.mjs +84 -0
  279. package/src/protocol-templates/gate.mjs +179 -0
  280. package/src/protocol-templates/prepare-deploy.mjs +81 -0
  281. package/src/public-api/agent-grants.mjs +57 -0
  282. package/src/public-api/buzz-integration.mjs +267 -0
  283. package/src/public-api/connect-agent.mjs +424 -0
  284. package/src/public-api/grants.mjs +142 -0
  285. package/src/public-api/http.mjs +707 -0
  286. package/src/public-api/metering.mjs +111 -0
  287. package/src/public-control/aa-adapter.mjs +402 -0
  288. package/src/public-control/build-registry.mjs +227 -0
  289. package/src/public-control/bundler-client.mjs +357 -0
  290. package/src/public-control/grant-indexer.mjs +296 -0
  291. package/src/public-control/policy-render.mjs +69 -0
  292. package/src/public-control/policy-schema.mjs +322 -0
  293. package/src/public-control/runtime-config.mjs +275 -0
  294. package/src/public-control/session-key-model.mjs +379 -0
  295. package/src/public-control/session-orchestrator.mjs +418 -0
  296. package/src/rfq/intent.mjs +180 -0
  297. package/src/rfq/sources.mjs +181 -0
  298. package/src/route-attestation.mjs +132 -0
  299. package/src/router/best-execution.mjs +326 -0
  300. package/src/router/index.mjs +250 -0
  301. package/src/router/integrator-fee.mjs +135 -0
  302. package/src/router/prepare-bridge.mjs +293 -0
  303. package/src/router/prepare-route.mjs +398 -0
  304. package/src/router/proposal.mjs +311 -0
  305. package/src/router/risk-classifier.mjs +119 -0
  306. package/src/router/route-sources.mjs +364 -0
  307. package/src/scanner/chains.config.mjs +543 -0
  308. package/src/scanner/contract.mjs +270 -0
  309. package/src/scanner/evm-scanner.mjs +394 -0
  310. package/src/scanner/index.mjs +9 -0
  311. package/src/scanner/v2-venue.mjs +351 -0
  312. package/src/scanner/v3-venue.mjs +308 -0
  313. package/src/scopes.mjs +44 -0
  314. package/src/sell-simulation.mjs +167 -0
  315. package/src/signals/engine.mjs +146 -0
  316. package/src/signals/index.mjs +1 -0
  317. package/src/token-transfer-guard.mjs +188 -0
  318. package/src/tui/app.mjs +438 -0
  319. package/src/tui/backend.mjs +215 -0
  320. package/src/tui/format.mjs +272 -0
  321. package/src/tui/gateway-client.mjs +177 -0
  322. package/src/tui/input.mjs +501 -0
  323. package/src/tui/memory.mjs +105 -0
  324. package/src/tui/meta-learn.mjs +85 -0
  325. package/src/tui/renderer.mjs +443 -0
  326. package/src/tui/scheduler.mjs +205 -0
  327. package/src/tui/skills-loader.mjs +140 -0
  328. package/src/tui/standalone-client.mjs +752 -0
  329. package/src/tui/theme.mjs +81 -0
  330. package/src/vault-attestation.mjs +146 -0
  331. package/src/venues.mjs +206 -0
  332. package/src/watch-preferences.mjs +85 -0
  333. package/dist/action-receipts.mjs +0 -1
  334. package/dist/action-semantics.mjs +0 -1
  335. package/dist/address-book.mjs +0 -2
  336. package/dist/bin/desk-server.mjs +0 -59
  337. package/dist/bin/oracle-data-mcp.mjs +0 -8
  338. package/dist/bin/oracle-equities.mjs +0 -20
  339. package/dist/bin/oracle-init.mjs +0 -24
  340. package/dist/bin/oracle-public-server.mjs +0 -5
  341. package/dist/bin/oracle-route.mjs +0 -22
  342. package/dist/bin/oracle-scan.mjs +0 -18
  343. package/dist/bin/oracle-upgrade.mjs +0 -21
  344. package/dist/bin/oracle.mjs +0 -76
  345. package/dist/chains.mjs +0 -1
  346. package/dist/cli/commands/auth.mjs +0 -16
  347. package/dist/cli/commands/bootstrap.mjs +0 -18
  348. package/dist/cli/commands/chain.mjs +0 -21
  349. package/dist/cli/commands/chat.mjs +0 -45
  350. package/dist/cli/commands/credential.mjs +0 -1
  351. package/dist/cli/commands/data-mcp.mjs +0 -2
  352. package/dist/cli/commands/data.mjs +0 -12
  353. package/dist/cli/commands/doctor.mjs +0 -5
  354. package/dist/cli/commands/equities.mjs +0 -15
  355. package/dist/cli/commands/farm.mjs +0 -59
  356. package/dist/cli/commands/follow.mjs +0 -28
  357. package/dist/cli/commands/gate.mjs +0 -13
  358. package/dist/cli/commands/harness.mjs +0 -15
  359. package/dist/cli/commands/help.mjs +0 -1
  360. package/dist/cli/commands/init.mjs +0 -3
  361. package/dist/cli/commands/mcp.mjs +0 -60
  362. package/dist/cli/commands/model.mjs +0 -54
  363. package/dist/cli/commands/plugins.mjs +0 -38
  364. package/dist/cli/commands/prepare.mjs +0 -2
  365. package/dist/cli/commands/public.mjs +0 -3
  366. package/dist/cli/commands/resolve.mjs +0 -23
  367. package/dist/cli/commands/route.mjs +0 -2
  368. package/dist/cli/commands/runner.mjs +0 -1
  369. package/dist/cli/commands/scan.mjs +0 -2
  370. package/dist/cli/commands/setup.mjs +0 -34
  371. package/dist/cli/commands/sign.mjs +0 -21
  372. package/dist/cli/commands/signer.mjs +0 -1
  373. package/dist/cli/commands/swap.mjs +0 -36
  374. package/dist/cli/commands/upgrade.mjs +0 -2
  375. package/dist/cli/commands/vault.mjs +0 -1
  376. package/dist/cli/commands/version.mjs +0 -2
  377. package/dist/data/desk-data.mjs +0 -55
  378. package/dist/data/names.mjs +0 -2
  379. package/dist/data/providers/farming.mjs +0 -2
  380. package/dist/equities/index.mjs +0 -1
  381. package/dist/index.mjs +0 -60
  382. package/dist/nft-gas-war-guard.mjs +0 -1
  383. package/dist/onboarding/harness-configs.mjs +0 -4
  384. package/dist/portfolio-risk.mjs +0 -1
  385. package/dist/prepare-envelope.mjs +0 -1
  386. package/dist/public-api/agent-grants.mjs +0 -3
  387. package/dist/public-control/policy-schema.mjs +0 -1
  388. package/dist/router/index.mjs +0 -2
  389. package/dist/scanner/index.mjs +0 -4
  390. package/dist/signals/index.mjs +0 -1
  391. package/dist/watch-preferences.mjs +0 -1
  392. /package/{dist/assets/profiles → profiles}/_template/SOUL.md +0 -0
  393. /package/{dist/assets/profiles → profiles}/_template/profile.json +0 -0
  394. /package/{dist/assets/profiles → profiles}/bitcoin-agent/SOUL.md +0 -0
  395. /package/{dist/assets/profiles → profiles}/bitcoin-agent/profile.json +0 -0
  396. /package/{dist/assets/profiles → profiles}/hyperliquid-agent/SOUL.md +0 -0
  397. /package/{dist/assets/profiles → profiles}/hyperliquid-agent/profile.json +0 -0
  398. /package/{dist/assets/profiles → profiles}/oracle/profile.json +0 -0
  399. /package/{dist/assets/profiles → profiles}/polymarket-agent/SOUL.md +0 -0
  400. /package/{dist/assets/profiles → profiles}/polymarket-agent/profile.json +0 -0
  401. /package/{dist/assets/profiles → profiles}/profile.schema.json +0 -0
  402. /package/{dist/assets/profiles → profiles}/protocol-builder/SOUL.md +0 -0
  403. /package/{dist/assets/profiles → profiles}/protocol-builder/profile.json +0 -0
  404. /package/{dist/assets/profiles → profiles}/robinhood-agent/SOUL.md +0 -0
  405. /package/{dist/assets/profiles → profiles}/robinhood-agent/profile.json +0 -0
  406. /package/{dist/assets/profiles → profiles}/solana-agent/SOUL.md +0 -0
  407. /package/{dist/assets/profiles → profiles}/solana-agent/profile.json +0 -0
  408. /package/{dist/assets/profiles → profiles}/stable-agent/SOUL.md +0 -0
  409. /package/{dist/assets/profiles → profiles}/stable-agent/profile.json +0 -0
  410. /package/{dist/assets/skills → skills}/balance/SKILL.md +0 -0
  411. /package/{dist/assets/skills → skills}/bitcoin-l1.md +0 -0
  412. /package/{dist/assets/skills → skills}/chain-defi-ecosystem-profiling.md +0 -0
  413. /package/{dist/assets/skills → skills}/evm-contract-research.md +0 -0
  414. /package/{dist/assets/skills → skills}/hyperliquid.md +0 -0
  415. /package/{dist/assets/skills → skills}/multichain-exec-desk.md +0 -0
  416. /package/{dist/assets/skills → skills}/oracle-action-semantics/SKILL.md +0 -0
  417. /package/{dist/assets/skills → skills}/oracle-best-execution/SKILL.md +0 -0
  418. /package/{dist/assets/skills → skills}/oracle-best-execution.md +0 -0
  419. /package/{dist/assets/skills → skills}/oracle-bitcoin/SKILL.md +0 -0
  420. /package/{dist/assets/skills → skills}/oracle-chain-graphs-telegram-cards/SKILL.md +0 -0
  421. /package/{dist/assets/skills → skills}/oracle-chat/SKILL.md +0 -0
  422. /package/{dist/assets/skills → skills}/oracle-chat/chain.SKILL.md +0 -0
  423. /package/{dist/assets/skills → skills}/oracle-chat/setup.SKILL.md +0 -0
  424. /package/{dist/assets/skills → skills}/oracle-circuit-breaker/SKILL.md +0 -0
  425. /package/{dist/assets/skills → skills}/oracle-contract-research/SKILL.md +0 -0
  426. /package/{dist/assets/skills → skills}/oracle-desk/SKILL.md +0 -0
  427. /package/{dist/assets/skills → skills}/oracle-desk.md +0 -0
  428. /package/{dist/assets/skills → skills}/oracle-dex-launch/SKILL.md +0 -0
  429. /package/{dist/assets/skills → skills}/oracle-equities/SKILL.md +0 -0
  430. /package/{dist/assets/skills → skills}/oracle-grants/SKILL.md +0 -0
  431. /package/{dist/assets/skills → skills}/oracle-hypercore-staking/SKILL.md +0 -0
  432. /package/{dist/assets/skills → skills}/oracle-hyperliquid/SKILL.md +0 -0
  433. /package/{dist/assets/skills → skills}/oracle-meme-token-sniper/SKILL.md +0 -0
  434. /package/{dist/assets/skills → skills}/oracle-multichain-nft-launch/SKILL.md +0 -0
  435. /package/{dist/assets/skills → skills}/oracle-multichain-token-launch/SKILL.md +0 -0
  436. /package/{dist/assets/skills → skills}/oracle-nft-gacha-launch/SKILL.md +0 -0
  437. /package/{dist/assets/skills → skills}/oracle-nft-mint-gas-war/SKILL.md +0 -0
  438. /package/{dist/assets/skills → skills}/oracle-polymarket/SKILL.md +0 -0
  439. /package/{dist/assets/skills → skills}/oracle-protocol-builder/SKILL.md +0 -0
  440. /package/{dist/assets/skills → skills}/oracle-protocol-security/SKILL.md +0 -0
  441. /package/{dist/assets/skills → skills}/oracle-public-product/SKILL.md +0 -0
  442. /package/{dist/assets/skills → skills}/oracle-receipts/SKILL.md +0 -0
  443. /package/{dist/assets/skills → skills}/oracle-receipts.md +0 -0
  444. /package/{dist/assets/skills → skills}/oracle-rfq-tokenized-assets/SKILL.md +0 -0
  445. /package/{dist/assets/skills → skills}/oracle-smart-wallet-scanner/SKILL.md +0 -0
  446. /package/{dist/assets/skills → skills}/oracle-solana/SKILL.md +0 -0
  447. /package/{dist/assets/skills → skills}/oracle-solana-nft/SKILL.md +0 -0
  448. /package/{dist/assets/skills → skills}/oracle-token-research/SKILL.md +0 -0
  449. /package/{dist/assets/skills → skills}/solana.md +0 -0
@@ -0,0 +1,877 @@
1
+ // desk.data — unified read-only facade. Never touches wallet keys.
2
+
3
+ import { listProviders, getProvider } from "./catalog.mjs";
4
+ import { timed, mapLimit } from "./http.mjs";
5
+ import * as hl from "./providers/hl-info.mjs";
6
+ import * as poly from "./providers/poly-public.mjs";
7
+ import * as rh from "./providers/rh-agent.mjs";
8
+ import * as rpc from "./providers/evm-rpc.mjs";
9
+ import * as solana from "./providers/solana-rpc.mjs";
10
+ import * as bitcoin from "./providers/bitcoin-esplora.mjs";
11
+ import * as bitcoinMeta from "./providers/bitcoin-meta.mjs";
12
+ import * as satflow from "./providers/satflow.mjs";
13
+ import * as jupiter from "./providers/jupiter.mjs";
14
+ import * as llama from "./providers/defillama.mjs";
15
+ import * as lifi from "./providers/lifi.mjs";
16
+ import * as dxs from "./providers/dexscreener.mjs";
17
+ import * as uni from "./providers/uniswap-v3.mjs";
18
+ import * as univ4 from "./providers/uniswap-v4.mjs";
19
+ import * as aerodrome from "./providers/aerodrome.mjs";
20
+ import * as zerox from "./providers/zerox.mjs";
21
+ import * as bridges from "./providers/bridges.mjs";
22
+ import * as cow from "./providers/cowswap.mjs";
23
+ import * as oneinch from "./providers/oneinch.mjs";
24
+ import * as hlws from "./providers/hl-ws.mjs";
25
+ import * as polyws from "./providers/poly-ws.mjs";
26
+ import * as osnft from "./providers/opensea-nft.mjs";
27
+ import * as hevm from "./providers/hyperevm-dex.mjs";
28
+ import * as mesol from "./providers/magiceden-sol.mjs";
29
+ import * as hlstake from "./providers/hl-staking.mjs";
30
+ import * as hlmarkets from "./providers/hl-markets.mjs";
31
+ import * as hloutcome from "./providers/hl-outcome.mjs";
32
+ import * as polyclob from "./providers/poly-clob.mjs";
33
+ import * as protoTpl from "../protocol-templates/prepare-deploy.mjs";
34
+ import { listProtocolTemplates, runProtocolTemplateGate } from "../protocol-templates/gate.mjs";
35
+ import * as hlperps from "./providers/hl-perps.mjs";
36
+ import * as gecko from "./providers/geckoterminal.mjs";
37
+ import * as curve from "./providers/curve.mjs";
38
+ import * as gmx from "./providers/gmx.mjs";
39
+ import * as morpho from "./providers/morpho.mjs";
40
+ import * as balancer from "./providers/balancer.mjs";
41
+ import * as pendle from "./providers/pendle.mjs";
42
+ import * as odos from "./providers/odos.mjs";
43
+ import * as blockscout from "./providers/blockscout.mjs";
44
+ import * as portfolio from "./providers/portfolio.mjs";
45
+ import * as portfolioHistory from "./providers/portfolio-history.mjs";
46
+ import * as nftPortfolio from "./providers/nft-portfolio.mjs";
47
+ import * as paraswap from "./providers/paraswap.mjs";
48
+ import * as rfq from "./providers/rfq.mjs";
49
+ import * as acrossBridge from "./providers/across-bridge.mjs";
50
+ import * as beefyYields from "./providers/beefy-yields.mjs";
51
+ import * as birdeye from "./providers/birdeye-tokens.mjs";
52
+ import * as celestia from "./providers/celestia-da.mjs";
53
+ import * as dasAssets from "./providers/das-assets.mjs";
54
+ import * as l2beat from "./providers/l2beat-tvl.mjs";
55
+ import * as sparkLend from "./providers/spark-lend.mjs";
56
+ import * as symbiotic from "./providers/symbiotic-restaking.mjs";
57
+ import * as polygonStaking from "./providers/polygon-staking.mjs";
58
+ import * as aaveV3 from "./providers/aave-v3.mjs";
59
+ import * as babylon from "./providers/babylon-staking.mjs";
60
+ import * as bisq from "./providers/bisq-markets.mjs";
61
+ import * as bobRootstock from "./providers/bob-rootstock.mjs";
62
+ import * as braiins from "./providers/braiins-insights.mjs";
63
+ import * as cowProtocol from "./providers/cow-protocol.mjs";
64
+ import * as hiroStacks from "./providers/hiro-stacks.mjs";
65
+ import * as jito from "./providers/jito-mev.mjs";
66
+ import * as kamino from "./providers/kamino-strategies.mjs";
67
+ import * as liquid from "./providers/liquid-esplora.mjs";
68
+ import * as magicEdenOrd from "./providers/magiceden-ordinals.mjs";
69
+ import * as mempoolLightning from "./providers/mempool-lightning.mjs";
70
+ import * as mempoolMining from "./providers/mempool-mining.mjs";
71
+ import * as meteora from "./providers/meteora-dlmm.mjs";
72
+ import * as ordinalsRunes from "./providers/ordinals-runes.mjs";
73
+ import * as pyth from "./providers/pyth-price-feeds.mjs";
74
+ import * as relayscan from "./providers/relayscan-mev.mjs";
75
+ import * as sanctum from "./providers/sanctum-lst.mjs";
76
+ import * as solend from "./providers/solend-lending.mjs";
77
+
78
+ const OPS = {
79
+ "hl-info": {
80
+ health: (o) => hl.hlHealth(o),
81
+ allMids: (o) => hl.hlAllMids(o),
82
+ l2Book: (o, a = {}) => hl.hlL2Book(a.coin, o),
83
+ outcomeMeta: (o) => hl.hlOutcomeMeta(o),
84
+ clearinghouse: (o, a = {}) => hl.hlClearinghouse(a.user, o),
85
+ userFills: (o, a = {}) => hl.hlUserFills(a.user, o),
86
+ meta: (o) => hl.hlMeta(o),
87
+ metaAndAssetCtxs: (o) => hl.hlMetaAndAssetCtxs(o),
88
+ candleSnapshot: (o, a = {}) => hl.hlCandleSnapshot(a, o),
89
+ openOrders: (o, a = {}) => hl.hlOpenOrders(a.user, o),
90
+ frontendOpenOrders: (o, a = {}) => hl.hlFrontendOpenOrders(a.user, o),
91
+ userState: (o, a = {}) => hl.hlUserState(a.user, o),
92
+ spotMeta: (o) => hl.hlSpotMeta(o),
93
+ },
94
+ "poly-public": {
95
+ health: (o) => poly.polyHealth(o),
96
+ time: (o) => poly.polyTime(o),
97
+ markets: (o, a = {}) => poly.polyMarkets(a, o),
98
+ book: (o, a = {}) => poly.polyBook(a.tokenId, o),
99
+ midpoint: (o, a = {}) => poly.polyMidpoint(a.tokenId, o),
100
+ spread: (o, a = {}) => poly.polySpread(a.tokenId, o),
101
+ price: (o, a = {}) => poly.polyPrice(a.tokenId, { side: a.side }, o),
102
+ events: (o, a = {}) => poly.polyEvents(a, o),
103
+ },
104
+ "rh-agent": {
105
+ health: (o) => rh.rhHealth(o),
106
+ policy: (o) => rh.rhPolicy(o),
107
+ chainConfig: (o) => rh.rhChainConfig(o),
108
+ chainGas: (o) => rh.rhChainGas(o),
109
+ swapsConfig: (o) => rh.rhSwapsConfig(o),
110
+ swapsPresets: (o) => rh.rhSwapsPresets(o),
111
+ tradingStatus: (o) => rh.rhTradingStatus(o),
112
+ nftDrops: (o) => rh.rhNftDrops(o),
113
+ feeEstimate: (o) => rh.rhFeeEstimate(o),
114
+ },
115
+ "evm-rpc": {
116
+ health: (o, a = {}) => rpc.rpcHealth(a.chainId ?? 1, o),
117
+ healthAll: (o, a = {}) => rpc.rpcHealthAll({ ...o, chainIds: a.chainIds }),
118
+ blockNumber: (o, a = {}) => rpc.rpcBlockNumber(a.chainId ?? 1, o),
119
+ chainId: (o, a = {}) => rpc.rpcChainId(a.chainId ?? 1, o),
120
+ getBalance: (o, a = {}) => rpc.rpcGetBalance(a.chainId ?? 1, a.address, o),
121
+ call: (o, a = {}) => rpc.rpcCall(a.chainId ?? 1, a.method, a.params || [], o),
122
+ erc20Allowance: (o, a = {}) => rpc.erc20Allowance(a, o),
123
+ erc20Balance: (o, a = {}) => rpc.erc20BalanceOf(a, o),
124
+ transactionReceipt: (o, a = {}) => rpc.transactionReceipt(a, o),
125
+ },
126
+ portfolio: {
127
+ health: (o) => portfolio.portfolioHealth(o),
128
+ balances: (o, a = {}) => portfolio.portfolioBalance(a, o),
129
+ snapshot: (o, a = {}) => portfolioHistory.portfolioSnapshot(a, o),
130
+ history: (o, a = {}) => portfolioHistory.portfolioHistory(a, o),
131
+ valueGraph: (o, a = {}) => portfolioHistory.portfolioValueGraph(a, o),
132
+ },
133
+ "nft-portfolio": {
134
+ health: (o) => nftPortfolio.nftHealth(o),
135
+ inventory: (o, a = {}) => nftPortfolio.nftInventory(a, o),
136
+ gallery: (o, a = {}) => nftPortfolio.nftPortfolioGallery(a, o),
137
+ pnl: (o, a = {}) => nftPortfolio.nftPnl(a, o),
138
+ prepareList: (o, a = {}) => nftPortfolio.nftPrepareList(a, o),
139
+ },
140
+ "solana-rpc": {
141
+ health: (o) => solana.solanaHealth(o),
142
+ latestBlockhash: (o, a = {}) => solana.solanaLatestBlockhash(a, o),
143
+ getBalance: (o, a = {}) => solana.solanaGetBalance(a, o),
144
+ tokenAccounts: (o, a = {}) => solana.solanaTokenAccounts(a, o),
145
+ simulate: (o, a = {}) => solana.solanaSimulateTransaction(a, o),
146
+ },
147
+ "bitcoin-esplora": {
148
+ health: (o) => bitcoin.btcHealth(o),
149
+ tipHeight: (o) => bitcoin.btcTipHeight(o),
150
+ fees: (o) => bitcoin.btcFees(o),
151
+ address: (o, a = {}) => bitcoin.btcAddressInfo(a, o),
152
+ utxos: (o, a = {}) => bitcoin.btcUtxos(a, o),
153
+ tx: (o, a = {}) => bitcoin.btcTx(a, o),
154
+ decode: (o, a = {}) => bitcoin.btcDecodeTxHex(a, o),
155
+ },
156
+ "bitcoin-meta": {
157
+ health: (o) => bitcoinMeta.btcMetaHealth(o),
158
+ runeBalances: (o, a = {}) => bitcoinMeta.btcRuneBalances(a, o),
159
+ inscriptions: (o, a = {}) => bitcoinMeta.btcInscriptions(a, o),
160
+ inscriptionInfo: (o, a = {}) => bitcoinMeta.btcInscriptionInfo(a, o),
161
+ inscriptionChildren: (o, a = {}) => bitcoinMeta.btcInscriptionChildren(a, o),
162
+ ordBlockInfo: (o, a = {}) => bitcoinMeta.btcOrdBlockInfo(a, o),
163
+ },
164
+ satflow: {
165
+ health: (o) => satflow.satflowHealth(o),
166
+ collectionFloors: (o, a = {}) => satflow.satflowCollectionFloors(a, o),
167
+ collectionStats: (o, a = {}) => satflow.satflowCollectionStats(a, o),
168
+ item: (o, a = {}) => satflow.satflowItem(a, o),
169
+ walletContents: (o, a = {}) => satflow.satflowWalletContents(a, o),
170
+ floorListings: (o, a = {}) => satflow.satflowFloorListings(a, o),
171
+ preparePurchase: (o, a = {}) => satflow.satflowPreparePurchase(a, o),
172
+ prepareList: (o, a = {}) => satflow.satflowPrepareList(a, o),
173
+ },
174
+ jupiter: {
175
+ health: (o) => jupiter.jupiterHealth(o),
176
+ venues: (o, a = {}) => jupiter.jupiterVenues(a, o),
177
+ quote: (o, a = {}) => jupiter.jupiterQuote(a, o),
178
+ prepare: (o, a = {}) => jupiter.jupiterPrepareSwap(a, o),
179
+ },
180
+ defillama: {
181
+ health: (o) => llama.llamaHealth(o),
182
+ prices: (o, a = {}) => llama.llamaPrices(a.coins || [], o),
183
+ pricesBySymbol: (o, a = {}) => llama.llamaPricesBySymbol(a.symbols, o),
184
+ protocols: (o) => llama.llamaProtocols(o),
185
+ yields: (o, a = {}) => llama.llamaYields(a, o),
186
+ stablecoins: (o, a = {}) => llama.llamaStablecoins(a, o),
187
+ dexVolumes: (o, a = {}) => llama.llamaDexVolumes(a, o),
188
+ },
189
+ lifi: {
190
+ health: (o) => lifi.lifiHealth(o),
191
+ quote: (o, a = {}) => lifi.lifiQuote(a, o),
192
+ prepare: (o, a = {}) => lifi.lifiPrepare(a, o),
193
+ chains: (o) => lifi.lifiChains(o),
194
+ },
195
+ dexscreener: {
196
+ health: (o) => dxs.dexscreenerHealth(o),
197
+ token: (o, a = {}) => dxs.dexscreenerToken(a.address || a.tokenAddress, o),
198
+ search: (o, a = {}) => dxs.dexscreenerSearch(a.q || a.query, o),
199
+ pair: (o, a = {}) => dxs.dexscreenerPair(a.chainId, a.pairAddress, o),
200
+ },
201
+ "uniswap-v3": {
202
+ health: (o, a = {}) => uni.uniV3Health({ ...o, chainId: a.chainId ?? 8453 }),
203
+ quote: (o, a = {}) => uni.uniV3QuoteExactIn(a, o),
204
+ prepare: (o, a = {}) => uni.uniV3PrepareExactIn(a, o),
205
+ quotePath: (o, a = {}) => uni.uniV3QuoteExactInPath(a, o),
206
+ ethUsdc: (o, a = {}) => uni.uniV3EthUsdc(a, o),
207
+ chains: () => uni.uniV3Chains(),
208
+ },
209
+ "uniswap-v4": {
210
+ health: (o, a = {}) => univ4.uniV4Health({ ...o, chainId: a.chainId ?? 8453 }),
211
+ quote: (o, a = {}) => univ4.uniV4QuoteExactIn(a, o),
212
+ chains: () => univ4.uniV4Chains(),
213
+ },
214
+ aerodrome: {
215
+ health: (o, a = {}) => aerodrome.aerodromeHealth({ ...o, chainId: a.chainId ?? 8453 }),
216
+ quote: (o, a = {}) => aerodrome.aerodromeQuoteExactIn(a, o),
217
+ prepare: (o, a = {}) => aerodrome.aerodromePrepareExactIn(a, o),
218
+ chains: () => aerodrome.aerodromeChains(),
219
+ },
220
+ zerox: {
221
+ health: (o) => zerox.zeroxHealth(o),
222
+ price: (o, a = {}) => zerox.zeroxPrice(a, o),
223
+ quote: (o, a = {}) => zerox.zeroxQuote(a, o),
224
+ prepare: (o, a = {}) => zerox.zeroxPrepare(a, o),
225
+ },
226
+ across: {
227
+ health: (o) => bridges.acrossHealth(o),
228
+ suggestedFees: (o, a = {}) => bridges.acrossSuggestedFees(a, o),
229
+ },
230
+ hop: {
231
+ health: (o) => bridges.hopHealth(o),
232
+ quote: (o, a = {}) => bridges.hopQuote(a, o),
233
+ },
234
+ relay: {
235
+ health: (o) => bridges.relayHealth(o),
236
+ quote: (o, a = {}) => bridges.relayQuote(a, o),
237
+ prepare: (o, a = {}) => bridges.relayPrepare(a, o),
238
+ },
239
+ cowswap: {
240
+ health: (o) => cow.cowHealth(o),
241
+ quote: (o, a = {}) => cow.cowQuote(a, o),
242
+ prepareOrder: (o, a = {}) => cow.cowPrepareOrder(a, o),
243
+ order: (o, a = {}) => cow.cowOrder(a, o),
244
+ status: (o, a = {}) => cow.cowOrderStatus(a, o),
245
+ chains: () => cow.cowChains(),
246
+ },
247
+ oneinch: {
248
+ health: (o) => oneinch.oneinchHealth(o),
249
+ quote: (o, a = {}) => oneinch.oneinchQuote(a, o),
250
+ prepare: (o, a = {}) => oneinch.oneinchPrepare(a, o),
251
+ approveSpender: (o, a = {}) => oneinch.oneinchApproveSpender(a, o),
252
+ },
253
+ "hl-ws": {
254
+ health: (o) => hlws.hlWsHealth(o),
255
+ allMids: (o) => hlws.hlWsAllMids(o),
256
+ l2Book: (o, a = {}) => hlws.hlWsL2Book(a.coin, o),
257
+ snapshot: (o, a = {}) => hlws.hlWsSnapshot(a.subscription || a, o),
258
+ },
259
+ "poly-ws": {
260
+ health: (o, a = {}) => polyws.polyWsHealth({ ...o, assetId: a.assetId }),
261
+ book: (o, a = {}) => polyws.polyWsBook(a.assetId || a.tokenId, o),
262
+ snapshot: (o, a = {}) =>
263
+ polyws.polyWsSnapshot(a.assetIds || a.assets_ids || [a.assetId], o),
264
+ },
265
+ "opensea-nft": {
266
+ health: (o) => osnft.openseaHealth(o),
267
+ collection: (o, a = {}) => osnft.openseaCollection(a.slug, o),
268
+ floor: (o, a = {}) => osnft.openseaFloor(a.slug, o),
269
+ accountNfts: (o, a = {}) => osnft.openseaAccountNfts(a, o),
270
+ accountPnl: (o, a = {}) => osnft.openseaAccountPnl(a, o),
271
+ prepareList: (o, a = {}) => osnft.openseaPrepareList(a, o),
272
+ },
273
+
274
+ "hl-outcome": {
275
+ list: (o) => hloutcome.hlOutcomeList(o),
276
+ prepareOrder: (o, a = {}) => hloutcome.hlPrepareOutcomeOrder(a, o),
277
+ prepareCancel: (o, a = {}) => hloutcome.hlPrepareOutcomeCancel(a, o),
278
+ },
279
+ "protocol-templates": {
280
+ health: () => ({ ok: true, templates: listProtocolTemplates().map((t) => t.id), firmAudit: false }),
281
+ list: () => listProtocolTemplates(),
282
+ gate: (o, a = {}) => runProtocolTemplateGate(a.templateId || a.id, o),
283
+ prepareDeploy: (o, a = {}) => protoTpl.prepareTemplateDeploy(a, o),
284
+ },
285
+ "poly-clob": {
286
+ prepareOrder: (o, a = {}) => {
287
+ // prepare is sync; wrap for dataCall
288
+ return polyclob.polyPrepareOrder(a || {});
289
+ },
290
+ },
291
+ "hl-perps": {
292
+ health: (o) => hlmarkets.hlMarketsHealth(o),
293
+ assetInfo: (o, a = {}) => hlperps.hlPerpAssetInfo(a, o),
294
+ prepareOrder: (o, a = {}) => hlperps.hlPreparePerpOrder(a, o),
295
+ prepareCancel: (o, a = {}) => hlperps.hlPrepareCancelOrder(a, o),
296
+ prepareLeverage: (o, a = {}) => hlperps.hlPrepareUpdateLeverage(a, o),
297
+ prepareIsolatedMargin: (o, a = {}) => hlperps.hlPrepareUpdateIsolatedMargin(a, o),
298
+ prepareBracket: (o, a = {}) => hlperps.hlPrepareBracketOrder(a, o),
299
+ },
300
+ "hl-markets": {
301
+ health: (o) => hlmarkets.hlMarketsHealth(o),
302
+ markets: (o, a = {}) => hlmarkets.hlMarketDatapoints(a, o),
303
+ leaderboards: (o, a = {}) => hlmarkets.hlLeaderboards(a, o),
304
+ coin: (o, a = {}) => hlmarkets.hlCoinDatapoints(a, o),
305
+ spot: (o, a = {}) => hlmarkets.hlSpotDatapoints(a, o),
306
+ },
307
+ "magiceden-sol": {
308
+ health: (o) => mesol.magicEdenSolHealth(o),
309
+ stats: (o, a = {}) => mesol.magicEdenSolStats(a, o),
310
+ listings: (o, a = {}) => mesol.magicEdenSolListings(a, o),
311
+ tokenListings: (o, a = {}) => mesol.magicEdenSolTokenListing(a, o),
312
+ prepareBuy: (o, a = {}) => mesol.magicEdenSolPrepareBuy(a, o),
313
+ prepareList: (o, a = {}) => mesol.magicEdenSolPrepareList(a, o),
314
+ prepareMint: (o, a = {}) => mesol.magicEdenSolPrepareMint(a, o),
315
+ },
316
+ "hl-staking": {
317
+ health: (o) => hlstake.hlStakingHealth(o),
318
+ validators: (o) => hlstake.hlValidatorSummaries(o),
319
+ delegatorSummary: (o, a = {}) => hlstake.hlDelegatorSummary(a, o),
320
+ delegations: (o, a = {}) => hlstake.hlDelegations(a, o),
321
+ rewards: (o, a = {}) => hlstake.hlDelegatorRewards(a, o),
322
+ history: (o, a = {}) => hlstake.hlDelegatorHistory(a, o),
323
+ preflight: (o, a = {}) => hlstake.hlStakingPreflight(a, o),
324
+ prepareStakeDeposit: (o, a = {}) => hlstake.hlPrepareStakeDeposit(a, o),
325
+ prepareStakeWithdraw: (o, a = {}) => hlstake.hlPrepareStakeWithdraw(a, o),
326
+ prepareDelegate: (o, a = {}) => hlstake.hlPrepareDelegate(a, o),
327
+ },
328
+ "hyperevm-dex": {
329
+ health: (o) => hevm.hyperevmHealth(o),
330
+ search: (o, a = {}) => hevm.hyperevmSearch(a.q || a.query || "HYPE", o),
331
+ token: (o, a = {}) => hevm.hyperevmToken(a.address || a.tokenAddress, o),
332
+ },
333
+ geckoterminal: {
334
+ health: (o) => gecko.geckoHealth(o),
335
+ networks: (o, a = {}) => gecko.geckoNetworks(a, o),
336
+ pool: (o, a = {}) => gecko.geckoPool(a, o),
337
+ token: (o, a = {}) => gecko.geckoToken(a, o),
338
+ ohlcv: (o, a = {}) => gecko.geckoPoolOhlcv(a, o),
339
+ },
340
+ curve: {
341
+ health: (o) => curve.curveHealth(o),
342
+ openapi: (o) => curve.curveOpenApi(o),
343
+ pools: (o, a = {}) => curve.curvePools(a, o),
344
+ quote: (o, a = {}) => curve.curveQuote(a, o),
345
+ prepare: (o, a = {}) => curve.curvePrepare(a, o),
346
+ },
347
+ gmx: {
348
+ health: (o) => gmx.gmxHealth(o),
349
+ tickers: (o, a = {}) => gmx.gmxTickers(a, o),
350
+ markets: (o, a = {}) => gmx.gmxMarkets(a, o),
351
+ marketsInfo: (o, a = {}) => gmx.gmxMarketsInfo(a, o),
352
+ tokens: (o, a = {}) => gmx.gmxTokens(a, o),
353
+ prepareOrder: (o, a = {}) => gmx.gmxPrepareOrder(a, o),
354
+ positions: (o, a = {}) => gmx.gmxPositions(a, o),
355
+ orderStatus: (o, a = {}) => gmx.gmxOrderStatus(a, o),
356
+ verifyOrder: (o, a = {}) => gmx.gmxVerifyOrderReceipt(a, o),
357
+ },
358
+ morpho: {
359
+ health: (o) => morpho.morphoHealth(o),
360
+ markets: (o, a = {}) => morpho.morphoMarkets(a, o),
361
+ vaults: (o, a = {}) => morpho.morphoVaults(a, o),
362
+ prepareVault: (o, a = {}) => morpho.morphoPrepareVault(a, o),
363
+ },
364
+ balancer: {
365
+ health: (o) => balancer.balancerHealth(o),
366
+ pools: (o, a = {}) => balancer.balancerPools(a, o),
367
+ quote: (o, a = {}) => balancer.balancerQuote(a, o),
368
+ prepare: (o, a = {}) => balancer.balancerPrepare(a, o),
369
+ },
370
+ pendle: {
371
+ health: (o) => pendle.pendleHealth(o),
372
+ markets: (o, a = {}) => pendle.pendleMarkets(a, o),
373
+ quote: (o, a = {}) => pendle.pendleQuote(a, o),
374
+ prepare: (o, a = {}) => pendle.pendlePrepare(a, o),
375
+ },
376
+ odos: {
377
+ health: (o) => odos.odosHealth(o),
378
+ chains: (o) => odos.odosChains(o),
379
+ quote: (o, a = {}) => odos.odosQuote(a, o),
380
+ prepare: (o, a = {}) => odos.odosPrepare(a, o),
381
+ },
382
+ blockscout: {
383
+ health: (o) => blockscout.blockscoutHealth(o),
384
+ stats: (o, a = {}) => blockscout.blockscoutStats(a, o),
385
+ address: (o, a = {}) => blockscout.blockscoutAddress(a, o),
386
+ token: (o, a = {}) => blockscout.blockscoutToken(a, o),
387
+ },
388
+ paraswap: {
389
+ health: (o) => paraswap.paraswapHealth(o),
390
+ tokens: (o, a = {}) => paraswap.paraswapTokens(a, o),
391
+ price: (o, a = {}) => paraswap.paraswapPrice(a, o),
392
+ quote: (o, a = {}) => paraswap.paraswapPrice(a, o),
393
+ prepare: (o, a = {}) => paraswap.paraswapPrepare(a, o),
394
+ },
395
+ rfq: {
396
+ health: (o) => rfq.rfqHealth(o),
397
+ intent: (o, a = {}) => rfq.rfqIntent(a, o),
398
+ quote: (o, a = {}) => rfq.rfqQuote(a, o),
399
+ },
400
+ "polygon-staking": {
401
+ health: (o) => polygonStaking.health(o),
402
+ validators: (o, a = {}) => polygonStaking.validators(a, o),
403
+ validatorDetail: (o, a = {}) => polygonStaking.validatorDetail(a, o),
404
+ },
405
+ "aave-v3": {
406
+ health: (o) => aaveV3.aaveHealth(o),
407
+ markets: (o, a = {}) => aaveV3.aaveMarkets(a, o),
408
+ marketReserves: (o, a = {}) => aaveV3.aaveMarketReserves(a, o),
409
+ chains: (o) => aaveV3.aaveChains(o),
410
+ },
411
+ "babylon-staking": {
412
+ health: (o) => babylon.babylonHealth(o),
413
+ stats: (o) => babylon.babylonStats(o),
414
+ finalityProviders: (o) => babylon.babylonFinalityProviders(o),
415
+ delegations: (o, a = {}) => babylon.babylonDelegations(a, o),
416
+ },
417
+ "bisq-markets": {
418
+ health: (o) => bisq.bisqHealth(o),
419
+ markets: (o) => bisq.bisqMarkets(o),
420
+ ticker: (o, a = {}) => bisq.bisqTicker(a, o),
421
+ trades: (o, a = {}) => bisq.bisqTrades(a, o),
422
+ },
423
+ "bob-rootstock": {
424
+ health: (o, a = {}) => bobRootstock.btcL2Health(a.chainId, o),
425
+ stats: (o, a = {}) => bobRootstock.btcL2Stats(a, o),
426
+ addressInfo: (o, a = {}) => bobRootstock.btcL2AddressInfo(a, o),
427
+ tokenBalances: (o, a = {}) => bobRootstock.btcL2TokenBalances(a, o),
428
+ },
429
+ "braiins-insights": {
430
+ health: (o) => braiins.braiinsHealth(o),
431
+ priceStats: (o) => braiins.braiinsPriceStats(o),
432
+ poolStats: (o) => braiins.braiinsPoolStats(o),
433
+ },
434
+ "cow-protocol": {
435
+ health: (o) => cowProtocol.cowProtocolHealth(o),
436
+ auction: (o) => cowProtocol.cowAuction(o),
437
+ openOrders: (o, a = {}) => cowProtocol.cowOpenOrders(a, o),
438
+ recentTrades: (o, a = {}) => cowProtocol.cowRecentTrades(a, o),
439
+ },
440
+ "hiro-stacks": {
441
+ health: (o) => hiroStacks.stacksHealth(o),
442
+ networkInfo: (o) => hiroStacks.stacksNetworkInfo(o),
443
+ stackingInfo: (o) => hiroStacks.stacksStackingInfo(o),
444
+ poxCycles: (o) => hiroStacks.stacksPoxCycles(o),
445
+ blocks: (o, a = {}) => hiroStacks.stacksBlocks(a, o),
446
+ },
447
+ "jito-mev": {
448
+ health: (o) => jito.jitoHealth(o),
449
+ recentBundles: (o, a = {}) => jito.jitoRecentBundles(a, o),
450
+ tipFloor: (o) => jito.jitoTipFloor(o),
451
+ },
452
+ "kamino-strategies": {
453
+ health: (o) => kamino.kaminoHealth(o),
454
+ strategies: (o, a = {}) => kamino.kaminoStrategies(a, o),
455
+ strategyMetrics: (o, a = {}) => kamino.kaminoStrategyMetrics(a, o),
456
+ },
457
+ "liquid-esplora": {
458
+ health: (o) => liquid.liquidHealth(o),
459
+ tipHeight: (o) => liquid.liquidTipHeight(o),
460
+ addressInfo: (o, a = {}) => liquid.liquidAddressInfo(a, o),
461
+ assetInfo: (o, a = {}) => liquid.liquidAssetInfo(a, o),
462
+ },
463
+ "magiceden-ordinals": {
464
+ health: (o) => magicEdenOrd.magicEdenOrdHealth(o),
465
+ collectionStat: (o, a = {}) => magicEdenOrd.magicEdenOrdCollectionStat(a, o),
466
+ },
467
+ "mempool-lightning": {
468
+ health: (o) => mempoolLightning.lightningHealth(o),
469
+ statistics: (o) => mempoolLightning.lightningStatistics(o),
470
+ nodeRankings: (o, a = {}) => mempoolLightning.lightningNodeRankings(a, o),
471
+ nodeCountries: (o) => mempoolLightning.lightningNodeCountries(o),
472
+ },
473
+ "mempool-mining": {
474
+ health: (o) => mempoolMining.miningHealth(o),
475
+ difficulty: (o) => mempoolMining.miningDifficulty(o),
476
+ poolShare: (o, a = {}) => mempoolMining.miningPoolShare(a, o),
477
+ hashrate: (o, a = {}) => mempoolMining.miningHashrate(a, o),
478
+ rewardStats: (o, a = {}) => mempoolMining.miningRewardStats(a, o),
479
+ },
480
+ "meteora-dlmm": {
481
+ health: (o) => meteora.meteoraHealth(o),
482
+ pools: (o, a = {}) => meteora.meteoraPools(a, o),
483
+ poolSearch: (o, a = {}) => meteora.meteoraPoolSearch(a, o),
484
+ },
485
+ "ordinals-runes": {
486
+ health: (o) => ordinalsRunes.ordHealth(o),
487
+ blockHeight: (o) => ordinalsRunes.ordBlockHeight(o),
488
+ blockInfo: (o, a = {}) => ordinalsRunes.ordBlockInfo(a, o),
489
+ satInfo: (o, a = {}) => ordinalsRunes.ordSatInfo(a, o),
490
+ runeInfo: (o, a = {}) => ordinalsRunes.ordRuneInfo(a, o),
491
+ },
492
+ "pyth-price-feeds": {
493
+ health: (o) => pyth.pythHealth(o),
494
+ latestPrice: (o, a = {}) => pyth.pythLatestPrice(a, o),
495
+ latestPrices: (o, a = {}) => pyth.pythLatestPrices(a, o),
496
+ feedDirectory: (o) => pyth.pythFeedDirectory(o),
497
+ },
498
+ "relayscan-mev": {
499
+ health: (o) => relayscan.relayscanHealth(o),
500
+ overview: (o, a = {}) => relayscan.relayscanOverview(a, o),
501
+ builderProfit: (o, a = {}) => relayscan.relayscanBuilderProfit(a, o),
502
+ dailyStats: (o, a = {}) => relayscan.relayscanDailyStats(a, o),
503
+ },
504
+ "sanctum-lst": {
505
+ health: (o) => sanctum.sanctumHealth(o),
506
+ lstList: (o) => sanctum.sanctumLstList(o),
507
+ apyAll: (o) => sanctum.sanctumApyAll(o),
508
+ apyIndividual: (o, a = {}) => sanctum.sanctumApyIndividual(a, o),
509
+ },
510
+ "solend-lending": {
511
+ health: (o) => solend.solendHealth(o),
512
+ markets: (o) => solend.solendMarkets(o),
513
+ reserves: (o, a = {}) => solend.solendReserves(a, o),
514
+ },
515
+ "across-bridge": {
516
+ health: (o) => acrossBridge.acrossHealth(o),
517
+ pools: (o, a = {}) => acrossBridge.acrossPools(a, o),
518
+ suggestedFees: (o, a = {}) => acrossBridge.acrossSuggestedFees(a, o),
519
+ },
520
+ "beefy-yields": {
521
+ health: (o) => beefyYields.beefyHealth(o),
522
+ apy: (o, a = {}) => beefyYields.beefyApy(a, o),
523
+ apyBreakdown: (o) => beefyYields.beefyApyBreakdown(o),
524
+ },
525
+ "birdeye-tokens": {
526
+ health: (o) => birdeye.birdeyeHealth(o),
527
+ tokenList: (o, a = {}) => birdeye.birdeyeTokenList(a, o),
528
+ },
529
+ "celestia-da": {
530
+ health: (o) => celestia.celestiaHealth(o),
531
+ stats: (o) => celestia.celestiaStats(o),
532
+ blockStats: (o, a = {}) => celestia.celestiaBlockStats(a, o),
533
+ },
534
+ "das-assets": {
535
+ health: (o) => dasAssets.dasHealth(o),
536
+ assetsByOwner: (o, a = {}) => dasAssets.dasAssetsByOwner(a, o),
537
+ searchAssets: (o, a = {}) => dasAssets.dasSearchAssets(a, o),
538
+ assetProof: (o, a = {}) => dasAssets.dasAssetProof(a, o),
539
+ },
540
+ "l2beat-tvl": {
541
+ health: (o) => l2beat.l2beatHealth(o),
542
+ tvl: (o, a = {}) => l2beat.l2beatTvl(a, o),
543
+ activity: (o, a = {}) => l2beat.l2beatActivity(a, o),
544
+ },
545
+ "spark-lend": {
546
+ health: (o) => sparkLend.sparkHealth(o),
547
+ markets: (o, a = {}) => sparkLend.sparkMarkets(a, o),
548
+ },
549
+ "symbiotic-restaking": {
550
+ health: (o) => symbiotic.symbioticHealth(o),
551
+ vaults: (o, a = {}) => symbiotic.symbioticVaults(a, o),
552
+ vaultDetail: (o, a = {}) => symbiotic.symbioticVaultDetail(a, o),
553
+ },
554
+ };
555
+
556
+ /**
557
+ * Ops that create state at a third-party venue or produce a signable
558
+ * authorization. They are NOT reads, and naming them `prepare*` does not make
559
+ * them harmless — a prepared purchase intent is a real object at a real
560
+ * marketplace, and a prepared EIP-712 action is one signature from settlement.
561
+ */
562
+ const STATE_CREATING_OPS = new Set([
563
+ "prepareBracket",
564
+ "prepareIsolatedMargin",
565
+ "prepareLeverage",
566
+ "prepareCancel",
567
+ "prepareOrder",
568
+ "preparePurchase",
569
+ "prepareList",
570
+ "prepareSell",
571
+ "prepareBuy",
572
+ "prepareMint",
573
+ "prepare",
574
+ "prepareStakeDeposit",
575
+ "prepareStakeWithdraw",
576
+ "prepareDelegate",
577
+ "prepareSwap",
578
+ "prepareTransfer",
579
+ "createOrder",
580
+ "cancelOrder",
581
+ ]);
582
+
583
+ /**
584
+ * Is this op allowed on the read/prepare data plane?
585
+ *
586
+ * The previous implementation was a NAME regex, which is not a boundary: it
587
+ * blocked `sendFoo` but allowed `txBroadcast`, `doSend`, `rawSign`,
588
+ * `orderSubmit` and `forceExecute`, while blocking nothing that actually
589
+ * mattered because every money-moving op here is named `prepare*`. The real
590
+ * control is the catalog: a provider may only be asked for an op it declares.
591
+ */
592
+ /**
593
+ * Providers that SIGN and SUBMIT. These are not data-plane providers: the
594
+ * read-only server must refuse them at the provider level, because a name-based
595
+ * verb filter is not a boundary (`op:"trade"` matches no exec-sounding word).
596
+ */
597
+ export const EXECUTION_PROVIDERS = new Set(["hl-exec"]);
598
+
599
+ /** True when the provider signs/submits and must never be served read-only. */
600
+ export function isExecutionProvider(providerId) {
601
+ return EXECUTION_PROVIDERS.has(String(providerId || ""));
602
+ }
603
+
604
+ export function assertDataOpAllowed(providerId, op, args = {}) {
605
+ const name = String(op || "");
606
+ const key = `${providerId}.${name}`;
607
+
608
+ if (EXECUTION_PROVIDERS.has(providerId)) {
609
+ throw new Error(`data plane forbidden execution provider: ${providerId}`);
610
+ }
611
+
612
+ // 1. The op must be declared by the provider. This is the actual boundary —
613
+ // an undeclared op cannot be reached regardless of what it is called.
614
+ // Checked SECOND so that a write-shaped name gets the "forbidden" error
615
+ // rather than "not declared": callers (and tests) distinguish the two.
616
+ const declared = listProviders().find((p) => p.id === providerId);
617
+
618
+ // 2. Reject anything that reads as a settlement verb. Substring matching, so
619
+ // txBroadcast / doSend / orderSubmit / forceExecute cannot slip past word
620
+ // boundaries the way they did under the old anchored regex.
621
+ if (/sign|execute|broadcast|submit|send|write|place/i.test(name) && !STATE_CREATING_OPS.has(name)) {
622
+ throw new Error(`data plane forbidden op: ${key}`);
623
+ }
624
+
625
+ if (declared && Array.isArray(declared.ops) && declared.ops.length > 0) {
626
+ if (!declared.ops.includes(name)) {
627
+ throw new Error(`data plane: provider ${providerId} does not support op ${name}`);
628
+ }
629
+ }
630
+
631
+ // 3. State-creating prepares are permitted on the data plane (that is its
632
+ // job) but must be visible as such to callers auditing behaviour.
633
+ if (STATE_CREATING_OPS.has(name) && args && typeof args === "object") {
634
+ Object.defineProperty(args, "__oracleStateCreating", { value: true, enumerable: false, configurable: true });
635
+ }
636
+
637
+ if (providerId === "evm-rpc" && name === "call") {
638
+ const method = String(args?.method || "").trim();
639
+ const allowed = new Set([
640
+ "eth_call",
641
+ "eth_getBalance",
642
+ "eth_blockNumber",
643
+ "eth_chainId",
644
+ "eth_getCode",
645
+ "eth_getLogs",
646
+ "eth_getTransactionByHash",
647
+ "eth_getTransactionReceipt",
648
+ "eth_getBlockByNumber",
649
+ "eth_getBlockByHash",
650
+ "eth_feeHistory",
651
+ "eth_gasPrice",
652
+ "eth_maxPriorityFeePerGas",
653
+ "net_version",
654
+ "web3_clientVersion",
655
+ ]);
656
+ if (!allowed.has(method)) {
657
+ throw new Error(`data plane allows only read-only JSON-RPC methods through evm-rpc.call: ${method || "<missing>"}`);
658
+ }
659
+ }
660
+ }
661
+
662
+ export async function dataCall(providerId, op, args = {}, opts = {}) {
663
+ // dataCall is the READ plane, and it is what the package root exports. An
664
+ // execution provider reached through here signs with a real key and submits
665
+ // to a venue — with no grant check, no policy, no cap and no user-intent
666
+ // proof. Blocking it only in the HTTP server left every package consumer and
667
+ // agent wrapper calling root dataCall wide open.
668
+ //
669
+ if (isExecutionProvider(providerId)) {
670
+ throw new Error(
671
+ `${providerId} is an execution provider: it signs and submits with a real key. ` +
672
+ "dataCall() is the public read plane and will not route to it."
673
+ );
674
+ }
675
+ assertDataOpAllowed(providerId, op, args);
676
+ const meta = getProvider(providerId);
677
+ if (!meta) throw new Error(`Unknown data provider: ${providerId}`);
678
+ if (!meta.ops.includes(op)) {
679
+ throw new Error(`Provider ${providerId} does not support op '${op}' (has: ${meta.ops.join(", ")})`);
680
+ }
681
+ const table = OPS[providerId];
682
+ if (!table || typeof table[op] !== "function") {
683
+ throw new Error(`No client implementation for ${providerId}.${op}`);
684
+ }
685
+ return table[op](opts, args);
686
+ }
687
+
688
+ export async function dataHealth({ providers, fetchImpl, timeoutMs, includeRpc, includeWs, concurrency } = {}) {
689
+ let ids = providers || listProviders().map((p) => p.id);
690
+ // healthAll on evm-rpc is slow; default health uses ethereum only via "health"
691
+ if (!includeRpc && !providers) {
692
+ // keep evm-rpc but its health is chain 1 only — fine
693
+ }
694
+ // WS health opens sockets — opt-in unless explicit provider list
695
+ if (!includeWs && !providers) {
696
+ ids = ids.filter((id) => id !== "hl-ws" && id !== "poly-ws");
697
+ }
698
+ const opts = { fetchImpl, timeoutMs: timeoutMs ?? 8_000 };
699
+ const out = {};
700
+ // Bounded fan-out: an unbounded Promise.all across every provider trips public
701
+ // rate limits (and makes one slow venue look like a global outage).
702
+ await mapLimit(ids, concurrency ?? 8, async (id) => {
703
+ if (!getProvider(id)) {
704
+ out[id] = { ok: false, ms: 0, error: "unknown provider" };
705
+ return;
706
+ }
707
+ const args = id === "evm-rpc" ? { chainId: 1 } : {};
708
+ const result = await timed(() => dataCall(id, "health", args, opts));
709
+ out[id] = result.ok
710
+ ? { ok: true, ms: result.ms, detail: result.data }
711
+ : { ok: false, ms: result.ms, error: result.error };
712
+ });
713
+ return { when: new Date().toISOString(), plane: "data", exec: false, providers: out };
714
+ }
715
+
716
+ export function dataCatalog() {
717
+ return listProviders().map((p) => ({
718
+ id: p.id,
719
+ venue: p.venue,
720
+ chainIds: p.chainIds,
721
+ auth: p.auth,
722
+ ops: p.ops,
723
+ execution: p.execution || "read-only",
724
+ description: p.description,
725
+ }));
726
+ }
727
+
728
+ export const data = {
729
+ catalog: dataCatalog,
730
+ health: dataHealth,
731
+ call: dataCall,
732
+ hl: {
733
+ health: (o) => dataCall("hl-info", "health", {}, o),
734
+ allMids: (o) => dataCall("hl-info", "allMids", {}, o),
735
+ l2Book: (coin, o) => dataCall("hl-info", "l2Book", { coin }, o),
736
+ outcomeMeta: (o) => dataCall("hl-info", "outcomeMeta", {}, o),
737
+ clearinghouse: (user, o) => dataCall("hl-info", "clearinghouse", { user }, o),
738
+ userFills: (user, o) => dataCall("hl-info", "userFills", { user }, o),
739
+ meta: (o) => dataCall("hl-info", "meta", {}, o),
740
+ metaAndAssetCtxs: (o) => dataCall("hl-info", "metaAndAssetCtxs", {}, o),
741
+ candleSnapshot: (a, o) => dataCall("hl-info", "candleSnapshot", a || {}, o),
742
+ openOrders: (user, o) => dataCall("hl-info", "openOrders", { user }, o),
743
+ userState: (user, o) => dataCall("hl-info", "userState", { user }, o),
744
+ spotMeta: (o) => dataCall("hl-info", "spotMeta", {}, o),
745
+ staking: {
746
+ health: (o) => dataCall("hl-staking", "health", {}, o),
747
+ validators: (o) => dataCall("hl-staking", "validators", {}, o),
748
+ summary: (user, o) => dataCall("hl-staking", "delegatorSummary", { user }, o),
749
+ delegations: (user, o) => dataCall("hl-staking", "delegations", { user }, o),
750
+ rewards: (user, o) => dataCall("hl-staking", "rewards", { user }, o),
751
+ history: (user, o) => dataCall("hl-staking", "history", { user }, o),
752
+ preflight: (user, o) => dataCall("hl-staking", "preflight", { user }, o),
753
+ prepareStake: (a, o) => dataCall("hl-staking", "prepareStakeDeposit", a || {}, o),
754
+ prepareUnstake: (a, o) => dataCall("hl-staking", "prepareStakeWithdraw", a || {}, o),
755
+ prepareDelegate: (a, o) => dataCall("hl-staking", "prepareDelegate", a || {}, o),
756
+ },
757
+ },
758
+ poly: {
759
+ health: (o) => dataCall("poly-public", "health", {}, o),
760
+ time: (o) => dataCall("poly-public", "time", {}, o),
761
+ markets: (a, o) => dataCall("poly-public", "markets", a || {}, o),
762
+ book: (tokenId, o) => dataCall("poly-public", "book", { tokenId }, o),
763
+ midpoint: (tokenId, o) => dataCall("poly-public", "midpoint", { tokenId }, o),
764
+ spread: (tokenId, o) => dataCall("poly-public", "spread", { tokenId }, o),
765
+ price: (tokenId, side, o) => dataCall("poly-public", "price", { tokenId, side }, o),
766
+ events: (a, o) => dataCall("poly-public", "events", a || {}, o),
767
+ },
768
+ polyClob: {
769
+ prepareOrder: (a, o) => dataCall("poly-clob", "prepareOrder", a || {}, o),
770
+ },
771
+ rh: {
772
+ health: (o) => dataCall("rh-agent", "health", {}, o),
773
+ policy: (o) => dataCall("rh-agent", "policy", {}, o),
774
+ chainConfig: (o) => dataCall("rh-agent", "chainConfig", {}, o),
775
+ chainGas: (o) => dataCall("rh-agent", "chainGas", {}, o),
776
+ swapsConfig: (o) => dataCall("rh-agent", "swapsConfig", {}, o),
777
+ tradingStatus: (o) => dataCall("rh-agent", "tradingStatus", {}, o),
778
+ nftDrops: (o) => dataCall("rh-agent", "nftDrops", {}, o),
779
+ },
780
+ rpc: {
781
+ health: (chainId, o) => dataCall("evm-rpc", "health", { chainId }, o),
782
+ healthAll: (a, o) => dataCall("evm-rpc", "healthAll", a || {}, o),
783
+ blockNumber: (chainId, o) => dataCall("evm-rpc", "blockNumber", { chainId }, o),
784
+ getBalance: (chainId, address, o) => dataCall("evm-rpc", "getBalance", { chainId, address }, o),
785
+ call: (chainId, method, params, o) =>
786
+ dataCall("evm-rpc", "call", { chainId, method, params }, o),
787
+ },
788
+ portfolio: {
789
+ balance: (a, o) => dataCall("portfolio", "balances", a || {}, o),
790
+ snapshot: (a, o) => dataCall("portfolio", "snapshot", a || {}, o),
791
+ history: (a, o) => dataCall("portfolio", "history", a || {}, o),
792
+ valueGraph: (a, o) => dataCall("portfolio", "valueGraph", a || {}, o),
793
+ },
794
+ nft: {
795
+ inventory: (a, o) => dataCall("nft-portfolio", "inventory", a || {}, o),
796
+ gallery: (a, o) => dataCall("nft-portfolio", "gallery", a || {}, o),
797
+ pnl: (a, o) => dataCall("nft-portfolio", "pnl", a || {}, o),
798
+ prepareList: (a, o) => dataCall("nft-portfolio", "prepareList", a || {}, o),
799
+ floor: (slug, o) => dataCall("opensea-nft", "floor", { slug }, o),
800
+ collection: (slug, o) => dataCall("opensea-nft", "collection", { slug }, o),
801
+ },
802
+ solana: {
803
+ health: (o) => dataCall("solana-rpc", "health", {}, o),
804
+ latestBlockhash: (a, o) => dataCall("solana-rpc", "latestBlockhash", a || {}, o),
805
+ balance: (address, o) => dataCall("solana-rpc", "getBalance", { address }, o),
806
+ tokenAccounts: (a, o) => dataCall("solana-rpc", "tokenAccounts", a || {}, o),
807
+ simulate: (a, o) => dataCall("solana-rpc", "simulate", a || {}, o),
808
+ jupiterQuote: (a, o) => dataCall("jupiter", "quote", a || {}, o),
809
+ jupiterPrepare: (a, o) => dataCall("jupiter", "prepare", a || {}, o),
810
+ nftStats: (a, o) => dataCall("magiceden-sol", "stats", a || {}, o),
811
+ nftListings: (a, o) => dataCall("magiceden-sol", "listings", a || {}, o),
812
+ nftTokenListings: (a, o) => dataCall("magiceden-sol", "tokenListings", a || {}, o),
813
+ nftPrepareBuy: (a, o) => dataCall("magiceden-sol", "prepareBuy", a || {}, o),
814
+ nftPrepareList: (a, o) => dataCall("magiceden-sol", "prepareList", a || {}, o),
815
+ nftPrepareMint: (a, o) => dataCall("magiceden-sol", "prepareMint", a || {}, o),
816
+ },
817
+ bitcoin: {
818
+ health: (o) => dataCall("bitcoin-esplora", "health", {}, o),
819
+ tipHeight: (o) => dataCall("bitcoin-esplora", "tipHeight", {}, o),
820
+ fees: (o) => dataCall("bitcoin-esplora", "fees", {}, o),
821
+ address: (address, o) => dataCall("bitcoin-esplora", "address", { address }, o),
822
+ utxos: (address, o) => dataCall("bitcoin-esplora", "utxos", { address }, o),
823
+ tx: (txid, o) => dataCall("bitcoin-esplora", "tx", { txid }, o),
824
+ decode: (a, o) => dataCall("bitcoin-esplora", "decode", a || {}, o),
825
+ metaHealth: (o) => dataCall("bitcoin-meta", "health", {}, o),
826
+ runeBalances: (address, o) => dataCall("bitcoin-meta", "runeBalances", { address }, o),
827
+ inscriptions: (address, o) => dataCall("bitcoin-meta", "inscriptions", { address }, o),
828
+ satflowHealth: (o) => dataCall("satflow", "health", {}, o),
829
+ satflowFloors: (a, o) => dataCall("satflow", "collectionFloors", a || {}, o),
830
+ satflowWallet: (address, o) => dataCall("satflow", "walletContents", { address }, o),
831
+ },
832
+ prices: {
833
+ health: (o) => dataCall("defillama", "health", {}, o),
834
+ current: (coins, o) => dataCall("defillama", "prices", { coins }, o),
835
+ bySymbol: (symbols, o) => dataCall("defillama", "pricesBySymbol", { symbols }, o),
836
+ protocols: (o) => dataCall("defillama", "protocols", {}, o),
837
+ },
838
+ lifi: {
839
+ health: (o) => dataCall("lifi", "health", {}, o),
840
+ quote: (a, o) => dataCall("lifi", "quote", a || {}, o),
841
+ chains: (o) => dataCall("lifi", "chains", {}, o),
842
+ },
843
+ dex: {
844
+ health: (o) => dataCall("dexscreener", "health", {}, o),
845
+ token: (address, o) => dataCall("dexscreener", "token", { address }, o),
846
+ search: (q, o) => dataCall("dexscreener", "search", { q }, o),
847
+ pair: (chainId, pairAddress, o) =>
848
+ dataCall("dexscreener", "pair", { chainId, pairAddress }, o),
849
+ },
850
+ uni: {
851
+ health: (a, o) => dataCall("uniswap-v3", "health", a || {}, o),
852
+ quote: (a, o) => dataCall("uniswap-v3", "quote", a || {}, o),
853
+ quotePath: (a, o) => dataCall("uniswap-v3", "quotePath", a || {}, o),
854
+ ethUsdc: (a, o) => dataCall("uniswap-v3", "ethUsdc", a || {}, o),
855
+ chains: (o) => dataCall("uniswap-v3", "chains", {}, o),
856
+ },
857
+ univ4: {
858
+ health: (a, o) => dataCall("uniswap-v4", "health", a || {}, o),
859
+ quote: (a, o) => dataCall("uniswap-v4", "quote", a || {}, o),
860
+ chains: (o) => dataCall("uniswap-v4", "chains", {}, o),
861
+ },
862
+ bridges: {
863
+ across: (a, o) => dataCall("across", "suggestedFees", a || {}, o),
864
+ hop: (a, o) => dataCall("hop", "quote", a || {}, o),
865
+ relay: (a, o) => dataCall("relay", "quote", a || {}, o),
866
+ },
867
+ cow: {
868
+ quote: (a, o) => dataCall("cowswap", "quote", a || {}, o),
869
+ },
870
+ hlWs: {
871
+ allMids: (o) => dataCall("hl-ws", "allMids", {}, o),
872
+ l2Book: (coin, o) => dataCall("hl-ws", "l2Book", { coin }, o),
873
+ },
874
+ polyWs: {
875
+ book: (assetId, o) => dataCall("poly-ws", "book", { assetId }, o),
876
+ },
877
+ };