clodds 1.1.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 (1719) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +468 -0
  3. package/dist/acp/agreement.d.ts +110 -0
  4. package/dist/acp/agreement.js +514 -0
  5. package/dist/acp/agreement.js.map +1 -0
  6. package/dist/acp/discovery.d.ts +84 -0
  7. package/dist/acp/discovery.js +332 -0
  8. package/dist/acp/discovery.js.map +1 -0
  9. package/dist/acp/escrow.d.ts +139 -0
  10. package/dist/acp/escrow.js +880 -0
  11. package/dist/acp/escrow.js.map +1 -0
  12. package/dist/acp/identity.d.ts +135 -0
  13. package/dist/acp/identity.js +716 -0
  14. package/dist/acp/identity.js.map +1 -0
  15. package/dist/acp/index.d.ts +205 -0
  16. package/dist/acp/index.js +583 -0
  17. package/dist/acp/index.js.map +1 -0
  18. package/dist/acp/persistence.d.ts +59 -0
  19. package/dist/acp/persistence.js +590 -0
  20. package/dist/acp/persistence.js.map +1 -0
  21. package/dist/acp/predictions.d.ts +89 -0
  22. package/dist/acp/predictions.js +417 -0
  23. package/dist/acp/predictions.js.map +1 -0
  24. package/dist/acp/registry.d.ts +143 -0
  25. package/dist/acp/registry.js +584 -0
  26. package/dist/acp/registry.js.map +1 -0
  27. package/dist/agents/handlers/acp.d.ts +12 -0
  28. package/dist/agents/handlers/acp.js +987 -0
  29. package/dist/agents/handlers/acp.js.map +1 -0
  30. package/dist/agents/handlers/agentbets.d.ts +8 -0
  31. package/dist/agents/handlers/agentbets.js +63 -0
  32. package/dist/agents/handlers/agentbets.js.map +1 -0
  33. package/dist/agents/handlers/arbitrage.d.ts +16 -0
  34. package/dist/agents/handlers/arbitrage.js +187 -0
  35. package/dist/agents/handlers/arbitrage.js.map +1 -0
  36. package/dist/agents/handlers/betfair.d.ts +11 -0
  37. package/dist/agents/handlers/betfair.js +214 -0
  38. package/dist/agents/handlers/betfair.js.map +1 -0
  39. package/dist/agents/handlers/binance.d.ts +9 -0
  40. package/dist/agents/handlers/binance.js +227 -0
  41. package/dist/agents/handlers/binance.js.map +1 -0
  42. package/dist/agents/handlers/bittensor.d.ts +10 -0
  43. package/dist/agents/handlers/bittensor.js +90 -0
  44. package/dist/agents/handlers/bittensor.js.map +1 -0
  45. package/dist/agents/handlers/bybit.d.ts +9 -0
  46. package/dist/agents/handlers/bybit.js +226 -0
  47. package/dist/agents/handlers/bybit.js.map +1 -0
  48. package/dist/agents/handlers/credentials.d.ts +8 -0
  49. package/dist/agents/handlers/credentials.js +103 -0
  50. package/dist/agents/handlers/credentials.js.map +1 -0
  51. package/dist/agents/handlers/hyperliquid.d.ts +9 -0
  52. package/dist/agents/handlers/hyperliquid.js +326 -0
  53. package/dist/agents/handlers/hyperliquid.js.map +1 -0
  54. package/dist/agents/handlers/index.d.ts +82 -0
  55. package/dist/agents/handlers/index.js +143 -0
  56. package/dist/agents/handlers/index.js.map +1 -0
  57. package/dist/agents/handlers/kalshi.d.ts +10 -0
  58. package/dist/agents/handlers/kalshi.js +1377 -0
  59. package/dist/agents/handlers/kalshi.js.map +1 -0
  60. package/dist/agents/handlers/manifold.d.ts +9 -0
  61. package/dist/agents/handlers/manifold.js +1001 -0
  62. package/dist/agents/handlers/manifold.js.map +1 -0
  63. package/dist/agents/handlers/markets.d.ts +8 -0
  64. package/dist/agents/handlers/markets.js +321 -0
  65. package/dist/agents/handlers/markets.js.map +1 -0
  66. package/dist/agents/handlers/opinion.d.ts +11 -0
  67. package/dist/agents/handlers/opinion.js +374 -0
  68. package/dist/agents/handlers/opinion.js.map +1 -0
  69. package/dist/agents/handlers/paper-trading.d.ts +8 -0
  70. package/dist/agents/handlers/paper-trading.js +124 -0
  71. package/dist/agents/handlers/paper-trading.js.map +1 -0
  72. package/dist/agents/handlers/polymarket.d.ts +17 -0
  73. package/dist/agents/handlers/polymarket.js +455 -0
  74. package/dist/agents/handlers/polymarket.js.map +1 -0
  75. package/dist/agents/handlers/predictfun.d.ts +9 -0
  76. package/dist/agents/handlers/predictfun.js +488 -0
  77. package/dist/agents/handlers/predictfun.js.map +1 -0
  78. package/dist/agents/handlers/smarkets.d.ts +11 -0
  79. package/dist/agents/handlers/smarkets.js +205 -0
  80. package/dist/agents/handlers/smarkets.js.map +1 -0
  81. package/dist/agents/handlers/solana.d.ts +14 -0
  82. package/dist/agents/handlers/solana.js +1530 -0
  83. package/dist/agents/handlers/solana.js.map +1 -0
  84. package/dist/agents/handlers/types.d.ts +58 -0
  85. package/dist/agents/handlers/types.js +34 -0
  86. package/dist/agents/handlers/types.js.map +1 -0
  87. package/dist/agents/handlers/virtuals.d.ts +11 -0
  88. package/dist/agents/handlers/virtuals.js +135 -0
  89. package/dist/agents/handlers/virtuals.js.map +1 -0
  90. package/dist/agents/handlers/wallets.d.ts +9 -0
  91. package/dist/agents/handlers/wallets.js +222 -0
  92. package/dist/agents/handlers/wallets.js.map +1 -0
  93. package/dist/agents/index.d.ts +79 -0
  94. package/dist/agents/index.js +16690 -0
  95. package/dist/agents/index.js.map +1 -0
  96. package/dist/agents/subagents.d.ts +219 -0
  97. package/dist/agents/subagents.js +736 -0
  98. package/dist/agents/subagents.js.map +1 -0
  99. package/dist/alerts/index.d.ts +110 -0
  100. package/dist/alerts/index.js +421 -0
  101. package/dist/alerts/index.js.map +1 -0
  102. package/dist/alerts/realtime.d.ts +114 -0
  103. package/dist/alerts/realtime.js +262 -0
  104. package/dist/alerts/realtime.js.map +1 -0
  105. package/dist/api/apikeys.d.ts +74 -0
  106. package/dist/api/apikeys.js +319 -0
  107. package/dist/api/apikeys.js.map +1 -0
  108. package/dist/api/compute/code.d.ts +28 -0
  109. package/dist/api/compute/code.js +257 -0
  110. package/dist/api/compute/code.js.map +1 -0
  111. package/dist/api/compute/data.d.ts +72 -0
  112. package/dist/api/compute/data.js +264 -0
  113. package/dist/api/compute/data.js.map +1 -0
  114. package/dist/api/compute/gateway.d.ts +185 -0
  115. package/dist/api/compute/gateway.js +958 -0
  116. package/dist/api/compute/gateway.js.map +1 -0
  117. package/dist/api/compute/index.d.ts +21 -0
  118. package/dist/api/compute/index.js +46 -0
  119. package/dist/api/compute/index.js.map +1 -0
  120. package/dist/api/compute/llm.d.ts +64 -0
  121. package/dist/api/compute/llm.js +602 -0
  122. package/dist/api/compute/llm.js.map +1 -0
  123. package/dist/api/compute/persistence.d.ts +77 -0
  124. package/dist/api/compute/persistence.js +251 -0
  125. package/dist/api/compute/persistence.js.map +1 -0
  126. package/dist/api/compute/storage.d.ts +48 -0
  127. package/dist/api/compute/storage.js +283 -0
  128. package/dist/api/compute/storage.js.map +1 -0
  129. package/dist/api/compute/trade.d.ts +69 -0
  130. package/dist/api/compute/trade.js +460 -0
  131. package/dist/api/compute/trade.js.map +1 -0
  132. package/dist/api/compute/types.d.ts +271 -0
  133. package/dist/api/compute/types.js +87 -0
  134. package/dist/api/compute/types.js.map +1 -0
  135. package/dist/api/compute/web.d.ts +29 -0
  136. package/dist/api/compute/web.js +255 -0
  137. package/dist/api/compute/web.js.map +1 -0
  138. package/dist/api/custody.d.ts +48 -0
  139. package/dist/api/custody.js +272 -0
  140. package/dist/api/custody.js.map +1 -0
  141. package/dist/api/fees.d.ts +91 -0
  142. package/dist/api/fees.js +155 -0
  143. package/dist/api/fees.js.map +1 -0
  144. package/dist/api/gateway.d.ts +40 -0
  145. package/dist/api/gateway.js +569 -0
  146. package/dist/api/gateway.js.map +1 -0
  147. package/dist/api/index.d.ts +29 -0
  148. package/dist/api/index.js +55 -0
  149. package/dist/api/index.js.map +1 -0
  150. package/dist/api/jobs.d.ts +59 -0
  151. package/dist/api/jobs.js +362 -0
  152. package/dist/api/jobs.js.map +1 -0
  153. package/dist/api/middleware.d.ts +60 -0
  154. package/dist/api/middleware.js +315 -0
  155. package/dist/api/middleware.js.map +1 -0
  156. package/dist/api/prompt.d.ts +44 -0
  157. package/dist/api/prompt.js +345 -0
  158. package/dist/api/prompt.js.map +1 -0
  159. package/dist/api/sdk.d.ts +258 -0
  160. package/dist/api/sdk.js +341 -0
  161. package/dist/api/sdk.js.map +1 -0
  162. package/dist/api/server.d.ts +17 -0
  163. package/dist/api/server.js +852 -0
  164. package/dist/api/server.js.map +1 -0
  165. package/dist/api/types.d.ts +307 -0
  166. package/dist/api/types.js +64 -0
  167. package/dist/api/types.js.map +1 -0
  168. package/dist/arbitrage/index.d.ts +124 -0
  169. package/dist/arbitrage/index.js +482 -0
  170. package/dist/arbitrage/index.js.map +1 -0
  171. package/dist/auth/copilot.d.ts +87 -0
  172. package/dist/auth/copilot.js +328 -0
  173. package/dist/auth/copilot.js.map +1 -0
  174. package/dist/auth/google.d.ts +121 -0
  175. package/dist/auth/google.js +479 -0
  176. package/dist/auth/google.js.map +1 -0
  177. package/dist/auth/index.d.ts +8 -0
  178. package/dist/auth/index.js +25 -0
  179. package/dist/auth/index.js.map +1 -0
  180. package/dist/auth/oauth.d.ts +94 -0
  181. package/dist/auth/oauth.js +502 -0
  182. package/dist/auth/oauth.js.map +1 -0
  183. package/dist/auth/qwen.d.ts +110 -0
  184. package/dist/auth/qwen.js +351 -0
  185. package/dist/auth/qwen.js.map +1 -0
  186. package/dist/auto-reply/index.d.ts +143 -0
  187. package/dist/auto-reply/index.js +391 -0
  188. package/dist/auto-reply/index.js.map +1 -0
  189. package/dist/automation/cron.d.ts +66 -0
  190. package/dist/automation/cron.js +226 -0
  191. package/dist/automation/cron.js.map +1 -0
  192. package/dist/automation/heartbeats.d.ts +63 -0
  193. package/dist/automation/heartbeats.js +144 -0
  194. package/dist/automation/heartbeats.js.map +1 -0
  195. package/dist/automation/index.d.ts +9 -0
  196. package/dist/automation/index.js +15 -0
  197. package/dist/automation/index.js.map +1 -0
  198. package/dist/automation/webhooks.d.ts +60 -0
  199. package/dist/automation/webhooks.js +225 -0
  200. package/dist/automation/webhooks.js.map +1 -0
  201. package/dist/bankr/client.d.ts +86 -0
  202. package/dist/bankr/client.js +177 -0
  203. package/dist/bankr/client.js.map +1 -0
  204. package/dist/bankr/index.d.ts +6 -0
  205. package/dist/bankr/index.js +23 -0
  206. package/dist/bankr/index.js.map +1 -0
  207. package/dist/base/index.d.ts +6 -0
  208. package/dist/base/index.js +23 -0
  209. package/dist/base/index.js.map +1 -0
  210. package/dist/base/provider.d.ts +27 -0
  211. package/dist/base/provider.js +128 -0
  212. package/dist/base/provider.js.map +1 -0
  213. package/dist/bin/worker.d.ts +31 -0
  214. package/dist/bin/worker.js +127 -0
  215. package/dist/bin/worker.js.map +1 -0
  216. package/dist/bittensor/chutes.d.ts +14 -0
  217. package/dist/bittensor/chutes.js +141 -0
  218. package/dist/bittensor/chutes.js.map +1 -0
  219. package/dist/bittensor/index.d.ts +7 -0
  220. package/dist/bittensor/index.js +13 -0
  221. package/dist/bittensor/index.js.map +1 -0
  222. package/dist/bittensor/persistence.d.ts +8 -0
  223. package/dist/bittensor/persistence.js +188 -0
  224. package/dist/bittensor/persistence.js.map +1 -0
  225. package/dist/bittensor/plugin.d.ts +30 -0
  226. package/dist/bittensor/plugin.js +134 -0
  227. package/dist/bittensor/plugin.js.map +1 -0
  228. package/dist/bittensor/python-runner.d.ts +7 -0
  229. package/dist/bittensor/python-runner.js +83 -0
  230. package/dist/bittensor/python-runner.js.map +1 -0
  231. package/dist/bittensor/server.d.ts +7 -0
  232. package/dist/bittensor/server.js +110 -0
  233. package/dist/bittensor/server.js.map +1 -0
  234. package/dist/bittensor/service.d.ts +7 -0
  235. package/dist/bittensor/service.js +291 -0
  236. package/dist/bittensor/service.js.map +1 -0
  237. package/dist/bittensor/tool.d.ts +45 -0
  238. package/dist/bittensor/tool.js +147 -0
  239. package/dist/bittensor/tool.js.map +1 -0
  240. package/dist/bittensor/types.d.ts +188 -0
  241. package/dist/bittensor/types.js +6 -0
  242. package/dist/bittensor/types.js.map +1 -0
  243. package/dist/bittensor/wallet.d.ts +18 -0
  244. package/dist/bittensor/wallet.js +192 -0
  245. package/dist/bittensor/wallet.js.map +1 -0
  246. package/dist/bridge/wormhole.d.ts +239 -0
  247. package/dist/bridge/wormhole.js +404 -0
  248. package/dist/bridge/wormhole.js.map +1 -0
  249. package/dist/browser/index.d.ts +67 -0
  250. package/dist/browser/index.js +458 -0
  251. package/dist/browser/index.js.map +1 -0
  252. package/dist/cache/index.d.ts +105 -0
  253. package/dist/cache/index.js +306 -0
  254. package/dist/cache/index.js.map +1 -0
  255. package/dist/canvas/index.d.ts +66 -0
  256. package/dist/canvas/index.js +391 -0
  257. package/dist/canvas/index.js.map +1 -0
  258. package/dist/channels/base-adapter.d.ts +126 -0
  259. package/dist/channels/base-adapter.js +416 -0
  260. package/dist/channels/base-adapter.js.map +1 -0
  261. package/dist/channels/bluebubbles/index.d.ts +23 -0
  262. package/dist/channels/bluebubbles/index.js +182 -0
  263. package/dist/channels/bluebubbles/index.js.map +1 -0
  264. package/dist/channels/discord/index.d.ts +25 -0
  265. package/dist/channels/discord/index.js +419 -0
  266. package/dist/channels/discord/index.js.map +1 -0
  267. package/dist/channels/googlechat/index.d.ts +35 -0
  268. package/dist/channels/googlechat/index.js +223 -0
  269. package/dist/channels/googlechat/index.js.map +1 -0
  270. package/dist/channels/imessage/index.d.ts +28 -0
  271. package/dist/channels/imessage/index.js +340 -0
  272. package/dist/channels/imessage/index.js.map +1 -0
  273. package/dist/channels/index.d.ts +58 -0
  274. package/dist/channels/index.js +382 -0
  275. package/dist/channels/index.js.map +1 -0
  276. package/dist/channels/line/index.d.ts +307 -0
  277. package/dist/channels/line/index.js +760 -0
  278. package/dist/channels/line/index.js.map +1 -0
  279. package/dist/channels/matrix/index.d.ts +35 -0
  280. package/dist/channels/matrix/index.js +328 -0
  281. package/dist/channels/matrix/index.js.map +1 -0
  282. package/dist/channels/mattermost/index.d.ts +25 -0
  283. package/dist/channels/mattermost/index.js +239 -0
  284. package/dist/channels/mattermost/index.js.map +1 -0
  285. package/dist/channels/nextcloud-talk/index.d.ts +25 -0
  286. package/dist/channels/nextcloud-talk/index.js +175 -0
  287. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  288. package/dist/channels/nostr/index.d.ts +21 -0
  289. package/dist/channels/nostr/index.js +278 -0
  290. package/dist/channels/nostr/index.js.map +1 -0
  291. package/dist/channels/signal/index.d.ts +33 -0
  292. package/dist/channels/signal/index.js +333 -0
  293. package/dist/channels/signal/index.js.map +1 -0
  294. package/dist/channels/slack/index.d.ts +26 -0
  295. package/dist/channels/slack/index.js +266 -0
  296. package/dist/channels/slack/index.js.map +1 -0
  297. package/dist/channels/teams/index.d.ts +42 -0
  298. package/dist/channels/teams/index.js +312 -0
  299. package/dist/channels/teams/index.js.map +1 -0
  300. package/dist/channels/telegram/index.d.ts +9 -0
  301. package/dist/channels/telegram/index.js +761 -0
  302. package/dist/channels/telegram/index.js.map +1 -0
  303. package/dist/channels/tlon/index.d.ts +25 -0
  304. package/dist/channels/tlon/index.js +236 -0
  305. package/dist/channels/tlon/index.js.map +1 -0
  306. package/dist/channels/twitch/index.d.ts +25 -0
  307. package/dist/channels/twitch/index.js +182 -0
  308. package/dist/channels/twitch/index.js.map +1 -0
  309. package/dist/channels/voice/index.d.ts +31 -0
  310. package/dist/channels/voice/index.js +208 -0
  311. package/dist/channels/voice/index.js.map +1 -0
  312. package/dist/channels/webchat/index.d.ts +29 -0
  313. package/dist/channels/webchat/index.js +366 -0
  314. package/dist/channels/webchat/index.js.map +1 -0
  315. package/dist/channels/whatsapp/index.d.ts +72 -0
  316. package/dist/channels/whatsapp/index.js +767 -0
  317. package/dist/channels/whatsapp/index.js.map +1 -0
  318. package/dist/channels/zalo/index.d.ts +45 -0
  319. package/dist/channels/zalo/index.js +285 -0
  320. package/dist/channels/zalo/index.js.map +1 -0
  321. package/dist/cli/commands/doctor.d.ts +23 -0
  322. package/dist/cli/commands/doctor.js +649 -0
  323. package/dist/cli/commands/doctor.js.map +1 -0
  324. package/dist/cli/commands/gateway.d.ts +6 -0
  325. package/dist/cli/commands/gateway.js +32 -0
  326. package/dist/cli/commands/gateway.js.map +1 -0
  327. package/dist/cli/commands/index.d.ts +31 -0
  328. package/dist/cli/commands/index.js +3743 -0
  329. package/dist/cli/commands/index.js.map +1 -0
  330. package/dist/cli/commands/onboard.d.ts +4 -0
  331. package/dist/cli/commands/onboard.js +334 -0
  332. package/dist/cli/commands/onboard.js.map +1 -0
  333. package/dist/cli/commands/repl.d.ts +11 -0
  334. package/dist/cli/commands/repl.js +185 -0
  335. package/dist/cli/commands/repl.js.map +1 -0
  336. package/dist/cli/commands/skills.d.ts +29 -0
  337. package/dist/cli/commands/skills.js +297 -0
  338. package/dist/cli/commands/skills.js.map +1 -0
  339. package/dist/cli/index.d.ts +12 -0
  340. package/dist/cli/index.js +449 -0
  341. package/dist/cli/index.js.map +1 -0
  342. package/dist/cli/secure.d.ts +14 -0
  343. package/dist/cli/secure.js +626 -0
  344. package/dist/cli/secure.js.map +1 -0
  345. package/dist/commands/index.d.ts +61 -0
  346. package/dist/commands/index.js +290 -0
  347. package/dist/commands/index.js.map +1 -0
  348. package/dist/commands/registry.d.ts +69 -0
  349. package/dist/commands/registry.js +3142 -0
  350. package/dist/commands/registry.js.map +1 -0
  351. package/dist/config/index.d.ts +465 -0
  352. package/dist/config/index.js +1451 -0
  353. package/dist/config/index.js.map +1 -0
  354. package/dist/credentials/index.d.ts +51 -0
  355. package/dist/credentials/index.js +270 -0
  356. package/dist/credentials/index.js.map +1 -0
  357. package/dist/cron/index.d.ts +151 -0
  358. package/dist/cron/index.js +1283 -0
  359. package/dist/cron/index.js.map +1 -0
  360. package/dist/cron/types.d.ts +102 -0
  361. package/dist/cron/types.js +6 -0
  362. package/dist/cron/types.js.map +1 -0
  363. package/dist/daemon/index.d.ts +23 -0
  364. package/dist/daemon/index.js +159 -0
  365. package/dist/daemon/index.js.map +1 -0
  366. package/dist/db/index.d.ts +825 -0
  367. package/dist/db/index.js +3382 -0
  368. package/dist/db/index.js.map +1 -0
  369. package/dist/db/migrations.d.ts +70 -0
  370. package/dist/db/migrations.js +1373 -0
  371. package/dist/db/migrations.js.map +1 -0
  372. package/dist/docker/index.d.ts +188 -0
  373. package/dist/docker/index.js +571 -0
  374. package/dist/docker/index.js.map +1 -0
  375. package/dist/doctor/index.d.ts +47 -0
  376. package/dist/doctor/index.js +379 -0
  377. package/dist/doctor/index.js.map +1 -0
  378. package/dist/embeddings/index.d.ts +65 -0
  379. package/dist/embeddings/index.js +399 -0
  380. package/dist/embeddings/index.js.map +1 -0
  381. package/dist/evm/contracts.d.ts +112 -0
  382. package/dist/evm/contracts.js +332 -0
  383. package/dist/evm/contracts.js.map +1 -0
  384. package/dist/evm/index.d.ts +21 -0
  385. package/dist/evm/index.js +45 -0
  386. package/dist/evm/index.js.map +1 -0
  387. package/dist/evm/multichain.d.ts +87 -0
  388. package/dist/evm/multichain.js +308 -0
  389. package/dist/evm/multichain.js.map +1 -0
  390. package/dist/evm/odos.d.ts +62 -0
  391. package/dist/evm/odos.js +261 -0
  392. package/dist/evm/odos.js.map +1 -0
  393. package/dist/evm/oneinch.d.ts +55 -0
  394. package/dist/evm/oneinch.js +324 -0
  395. package/dist/evm/oneinch.js.map +1 -0
  396. package/dist/evm/transfers.d.ts +83 -0
  397. package/dist/evm/transfers.js +393 -0
  398. package/dist/evm/transfers.js.map +1 -0
  399. package/dist/evm/uniswap.d.ts +56 -0
  400. package/dist/evm/uniswap.js +307 -0
  401. package/dist/evm/uniswap.js.map +1 -0
  402. package/dist/evm/virtuals.d.ts +220 -0
  403. package/dist/evm/virtuals.js +735 -0
  404. package/dist/evm/virtuals.js.map +1 -0
  405. package/dist/evm/wallet.d.ts +96 -0
  406. package/dist/evm/wallet.js +258 -0
  407. package/dist/evm/wallet.js.map +1 -0
  408. package/dist/exchanges/binance-futures/index.d.ts +83 -0
  409. package/dist/exchanges/binance-futures/index.js +394 -0
  410. package/dist/exchanges/binance-futures/index.js.map +1 -0
  411. package/dist/exchanges/bybit/index.d.ts +78 -0
  412. package/dist/exchanges/bybit/index.js +379 -0
  413. package/dist/exchanges/bybit/index.js.map +1 -0
  414. package/dist/exchanges/hyperliquid/index.d.ts +594 -0
  415. package/dist/exchanges/hyperliquid/index.js +1101 -0
  416. package/dist/exchanges/hyperliquid/index.js.map +1 -0
  417. package/dist/exchanges/mexc/index.d.ts +80 -0
  418. package/dist/exchanges/mexc/index.js +389 -0
  419. package/dist/exchanges/mexc/index.js.map +1 -0
  420. package/dist/exchanges/opinion/index.d.ts +128 -0
  421. package/dist/exchanges/opinion/index.js +443 -0
  422. package/dist/exchanges/opinion/index.js.map +1 -0
  423. package/dist/exchanges/predictfun/index.d.ts +107 -0
  424. package/dist/exchanges/predictfun/index.js +398 -0
  425. package/dist/exchanges/predictfun/index.js.map +1 -0
  426. package/dist/execution/auto-redeem.d.ts +55 -0
  427. package/dist/execution/auto-redeem.js +324 -0
  428. package/dist/execution/auto-redeem.js.map +1 -0
  429. package/dist/execution/bracket-orders.d.ts +84 -0
  430. package/dist/execution/bracket-orders.js +387 -0
  431. package/dist/execution/bracket-orders.js.map +1 -0
  432. package/dist/execution/circuit-breaker.d.ts +87 -0
  433. package/dist/execution/circuit-breaker.js +274 -0
  434. package/dist/execution/circuit-breaker.js.map +1 -0
  435. package/dist/execution/dca-persistence.d.ts +47 -0
  436. package/dist/execution/dca-persistence.js +159 -0
  437. package/dist/execution/dca-persistence.js.map +1 -0
  438. package/dist/execution/dca.d.ts +60 -0
  439. package/dist/execution/dca.js +273 -0
  440. package/dist/execution/dca.js.map +1 -0
  441. package/dist/execution/futures.d.ts +162 -0
  442. package/dist/execution/futures.js +1336 -0
  443. package/dist/execution/futures.js.map +1 -0
  444. package/dist/execution/index.d.ts +346 -0
  445. package/dist/execution/index.js +2532 -0
  446. package/dist/execution/index.js.map +1 -0
  447. package/dist/execution/mev-protection.d.ts +150 -0
  448. package/dist/execution/mev-protection.js +377 -0
  449. package/dist/execution/mev-protection.js.map +1 -0
  450. package/dist/execution/order-persistence.d.ts +81 -0
  451. package/dist/execution/order-persistence.js +350 -0
  452. package/dist/execution/order-persistence.js.map +1 -0
  453. package/dist/execution/position-manager.d.ts +142 -0
  454. package/dist/execution/position-manager.js +404 -0
  455. package/dist/execution/position-manager.js.map +1 -0
  456. package/dist/execution/smart-router.d.ts +90 -0
  457. package/dist/execution/smart-router.js +323 -0
  458. package/dist/execution/smart-router.js.map +1 -0
  459. package/dist/execution/trigger-orders.d.ts +81 -0
  460. package/dist/execution/trigger-orders.js +266 -0
  461. package/dist/execution/trigger-orders.js.map +1 -0
  462. package/dist/execution/twap.d.ts +87 -0
  463. package/dist/execution/twap.js +405 -0
  464. package/dist/execution/twap.js.map +1 -0
  465. package/dist/extensions/copilot-proxy/index.d.ts +49 -0
  466. package/dist/extensions/copilot-proxy/index.js +204 -0
  467. package/dist/extensions/copilot-proxy/index.js.map +1 -0
  468. package/dist/extensions/diagnostics-otel/index.d.ts +54 -0
  469. package/dist/extensions/diagnostics-otel/index.js +290 -0
  470. package/dist/extensions/diagnostics-otel/index.js.map +1 -0
  471. package/dist/extensions/google-auth/index.d.ts +71 -0
  472. package/dist/extensions/google-auth/index.js +350 -0
  473. package/dist/extensions/google-auth/index.js.map +1 -0
  474. package/dist/extensions/index.d.ts +11 -0
  475. package/dist/extensions/index.js +29 -0
  476. package/dist/extensions/index.js.map +1 -0
  477. package/dist/extensions/llm-task/index.d.ts +80 -0
  478. package/dist/extensions/llm-task/index.js +248 -0
  479. package/dist/extensions/llm-task/index.js.map +1 -0
  480. package/dist/extensions/lobster/index.d.ts +69 -0
  481. package/dist/extensions/lobster/index.js +178 -0
  482. package/dist/extensions/lobster/index.js.map +1 -0
  483. package/dist/extensions/memory-lancedb/index.d.ts +62 -0
  484. package/dist/extensions/memory-lancedb/index.js +343 -0
  485. package/dist/extensions/memory-lancedb/index.js.map +1 -0
  486. package/dist/extensions/open-prose/index.d.ts +82 -0
  487. package/dist/extensions/open-prose/index.js +565 -0
  488. package/dist/extensions/open-prose/index.js.map +1 -0
  489. package/dist/extensions/qwen-portal/index.d.ts +48 -0
  490. package/dist/extensions/qwen-portal/index.js +161 -0
  491. package/dist/extensions/qwen-portal/index.js.map +1 -0
  492. package/dist/extensions/task-runner/index.d.ts +121 -0
  493. package/dist/extensions/task-runner/index.js +640 -0
  494. package/dist/extensions/task-runner/index.js.map +1 -0
  495. package/dist/farcaster/client.d.ts +101 -0
  496. package/dist/farcaster/client.js +282 -0
  497. package/dist/farcaster/client.js.map +1 -0
  498. package/dist/farcaster/index.d.ts +4 -0
  499. package/dist/farcaster/index.js +21 -0
  500. package/dist/farcaster/index.js.map +1 -0
  501. package/dist/feeds/acled/index.d.ts +86 -0
  502. package/dist/feeds/acled/index.js +215 -0
  503. package/dist/feeds/acled/index.js.map +1 -0
  504. package/dist/feeds/agentbets/index.d.ts +17 -0
  505. package/dist/feeds/agentbets/index.js +137 -0
  506. package/dist/feeds/agentbets/index.js.map +1 -0
  507. package/dist/feeds/betfair/index.d.ts +132 -0
  508. package/dist/feeds/betfair/index.js +640 -0
  509. package/dist/feeds/betfair/index.js.map +1 -0
  510. package/dist/feeds/crypto/index.d.ts +101 -0
  511. package/dist/feeds/crypto/index.js +506 -0
  512. package/dist/feeds/crypto/index.js.map +1 -0
  513. package/dist/feeds/crypto/whale-tracker.d.ts +138 -0
  514. package/dist/feeds/crypto/whale-tracker.js +685 -0
  515. package/dist/feeds/crypto/whale-tracker.js.map +1 -0
  516. package/dist/feeds/descriptors.d.ts +14 -0
  517. package/dist/feeds/descriptors.js +582 -0
  518. package/dist/feeds/descriptors.js.map +1 -0
  519. package/dist/feeds/drift/index.d.ts +23 -0
  520. package/dist/feeds/drift/index.js +182 -0
  521. package/dist/feeds/drift/index.js.map +1 -0
  522. package/dist/feeds/drift/trading.d.ts +75 -0
  523. package/dist/feeds/drift/trading.js +457 -0
  524. package/dist/feeds/drift/trading.js.map +1 -0
  525. package/dist/feeds/external/index.d.ts +48 -0
  526. package/dist/feeds/external/index.js +575 -0
  527. package/dist/feeds/external/index.js.map +1 -0
  528. package/dist/feeds/fred/index.d.ts +134 -0
  529. package/dist/feeds/fred/index.js +263 -0
  530. package/dist/feeds/fred/index.js.map +1 -0
  531. package/dist/feeds/freshness.d.ts +79 -0
  532. package/dist/feeds/freshness.js +259 -0
  533. package/dist/feeds/freshness.js.map +1 -0
  534. package/dist/feeds/hedgehog/index.d.ts +24 -0
  535. package/dist/feeds/hedgehog/index.js +589 -0
  536. package/dist/feeds/hedgehog/index.js.map +1 -0
  537. package/dist/feeds/hedgehog/types.d.ts +215 -0
  538. package/dist/feeds/hedgehog/types.js +7 -0
  539. package/dist/feeds/hedgehog/types.js.map +1 -0
  540. package/dist/feeds/index.d.ts +38 -0
  541. package/dist/feeds/index.js +469 -0
  542. package/dist/feeds/index.js.map +1 -0
  543. package/dist/feeds/kalshi/index.d.ts +116 -0
  544. package/dist/feeds/kalshi/index.js +970 -0
  545. package/dist/feeds/kalshi/index.js.map +1 -0
  546. package/dist/feeds/manifold/index.d.ts +15 -0
  547. package/dist/feeds/manifold/index.js +269 -0
  548. package/dist/feeds/manifold/index.js.map +1 -0
  549. package/dist/feeds/metaculus/index.d.ts +22 -0
  550. package/dist/feeds/metaculus/index.js +149 -0
  551. package/dist/feeds/metaculus/index.js.map +1 -0
  552. package/dist/feeds/news/index.d.ts +20 -0
  553. package/dist/feeds/news/index.js +308 -0
  554. package/dist/feeds/news/index.js.map +1 -0
  555. package/dist/feeds/opinion/index.d.ts +31 -0
  556. package/dist/feeds/opinion/index.js +389 -0
  557. package/dist/feeds/opinion/index.js.map +1 -0
  558. package/dist/feeds/polymarket/index.d.ts +21 -0
  559. package/dist/feeds/polymarket/index.js +501 -0
  560. package/dist/feeds/polymarket/index.js.map +1 -0
  561. package/dist/feeds/polymarket/rtds.d.ts +40 -0
  562. package/dist/feeds/polymarket/rtds.js +159 -0
  563. package/dist/feeds/polymarket/rtds.js.map +1 -0
  564. package/dist/feeds/polymarket/user-ws.d.ts +64 -0
  565. package/dist/feeds/polymarket/user-ws.js +230 -0
  566. package/dist/feeds/polymarket/user-ws.js.map +1 -0
  567. package/dist/feeds/polymarket/whale-tracker.d.ts +152 -0
  568. package/dist/feeds/polymarket/whale-tracker.js +709 -0
  569. package/dist/feeds/polymarket/whale-tracker.js.map +1 -0
  570. package/dist/feeds/predictfun/index.d.ts +24 -0
  571. package/dist/feeds/predictfun/index.js +234 -0
  572. package/dist/feeds/predictfun/index.js.map +1 -0
  573. package/dist/feeds/predictit/index.d.ts +14 -0
  574. package/dist/feeds/predictit/index.js +88 -0
  575. package/dist/feeds/predictit/index.js.map +1 -0
  576. package/dist/feeds/registry.d.ts +148 -0
  577. package/dist/feeds/registry.js +197 -0
  578. package/dist/feeds/registry.js.map +1 -0
  579. package/dist/feeds/smarkets/index.d.ts +76 -0
  580. package/dist/feeds/smarkets/index.js +415 -0
  581. package/dist/feeds/smarkets/index.js.map +1 -0
  582. package/dist/feeds/virtuals/index.d.ts +92 -0
  583. package/dist/feeds/virtuals/index.js +341 -0
  584. package/dist/feeds/virtuals/index.js.map +1 -0
  585. package/dist/feeds/weather-nws/index.d.ts +73 -0
  586. package/dist/feeds/weather-nws/index.js +162 -0
  587. package/dist/feeds/weather-nws/index.js.map +1 -0
  588. package/dist/feeds/weather-openmeteo/index.d.ts +80 -0
  589. package/dist/feeds/weather-openmeteo/index.js +197 -0
  590. package/dist/feeds/weather-openmeteo/index.js.map +1 -0
  591. package/dist/gateway/alerts-routes.d.ts +15 -0
  592. package/dist/gateway/alerts-routes.js +188 -0
  593. package/dist/gateway/alerts-routes.js.map +1 -0
  594. package/dist/gateway/alt-data-routes.d.ts +15 -0
  595. package/dist/gateway/alt-data-routes.js +67 -0
  596. package/dist/gateway/alt-data-routes.js.map +1 -0
  597. package/dist/gateway/api-routes.d.ts +39 -0
  598. package/dist/gateway/api-routes.js +1028 -0
  599. package/dist/gateway/api-routes.js.map +1 -0
  600. package/dist/gateway/audit-routes.d.ts +8 -0
  601. package/dist/gateway/audit-routes.js +61 -0
  602. package/dist/gateway/audit-routes.js.map +1 -0
  603. package/dist/gateway/bracket-routes.d.ts +12 -0
  604. package/dist/gateway/bracket-routes.js +122 -0
  605. package/dist/gateway/bracket-routes.js.map +1 -0
  606. package/dist/gateway/control-ui.d.ts +45 -0
  607. package/dist/gateway/control-ui.js +301 -0
  608. package/dist/gateway/control-ui.js.map +1 -0
  609. package/dist/gateway/copy-trading-routes.d.ts +12 -0
  610. package/dist/gateway/copy-trading-routes.js +159 -0
  611. package/dist/gateway/copy-trading-routes.js.map +1 -0
  612. package/dist/gateway/cron-routes.d.ts +14 -0
  613. package/dist/gateway/cron-routes.js +132 -0
  614. package/dist/gateway/cron-routes.js.map +1 -0
  615. package/dist/gateway/dca-routes.d.ts +8 -0
  616. package/dist/gateway/dca-routes.js +179 -0
  617. package/dist/gateway/dca-routes.js.map +1 -0
  618. package/dist/gateway/embeddings-routes.d.ts +12 -0
  619. package/dist/gateway/embeddings-routes.js +102 -0
  620. package/dist/gateway/embeddings-routes.js.map +1 -0
  621. package/dist/gateway/feeds-routes.d.ts +34 -0
  622. package/dist/gateway/feeds-routes.js +167 -0
  623. package/dist/gateway/feeds-routes.js.map +1 -0
  624. package/dist/gateway/index.d.ts +100 -0
  625. package/dist/gateway/index.js +2321 -0
  626. package/dist/gateway/index.js.map +1 -0
  627. package/dist/gateway/monitoring-routes.d.ts +12 -0
  628. package/dist/gateway/monitoring-routes.js +73 -0
  629. package/dist/gateway/monitoring-routes.js.map +1 -0
  630. package/dist/gateway/opportunity-routes.d.ts +12 -0
  631. package/dist/gateway/opportunity-routes.js +238 -0
  632. package/dist/gateway/opportunity-routes.js.map +1 -0
  633. package/dist/gateway/payments-routes.d.ts +14 -0
  634. package/dist/gateway/payments-routes.js +82 -0
  635. package/dist/gateway/payments-routes.js.map +1 -0
  636. package/dist/gateway/percolator-routes.d.ts +16 -0
  637. package/dist/gateway/percolator-routes.js +139 -0
  638. package/dist/gateway/percolator-routes.js.map +1 -0
  639. package/dist/gateway/queue-routes.d.ts +12 -0
  640. package/dist/gateway/queue-routes.js +47 -0
  641. package/dist/gateway/queue-routes.js.map +1 -0
  642. package/dist/gateway/risk-routes.d.ts +12 -0
  643. package/dist/gateway/risk-routes.js +119 -0
  644. package/dist/gateway/risk-routes.js.map +1 -0
  645. package/dist/gateway/routing-routes.d.ts +12 -0
  646. package/dist/gateway/routing-routes.js +86 -0
  647. package/dist/gateway/routing-routes.js.map +1 -0
  648. package/dist/gateway/server.d.ts +215 -0
  649. package/dist/gateway/server.js +2287 -0
  650. package/dist/gateway/server.js.map +1 -0
  651. package/dist/gateway/shield-routes.d.ts +8 -0
  652. package/dist/gateway/shield-routes.js +88 -0
  653. package/dist/gateway/shield-routes.js.map +1 -0
  654. package/dist/gateway/signal-bus.d.ts +51 -0
  655. package/dist/gateway/signal-bus.js +64 -0
  656. package/dist/gateway/signal-bus.js.map +1 -0
  657. package/dist/gateway/trigger-routes.d.ts +12 -0
  658. package/dist/gateway/trigger-routes.js +127 -0
  659. package/dist/gateway/trigger-routes.js.map +1 -0
  660. package/dist/gateway/twap-routes.d.ts +12 -0
  661. package/dist/gateway/twap-routes.js +142 -0
  662. package/dist/gateway/twap-routes.js.map +1 -0
  663. package/dist/gateway/webhooks-routes.d.ts +31 -0
  664. package/dist/gateway/webhooks-routes.js +107 -0
  665. package/dist/gateway/webhooks-routes.js.map +1 -0
  666. package/dist/gateway/whale-routes.d.ts +12 -0
  667. package/dist/gateway/whale-routes.js +204 -0
  668. package/dist/gateway/whale-routes.js.map +1 -0
  669. package/dist/history/index.d.ts +81 -0
  670. package/dist/history/index.js +362 -0
  671. package/dist/history/index.js.map +1 -0
  672. package/dist/hooks/index.d.ts +279 -0
  673. package/dist/hooks/index.js +739 -0
  674. package/dist/hooks/index.js.map +1 -0
  675. package/dist/i18n/index.d.ts +65 -0
  676. package/dist/i18n/index.js +183 -0
  677. package/dist/i18n/index.js.map +1 -0
  678. package/dist/identity/erc8004.d.ts +104 -0
  679. package/dist/identity/erc8004.js +493 -0
  680. package/dist/identity/erc8004.js.map +1 -0
  681. package/dist/identity/index.d.ts +1 -0
  682. package/dist/identity/index.js +18 -0
  683. package/dist/identity/index.js.map +1 -0
  684. package/dist/index.d.ts +7 -0
  685. package/dist/index.js +240 -0
  686. package/dist/index.js.map +1 -0
  687. package/dist/infra/index.d.ts +133 -0
  688. package/dist/infra/index.js +481 -0
  689. package/dist/infra/index.js.map +1 -0
  690. package/dist/infra/retry.d.ts +132 -0
  691. package/dist/infra/retry.js +450 -0
  692. package/dist/infra/retry.js.map +1 -0
  693. package/dist/ledger/anchor.d.ts +45 -0
  694. package/dist/ledger/anchor.js +271 -0
  695. package/dist/ledger/anchor.js.map +1 -0
  696. package/dist/ledger/hash.d.ts +26 -0
  697. package/dist/ledger/hash.js +69 -0
  698. package/dist/ledger/hash.js.map +1 -0
  699. package/dist/ledger/hooks.d.ts +107 -0
  700. package/dist/ledger/hooks.js +314 -0
  701. package/dist/ledger/hooks.js.map +1 -0
  702. package/dist/ledger/index.d.ts +67 -0
  703. package/dist/ledger/index.js +221 -0
  704. package/dist/ledger/index.js.map +1 -0
  705. package/dist/ledger/storage.d.ts +57 -0
  706. package/dist/ledger/storage.js +368 -0
  707. package/dist/ledger/storage.js.map +1 -0
  708. package/dist/ledger/types.d.ts +138 -0
  709. package/dist/ledger/types.js +16 -0
  710. package/dist/ledger/types.js.map +1 -0
  711. package/dist/link-understanding/index.d.ts +61 -0
  712. package/dist/link-understanding/index.js +320 -0
  713. package/dist/link-understanding/index.js.map +1 -0
  714. package/dist/logging/index.d.ts +50 -0
  715. package/dist/logging/index.js +255 -0
  716. package/dist/logging/index.js.map +1 -0
  717. package/dist/macos/index.d.ts +143 -0
  718. package/dist/macos/index.js +587 -0
  719. package/dist/macos/index.js.map +1 -0
  720. package/dist/markdown/index.d.ts +43 -0
  721. package/dist/markdown/index.js +305 -0
  722. package/dist/markdown/index.js.map +1 -0
  723. package/dist/market-index/index.d.ts +51 -0
  724. package/dist/market-index/index.js +553 -0
  725. package/dist/market-index/index.js.map +1 -0
  726. package/dist/mcp/index.d.ts +263 -0
  727. package/dist/mcp/index.js +940 -0
  728. package/dist/mcp/index.js.map +1 -0
  729. package/dist/mcp/installer.d.ts +11 -0
  730. package/dist/mcp/installer.js +128 -0
  731. package/dist/mcp/installer.js.map +1 -0
  732. package/dist/mcp/server.d.ts +7 -0
  733. package/dist/mcp/server.js +172 -0
  734. package/dist/mcp/server.js.map +1 -0
  735. package/dist/media/index.d.ts +119 -0
  736. package/dist/media/index.js +740 -0
  737. package/dist/media/index.js.map +1 -0
  738. package/dist/memory/context.d.ts +189 -0
  739. package/dist/memory/context.js +541 -0
  740. package/dist/memory/context.js.map +1 -0
  741. package/dist/memory/index.d.ts +74 -0
  742. package/dist/memory/index.js +352 -0
  743. package/dist/memory/index.js.map +1 -0
  744. package/dist/memory/summarizer.d.ts +10 -0
  745. package/dist/memory/summarizer.js +51 -0
  746. package/dist/memory/summarizer.js.map +1 -0
  747. package/dist/memory/tokenizer.d.ts +4 -0
  748. package/dist/memory/tokenizer.js +61 -0
  749. package/dist/memory/tokenizer.js.map +1 -0
  750. package/dist/messages/unified.d.ts +7 -0
  751. package/dist/messages/unified.js +77 -0
  752. package/dist/messages/unified.js.map +1 -0
  753. package/dist/ml-pipeline/collector.d.ts +23 -0
  754. package/dist/ml-pipeline/collector.js +176 -0
  755. package/dist/ml-pipeline/collector.js.map +1 -0
  756. package/dist/ml-pipeline/index.d.ts +21 -0
  757. package/dist/ml-pipeline/index.js +72 -0
  758. package/dist/ml-pipeline/index.js.map +1 -0
  759. package/dist/ml-pipeline/trainer.d.ts +32 -0
  760. package/dist/ml-pipeline/trainer.js +228 -0
  761. package/dist/ml-pipeline/trainer.js.map +1 -0
  762. package/dist/ml-pipeline/types.d.ts +51 -0
  763. package/dist/ml-pipeline/types.js +23 -0
  764. package/dist/ml-pipeline/types.js.map +1 -0
  765. package/dist/models/adaptive.d.ts +11 -0
  766. package/dist/models/adaptive.js +64 -0
  767. package/dist/models/adaptive.js.map +1 -0
  768. package/dist/models/failover.d.ts +51 -0
  769. package/dist/models/failover.js +151 -0
  770. package/dist/models/failover.js.map +1 -0
  771. package/dist/models/index.d.ts +7 -0
  772. package/dist/models/index.js +13 -0
  773. package/dist/models/index.js.map +1 -0
  774. package/dist/monitoring/alerts.d.ts +185 -0
  775. package/dist/monitoring/alerts.js +565 -0
  776. package/dist/monitoring/alerts.js.map +1 -0
  777. package/dist/monitoring/health.d.ts +151 -0
  778. package/dist/monitoring/health.js +423 -0
  779. package/dist/monitoring/health.js.map +1 -0
  780. package/dist/monitoring/index.d.ts +25 -0
  781. package/dist/monitoring/index.js +258 -0
  782. package/dist/monitoring/index.js.map +1 -0
  783. package/dist/monitoring/metrics.d.ts +147 -0
  784. package/dist/monitoring/metrics.js +519 -0
  785. package/dist/monitoring/metrics.js.map +1 -0
  786. package/dist/nodes/index.d.ts +81 -0
  787. package/dist/nodes/index.js +475 -0
  788. package/dist/nodes/index.js.map +1 -0
  789. package/dist/opportunity/analytics.d.ts +221 -0
  790. package/dist/opportunity/analytics.js +678 -0
  791. package/dist/opportunity/analytics.js.map +1 -0
  792. package/dist/opportunity/combinatorial.d.ts +147 -0
  793. package/dist/opportunity/combinatorial.js +765 -0
  794. package/dist/opportunity/combinatorial.js.map +1 -0
  795. package/dist/opportunity/correlation.d.ts +107 -0
  796. package/dist/opportunity/correlation.js +410 -0
  797. package/dist/opportunity/correlation.js.map +1 -0
  798. package/dist/opportunity/executor.d.ts +108 -0
  799. package/dist/opportunity/executor.js +356 -0
  800. package/dist/opportunity/executor.js.map +1 -0
  801. package/dist/opportunity/index.d.ts +285 -0
  802. package/dist/opportunity/index.js +839 -0
  803. package/dist/opportunity/index.js.map +1 -0
  804. package/dist/opportunity/links.d.ts +87 -0
  805. package/dist/opportunity/links.js +344 -0
  806. package/dist/opportunity/links.js.map +1 -0
  807. package/dist/opportunity/matching.d.ts +101 -0
  808. package/dist/opportunity/matching.js +551 -0
  809. package/dist/opportunity/matching.js.map +1 -0
  810. package/dist/opportunity/outcomes.d.ts +74 -0
  811. package/dist/opportunity/outcomes.js +321 -0
  812. package/dist/opportunity/outcomes.js.map +1 -0
  813. package/dist/opportunity/risk.d.ts +128 -0
  814. package/dist/opportunity/risk.js +381 -0
  815. package/dist/opportunity/risk.js.map +1 -0
  816. package/dist/opportunity/scoring.d.ts +151 -0
  817. package/dist/opportunity/scoring.js +421 -0
  818. package/dist/opportunity/scoring.js.map +1 -0
  819. package/dist/pairing/index.d.ts +108 -0
  820. package/dist/pairing/index.js +431 -0
  821. package/dist/pairing/index.js.map +1 -0
  822. package/dist/payments/index.d.ts +12 -0
  823. package/dist/payments/index.js +34 -0
  824. package/dist/payments/index.js.map +1 -0
  825. package/dist/payments/x402/evm.d.ts +53 -0
  826. package/dist/payments/x402/evm.js +282 -0
  827. package/dist/payments/x402/evm.js.map +1 -0
  828. package/dist/payments/x402/index.d.ts +158 -0
  829. package/dist/payments/x402/index.js +531 -0
  830. package/dist/payments/x402/index.js.map +1 -0
  831. package/dist/payments/x402/solana.d.ts +51 -0
  832. package/dist/payments/x402/solana.js +397 -0
  833. package/dist/payments/x402/solana.js.map +1 -0
  834. package/dist/percolator/accounts.d.ts +21 -0
  835. package/dist/percolator/accounts.js +76 -0
  836. package/dist/percolator/accounts.js.map +1 -0
  837. package/dist/percolator/encode.d.ts +14 -0
  838. package/dist/percolator/encode.js +90 -0
  839. package/dist/percolator/encode.js.map +1 -0
  840. package/dist/percolator/execution.d.ts +29 -0
  841. package/dist/percolator/execution.js +239 -0
  842. package/dist/percolator/execution.js.map +1 -0
  843. package/dist/percolator/feed.d.ts +15 -0
  844. package/dist/percolator/feed.js +160 -0
  845. package/dist/percolator/feed.js.map +1 -0
  846. package/dist/percolator/index.d.ts +20 -0
  847. package/dist/percolator/index.js +24 -0
  848. package/dist/percolator/index.js.map +1 -0
  849. package/dist/percolator/instructions.d.ts +29 -0
  850. package/dist/percolator/instructions.js +52 -0
  851. package/dist/percolator/instructions.js.map +1 -0
  852. package/dist/percolator/keeper.d.ts +11 -0
  853. package/dist/percolator/keeper.js +83 -0
  854. package/dist/percolator/keeper.js.map +1 -0
  855. package/dist/percolator/pda.d.ts +15 -0
  856. package/dist/percolator/pda.js +26 -0
  857. package/dist/percolator/pda.js.map +1 -0
  858. package/dist/percolator/slab.d.ts +122 -0
  859. package/dist/percolator/slab.js +325 -0
  860. package/dist/percolator/slab.js.map +1 -0
  861. package/dist/percolator/tx.d.ts +27 -0
  862. package/dist/percolator/tx.js +77 -0
  863. package/dist/percolator/tx.js.map +1 -0
  864. package/dist/percolator/types.d.ts +51 -0
  865. package/dist/percolator/types.js +9 -0
  866. package/dist/percolator/types.js.map +1 -0
  867. package/dist/permissions/index.d.ts +262 -0
  868. package/dist/permissions/index.js +929 -0
  869. package/dist/permissions/index.js.map +1 -0
  870. package/dist/plugins/index.d.ts +158 -0
  871. package/dist/plugins/index.js +444 -0
  872. package/dist/plugins/index.js.map +1 -0
  873. package/dist/portfolio/index.d.ts +170 -0
  874. package/dist/portfolio/index.js +970 -0
  875. package/dist/portfolio/index.js.map +1 -0
  876. package/dist/presence/index.d.ts +34 -0
  877. package/dist/presence/index.js +124 -0
  878. package/dist/presence/index.js.map +1 -0
  879. package/dist/process/index.d.ts +82 -0
  880. package/dist/process/index.js +402 -0
  881. package/dist/process/index.js.map +1 -0
  882. package/dist/providers/discovery.d.ts +209 -0
  883. package/dist/providers/discovery.js +751 -0
  884. package/dist/providers/discovery.js.map +1 -0
  885. package/dist/providers/health.d.ts +27 -0
  886. package/dist/providers/health.js +80 -0
  887. package/dist/providers/health.js.map +1 -0
  888. package/dist/providers/index.d.ts +154 -0
  889. package/dist/providers/index.js +897 -0
  890. package/dist/providers/index.js.map +1 -0
  891. package/dist/queue/index.d.ts +36 -0
  892. package/dist/queue/index.js +146 -0
  893. package/dist/queue/index.js.map +1 -0
  894. package/dist/queue/jobs/index.d.ts +11 -0
  895. package/dist/queue/jobs/index.js +32 -0
  896. package/dist/queue/jobs/index.js.map +1 -0
  897. package/dist/queue/jobs/producer.d.ts +43 -0
  898. package/dist/queue/jobs/producer.js +233 -0
  899. package/dist/queue/jobs/producer.js.map +1 -0
  900. package/dist/queue/jobs/types.d.ts +128 -0
  901. package/dist/queue/jobs/types.js +14 -0
  902. package/dist/queue/jobs/types.js.map +1 -0
  903. package/dist/queue/jobs/worker.d.ts +22 -0
  904. package/dist/queue/jobs/worker.js +220 -0
  905. package/dist/queue/jobs/worker.js.map +1 -0
  906. package/dist/remote/index.d.ts +136 -0
  907. package/dist/remote/index.js +456 -0
  908. package/dist/remote/index.js.map +1 -0
  909. package/dist/risk/circuit-breaker.d.ts +99 -0
  910. package/dist/risk/circuit-breaker.js +300 -0
  911. package/dist/risk/circuit-breaker.js.map +1 -0
  912. package/dist/risk/dashboard.d.ts +69 -0
  913. package/dist/risk/dashboard.js +127 -0
  914. package/dist/risk/dashboard.js.map +1 -0
  915. package/dist/risk/engine.d.ts +128 -0
  916. package/dist/risk/engine.js +311 -0
  917. package/dist/risk/engine.js.map +1 -0
  918. package/dist/risk/index.d.ts +10 -0
  919. package/dist/risk/index.js +38 -0
  920. package/dist/risk/index.js.map +1 -0
  921. package/dist/risk/stress.d.ts +70 -0
  922. package/dist/risk/stress.js +215 -0
  923. package/dist/risk/stress.js.map +1 -0
  924. package/dist/risk/var.d.ts +72 -0
  925. package/dist/risk/var.js +173 -0
  926. package/dist/risk/var.js.map +1 -0
  927. package/dist/risk/volatility.d.ts +61 -0
  928. package/dist/risk/volatility.js +132 -0
  929. package/dist/risk/volatility.js.map +1 -0
  930. package/dist/routing/index.d.ts +116 -0
  931. package/dist/routing/index.js +371 -0
  932. package/dist/routing/index.js.map +1 -0
  933. package/dist/search/index.d.ts +30 -0
  934. package/dist/search/index.js +129 -0
  935. package/dist/search/index.js.map +1 -0
  936. package/dist/security/address-checker.d.ts +6 -0
  937. package/dist/security/address-checker.js +213 -0
  938. package/dist/security/address-checker.js.map +1 -0
  939. package/dist/security/code-scanner.d.ts +3 -0
  940. package/dist/security/code-scanner.js +190 -0
  941. package/dist/security/code-scanner.js.map +1 -0
  942. package/dist/security/index.d.ts +176 -0
  943. package/dist/security/index.js +498 -0
  944. package/dist/security/index.js.map +1 -0
  945. package/dist/security/sanitizer.d.ts +2 -0
  946. package/dist/security/sanitizer.js +135 -0
  947. package/dist/security/sanitizer.js.map +1 -0
  948. package/dist/security/scam-db.d.ts +5 -0
  949. package/dist/security/scam-db.js +116 -0
  950. package/dist/security/scam-db.js.map +1 -0
  951. package/dist/security/shield.d.ts +12 -0
  952. package/dist/security/shield.js +80 -0
  953. package/dist/security/shield.js.map +1 -0
  954. package/dist/security/tx-validator.d.ts +5 -0
  955. package/dist/security/tx-validator.js +115 -0
  956. package/dist/security/tx-validator.js.map +1 -0
  957. package/dist/security/types.d.ts +84 -0
  958. package/dist/security/types.js +6 -0
  959. package/dist/security/types.js.map +1 -0
  960. package/dist/services/alt-data/feeds/fear-greed.d.ts +14 -0
  961. package/dist/services/alt-data/feeds/fear-greed.js +81 -0
  962. package/dist/services/alt-data/feeds/fear-greed.js.map +1 -0
  963. package/dist/services/alt-data/feeds/funding-rates.d.ts +13 -0
  964. package/dist/services/alt-data/feeds/funding-rates.js +90 -0
  965. package/dist/services/alt-data/feeds/funding-rates.js.map +1 -0
  966. package/dist/services/alt-data/feeds/reddit.d.ts +13 -0
  967. package/dist/services/alt-data/feeds/reddit.js +112 -0
  968. package/dist/services/alt-data/feeds/reddit.js.map +1 -0
  969. package/dist/services/alt-data/index.d.ts +31 -0
  970. package/dist/services/alt-data/index.js +278 -0
  971. package/dist/services/alt-data/index.js.map +1 -0
  972. package/dist/services/alt-data/market-matcher.d.ts +29 -0
  973. package/dist/services/alt-data/market-matcher.js +157 -0
  974. package/dist/services/alt-data/market-matcher.js.map +1 -0
  975. package/dist/services/alt-data/sentiment.d.ts +11 -0
  976. package/dist/services/alt-data/sentiment.js +277 -0
  977. package/dist/services/alt-data/sentiment.js.map +1 -0
  978. package/dist/services/alt-data/types.d.ts +86 -0
  979. package/dist/services/alt-data/types.js +9 -0
  980. package/dist/services/alt-data/types.js.map +1 -0
  981. package/dist/services/feature-engineering/accessor.d.ts +19 -0
  982. package/dist/services/feature-engineering/accessor.js +31 -0
  983. package/dist/services/feature-engineering/accessor.js.map +1 -0
  984. package/dist/services/feature-engineering/index.d.ts +15 -0
  985. package/dist/services/feature-engineering/index.js +345 -0
  986. package/dist/services/feature-engineering/index.js.map +1 -0
  987. package/dist/services/feature-engineering/indicators.d.ts +90 -0
  988. package/dist/services/feature-engineering/indicators.js +254 -0
  989. package/dist/services/feature-engineering/indicators.js.map +1 -0
  990. package/dist/services/feature-engineering/rolling-window.d.ts +89 -0
  991. package/dist/services/feature-engineering/rolling-window.js +173 -0
  992. package/dist/services/feature-engineering/rolling-window.js.map +1 -0
  993. package/dist/services/feature-engineering/thresholds.d.ts +137 -0
  994. package/dist/services/feature-engineering/thresholds.js +280 -0
  995. package/dist/services/feature-engineering/thresholds.js.map +1 -0
  996. package/dist/services/feature-engineering/types.d.ts +138 -0
  997. package/dist/services/feature-engineering/types.js +6 -0
  998. package/dist/services/feature-engineering/types.js.map +1 -0
  999. package/dist/services/tick-recorder/index.d.ts +12 -0
  1000. package/dist/services/tick-recorder/index.js +200 -0
  1001. package/dist/services/tick-recorder/index.js.map +1 -0
  1002. package/dist/services/tick-recorder/queries.d.ts +46 -0
  1003. package/dist/services/tick-recorder/queries.js +291 -0
  1004. package/dist/services/tick-recorder/queries.js.map +1 -0
  1005. package/dist/services/tick-recorder/schema.d.ts +27 -0
  1006. package/dist/services/tick-recorder/schema.js +185 -0
  1007. package/dist/services/tick-recorder/schema.js.map +1 -0
  1008. package/dist/services/tick-recorder/timescale.d.ts +27 -0
  1009. package/dist/services/tick-recorder/timescale.js +105 -0
  1010. package/dist/services/tick-recorder/timescale.js.map +1 -0
  1011. package/dist/services/tick-recorder/types.d.ts +113 -0
  1012. package/dist/services/tick-recorder/types.js +7 -0
  1013. package/dist/services/tick-recorder/types.js.map +1 -0
  1014. package/dist/services/tick-streamer/index.d.ts +12 -0
  1015. package/dist/services/tick-streamer/index.js +317 -0
  1016. package/dist/services/tick-streamer/index.js.map +1 -0
  1017. package/dist/services/tick-streamer/types.d.ts +134 -0
  1018. package/dist/services/tick-streamer/types.js +6 -0
  1019. package/dist/services/tick-streamer/types.js.map +1 -0
  1020. package/dist/session/index.d.ts +147 -0
  1021. package/dist/session/index.js +429 -0
  1022. package/dist/session/index.js.map +1 -0
  1023. package/dist/sessions/index.d.ts +69 -0
  1024. package/dist/sessions/index.js +447 -0
  1025. package/dist/sessions/index.js.map +1 -0
  1026. package/dist/signal-router/index.d.ts +2 -0
  1027. package/dist/signal-router/index.js +6 -0
  1028. package/dist/signal-router/index.js.map +1 -0
  1029. package/dist/signal-router/router.d.ts +25 -0
  1030. package/dist/signal-router/router.js +391 -0
  1031. package/dist/signal-router/router.js.map +1 -0
  1032. package/dist/signal-router/types.d.ts +64 -0
  1033. package/dist/signal-router/types.js +9 -0
  1034. package/dist/signal-router/types.js.map +1 -0
  1035. package/dist/skills/bundled/acp/index.d.ts +25 -0
  1036. package/dist/skills/bundled/acp/index.js +472 -0
  1037. package/dist/skills/bundled/acp/index.js.map +1 -0
  1038. package/dist/skills/bundled/agentbets/index.d.ts +15 -0
  1039. package/dist/skills/bundled/agentbets/index.js +168 -0
  1040. package/dist/skills/bundled/agentbets/index.js.map +1 -0
  1041. package/dist/skills/bundled/ai-strategy/index.d.ts +21 -0
  1042. package/dist/skills/bundled/ai-strategy/index.js +647 -0
  1043. package/dist/skills/bundled/ai-strategy/index.js.map +1 -0
  1044. package/dist/skills/bundled/alerts/index.d.ts +20 -0
  1045. package/dist/skills/bundled/alerts/index.js +249 -0
  1046. package/dist/skills/bundled/alerts/index.js.map +1 -0
  1047. package/dist/skills/bundled/analytics/index.d.ts +17 -0
  1048. package/dist/skills/bundled/analytics/index.js +112 -0
  1049. package/dist/skills/bundled/analytics/index.js.map +1 -0
  1050. package/dist/skills/bundled/arbitrage/index.d.ts +24 -0
  1051. package/dist/skills/bundled/arbitrage/index.js +253 -0
  1052. package/dist/skills/bundled/arbitrage/index.js.map +1 -0
  1053. package/dist/skills/bundled/auto-reply/index.d.ts +18 -0
  1054. package/dist/skills/bundled/auto-reply/index.js +215 -0
  1055. package/dist/skills/bundled/auto-reply/index.js.map +1 -0
  1056. package/dist/skills/bundled/automation/index.d.ts +19 -0
  1057. package/dist/skills/bundled/automation/index.js +160 -0
  1058. package/dist/skills/bundled/automation/index.js.map +1 -0
  1059. package/dist/skills/bundled/backtest/index.d.ts +18 -0
  1060. package/dist/skills/bundled/backtest/index.js +250 -0
  1061. package/dist/skills/bundled/backtest/index.js.map +1 -0
  1062. package/dist/skills/bundled/bags/index.d.ts +49 -0
  1063. package/dist/skills/bundled/bags/index.js +1069 -0
  1064. package/dist/skills/bundled/bags/index.js.map +1 -0
  1065. package/dist/skills/bundled/bankr/index.d.ts +161 -0
  1066. package/dist/skills/bundled/bankr/index.js +271 -0
  1067. package/dist/skills/bundled/bankr/index.js.map +1 -0
  1068. package/dist/skills/bundled/betfair/index.d.ts +24 -0
  1069. package/dist/skills/bundled/betfair/index.js +511 -0
  1070. package/dist/skills/bundled/betfair/index.js.map +1 -0
  1071. package/dist/skills/bundled/binance-futures/index.d.ts +15 -0
  1072. package/dist/skills/bundled/binance-futures/index.js +485 -0
  1073. package/dist/skills/bundled/binance-futures/index.js.map +1 -0
  1074. package/dist/skills/bundled/botchan/index.d.ts +130 -0
  1075. package/dist/skills/bundled/botchan/index.js +427 -0
  1076. package/dist/skills/bundled/botchan/index.js.map +1 -0
  1077. package/dist/skills/bundled/bridge/index.d.ts +17 -0
  1078. package/dist/skills/bundled/bridge/index.js +297 -0
  1079. package/dist/skills/bundled/bridge/index.js.map +1 -0
  1080. package/dist/skills/bundled/bybit-futures/index.d.ts +15 -0
  1081. package/dist/skills/bundled/bybit-futures/index.js +380 -0
  1082. package/dist/skills/bundled/bybit-futures/index.js.map +1 -0
  1083. package/dist/skills/bundled/clanker/index.d.ts +236 -0
  1084. package/dist/skills/bundled/clanker/index.js +759 -0
  1085. package/dist/skills/bundled/clanker/index.js.map +1 -0
  1086. package/dist/skills/bundled/copy-trading/index.d.ts +20 -0
  1087. package/dist/skills/bundled/copy-trading/index.js +213 -0
  1088. package/dist/skills/bundled/copy-trading/index.js.map +1 -0
  1089. package/dist/skills/bundled/copy-trading-solana/index.d.ts +21 -0
  1090. package/dist/skills/bundled/copy-trading-solana/index.js +421 -0
  1091. package/dist/skills/bundled/copy-trading-solana/index.js.map +1 -0
  1092. package/dist/skills/bundled/credentials/index.d.ts +17 -0
  1093. package/dist/skills/bundled/credentials/index.js +137 -0
  1094. package/dist/skills/bundled/credentials/index.js.map +1 -0
  1095. package/dist/skills/bundled/crypto-hft/index.d.ts +26 -0
  1096. package/dist/skills/bundled/crypto-hft/index.js +361 -0
  1097. package/dist/skills/bundled/crypto-hft/index.js.map +1 -0
  1098. package/dist/skills/bundled/dca/index.d.ts +26 -0
  1099. package/dist/skills/bundled/dca/index.js +1342 -0
  1100. package/dist/skills/bundled/dca/index.js.map +1 -0
  1101. package/dist/skills/bundled/divergence/index.d.ts +19 -0
  1102. package/dist/skills/bundled/divergence/index.js +272 -0
  1103. package/dist/skills/bundled/divergence/index.js.map +1 -0
  1104. package/dist/skills/bundled/doctor/index.d.ts +18 -0
  1105. package/dist/skills/bundled/doctor/index.js +78 -0
  1106. package/dist/skills/bundled/doctor/index.js.map +1 -0
  1107. package/dist/skills/bundled/drift/index.d.ts +13 -0
  1108. package/dist/skills/bundled/drift/index.js +378 -0
  1109. package/dist/skills/bundled/drift/index.js.map +1 -0
  1110. package/dist/skills/bundled/drift-sdk/index.d.ts +17 -0
  1111. package/dist/skills/bundled/drift-sdk/index.js +501 -0
  1112. package/dist/skills/bundled/drift-sdk/index.js.map +1 -0
  1113. package/dist/skills/bundled/edge/index.d.ts +16 -0
  1114. package/dist/skills/bundled/edge/index.js +91 -0
  1115. package/dist/skills/bundled/edge/index.js.map +1 -0
  1116. package/dist/skills/bundled/embeddings/index.d.ts +19 -0
  1117. package/dist/skills/bundled/embeddings/index.js +215 -0
  1118. package/dist/skills/bundled/embeddings/index.js.map +1 -0
  1119. package/dist/skills/bundled/endaoment/index.d.ts +105 -0
  1120. package/dist/skills/bundled/endaoment/index.js +285 -0
  1121. package/dist/skills/bundled/endaoment/index.js.map +1 -0
  1122. package/dist/skills/bundled/ens/index.d.ts +151 -0
  1123. package/dist/skills/bundled/ens/index.js +278 -0
  1124. package/dist/skills/bundled/ens/index.js.map +1 -0
  1125. package/dist/skills/bundled/erc8004/index.d.ts +123 -0
  1126. package/dist/skills/bundled/erc8004/index.js +301 -0
  1127. package/dist/skills/bundled/erc8004/index.js.map +1 -0
  1128. package/dist/skills/bundled/execution/index.d.ts +18 -0
  1129. package/dist/skills/bundled/execution/index.js +358 -0
  1130. package/dist/skills/bundled/execution/index.js.map +1 -0
  1131. package/dist/skills/bundled/farcaster/index.d.ts +121 -0
  1132. package/dist/skills/bundled/farcaster/index.js +314 -0
  1133. package/dist/skills/bundled/farcaster/index.js.map +1 -0
  1134. package/dist/skills/bundled/features/index.d.ts +17 -0
  1135. package/dist/skills/bundled/features/index.js +305 -0
  1136. package/dist/skills/bundled/features/index.js.map +1 -0
  1137. package/dist/skills/bundled/feeds/index.d.ts +26 -0
  1138. package/dist/skills/bundled/feeds/index.js +462 -0
  1139. package/dist/skills/bundled/feeds/index.js.map +1 -0
  1140. package/dist/skills/bundled/harden/index.d.ts +55 -0
  1141. package/dist/skills/bundled/harden/index.js +510 -0
  1142. package/dist/skills/bundled/harden/index.js.map +1 -0
  1143. package/dist/skills/bundled/history/index.d.ts +21 -0
  1144. package/dist/skills/bundled/history/index.js +195 -0
  1145. package/dist/skills/bundled/history/index.js.map +1 -0
  1146. package/dist/skills/bundled/hyperliquid/index.d.ts +19 -0
  1147. package/dist/skills/bundled/hyperliquid/index.js +1280 -0
  1148. package/dist/skills/bundled/hyperliquid/index.js.map +1 -0
  1149. package/dist/skills/bundled/identity/index.d.ts +17 -0
  1150. package/dist/skills/bundled/identity/index.js +223 -0
  1151. package/dist/skills/bundled/identity/index.js.map +1 -0
  1152. package/dist/skills/bundled/integrations/index.d.ts +17 -0
  1153. package/dist/skills/bundled/integrations/index.js +138 -0
  1154. package/dist/skills/bundled/integrations/index.js.map +1 -0
  1155. package/dist/skills/bundled/jupiter/index.d.ts +41 -0
  1156. package/dist/skills/bundled/jupiter/index.js +872 -0
  1157. package/dist/skills/bundled/jupiter/index.js.map +1 -0
  1158. package/dist/skills/bundled/kamino/index.d.ts +33 -0
  1159. package/dist/skills/bundled/kamino/index.js +578 -0
  1160. package/dist/skills/bundled/kamino/index.js.map +1 -0
  1161. package/dist/skills/bundled/ledger/index.d.ts +14 -0
  1162. package/dist/skills/bundled/ledger/index.js +186 -0
  1163. package/dist/skills/bundled/ledger/index.js.map +1 -0
  1164. package/dist/skills/bundled/market-index/index.d.ts +18 -0
  1165. package/dist/skills/bundled/market-index/index.js +182 -0
  1166. package/dist/skills/bundled/market-index/index.js.map +1 -0
  1167. package/dist/skills/bundled/markets/index.d.ts +16 -0
  1168. package/dist/skills/bundled/markets/index.js +95 -0
  1169. package/dist/skills/bundled/markets/index.js.map +1 -0
  1170. package/dist/skills/bundled/mcp/index.d.ts +19 -0
  1171. package/dist/skills/bundled/mcp/index.js +212 -0
  1172. package/dist/skills/bundled/mcp/index.js.map +1 -0
  1173. package/dist/skills/bundled/memory/index.d.ts +20 -0
  1174. package/dist/skills/bundled/memory/index.js +210 -0
  1175. package/dist/skills/bundled/memory/index.js.map +1 -0
  1176. package/dist/skills/bundled/metaculus/index.d.ts +17 -0
  1177. package/dist/skills/bundled/metaculus/index.js +168 -0
  1178. package/dist/skills/bundled/metaculus/index.js.map +1 -0
  1179. package/dist/skills/bundled/meteora/index.d.ts +39 -0
  1180. package/dist/skills/bundled/meteora/index.js +837 -0
  1181. package/dist/skills/bundled/meteora/index.js.map +1 -0
  1182. package/dist/skills/bundled/meteora-dbc/index.d.ts +33 -0
  1183. package/dist/skills/bundled/meteora-dbc/index.js +993 -0
  1184. package/dist/skills/bundled/meteora-dbc/index.js.map +1 -0
  1185. package/dist/skills/bundled/metrics/index.d.ts +18 -0
  1186. package/dist/skills/bundled/metrics/index.js +91 -0
  1187. package/dist/skills/bundled/metrics/index.js.map +1 -0
  1188. package/dist/skills/bundled/mev/index.d.ts +17 -0
  1189. package/dist/skills/bundled/mev/index.js +108 -0
  1190. package/dist/skills/bundled/mev/index.js.map +1 -0
  1191. package/dist/skills/bundled/mexc-futures/index.d.ts +16 -0
  1192. package/dist/skills/bundled/mexc-futures/index.js +389 -0
  1193. package/dist/skills/bundled/mexc-futures/index.js.map +1 -0
  1194. package/dist/skills/bundled/mm/index.d.ts +18 -0
  1195. package/dist/skills/bundled/mm/index.js +315 -0
  1196. package/dist/skills/bundled/mm/index.js.map +1 -0
  1197. package/dist/skills/bundled/monitoring/index.d.ts +18 -0
  1198. package/dist/skills/bundled/monitoring/index.js +146 -0
  1199. package/dist/skills/bundled/monitoring/index.js.map +1 -0
  1200. package/dist/skills/bundled/news/index.d.ts +17 -0
  1201. package/dist/skills/bundled/news/index.js +161 -0
  1202. package/dist/skills/bundled/news/index.js.map +1 -0
  1203. package/dist/skills/bundled/onchainkit/index.d.ts +92 -0
  1204. package/dist/skills/bundled/onchainkit/index.js +429 -0
  1205. package/dist/skills/bundled/onchainkit/index.js.map +1 -0
  1206. package/dist/skills/bundled/opinion/index.d.ts +12 -0
  1207. package/dist/skills/bundled/opinion/index.js +429 -0
  1208. package/dist/skills/bundled/opinion/index.js.map +1 -0
  1209. package/dist/skills/bundled/opportunity/index.d.ts +25 -0
  1210. package/dist/skills/bundled/opportunity/index.js +289 -0
  1211. package/dist/skills/bundled/opportunity/index.js.map +1 -0
  1212. package/dist/skills/bundled/orca/index.d.ts +12 -0
  1213. package/dist/skills/bundled/orca/index.js +663 -0
  1214. package/dist/skills/bundled/orca/index.js.map +1 -0
  1215. package/dist/skills/bundled/pairing/index.d.ts +24 -0
  1216. package/dist/skills/bundled/pairing/index.js +228 -0
  1217. package/dist/skills/bundled/pairing/index.js.map +1 -0
  1218. package/dist/skills/bundled/percolator/index.d.ts +20 -0
  1219. package/dist/skills/bundled/percolator/index.js +229 -0
  1220. package/dist/skills/bundled/percolator/index.js.map +1 -0
  1221. package/dist/skills/bundled/permissions/index.d.ts +21 -0
  1222. package/dist/skills/bundled/permissions/index.js +204 -0
  1223. package/dist/skills/bundled/permissions/index.js.map +1 -0
  1224. package/dist/skills/bundled/plugins/index.d.ts +20 -0
  1225. package/dist/skills/bundled/plugins/index.js +209 -0
  1226. package/dist/skills/bundled/plugins/index.js.map +1 -0
  1227. package/dist/skills/bundled/portfolio/index.d.ts +20 -0
  1228. package/dist/skills/bundled/portfolio/index.js +367 -0
  1229. package/dist/skills/bundled/portfolio/index.js.map +1 -0
  1230. package/dist/skills/bundled/portfolio-sync/index.d.ts +17 -0
  1231. package/dist/skills/bundled/portfolio-sync/index.js +116 -0
  1232. package/dist/skills/bundled/portfolio-sync/index.js.map +1 -0
  1233. package/dist/skills/bundled/positions/index.d.ts +18 -0
  1234. package/dist/skills/bundled/positions/index.js +161 -0
  1235. package/dist/skills/bundled/positions/index.js.map +1 -0
  1236. package/dist/skills/bundled/predictfun/index.d.ts +13 -0
  1237. package/dist/skills/bundled/predictfun/index.js +612 -0
  1238. package/dist/skills/bundled/predictfun/index.js.map +1 -0
  1239. package/dist/skills/bundled/predictit/index.d.ts +16 -0
  1240. package/dist/skills/bundled/predictit/index.js +138 -0
  1241. package/dist/skills/bundled/predictit/index.js.map +1 -0
  1242. package/dist/skills/bundled/presence/index.d.ts +18 -0
  1243. package/dist/skills/bundled/presence/index.js +151 -0
  1244. package/dist/skills/bundled/presence/index.js.map +1 -0
  1245. package/dist/skills/bundled/processes/index.d.ts +17 -0
  1246. package/dist/skills/bundled/processes/index.js +121 -0
  1247. package/dist/skills/bundled/processes/index.js.map +1 -0
  1248. package/dist/skills/bundled/pump-swarm/index.d.ts +16 -0
  1249. package/dist/skills/bundled/pump-swarm/index.js +2235 -0
  1250. package/dist/skills/bundled/pump-swarm/index.js.map +1 -0
  1251. package/dist/skills/bundled/pumpfun/index.d.ts +47 -0
  1252. package/dist/skills/bundled/pumpfun/index.js +1400 -0
  1253. package/dist/skills/bundled/pumpfun/index.js.map +1 -0
  1254. package/dist/skills/bundled/qmd/index.d.ts +18 -0
  1255. package/dist/skills/bundled/qmd/index.js +116 -0
  1256. package/dist/skills/bundled/qmd/index.js.map +1 -0
  1257. package/dist/skills/bundled/qrcoin/index.d.ts +92 -0
  1258. package/dist/skills/bundled/qrcoin/index.js +328 -0
  1259. package/dist/skills/bundled/qrcoin/index.js.map +1 -0
  1260. package/dist/skills/bundled/raydium/index.d.ts +35 -0
  1261. package/dist/skills/bundled/raydium/index.js +695 -0
  1262. package/dist/skills/bundled/raydium/index.js.map +1 -0
  1263. package/dist/skills/bundled/remote/index.d.ts +19 -0
  1264. package/dist/skills/bundled/remote/index.js +186 -0
  1265. package/dist/skills/bundled/remote/index.js.map +1 -0
  1266. package/dist/skills/bundled/research/index.d.ts +17 -0
  1267. package/dist/skills/bundled/research/index.js +185 -0
  1268. package/dist/skills/bundled/research/index.js.map +1 -0
  1269. package/dist/skills/bundled/risk/index.d.ts +31 -0
  1270. package/dist/skills/bundled/risk/index.js +379 -0
  1271. package/dist/skills/bundled/risk/index.js.map +1 -0
  1272. package/dist/skills/bundled/router/index.d.ts +17 -0
  1273. package/dist/skills/bundled/router/index.js +160 -0
  1274. package/dist/skills/bundled/router/index.js.map +1 -0
  1275. package/dist/skills/bundled/routing/index.d.ts +23 -0
  1276. package/dist/skills/bundled/routing/index.js +257 -0
  1277. package/dist/skills/bundled/routing/index.js.map +1 -0
  1278. package/dist/skills/bundled/sandbox/index.d.ts +18 -0
  1279. package/dist/skills/bundled/sandbox/index.js +119 -0
  1280. package/dist/skills/bundled/sandbox/index.js.map +1 -0
  1281. package/dist/skills/bundled/search-config/index.d.ts +18 -0
  1282. package/dist/skills/bundled/search-config/index.js +170 -0
  1283. package/dist/skills/bundled/search-config/index.js.map +1 -0
  1284. package/dist/skills/bundled/sessions/index.d.ts +29 -0
  1285. package/dist/skills/bundled/sessions/index.js +193 -0
  1286. package/dist/skills/bundled/sessions/index.js.map +1 -0
  1287. package/dist/skills/bundled/shield/index.d.ts +22 -0
  1288. package/dist/skills/bundled/shield/index.js +245 -0
  1289. package/dist/skills/bundled/shield/index.js.map +1 -0
  1290. package/dist/skills/bundled/signals/index.d.ts +24 -0
  1291. package/dist/skills/bundled/signals/index.js +776 -0
  1292. package/dist/skills/bundled/signals/index.js.map +1 -0
  1293. package/dist/skills/bundled/sizing/index.d.ts +16 -0
  1294. package/dist/skills/bundled/sizing/index.js +168 -0
  1295. package/dist/skills/bundled/sizing/index.js.map +1 -0
  1296. package/dist/skills/bundled/slippage/index.d.ts +16 -0
  1297. package/dist/skills/bundled/slippage/index.js +111 -0
  1298. package/dist/skills/bundled/slippage/index.js.map +1 -0
  1299. package/dist/skills/bundled/smarkets/index.d.ts +23 -0
  1300. package/dist/skills/bundled/smarkets/index.js +473 -0
  1301. package/dist/skills/bundled/smarkets/index.js.map +1 -0
  1302. package/dist/skills/bundled/strategy/index.d.ts +18 -0
  1303. package/dist/skills/bundled/strategy/index.js +168 -0
  1304. package/dist/skills/bundled/strategy/index.js.map +1 -0
  1305. package/dist/skills/bundled/streaming/index.d.ts +19 -0
  1306. package/dist/skills/bundled/streaming/index.js +147 -0
  1307. package/dist/skills/bundled/streaming/index.js.map +1 -0
  1308. package/dist/skills/bundled/tailscale/index.d.ts +18 -0
  1309. package/dist/skills/bundled/tailscale/index.js +173 -0
  1310. package/dist/skills/bundled/tailscale/index.js.map +1 -0
  1311. package/dist/skills/bundled/ticks/index.d.ts +17 -0
  1312. package/dist/skills/bundled/ticks/index.js +287 -0
  1313. package/dist/skills/bundled/ticks/index.js.map +1 -0
  1314. package/dist/skills/bundled/token-security/index.d.ts +19 -0
  1315. package/dist/skills/bundled/token-security/index.js +138 -0
  1316. package/dist/skills/bundled/token-security/index.js.map +1 -0
  1317. package/dist/skills/bundled/trading-evm/index.d.ts +19 -0
  1318. package/dist/skills/bundled/trading-evm/index.js +302 -0
  1319. package/dist/skills/bundled/trading-evm/index.js.map +1 -0
  1320. package/dist/skills/bundled/trading-futures/index.d.ts +14 -0
  1321. package/dist/skills/bundled/trading-futures/index.js +874 -0
  1322. package/dist/skills/bundled/trading-futures/index.js.map +1 -0
  1323. package/dist/skills/bundled/trading-kalshi/index.d.ts +36 -0
  1324. package/dist/skills/bundled/trading-kalshi/index.js +1199 -0
  1325. package/dist/skills/bundled/trading-kalshi/index.js.map +1 -0
  1326. package/dist/skills/bundled/trading-manifold/index.d.ts +23 -0
  1327. package/dist/skills/bundled/trading-manifold/index.js +391 -0
  1328. package/dist/skills/bundled/trading-manifold/index.js.map +1 -0
  1329. package/dist/skills/bundled/trading-polymarket/index.d.ts +27 -0
  1330. package/dist/skills/bundled/trading-polymarket/index.js +1321 -0
  1331. package/dist/skills/bundled/trading-polymarket/index.js.map +1 -0
  1332. package/dist/skills/bundled/trading-solana/index.d.ts +19 -0
  1333. package/dist/skills/bundled/trading-solana/index.js +383 -0
  1334. package/dist/skills/bundled/trading-solana/index.js.map +1 -0
  1335. package/dist/skills/bundled/trading-system/index.d.ts +22 -0
  1336. package/dist/skills/bundled/trading-system/index.js +355 -0
  1337. package/dist/skills/bundled/trading-system/index.js.map +1 -0
  1338. package/dist/skills/bundled/triggers/index.d.ts +18 -0
  1339. package/dist/skills/bundled/triggers/index.js +172 -0
  1340. package/dist/skills/bundled/triggers/index.js.map +1 -0
  1341. package/dist/skills/bundled/tts/index.d.ts +16 -0
  1342. package/dist/skills/bundled/tts/index.js +150 -0
  1343. package/dist/skills/bundled/tts/index.js.map +1 -0
  1344. package/dist/skills/bundled/tweet-ideas/index.d.ts +20 -0
  1345. package/dist/skills/bundled/tweet-ideas/index.js +470 -0
  1346. package/dist/skills/bundled/tweet-ideas/index.js.map +1 -0
  1347. package/dist/skills/bundled/usage/index.d.ts +17 -0
  1348. package/dist/skills/bundled/usage/index.js +145 -0
  1349. package/dist/skills/bundled/usage/index.js.map +1 -0
  1350. package/dist/skills/bundled/veil/index.d.ts +79 -0
  1351. package/dist/skills/bundled/veil/index.js +322 -0
  1352. package/dist/skills/bundled/veil/index.js.map +1 -0
  1353. package/dist/skills/bundled/verify/index.d.ts +20 -0
  1354. package/dist/skills/bundled/verify/index.js +157 -0
  1355. package/dist/skills/bundled/verify/index.js.map +1 -0
  1356. package/dist/skills/bundled/virtuals/index.d.ts +20 -0
  1357. package/dist/skills/bundled/virtuals/index.js +255 -0
  1358. package/dist/skills/bundled/virtuals/index.js.map +1 -0
  1359. package/dist/skills/bundled/voice/index.d.ts +18 -0
  1360. package/dist/skills/bundled/voice/index.js +190 -0
  1361. package/dist/skills/bundled/voice/index.js.map +1 -0
  1362. package/dist/skills/bundled/weather/index.d.ts +20 -0
  1363. package/dist/skills/bundled/weather/index.js +475 -0
  1364. package/dist/skills/bundled/weather/index.js.map +1 -0
  1365. package/dist/skills/bundled/webhooks/index.d.ts +18 -0
  1366. package/dist/skills/bundled/webhooks/index.js +136 -0
  1367. package/dist/skills/bundled/webhooks/index.js.map +1 -0
  1368. package/dist/skills/bundled/whale-tracking/index.d.ts +18 -0
  1369. package/dist/skills/bundled/whale-tracking/index.js +441 -0
  1370. package/dist/skills/bundled/whale-tracking/index.js.map +1 -0
  1371. package/dist/skills/bundled/yoink/index.d.ts +78 -0
  1372. package/dist/skills/bundled/yoink/index.js +236 -0
  1373. package/dist/skills/bundled/yoink/index.js.map +1 -0
  1374. package/dist/skills/executor.d.ts +117 -0
  1375. package/dist/skills/executor.js +469 -0
  1376. package/dist/skills/executor.js.map +1 -0
  1377. package/dist/skills/frontmatter.d.ts +69 -0
  1378. package/dist/skills/frontmatter.js +187 -0
  1379. package/dist/skills/frontmatter.js.map +1 -0
  1380. package/dist/skills/index.d.ts +150 -0
  1381. package/dist/skills/index.js +531 -0
  1382. package/dist/skills/index.js.map +1 -0
  1383. package/dist/skills/loader.d.ts +48 -0
  1384. package/dist/skills/loader.js +594 -0
  1385. package/dist/skills/loader.js.map +1 -0
  1386. package/dist/skills/registry.d.ts +94 -0
  1387. package/dist/skills/registry.js +308 -0
  1388. package/dist/skills/registry.js.map +1 -0
  1389. package/dist/solana/copytrade.d.ts +116 -0
  1390. package/dist/solana/copytrade.js +493 -0
  1391. package/dist/solana/copytrade.js.map +1 -0
  1392. package/dist/solana/drift.d.ts +154 -0
  1393. package/dist/solana/drift.js +599 -0
  1394. package/dist/solana/drift.js.map +1 -0
  1395. package/dist/solana/jupiter.d.ts +283 -0
  1396. package/dist/solana/jupiter.js +553 -0
  1397. package/dist/solana/jupiter.js.map +1 -0
  1398. package/dist/solana/kamino.d.ts +206 -0
  1399. package/dist/solana/kamino.js +546 -0
  1400. package/dist/solana/kamino.js.map +1 -0
  1401. package/dist/solana/meteora-dbc.d.ts +430 -0
  1402. package/dist/solana/meteora-dbc.js +1105 -0
  1403. package/dist/solana/meteora-dbc.js.map +1 -0
  1404. package/dist/solana/meteora.d.ts +232 -0
  1405. package/dist/solana/meteora.js +682 -0
  1406. package/dist/solana/meteora.js.map +1 -0
  1407. package/dist/solana/orca.d.ts +163 -0
  1408. package/dist/solana/orca.js +378 -0
  1409. package/dist/solana/orca.js.map +1 -0
  1410. package/dist/solana/pools.d.ts +26 -0
  1411. package/dist/solana/pools.js +96 -0
  1412. package/dist/solana/pools.js.map +1 -0
  1413. package/dist/solana/pump-swarm.d.ts +349 -0
  1414. package/dist/solana/pump-swarm.js +1663 -0
  1415. package/dist/solana/pump-swarm.js.map +1 -0
  1416. package/dist/solana/pumpapi.d.ts +196 -0
  1417. package/dist/solana/pumpapi.js +462 -0
  1418. package/dist/solana/pumpapi.js.map +1 -0
  1419. package/dist/solana/raydium.d.ts +170 -0
  1420. package/dist/solana/raydium.js +673 -0
  1421. package/dist/solana/raydium.js.map +1 -0
  1422. package/dist/solana/swarm-ai-builder.d.ts +97 -0
  1423. package/dist/solana/swarm-ai-builder.js +571 -0
  1424. package/dist/solana/swarm-ai-builder.js.map +1 -0
  1425. package/dist/solana/swarm-arbitrage.d.ts +111 -0
  1426. package/dist/solana/swarm-arbitrage.js +437 -0
  1427. package/dist/solana/swarm-arbitrage.js.map +1 -0
  1428. package/dist/solana/swarm-builders.d.ts +71 -0
  1429. package/dist/solana/swarm-builders.js +402 -0
  1430. package/dist/solana/swarm-builders.js.map +1 -0
  1431. package/dist/solana/swarm-copytrade.d.ts +103 -0
  1432. package/dist/solana/swarm-copytrade.js +420 -0
  1433. package/dist/solana/swarm-copytrade.js.map +1 -0
  1434. package/dist/solana/swarm-presets.d.ts +49 -0
  1435. package/dist/solana/swarm-presets.js +282 -0
  1436. package/dist/solana/swarm-presets.js.map +1 -0
  1437. package/dist/solana/swarm-signals.d.ts +128 -0
  1438. package/dist/solana/swarm-signals.js +529 -0
  1439. package/dist/solana/swarm-signals.js.map +1 -0
  1440. package/dist/solana/swarm-strategies.d.ts +230 -0
  1441. package/dist/solana/swarm-strategies.js +611 -0
  1442. package/dist/solana/swarm-strategies.js.map +1 -0
  1443. package/dist/solana/tokenlist.d.ts +10 -0
  1444. package/dist/solana/tokenlist.js +54 -0
  1445. package/dist/solana/tokenlist.js.map +1 -0
  1446. package/dist/solana/wallet.d.ts +12 -0
  1447. package/dist/solana/wallet.js +90 -0
  1448. package/dist/solana/wallet.js.map +1 -0
  1449. package/dist/strategies/crypto-hft/index.d.ts +46 -0
  1450. package/dist/strategies/crypto-hft/index.js +469 -0
  1451. package/dist/strategies/crypto-hft/index.js.map +1 -0
  1452. package/dist/strategies/crypto-hft/market-scanner.d.ts +26 -0
  1453. package/dist/strategies/crypto-hft/market-scanner.js +177 -0
  1454. package/dist/strategies/crypto-hft/market-scanner.js.map +1 -0
  1455. package/dist/strategies/crypto-hft/orderbook.d.ts +37 -0
  1456. package/dist/strategies/crypto-hft/orderbook.js +184 -0
  1457. package/dist/strategies/crypto-hft/orderbook.js.map +1 -0
  1458. package/dist/strategies/crypto-hft/positions.d.ts +49 -0
  1459. package/dist/strategies/crypto-hft/positions.js +376 -0
  1460. package/dist/strategies/crypto-hft/positions.js.map +1 -0
  1461. package/dist/strategies/crypto-hft/presets.d.ts +11 -0
  1462. package/dist/strategies/crypto-hft/presets.js +164 -0
  1463. package/dist/strategies/crypto-hft/presets.js.map +1 -0
  1464. package/dist/strategies/crypto-hft/strategies.d.ts +96 -0
  1465. package/dist/strategies/crypto-hft/strategies.js +330 -0
  1466. package/dist/strategies/crypto-hft/strategies.js.map +1 -0
  1467. package/dist/strategies/crypto-hft/types.d.ts +196 -0
  1468. package/dist/strategies/crypto-hft/types.js +32 -0
  1469. package/dist/strategies/crypto-hft/types.js.map +1 -0
  1470. package/dist/strategies/hft-divergence/detector.d.ts +29 -0
  1471. package/dist/strategies/hft-divergence/detector.js +182 -0
  1472. package/dist/strategies/hft-divergence/detector.js.map +1 -0
  1473. package/dist/strategies/hft-divergence/index.d.ts +12 -0
  1474. package/dist/strategies/hft-divergence/index.js +19 -0
  1475. package/dist/strategies/hft-divergence/index.js.map +1 -0
  1476. package/dist/strategies/hft-divergence/market-rotator.d.ts +17 -0
  1477. package/dist/strategies/hft-divergence/market-rotator.js +128 -0
  1478. package/dist/strategies/hft-divergence/market-rotator.js.map +1 -0
  1479. package/dist/strategies/hft-divergence/position-manager.d.ts +35 -0
  1480. package/dist/strategies/hft-divergence/position-manager.js +188 -0
  1481. package/dist/strategies/hft-divergence/position-manager.js.map +1 -0
  1482. package/dist/strategies/hft-divergence/strategy.d.ts +31 -0
  1483. package/dist/strategies/hft-divergence/strategy.js +295 -0
  1484. package/dist/strategies/hft-divergence/strategy.js.map +1 -0
  1485. package/dist/strategies/hft-divergence/types.d.ts +114 -0
  1486. package/dist/strategies/hft-divergence/types.js +10 -0
  1487. package/dist/strategies/hft-divergence/types.js.map +1 -0
  1488. package/dist/streaming/index.d.ts +70 -0
  1489. package/dist/streaming/index.js +296 -0
  1490. package/dist/streaming/index.js.map +1 -0
  1491. package/dist/tailscale/index.d.ts +139 -0
  1492. package/dist/tailscale/index.js +345 -0
  1493. package/dist/tailscale/index.js.map +1 -0
  1494. package/dist/telemetry/index.d.ts +143 -0
  1495. package/dist/telemetry/index.js +535 -0
  1496. package/dist/telemetry/index.js.map +1 -0
  1497. package/dist/terminal/index.d.ts +121 -0
  1498. package/dist/terminal/index.js +548 -0
  1499. package/dist/terminal/index.js.map +1 -0
  1500. package/dist/token-security/index.d.ts +36 -0
  1501. package/dist/token-security/index.js +253 -0
  1502. package/dist/token-security/index.js.map +1 -0
  1503. package/dist/tools/browser.d.ts +128 -0
  1504. package/dist/tools/browser.js +459 -0
  1505. package/dist/tools/browser.js.map +1 -0
  1506. package/dist/tools/canvas.d.ts +93 -0
  1507. package/dist/tools/canvas.js +349 -0
  1508. package/dist/tools/canvas.js.map +1 -0
  1509. package/dist/tools/docker.d.ts +59 -0
  1510. package/dist/tools/docker.js +191 -0
  1511. package/dist/tools/docker.js.map +1 -0
  1512. package/dist/tools/email.d.ts +25 -0
  1513. package/dist/tools/email.js +131 -0
  1514. package/dist/tools/email.js.map +1 -0
  1515. package/dist/tools/exec.d.ts +81 -0
  1516. package/dist/tools/exec.js +373 -0
  1517. package/dist/tools/exec.js.map +1 -0
  1518. package/dist/tools/files.d.ts +46 -0
  1519. package/dist/tools/files.js +185 -0
  1520. package/dist/tools/files.js.map +1 -0
  1521. package/dist/tools/git.d.ts +29 -0
  1522. package/dist/tools/git.js +105 -0
  1523. package/dist/tools/git.js.map +1 -0
  1524. package/dist/tools/image.d.ts +57 -0
  1525. package/dist/tools/image.js +308 -0
  1526. package/dist/tools/image.js.map +1 -0
  1527. package/dist/tools/index.d.ts +39 -0
  1528. package/dist/tools/index.js +46 -0
  1529. package/dist/tools/index.js.map +1 -0
  1530. package/dist/tools/message.d.ts +99 -0
  1531. package/dist/tools/message.js +200 -0
  1532. package/dist/tools/message.js.map +1 -0
  1533. package/dist/tools/nodes.d.ts +134 -0
  1534. package/dist/tools/nodes.js +357 -0
  1535. package/dist/tools/nodes.js.map +1 -0
  1536. package/dist/tools/sessions.d.ts +60 -0
  1537. package/dist/tools/sessions.js +119 -0
  1538. package/dist/tools/sessions.js.map +1 -0
  1539. package/dist/tools/shell-history.d.ts +17 -0
  1540. package/dist/tools/shell-history.js +118 -0
  1541. package/dist/tools/shell-history.js.map +1 -0
  1542. package/dist/tools/sms.d.ts +18 -0
  1543. package/dist/tools/sms.js +66 -0
  1544. package/dist/tools/sms.js.map +1 -0
  1545. package/dist/tools/sql.d.ts +19 -0
  1546. package/dist/tools/sql.js +91 -0
  1547. package/dist/tools/sql.js.map +1 -0
  1548. package/dist/tools/transcription.d.ts +13 -0
  1549. package/dist/tools/transcription.js +99 -0
  1550. package/dist/tools/transcription.js.map +1 -0
  1551. package/dist/tools/web-fetch.d.ts +69 -0
  1552. package/dist/tools/web-fetch.js +251 -0
  1553. package/dist/tools/web-fetch.js.map +1 -0
  1554. package/dist/tools/web-search.d.ts +58 -0
  1555. package/dist/tools/web-search.js +204 -0
  1556. package/dist/tools/web-search.js.map +1 -0
  1557. package/dist/tools/webhooks.d.ts +74 -0
  1558. package/dist/tools/webhooks.js +165 -0
  1559. package/dist/tools/webhooks.js.map +1 -0
  1560. package/dist/trading/accounts.d.ts +167 -0
  1561. package/dist/trading/accounts.js +394 -0
  1562. package/dist/trading/accounts.js.map +1 -0
  1563. package/dist/trading/adapters/index.d.ts +27 -0
  1564. package/dist/trading/adapters/index.js +165 -0
  1565. package/dist/trading/adapters/index.js.map +1 -0
  1566. package/dist/trading/backtest.d.ts +161 -0
  1567. package/dist/trading/backtest.js +665 -0
  1568. package/dist/trading/backtest.js.map +1 -0
  1569. package/dist/trading/bots/index.d.ts +196 -0
  1570. package/dist/trading/bots/index.js +688 -0
  1571. package/dist/trading/bots/index.js.map +1 -0
  1572. package/dist/trading/bridge.d.ts +33 -0
  1573. package/dist/trading/bridge.js +121 -0
  1574. package/dist/trading/bridge.js.map +1 -0
  1575. package/dist/trading/builder.d.ts +102 -0
  1576. package/dist/trading/builder.js +430 -0
  1577. package/dist/trading/builder.js.map +1 -0
  1578. package/dist/trading/copy-trading.d.ts +125 -0
  1579. package/dist/trading/copy-trading.js +611 -0
  1580. package/dist/trading/copy-trading.js.map +1 -0
  1581. package/dist/trading/devtools.d.ts +172 -0
  1582. package/dist/trading/devtools.js +425 -0
  1583. package/dist/trading/devtools.js.map +1 -0
  1584. package/dist/trading/futures/index.d.ts +981 -0
  1585. package/dist/trading/futures/index.js +4011 -0
  1586. package/dist/trading/futures/index.js.map +1 -0
  1587. package/dist/trading/index.d.ts +102 -0
  1588. package/dist/trading/index.js +310 -0
  1589. package/dist/trading/index.js.map +1 -0
  1590. package/dist/trading/kelly.d.ts +137 -0
  1591. package/dist/trading/kelly.js +328 -0
  1592. package/dist/trading/kelly.js.map +1 -0
  1593. package/dist/trading/logger.d.ts +163 -0
  1594. package/dist/trading/logger.js +424 -0
  1595. package/dist/trading/logger.js.map +1 -0
  1596. package/dist/trading/market-making/engine.d.ts +44 -0
  1597. package/dist/trading/market-making/engine.js +165 -0
  1598. package/dist/trading/market-making/engine.js.map +1 -0
  1599. package/dist/trading/market-making/index.d.ts +10 -0
  1600. package/dist/trading/market-making/index.js +29 -0
  1601. package/dist/trading/market-making/index.js.map +1 -0
  1602. package/dist/trading/market-making/strategy.d.ts +25 -0
  1603. package/dist/trading/market-making/strategy.js +250 -0
  1604. package/dist/trading/market-making/strategy.js.map +1 -0
  1605. package/dist/trading/market-making/types.d.ts +92 -0
  1606. package/dist/trading/market-making/types.js +6 -0
  1607. package/dist/trading/market-making/types.js.map +1 -0
  1608. package/dist/trading/ml-signals.d.ts +175 -0
  1609. package/dist/trading/ml-signals.js +548 -0
  1610. package/dist/trading/ml-signals.js.map +1 -0
  1611. package/dist/trading/orchestrator.d.ts +59 -0
  1612. package/dist/trading/orchestrator.js +199 -0
  1613. package/dist/trading/orchestrator.js.map +1 -0
  1614. package/dist/trading/position-bridge.d.ts +41 -0
  1615. package/dist/trading/position-bridge.js +178 -0
  1616. package/dist/trading/position-bridge.js.map +1 -0
  1617. package/dist/trading/resilience.d.ts +81 -0
  1618. package/dist/trading/resilience.js +257 -0
  1619. package/dist/trading/resilience.js.map +1 -0
  1620. package/dist/trading/risk.d.ts +18 -0
  1621. package/dist/trading/risk.js +91 -0
  1622. package/dist/trading/risk.js.map +1 -0
  1623. package/dist/trading/safety.d.ts +114 -0
  1624. package/dist/trading/safety.js +372 -0
  1625. package/dist/trading/safety.js.map +1 -0
  1626. package/dist/trading/secrets.d.ts +48 -0
  1627. package/dist/trading/secrets.js +243 -0
  1628. package/dist/trading/secrets.js.map +1 -0
  1629. package/dist/trading/state.d.ts +88 -0
  1630. package/dist/trading/state.js +221 -0
  1631. package/dist/trading/state.js.map +1 -0
  1632. package/dist/trading/stream.d.ts +121 -0
  1633. package/dist/trading/stream.js +396 -0
  1634. package/dist/trading/stream.js.map +1 -0
  1635. package/dist/trading/tracking.d.ts +136 -0
  1636. package/dist/trading/tracking.js +512 -0
  1637. package/dist/trading/tracking.js.map +1 -0
  1638. package/dist/tts/index.d.ts +28 -0
  1639. package/dist/tts/index.js +64 -0
  1640. package/dist/tts/index.js.map +1 -0
  1641. package/dist/tui/index.d.ts +159 -0
  1642. package/dist/tui/index.js +580 -0
  1643. package/dist/tui/index.js.map +1 -0
  1644. package/dist/types.d.ts +1373 -0
  1645. package/dist/types.js +7 -0
  1646. package/dist/types.js.map +1 -0
  1647. package/dist/usage/index.d.ts +57 -0
  1648. package/dist/usage/index.js +191 -0
  1649. package/dist/usage/index.js.map +1 -0
  1650. package/dist/utils/attachments.d.ts +12 -0
  1651. package/dist/utils/attachments.js +104 -0
  1652. package/dist/utils/attachments.js.map +1 -0
  1653. package/dist/utils/config.d.ts +14 -0
  1654. package/dist/utils/config.js +474 -0
  1655. package/dist/utils/config.js.map +1 -0
  1656. package/dist/utils/http.d.ts +22 -0
  1657. package/dist/utils/http.js +191 -0
  1658. package/dist/utils/http.js.map +1 -0
  1659. package/dist/utils/id.d.ts +21 -0
  1660. package/dist/utils/id.js +41 -0
  1661. package/dist/utils/id.js.map +1 -0
  1662. package/dist/utils/json-utils.d.ts +201 -0
  1663. package/dist/utils/json-utils.js +151 -0
  1664. package/dist/utils/json-utils.js.map +1 -0
  1665. package/dist/utils/kalshi-auth.d.ts +10 -0
  1666. package/dist/utils/kalshi-auth.js +48 -0
  1667. package/dist/utils/kalshi-auth.js.map +1 -0
  1668. package/dist/utils/kelly.d.ts +153 -0
  1669. package/dist/utils/kelly.js +322 -0
  1670. package/dist/utils/kelly.js.map +1 -0
  1671. package/dist/utils/logger.d.ts +7 -0
  1672. package/dist/utils/logger.js +26 -0
  1673. package/dist/utils/logger.js.map +1 -0
  1674. package/dist/utils/opinion-auth.d.ts +17 -0
  1675. package/dist/utils/opinion-auth.js +25 -0
  1676. package/dist/utils/opinion-auth.js.map +1 -0
  1677. package/dist/utils/polymarket-auth.d.ts +11 -0
  1678. package/dist/utils/polymarket-auth.js +32 -0
  1679. package/dist/utils/polymarket-auth.js.map +1 -0
  1680. package/dist/utils/polymarket-order-signer.d.ts +118 -0
  1681. package/dist/utils/polymarket-order-signer.js +329 -0
  1682. package/dist/utils/polymarket-order-signer.js.map +1 -0
  1683. package/dist/utils/polymarket-setup.d.ts +70 -0
  1684. package/dist/utils/polymarket-setup.js +288 -0
  1685. package/dist/utils/polymarket-setup.js.map +1 -0
  1686. package/dist/utils/production.d.ts +112 -0
  1687. package/dist/utils/production.js +294 -0
  1688. package/dist/utils/production.js.map +1 -0
  1689. package/dist/utils/rate-limiter.d.ts +77 -0
  1690. package/dist/utils/rate-limiter.js +271 -0
  1691. package/dist/utils/rate-limiter.js.map +1 -0
  1692. package/dist/utils/webhook-security.d.ts +63 -0
  1693. package/dist/utils/webhook-security.js +183 -0
  1694. package/dist/utils/webhook-security.js.map +1 -0
  1695. package/dist/voice/index.d.ts +125 -0
  1696. package/dist/voice/index.js +557 -0
  1697. package/dist/voice/index.js.map +1 -0
  1698. package/dist/weather/edge.d.ts +70 -0
  1699. package/dist/weather/edge.js +281 -0
  1700. package/dist/weather/edge.js.map +1 -0
  1701. package/dist/weather/index.d.ts +6 -0
  1702. package/dist/weather/index.js +23 -0
  1703. package/dist/weather/index.js.map +1 -0
  1704. package/dist/weather/markets.d.ts +84 -0
  1705. package/dist/weather/markets.js +320 -0
  1706. package/dist/weather/markets.js.map +1 -0
  1707. package/dist/weather/noaa.d.ts +113 -0
  1708. package/dist/weather/noaa.js +287 -0
  1709. package/dist/weather/noaa.js.map +1 -0
  1710. package/dist/web/index.d.ts +112 -0
  1711. package/dist/web/index.js +639 -0
  1712. package/dist/web/index.js.map +1 -0
  1713. package/dist/wizard/index.d.ts +27 -0
  1714. package/dist/wizard/index.js +186 -0
  1715. package/dist/wizard/index.js.map +1 -0
  1716. package/dist/workspace/index.d.ts +73 -0
  1717. package/dist/workspace/index.js +403 -0
  1718. package/dist/workspace/index.js.map +1 -0
  1719. package/package.json +168 -0
@@ -0,0 +1,2532 @@
1
+ "use strict";
2
+ /**
3
+ * Execution Service - Native TypeScript order execution
4
+ *
5
+ * Features:
6
+ * - Limit orders (GTC, GTD)
7
+ * - Market orders (FOK)
8
+ * - Maker orders (GTC with postOnly flag)
9
+ * - Order cancellation
10
+ * - Open orders management
11
+ *
12
+ * Supports: Polymarket, Kalshi
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || (function () {
31
+ var ownKeys = function(o) {
32
+ ownKeys = Object.getOwnPropertyNames || function (o) {
33
+ var ar = [];
34
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
+ return ar;
36
+ };
37
+ return ownKeys(o);
38
+ };
39
+ return function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ })();
47
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
48
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
49
+ };
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.POLYMARKET_EXCHANGES = void 0;
52
+ exports.checkPolymarketNegRisk = checkPolymarketNegRisk;
53
+ exports.getPolymarketExchange = getPolymarketExchange;
54
+ exports.getPolymarketTickSize = getPolymarketTickSize;
55
+ exports.validatePriceTickSize = validatePriceTickSize;
56
+ exports.getPolymarketNegRiskCached = getPolymarketNegRiskCached;
57
+ exports.getPolymarketFeeRate = getPolymarketFeeRate;
58
+ exports.getPolymarketOrderbookCached = getPolymarketOrderbookCached;
59
+ exports.validatePostOnly = validatePostOnly;
60
+ exports.getPolymarketBalance = getPolymarketBalance;
61
+ exports.getPolymarketPositions = getPolymarketPositions;
62
+ exports.getPolymarketTrades = getPolymarketTrades;
63
+ exports.calculateOrderbookImbalance = calculateOrderbookImbalance;
64
+ exports.getOrderbookImbalance = getOrderbookImbalance;
65
+ exports.createExecutionService = createExecutionService;
66
+ const crypto_1 = require("crypto");
67
+ const logger_1 = require("../utils/logger");
68
+ const polymarket_auth_1 = require("../utils/polymarket-auth");
69
+ const polymarket_order_signer_1 = require("../utils/polymarket-order-signer");
70
+ const kalshi_auth_1 = require("../utils/kalshi-auth");
71
+ const opinion = __importStar(require("../exchanges/opinion"));
72
+ const predictfun = __importStar(require("../exchanges/predictfun"));
73
+ const user_ws_1 = require("../feeds/polymarket/user-ws");
74
+ // =============================================================================
75
+ // POLYMARKET EXECUTION
76
+ // =============================================================================
77
+ // API URLs (configurable for testnet)
78
+ const POLY_CLOB_URL = process.env.POLY_CLOB_URL || 'https://clob.polymarket.com';
79
+ // Exchange contract addresses (configurable via env for testnet support)
80
+ // Mainnet (default):
81
+ // CTF: 0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E
82
+ // NEG_RISK: 0xC5d563A36AE78145C45a50134d48A1215220f80a
83
+ // Amoy Testnet:
84
+ // POLY_CLOB_URL=https://clob.polymarket.com (same)
85
+ // POLY_CTF_EXCHANGE=0xdFE02Eb6733538f8Ea35D585af8DE5958AD99E40
86
+ // POLY_NEG_RISK_CTF_EXCHANGE=0xd91E80cF2E7be2e162c6513ceD06f1dD0dA35296
87
+ const POLY_CTF_EXCHANGE = process.env.POLY_CTF_EXCHANGE || '0x4bFb41d5B3570DeFd03C39a9A4D8dE6Bd8B8982E';
88
+ const POLY_NEG_RISK_CTF_EXCHANGE = process.env.POLY_NEG_RISK_CTF_EXCHANGE || '0xC5d563A36AE78145C45a50134d48A1215220f80a';
89
+ /**
90
+ * Retry helper with exponential backoff for Polymarket REST API calls
91
+ * Retries on: network errors, 5xx server errors, 429 rate limit
92
+ * Does NOT retry on: 4xx client errors (bad request, unauthorized, etc.)
93
+ */
94
+ async function polymarketRetryWithBackoff(operation, maxAttempts = 3, baseDelayMs = 1000) {
95
+ let lastError = null;
96
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
97
+ try {
98
+ const result = await operation();
99
+ // Retry on 5xx or 429
100
+ if (result.response.status >= 500 || result.response.status === 429) {
101
+ if (attempt < maxAttempts) {
102
+ const delay = baseDelayMs * Math.pow(2, attempt - 1);
103
+ logger_1.logger.warn({ status: result.response.status, attempt, delay }, 'Polymarket API error, retrying...');
104
+ await new Promise(resolve => setTimeout(resolve, delay));
105
+ continue;
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+ catch (error) {
111
+ lastError = error instanceof Error ? error : new Error(String(error));
112
+ if (attempt < maxAttempts) {
113
+ const delay = baseDelayMs * Math.pow(2, attempt - 1);
114
+ logger_1.logger.warn({ error: lastError.message, attempt, delay }, 'Polymarket API network error, retrying...');
115
+ await new Promise(resolve => setTimeout(resolve, delay));
116
+ }
117
+ }
118
+ }
119
+ throw lastError || new Error('Polymarket API request failed after retries');
120
+ }
121
+ /**
122
+ * Check if a token is a negative risk market (crypto 15-min markets)
123
+ */
124
+ async function checkPolymarketNegRisk(tokenId) {
125
+ try {
126
+ const response = await fetch(`${POLY_CLOB_URL}/neg-risk?token_id=${tokenId}`);
127
+ if (!response.ok) {
128
+ return false;
129
+ }
130
+ const data = (await response.json());
131
+ return data.neg_risk === true;
132
+ }
133
+ catch {
134
+ return false;
135
+ }
136
+ }
137
+ /**
138
+ * Get the appropriate exchange address for a market
139
+ */
140
+ function getPolymarketExchange(negRisk) {
141
+ return negRisk ? POLY_NEG_RISK_CTF_EXCHANGE : POLY_CTF_EXCHANGE;
142
+ }
143
+ // Cache for tick sizes, neg risk status, fee rates, and orderbooks
144
+ const tickSizeCache = new Map();
145
+ const negRiskCache = new Map();
146
+ const feeRateCache = new Map();
147
+ const orderbookCache = new Map();
148
+ const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour for static data
149
+ const ORDERBOOK_CACHE_TTL_MS = 5000; // 5 seconds for orderbook (needs to be fresh)
150
+ // Nonce tracking to prevent duplicate orders
151
+ // Uses atomic counter to avoid race conditions in concurrent async operations
152
+ // Format: timestamp_base + counter ensures uniqueness across restarts and within process
153
+ const nonceBase = BigInt(Date.now()) * 1000000n; // Timestamp * 1M for counter space
154
+ let nonceCounter = 0n;
155
+ function getNextNonce() {
156
+ // Atomic increment - JavaScript is single-threaded so this is safe
157
+ // but we use BigInt to avoid Number precision issues at high counts
158
+ nonceCounter += 1n;
159
+ return (nonceBase + nonceCounter).toString();
160
+ }
161
+ /**
162
+ * Get tick size for a token (from orderbook endpoint)
163
+ * Valid tick sizes: "0.1", "0.01", "0.001", "0.0001"
164
+ */
165
+ async function getPolymarketTickSize(tokenId) {
166
+ // Check cache
167
+ const cached = tickSizeCache.get(tokenId);
168
+ if (cached && Date.now() - cached.cachedAt < CACHE_TTL_MS) {
169
+ return cached.tickSize;
170
+ }
171
+ try {
172
+ const response = await fetch(`${POLY_CLOB_URL}/book?token_id=${tokenId}`);
173
+ if (!response.ok) {
174
+ return '0.01'; // Default tick size
175
+ }
176
+ const data = await response.json();
177
+ const tickSize = data.tick_size || '0.01';
178
+ tickSizeCache.set(tokenId, { tickSize, cachedAt: Date.now() });
179
+ return tickSize;
180
+ }
181
+ catch {
182
+ return '0.01';
183
+ }
184
+ }
185
+ /**
186
+ * Validate price against tick size
187
+ * Returns error message if invalid, null if valid
188
+ */
189
+ function validatePriceTickSize(price, tickSize) {
190
+ const tick = parseFloat(tickSize);
191
+ if (tick <= 0)
192
+ return null; // Skip validation if tick size invalid
193
+ // Check if price is a multiple of tick size (with floating point tolerance)
194
+ const remainder = Math.abs((price * 10000) % (tick * 10000)) / 10000;
195
+ const tolerance = tick / 100; // 1% of tick size tolerance for floating point
196
+ if (remainder > tolerance && remainder < tick - tolerance) {
197
+ return `Price ${price} is not a valid tick size increment. Must be multiple of ${tickSize}`;
198
+ }
199
+ return null;
200
+ }
201
+ /**
202
+ * Get neg risk status with caching
203
+ */
204
+ async function getPolymarketNegRiskCached(tokenId) {
205
+ // Check cache
206
+ const cached = negRiskCache.get(tokenId);
207
+ if (cached && Date.now() - cached.cachedAt < CACHE_TTL_MS) {
208
+ return cached.negRisk;
209
+ }
210
+ const negRisk = await checkPolymarketNegRisk(tokenId);
211
+ negRiskCache.set(tokenId, { negRisk, cachedAt: Date.now() });
212
+ return negRisk;
213
+ }
214
+ /**
215
+ * Get fee rate in basis points for a token
216
+ * Crypto 15-min markets have higher fees due to negative risk
217
+ */
218
+ async function getPolymarketFeeRate(tokenId) {
219
+ // Check cache
220
+ const cached = feeRateCache.get(tokenId);
221
+ if (cached && Date.now() - cached.cachedAt < CACHE_TTL_MS) {
222
+ return cached.feeRateBps;
223
+ }
224
+ try {
225
+ // Fee rate depends on neg_risk status
226
+ // Standard markets: 0 bps maker, ~2% taker
227
+ // Neg risk (crypto): higher fees
228
+ const negRisk = await getPolymarketNegRiskCached(tokenId);
229
+ // Polymarket fee formula for neg risk: shares × 0.25 × (price × (1 - price))²
230
+ // Simplified: ~0-50 bps depending on price
231
+ const feeRateBps = negRisk ? 25 : 0; // Approximate - actual varies by price
232
+ feeRateCache.set(tokenId, { feeRateBps, cachedAt: Date.now() });
233
+ return feeRateBps;
234
+ }
235
+ catch {
236
+ return 0;
237
+ }
238
+ }
239
+ /**
240
+ * Get orderbook with caching (5 second TTL)
241
+ */
242
+ async function getPolymarketOrderbookCached(tokenId) {
243
+ // Check cache
244
+ const cached = orderbookCache.get(tokenId);
245
+ if (cached && Date.now() - cached.cachedAt < ORDERBOOK_CACHE_TTL_MS) {
246
+ return cached.data;
247
+ }
248
+ try {
249
+ const response = await fetch(`${POLY_CLOB_URL}/book?token_id=${tokenId}`);
250
+ if (!response.ok)
251
+ return null;
252
+ const data = await response.json();
253
+ const bids = (data.bids || [])
254
+ .map((b) => [parseFloat(b.price), parseFloat(b.size)])
255
+ .sort((a, b) => b[0] - a[0]); // Highest bid first
256
+ const asks = (data.asks || [])
257
+ .map((a) => [parseFloat(a.price), parseFloat(a.size)])
258
+ .sort((a, b) => a[0] - b[0]); // Lowest ask first
259
+ const bestBid = bids[0]?.[0] ?? 0;
260
+ const bestAsk = asks[0]?.[0] ?? 0.99;
261
+ const midPrice = (bestBid + bestAsk) / 2;
262
+ const orderbook = { bids, asks, midPrice };
263
+ orderbookCache.set(tokenId, { data: orderbook, cachedAt: Date.now() });
264
+ return orderbook;
265
+ }
266
+ catch {
267
+ return null;
268
+ }
269
+ }
270
+ /**
271
+ * Validate post-only order won't take liquidity
272
+ * Returns error message if order would cross the spread
273
+ */
274
+ async function validatePostOnly(tokenId, side, price) {
275
+ const orderbook = await getPolymarketOrderbookCached(tokenId);
276
+ if (!orderbook)
277
+ return null; // Can't validate, let server decide
278
+ if (side === 'buy') {
279
+ // Buy order: price must be < best ask to be maker-only
280
+ const bestAsk = orderbook.asks[0]?.[0];
281
+ if (bestAsk && price >= bestAsk) {
282
+ return `Post-only buy at ${price} would cross spread (best ask: ${bestAsk}). Use price < ${bestAsk}`;
283
+ }
284
+ }
285
+ else {
286
+ // Sell order: price must be > best bid to be maker-only
287
+ const bestBid = orderbook.bids[0]?.[0];
288
+ if (bestBid && price <= bestBid) {
289
+ return `Post-only sell at ${price} would cross spread (best bid: ${bestBid}). Use price > ${bestBid}`;
290
+ }
291
+ }
292
+ return null;
293
+ }
294
+ /**
295
+ * Parse Polymarket error response into structured error
296
+ */
297
+ function parsePolymarketError(errorMsg, status) {
298
+ if (!errorMsg) {
299
+ return { code: 'UNKNOWN', message: `HTTP ${status}` };
300
+ }
301
+ const msg = errorMsg.toLowerCase();
302
+ if (msg.includes('price') && (msg.includes('invalid') || msg.includes('tick'))) {
303
+ return { code: 'INVALID_TICK_SIZE', message: errorMsg };
304
+ }
305
+ if (msg.includes('balance') || msg.includes('insufficient')) {
306
+ return { code: 'INSUFFICIENT_BALANCE', message: errorMsg };
307
+ }
308
+ if (msg.includes('size') && msg.includes('invalid')) {
309
+ return { code: 'INVALID_SIZE', message: errorMsg };
310
+ }
311
+ if (msg.includes('nonce')) {
312
+ return { code: 'INVALID_NONCE', message: errorMsg };
313
+ }
314
+ if (msg.includes('halt') || msg.includes('closed')) {
315
+ return { code: 'MARKET_HALTED', message: errorMsg };
316
+ }
317
+ if (msg.includes('match') || msg.includes('cross')) {
318
+ return { code: 'ORDER_WOULD_MATCH', message: errorMsg };
319
+ }
320
+ return { code: 'UNKNOWN', message: errorMsg };
321
+ }
322
+ /**
323
+ * Get USDC balance for an address
324
+ */
325
+ async function getPolymarketBalance(auth, address) {
326
+ const walletAddress = address || auth.address;
327
+ const url = `${POLY_CLOB_URL}/balance?address=${walletAddress}`;
328
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'GET', url);
329
+ try {
330
+ const response = await fetch(url, { headers });
331
+ if (!response.ok) {
332
+ throw new Error(`HTTP ${response.status}`);
333
+ }
334
+ const data = await response.json();
335
+ return {
336
+ balance: parseFloat(data.balance || '0'),
337
+ allowance: parseFloat(data.allowance || '0'),
338
+ };
339
+ }
340
+ catch (error) {
341
+ logger_1.logger.error({ error, walletAddress }, 'Failed to fetch Polymarket balance');
342
+ return { balance: 0, allowance: 0 };
343
+ }
344
+ }
345
+ /**
346
+ * Get positions for an address
347
+ */
348
+ async function getPolymarketPositions(auth, address) {
349
+ const walletAddress = address || auth.address;
350
+ const url = `${POLY_CLOB_URL}/positions?address=${walletAddress}`;
351
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'GET', url);
352
+ try {
353
+ const response = await fetch(url, { headers });
354
+ if (!response.ok) {
355
+ throw new Error(`HTTP ${response.status}`);
356
+ }
357
+ const data = await response.json();
358
+ return data.map(p => ({
359
+ tokenId: p.asset_id || '',
360
+ conditionId: p.condition_id || '',
361
+ size: parseFloat(p.size || '0'),
362
+ avgPrice: parseFloat(p.avg_price || '0'),
363
+ currentPrice: parseFloat(p.cur_price || '0'),
364
+ unrealizedPnl: parseFloat(p.unrealized_pnl || '0'),
365
+ }));
366
+ }
367
+ catch (error) {
368
+ logger_1.logger.error({ error, walletAddress }, 'Failed to fetch Polymarket positions');
369
+ return [];
370
+ }
371
+ }
372
+ /**
373
+ * Get trade history for an address
374
+ */
375
+ async function getPolymarketTrades(auth, limit = 100) {
376
+ const url = `${POLY_CLOB_URL}/trades?limit=${limit}`;
377
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'GET', url);
378
+ try {
379
+ const response = await fetch(url, { headers });
380
+ if (!response.ok) {
381
+ throw new Error(`HTTP ${response.status}`);
382
+ }
383
+ const data = await response.json();
384
+ return data.map(t => ({
385
+ id: t.id || '',
386
+ tokenId: t.asset_id || '',
387
+ side: (t.side?.toUpperCase() || 'BUY'),
388
+ price: parseFloat(t.price || '0'),
389
+ size: parseFloat(t.size || '0'),
390
+ timestamp: new Date(t.timestamp || Date.now()),
391
+ transactionHash: t.transaction_hash,
392
+ }));
393
+ }
394
+ catch (error) {
395
+ logger_1.logger.error({ error }, 'Failed to fetch Polymarket trades');
396
+ return [];
397
+ }
398
+ }
399
+ /**
400
+ * Calculate orderbook imbalance metrics for directional signals
401
+ *
402
+ * @param orderbook - Raw orderbook data
403
+ * @param depthLevels - Number of price levels to analyze (default: 5)
404
+ * @param depthDollars - Optional: analyze orders within this dollar amount of best price
405
+ * @returns Imbalance metrics including directional signal
406
+ */
407
+ function calculateOrderbookImbalance(orderbook, depthLevels = 5, depthDollars) {
408
+ const { bids, asks, midPrice } = orderbook;
409
+ // Filter to depth levels or dollar depth
410
+ let filteredBids = bids.slice(0, depthLevels);
411
+ let filteredAsks = asks.slice(0, depthLevels);
412
+ if (depthDollars !== undefined && depthDollars > 0) {
413
+ const bestBid = bids[0]?.[0] ?? 0;
414
+ const bestAsk = asks[0]?.[0] ?? 0.99;
415
+ filteredBids = bids.filter(([price]) => bestBid - price <= depthDollars);
416
+ filteredAsks = asks.filter(([price]) => price - bestAsk <= depthDollars);
417
+ }
418
+ // Calculate total volumes
419
+ const totalBidVolume = filteredBids.reduce((sum, [, size]) => sum + size, 0);
420
+ const totalAskVolume = filteredAsks.reduce((sum, [, size]) => sum + size, 0);
421
+ // Calculate VWAP for each side
422
+ const bidCost = filteredBids.reduce((sum, [price, size]) => sum + price * size, 0);
423
+ const askCost = filteredAsks.reduce((sum, [price, size]) => sum + price * size, 0);
424
+ const vwapBid = totalBidVolume > 0 ? bidCost / totalBidVolume : 0;
425
+ const vwapAsk = totalAskVolume > 0 ? askCost / totalAskVolume : 1;
426
+ // Calculate bid/ask ratio
427
+ const bidAskRatio = totalAskVolume > 0 ? totalBidVolume / totalAskVolume :
428
+ totalBidVolume > 0 ? Infinity : 1;
429
+ // Normalized imbalance score: (bid - ask) / (bid + ask)
430
+ // Ranges from -1 (all asks) to +1 (all bids)
431
+ const totalVolume = totalBidVolume + totalAskVolume;
432
+ const imbalanceScore = totalVolume > 0
433
+ ? (totalBidVolume - totalAskVolume) / totalVolume
434
+ : 0;
435
+ // Best prices and spread
436
+ const bestBid = bids[0]?.[0] ?? 0;
437
+ const bestAsk = asks[0]?.[0] ?? 0.99;
438
+ const spread = bestAsk - bestBid;
439
+ const spreadPct = midPrice > 0 ? spread / midPrice : 0;
440
+ // Determine directional signal
441
+ // Thresholds tuned for prediction markets (typically 0.01-0.99 range)
442
+ let signal = 'neutral';
443
+ if (imbalanceScore > 0.15) {
444
+ signal = 'bullish'; // Significantly more bid volume
445
+ }
446
+ else if (imbalanceScore < -0.15) {
447
+ signal = 'bearish'; // Significantly more ask volume
448
+ }
449
+ // Confidence based on:
450
+ // 1. Total volume (more volume = more reliable signal)
451
+ // 2. Spread (tighter spread = more reliable)
452
+ // 3. Imbalance magnitude (stronger imbalance = more confident)
453
+ const volumeScore = Math.min(1, totalVolume / 10000); // Normalize to ~$10k
454
+ const spreadScore = Math.max(0, 1 - spreadPct * 10); // Penalty for wide spreads
455
+ const imbalanceMagnitude = Math.abs(imbalanceScore);
456
+ const confidence = (volumeScore * 0.4 + spreadScore * 0.3 + imbalanceMagnitude * 0.3);
457
+ return {
458
+ bidAskRatio,
459
+ imbalanceScore,
460
+ vwapBid,
461
+ vwapAsk,
462
+ totalBidVolume,
463
+ totalAskVolume,
464
+ spread,
465
+ spreadPct,
466
+ signal,
467
+ confidence: Math.min(1, Math.max(0, confidence)),
468
+ bestBid,
469
+ bestAsk,
470
+ midPrice,
471
+ };
472
+ }
473
+ /**
474
+ * Fetch and analyze orderbook imbalance for a market
475
+ */
476
+ async function getOrderbookImbalance(platform, marketIdOrTokenId, depthLevels) {
477
+ try {
478
+ let orderbook = null;
479
+ if (platform === 'polymarket') {
480
+ orderbook = await fetchPolymarketOrderbook(marketIdOrTokenId);
481
+ }
482
+ else if (platform === 'kalshi') {
483
+ orderbook = await fetchKalshiOrderbook(marketIdOrTokenId);
484
+ }
485
+ else if (platform === 'opinion') {
486
+ orderbook = await fetchOpinionOrderbook(marketIdOrTokenId);
487
+ }
488
+ if (!orderbook || (orderbook.bids.length === 0 && orderbook.asks.length === 0)) {
489
+ return null;
490
+ }
491
+ return calculateOrderbookImbalance(orderbook, depthLevels);
492
+ }
493
+ catch (error) {
494
+ logger_1.logger.warn({ error, platform, marketIdOrTokenId }, 'Failed to get orderbook imbalance');
495
+ return null;
496
+ }
497
+ }
498
+ /**
499
+ * Fetch Polymarket orderbook for a token
500
+ */
501
+ async function fetchPolymarketOrderbook(tokenId) {
502
+ try {
503
+ const response = await fetch(`${POLY_CLOB_URL}/book?token_id=${tokenId}`);
504
+ if (!response.ok)
505
+ return null;
506
+ const data = await response.json();
507
+ const bids = (data.bids || [])
508
+ .map(b => [parseFloat(b.price), parseFloat(b.size)])
509
+ .sort((a, b) => b[0] - a[0]); // Sort bids descending by price
510
+ const asks = (data.asks || [])
511
+ .map(a => [parseFloat(a.price), parseFloat(a.size)])
512
+ .sort((a, b) => a[0] - b[0]); // Sort asks ascending by price
513
+ const bestBid = bids[0]?.[0] ?? 0;
514
+ const bestAsk = asks[0]?.[0] ?? 0.99;
515
+ const midPrice = (bestBid + bestAsk) / 2;
516
+ return { bids, asks, midPrice };
517
+ }
518
+ catch (error) {
519
+ logger_1.logger.warn({ error, tokenId }, 'Failed to fetch Polymarket orderbook');
520
+ return null;
521
+ }
522
+ }
523
+ const KALSHI_URL = 'https://trading-api.kalshi.com/trade-api/v2';
524
+ /**
525
+ * Fetch Kalshi orderbook for a market
526
+ */
527
+ async function fetchKalshiOrderbook(marketId) {
528
+ try {
529
+ const response = await fetch(`${KALSHI_URL}/markets/${marketId}/orderbook`);
530
+ if (!response.ok)
531
+ return null;
532
+ const data = await response.json();
533
+ // Kalshi returns [price_cents, contracts] for yes and no sides
534
+ const yesOrders = data.orderbook?.yes || [];
535
+ const noOrders = data.orderbook?.no || [];
536
+ // For YES: bids are buy yes orders, asks are from sell yes / buy no
537
+ const bids = yesOrders
538
+ .map(([priceCents, size]) => [priceCents / 100, size])
539
+ .sort((a, b) => b[0] - a[0]);
540
+ // For asks, use complementary no price (1 - no_price = yes_ask)
541
+ const asks = noOrders
542
+ .map(([priceCents, size]) => [1 - priceCents / 100, size])
543
+ .sort((a, b) => a[0] - b[0]);
544
+ const bestBid = bids[0]?.[0] ?? 0;
545
+ const bestAsk = asks[0]?.[0] ?? 0.99;
546
+ const midPrice = (bestBid + bestAsk) / 2;
547
+ return { bids, asks, midPrice };
548
+ }
549
+ catch (error) {
550
+ logger_1.logger.warn({ error, marketId }, 'Failed to fetch Kalshi orderbook');
551
+ return null;
552
+ }
553
+ }
554
+ /**
555
+ * Calculate average fill price by walking through orderbook
556
+ */
557
+ function calculateFillFromOrderbook(orders, // [price, size] sorted appropriately
558
+ targetSize, side) {
559
+ let totalFilled = 0;
560
+ let totalCost = 0;
561
+ for (const [price, size] of orders) {
562
+ const fillableAtThisLevel = Math.min(size, targetSize - totalFilled);
563
+ if (fillableAtThisLevel <= 0)
564
+ break;
565
+ totalFilled += fillableAtThisLevel;
566
+ totalCost += fillableAtThisLevel * price;
567
+ if (totalFilled >= targetSize)
568
+ break;
569
+ }
570
+ if (totalFilled === 0) {
571
+ // No liquidity, return worst-case price
572
+ return {
573
+ avgFillPrice: side === 'buy' ? 1 : 0,
574
+ totalFilled: 0,
575
+ };
576
+ }
577
+ return {
578
+ avgFillPrice: totalCost / totalFilled,
579
+ totalFilled,
580
+ };
581
+ }
582
+ async function placePolymarketOrder(auth, tokenId, side, price, size, orderType = 'GTC', negRisk, postOnly) {
583
+ // Validate tick size
584
+ const tickSize = await getPolymarketTickSize(tokenId);
585
+ const tickError = validatePriceTickSize(price, tickSize);
586
+ if (tickError) {
587
+ return { success: false, error: tickError };
588
+ }
589
+ // Validate post-only won't cross spread
590
+ if (postOnly) {
591
+ const postOnlyError = await validatePostOnly(tokenId, side, price);
592
+ if (postOnlyError) {
593
+ return { success: false, error: postOnlyError };
594
+ }
595
+ }
596
+ // Auto-detect negRisk if not provided
597
+ const actualNegRisk = negRisk ?? await getPolymarketNegRiskCached(tokenId);
598
+ // Get fee rate for this token
599
+ const feeRateBps = await getPolymarketFeeRate(tokenId);
600
+ // If private key available, use EIP-712 signed order (required for real CLOB)
601
+ if (auth.privateKey) {
602
+ const signedAuth = { ...auth, privateKey: auth.privateKey };
603
+ return placeSignedPolymarketOrder(signedAuth, tokenId, side, price, size, orderType, actualNegRisk, postOnly, feeRateBps);
604
+ }
605
+ // Fallback: simplified payload (may not work with real CLOB without signing)
606
+ const url = `${POLY_CLOB_URL}/order`;
607
+ const order = {
608
+ tokenID: tokenId,
609
+ side: side.toUpperCase(),
610
+ price: price.toString(),
611
+ size: size.toString(),
612
+ orderType: orderType,
613
+ feeRateBps: feeRateBps.toString(),
614
+ negRisk: actualNegRisk,
615
+ nonce: getNextNonce(),
616
+ };
617
+ if (postOnly === true)
618
+ order.postOnly = true;
619
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'POST', url, order);
620
+ try {
621
+ const response = await fetch(url, {
622
+ method: 'POST',
623
+ headers: { ...headers, 'Content-Type': 'application/json' },
624
+ body: JSON.stringify(order),
625
+ });
626
+ const data = (await response.json());
627
+ if (!response.ok || data.errorMsg) {
628
+ const { code, message } = parsePolymarketError(data.errorMsg, response.status);
629
+ logger_1.logger.error({ status: response.status, errorCode: code, error: message }, 'Polymarket order failed');
630
+ return { success: false, error: `[${code}] ${message}` };
631
+ }
632
+ const orderId = data.orderID || data.order_id;
633
+ logger_1.logger.info({ orderId, tokenId, side, price, size, feeRateBps }, 'Polymarket order placed');
634
+ return { success: true, orderId, status: 'open', transactionHash: data.transactionsHashes?.[0] };
635
+ }
636
+ catch (error) {
637
+ logger_1.logger.error({ error }, 'Error placing Polymarket order');
638
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
639
+ }
640
+ }
641
+ /**
642
+ * Place a single EIP-712 signed order on Polymarket CLOB.
643
+ * Uses POST /order with the full signed order payload.
644
+ */
645
+ async function placeSignedPolymarketOrder(auth, tokenId, side, price, size, orderType = 'GTC', negRisk, postOnly, feeRateBps) {
646
+ const url = `${POLY_CLOB_URL}/order`;
647
+ const signerCfg = {
648
+ privateKey: auth.privateKey,
649
+ funderAddress: auth.funderAddress,
650
+ signatureType: auth.signatureType,
651
+ };
652
+ const postOrder = (0, polymarket_order_signer_1.buildSignedOrder)({
653
+ tokenId,
654
+ price,
655
+ size,
656
+ side: side === 'buy' ? 'buy' : 'sell',
657
+ negRisk,
658
+ feeRateBps,
659
+ nonce: getNextNonce(),
660
+ }, signerCfg);
661
+ // Set owner to API key (required by Polymarket CLOB)
662
+ postOrder.owner = auth.apiKey;
663
+ postOrder.orderType = orderType;
664
+ if (postOnly)
665
+ postOrder.postOnly = true;
666
+ try {
667
+ const { response, data } = await polymarketRetryWithBackoff(async () => {
668
+ // Build headers fresh for each attempt (timestamp-based HMAC)
669
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'POST', url, postOrder);
670
+ const resp = await fetch(url, {
671
+ method: 'POST',
672
+ headers: { ...headers, 'Content-Type': 'application/json' },
673
+ body: JSON.stringify(postOrder),
674
+ });
675
+ const json = (await resp.json());
676
+ return { response: resp, data: json };
677
+ });
678
+ if (!response.ok || data.errorMsg) {
679
+ const { code, message } = parsePolymarketError(data.errorMsg, response.status);
680
+ logger_1.logger.error({ status: response.status, errorCode: code, error: message }, 'Polymarket signed order failed');
681
+ return { success: false, error: `[${code}] ${message}` };
682
+ }
683
+ const orderId = data.orderID || data.order_id;
684
+ logger_1.logger.info({ orderId, tokenId, side, price, size, feeRateBps }, 'Polymarket signed order placed');
685
+ return { success: true, orderId, status: 'open', transactionHash: data.transactionsHashes?.[0] };
686
+ }
687
+ catch (error) {
688
+ logger_1.logger.error({ error }, 'Error placing Polymarket signed order after retries');
689
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
690
+ }
691
+ }
692
+ async function cancelPolymarketOrder(auth, orderId) {
693
+ const url = `${POLY_CLOB_URL}/order/${orderId}`;
694
+ try {
695
+ const { response } = await polymarketRetryWithBackoff(async () => {
696
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'DELETE', url);
697
+ const resp = await fetch(url, {
698
+ method: 'DELETE',
699
+ headers: {
700
+ ...headers,
701
+ 'Content-Type': 'application/json',
702
+ },
703
+ });
704
+ return { response: resp, data: null };
705
+ });
706
+ if (!response.ok) {
707
+ logger_1.logger.error({ status: response.status, orderId }, 'Failed to cancel Polymarket order');
708
+ return false;
709
+ }
710
+ logger_1.logger.info({ orderId }, 'Polymarket order cancelled');
711
+ return true;
712
+ }
713
+ catch (error) {
714
+ logger_1.logger.error({ error, orderId }, 'Error cancelling Polymarket order after retries');
715
+ return false;
716
+ }
717
+ }
718
+ async function cancelAllPolymarketOrders(auth, marketId) {
719
+ let url = `${POLY_CLOB_URL}/cancel-all`;
720
+ if (marketId) {
721
+ url += `?market=${marketId}`;
722
+ }
723
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'DELETE', url);
724
+ try {
725
+ const response = await fetch(url, {
726
+ method: 'DELETE',
727
+ headers: {
728
+ ...headers,
729
+ 'Content-Type': 'application/json',
730
+ },
731
+ });
732
+ if (!response.ok) {
733
+ logger_1.logger.error({ status: response.status }, 'Failed to cancel all Polymarket orders');
734
+ return 0;
735
+ }
736
+ const data = (await response.json());
737
+ const count = data.canceled || 0;
738
+ logger_1.logger.info({ count, marketId }, 'Cancelled Polymarket orders');
739
+ return count;
740
+ }
741
+ catch (error) {
742
+ logger_1.logger.error({ error }, 'Error cancelling all Polymarket orders');
743
+ return 0;
744
+ }
745
+ }
746
+ /**
747
+ * Place multiple Polymarket orders in a single batch request.
748
+ *
749
+ * If private key is available, uses POST /orders with EIP-712 signed orders
750
+ * (up to 15 per request). Otherwise falls back to parallel single-order calls.
751
+ */
752
+ async function placePolymarketOrdersBatch(auth, orders) {
753
+ if (orders.length === 0)
754
+ return [];
755
+ // If no private key, fall back to parallel individual calls
756
+ if (!auth.privateKey) {
757
+ const results = await Promise.all(orders.map(o => placePolymarketOrder(auth, o.tokenId, o.side, o.price, o.size, 'GTC', o.negRisk, o.postOnly)
758
+ .catch(err => ({ success: false, error: err instanceof Error ? err.message : 'Order failed' }))));
759
+ logger_1.logger.info({ total: orders.length, successful: results.filter(r => r.success).length }, 'Polymarket parallel orders placed');
760
+ return results;
761
+ }
762
+ // Build all signed orders
763
+ const signerCfg = {
764
+ privateKey: auth.privateKey,
765
+ funderAddress: auth.funderAddress,
766
+ signatureType: auth.signatureType,
767
+ };
768
+ const postOrders = (0, polymarket_order_signer_1.buildSignedOrders)(orders.map(o => ({
769
+ tokenId: o.tokenId,
770
+ price: o.price,
771
+ size: o.size,
772
+ side: o.side === 'buy' ? 'buy' : 'sell',
773
+ negRisk: o.negRisk,
774
+ })), signerCfg);
775
+ // Set owner to API key on all orders (required by Polymarket CLOB)
776
+ for (const po of postOrders) {
777
+ po.owner = auth.apiKey;
778
+ }
779
+ // Apply postOnly flag
780
+ for (let i = 0; i < postOrders.length; i++) {
781
+ if (orders[i].postOnly)
782
+ postOrders[i].postOnly = true;
783
+ }
784
+ // Send in chunks of 15 (Polymarket batch limit)
785
+ const results = [];
786
+ for (let i = 0; i < postOrders.length; i += 15) {
787
+ const chunk = postOrders.slice(i, i + 15);
788
+ const url = `${POLY_CLOB_URL}/orders`;
789
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'POST', url, chunk);
790
+ try {
791
+ const response = await fetch(url, {
792
+ method: 'POST',
793
+ headers: { ...headers, 'Content-Type': 'application/json' },
794
+ body: JSON.stringify(chunk),
795
+ });
796
+ if (!response.ok) {
797
+ const error = await response.text();
798
+ logger_1.logger.error({ status: response.status, error, count: chunk.length }, 'Polymarket batch order failed');
799
+ results.push(...chunk.map(() => ({ success: false, error: `HTTP ${response.status}` })));
800
+ continue;
801
+ }
802
+ const data = (await response.json());
803
+ logger_1.logger.info({ count: chunk.length, successful: data.filter(r => r.orderID || r.order_id).length }, 'Polymarket batch orders placed');
804
+ for (const r of data) {
805
+ results.push({
806
+ success: !r.errorMsg,
807
+ orderId: r.orderID || r.order_id,
808
+ error: r.errorMsg,
809
+ status: r.errorMsg ? 'rejected' : 'open',
810
+ transactionHash: r.transactionsHashes?.[0],
811
+ });
812
+ }
813
+ }
814
+ catch (error) {
815
+ logger_1.logger.error({ error }, 'Error placing Polymarket batch orders');
816
+ results.push(...chunk.map(() => ({
817
+ success: false,
818
+ error: error instanceof Error ? error.message : 'Batch order failed',
819
+ })));
820
+ }
821
+ }
822
+ logger_1.logger.info({ total: orders.length, successful: results.filter(r => r.success).length }, 'Polymarket batch orders completed');
823
+ return results;
824
+ }
825
+ /**
826
+ * Cancel multiple Polymarket orders concurrently.
827
+ *
828
+ * NOTE: The true batch cancel endpoint (DELETE /orders) accepts an array of
829
+ * order IDs. It uses L2 HMAC auth (same as other endpoints), so we can use
830
+ * it directly. Falls back to parallel individual cancels on error.
831
+ */
832
+ async function cancelPolymarketOrdersBatch(auth, orderIds) {
833
+ if (orderIds.length === 0)
834
+ return [];
835
+ // DELETE /orders with array of IDs uses L2 HMAC auth (no order signing needed)
836
+ const url = `${POLY_CLOB_URL}/orders`;
837
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'DELETE', url, orderIds);
838
+ try {
839
+ const response = await fetch(url, {
840
+ method: 'DELETE',
841
+ headers: { ...headers, 'Content-Type': 'application/json' },
842
+ body: JSON.stringify(orderIds),
843
+ });
844
+ if (!response.ok) {
845
+ logger_1.logger.warn({ status: response.status, count: orderIds.length }, 'Polymarket batch cancel failed, falling back to individual');
846
+ // Fallback to parallel individual cancels
847
+ return Promise.all(orderIds.map(async (orderId) => ({
848
+ orderId,
849
+ success: await cancelPolymarketOrder(auth, orderId).catch(() => false),
850
+ })));
851
+ }
852
+ const data = (await response.json());
853
+ const canceledSet = new Set(data.canceled || []);
854
+ logger_1.logger.info({ total: orderIds.length, canceled: canceledSet.size, notCanceled: Object.keys(data.not_canceled || {}).length }, 'Polymarket batch cancel completed');
855
+ return orderIds.map(orderId => ({ orderId, success: canceledSet.has(orderId) }));
856
+ }
857
+ catch (error) {
858
+ logger_1.logger.error({ error }, 'Error in Polymarket batch cancel, falling back to individual');
859
+ return Promise.all(orderIds.map(async (orderId) => ({
860
+ orderId,
861
+ success: await cancelPolymarketOrder(auth, orderId).catch(() => false),
862
+ })));
863
+ }
864
+ }
865
+ async function getPolymarketOpenOrders(auth) {
866
+ const url = `${POLY_CLOB_URL}/orders?state=OPEN`;
867
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'GET', url);
868
+ try {
869
+ const response = await fetch(url, {
870
+ method: 'GET',
871
+ headers: {
872
+ ...headers,
873
+ 'Content-Type': 'application/json',
874
+ },
875
+ });
876
+ if (!response.ok) {
877
+ logger_1.logger.error({ status: response.status }, 'Failed to fetch Polymarket orders');
878
+ return [];
879
+ }
880
+ const data = (await response.json());
881
+ return data.map((o) => ({
882
+ orderId: o.id,
883
+ platform: 'polymarket',
884
+ marketId: o.market,
885
+ tokenId: o.asset_id,
886
+ side: o.side.toLowerCase(),
887
+ price: parseFloat(o.price),
888
+ originalSize: parseFloat(o.original_size),
889
+ remainingSize: parseFloat(o.original_size) - parseFloat(o.size_matched),
890
+ filledSize: parseFloat(o.size_matched),
891
+ orderType: o.order_type || 'GTC',
892
+ status: o.status.toLowerCase(),
893
+ createdAt: new Date(o.created_at),
894
+ expiration: o.expiration ? new Date(o.expiration) : undefined,
895
+ }));
896
+ }
897
+ catch (error) {
898
+ logger_1.logger.error({ error }, 'Error fetching Polymarket orders');
899
+ return [];
900
+ }
901
+ }
902
+ // =============================================================================
903
+ // KALSHI EXECUTION
904
+ // =============================================================================
905
+ const KALSHI_API_URL = 'https://api.elections.kalshi.com/trade-api/v2';
906
+ /**
907
+ * Retry helper with exponential backoff for Kalshi API calls
908
+ * Retries on: network errors, 5xx server errors, 429 rate limit
909
+ * Does NOT retry on: 4xx client errors (bad request, unauthorized, etc.)
910
+ */
911
+ async function kalshiRetryWithBackoff(operation, maxAttempts = 3, baseDelayMs = 1000) {
912
+ let lastError = null;
913
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
914
+ try {
915
+ const result = await operation();
916
+ // Retry on 5xx or 429
917
+ if (result.response.status >= 500 || result.response.status === 429) {
918
+ if (attempt < maxAttempts) {
919
+ const delay = baseDelayMs * Math.pow(2, attempt - 1);
920
+ logger_1.logger.warn({ status: result.response.status, attempt, delay }, 'Kalshi API error, retrying...');
921
+ await new Promise(resolve => setTimeout(resolve, delay));
922
+ continue;
923
+ }
924
+ }
925
+ return result;
926
+ }
927
+ catch (error) {
928
+ lastError = error instanceof Error ? error : new Error(String(error));
929
+ if (attempt < maxAttempts) {
930
+ const delay = baseDelayMs * Math.pow(2, attempt - 1);
931
+ logger_1.logger.warn({ error: lastError.message, attempt, delay }, 'Kalshi API network error, retrying...');
932
+ await new Promise(resolve => setTimeout(resolve, delay));
933
+ }
934
+ }
935
+ }
936
+ throw lastError || new Error('Kalshi API request failed after retries');
937
+ }
938
+ async function placeKalshiOrder(auth, ticker, side, action, price, count, orderType = 'GTC', maxSlippage) {
939
+ const url = `${KALSHI_API_URL}/portfolio/orders`;
940
+ // Slippage protection for market orders
941
+ let effectivePrice = price;
942
+ if (orderType === 'FOK' && maxSlippage !== undefined) {
943
+ try {
944
+ const orderbook = await fetchKalshiOrderbook(ticker);
945
+ if (orderbook) {
946
+ // For buy: look at asks; for sell: look at bids
947
+ const relevantSide = action === 'buy' ? orderbook.asks : orderbook.bids;
948
+ const { avgFillPrice, totalFilled } = calculateFillFromOrderbook(relevantSide, count, action);
949
+ if (totalFilled < count * 0.5) {
950
+ return {
951
+ success: false,
952
+ error: `Insufficient liquidity: only ${totalFilled}/${count} contracts available`,
953
+ };
954
+ }
955
+ // Calculate slippage from mid price
956
+ const slippage = action === 'buy'
957
+ ? (avgFillPrice - orderbook.midPrice) / orderbook.midPrice
958
+ : (orderbook.midPrice - avgFillPrice) / orderbook.midPrice;
959
+ if (slippage > maxSlippage) {
960
+ return {
961
+ success: false,
962
+ error: `Slippage ${(slippage * 100).toFixed(2)}% exceeds max ${(maxSlippage * 100).toFixed(2)}%`,
963
+ };
964
+ }
965
+ // Use limit order instead of market to cap slippage
966
+ // Add buffer to expected price for fill certainty
967
+ const buffer = action === 'buy' ? 0.01 : -0.01;
968
+ effectivePrice = Math.max(0.01, Math.min(0.99, avgFillPrice + buffer));
969
+ logger_1.logger.info({ ticker, action, count, avgFillPrice, effectivePrice, slippage }, 'Kalshi market order converted to limit with slippage protection');
970
+ }
971
+ }
972
+ catch (err) {
973
+ logger_1.logger.warn({ err, ticker }, 'Failed to check slippage, proceeding with market order');
974
+ }
975
+ }
976
+ const order = {
977
+ ticker,
978
+ side,
979
+ action,
980
+ type: orderType === 'FOK' && maxSlippage !== undefined ? 'limit' : (orderType === 'FOK' ? 'market' : 'limit'),
981
+ yes_price: side === 'yes' ? Math.round(effectivePrice * 100) : undefined,
982
+ no_price: side === 'no' ? Math.round(effectivePrice * 100) : undefined,
983
+ count,
984
+ };
985
+ try {
986
+ const { response, data } = await kalshiRetryWithBackoff(async () => {
987
+ // Build headers fresh for each attempt (timestamp-based)
988
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'POST', url);
989
+ const resp = await fetch(url, {
990
+ method: 'POST',
991
+ headers: {
992
+ ...headers,
993
+ 'Content-Type': 'application/json',
994
+ },
995
+ body: JSON.stringify(order),
996
+ });
997
+ const json = (await resp.json());
998
+ return { response: resp, data: json };
999
+ });
1000
+ if (!response.ok || data.error) {
1001
+ logger_1.logger.error({ status: response.status, error: data.error }, 'Kalshi order failed');
1002
+ return {
1003
+ success: false,
1004
+ error: data.error?.message || `HTTP ${response.status}`,
1005
+ };
1006
+ }
1007
+ logger_1.logger.info({ orderId: data.order?.order_id, ticker, side, action, price, count }, 'Kalshi order placed');
1008
+ return {
1009
+ success: true,
1010
+ orderId: data.order?.order_id,
1011
+ status: data.order?.status || 'open',
1012
+ filledSize: data.order?.filled_count,
1013
+ avgFillPrice: data.order?.yes_price != null ? data.order.yes_price / 100 :
1014
+ data.order?.no_price != null ? data.order.no_price / 100 : undefined,
1015
+ };
1016
+ }
1017
+ catch (error) {
1018
+ logger_1.logger.error({ error }, 'Error placing Kalshi order after retries');
1019
+ return {
1020
+ success: false,
1021
+ error: error instanceof Error ? error.message : 'Unknown error',
1022
+ };
1023
+ }
1024
+ }
1025
+ async function cancelKalshiOrder(auth, orderId) {
1026
+ const url = `${KALSHI_API_URL}/portfolio/orders/${orderId}`;
1027
+ try {
1028
+ const { response } = await kalshiRetryWithBackoff(async () => {
1029
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'DELETE', url);
1030
+ const resp = await fetch(url, {
1031
+ method: 'DELETE',
1032
+ headers: {
1033
+ ...headers,
1034
+ 'Content-Type': 'application/json',
1035
+ },
1036
+ });
1037
+ return { response: resp, data: null };
1038
+ });
1039
+ if (!response.ok) {
1040
+ logger_1.logger.error({ status: response.status, orderId }, 'Failed to cancel Kalshi order');
1041
+ return false;
1042
+ }
1043
+ logger_1.logger.info({ orderId }, 'Kalshi order cancelled');
1044
+ return true;
1045
+ }
1046
+ catch (error) {
1047
+ logger_1.logger.error({ error, orderId }, 'Error cancelling Kalshi order after retries');
1048
+ return false;
1049
+ }
1050
+ }
1051
+ async function getKalshiOpenOrders(auth) {
1052
+ const url = `${KALSHI_API_URL}/portfolio/orders?status=resting`;
1053
+ try {
1054
+ const { response, data } = await kalshiRetryWithBackoff(async () => {
1055
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'GET', url);
1056
+ const resp = await fetch(url, {
1057
+ method: 'GET',
1058
+ headers: {
1059
+ ...headers,
1060
+ 'Content-Type': 'application/json',
1061
+ },
1062
+ });
1063
+ const json = (await resp.json());
1064
+ return { response: resp, data: json };
1065
+ });
1066
+ if (!response.ok) {
1067
+ logger_1.logger.error({ status: response.status }, 'Failed to fetch Kalshi orders');
1068
+ return [];
1069
+ }
1070
+ return (data.orders || []).map((o) => {
1071
+ const price = (o.side === 'yes' ? o.yes_price : o.no_price) / 100;
1072
+ return {
1073
+ orderId: o.order_id,
1074
+ platform: 'kalshi',
1075
+ marketId: o.ticker,
1076
+ outcome: o.side,
1077
+ side: o.action,
1078
+ price,
1079
+ originalSize: o.count,
1080
+ remainingSize: o.remaining_count,
1081
+ filledSize: o.count - o.remaining_count,
1082
+ orderType: o.type === 'market' ? 'FOK' : 'GTC',
1083
+ status: o.status,
1084
+ createdAt: new Date(o.created_time),
1085
+ expiration: o.expiration_time ? new Date(o.expiration_time) : undefined,
1086
+ };
1087
+ });
1088
+ }
1089
+ catch (error) {
1090
+ logger_1.logger.error({ error }, 'Error fetching Kalshi orders after retries');
1091
+ return [];
1092
+ }
1093
+ }
1094
+ /**
1095
+ * Place multiple Kalshi orders in a single batch request.
1096
+ * Kalshi supports up to 20 orders per batch via POST /portfolio/orders/batched.
1097
+ */
1098
+ async function placeKalshiOrdersBatch(auth, orders) {
1099
+ if (orders.length === 0)
1100
+ return [];
1101
+ const results = [];
1102
+ // Chunk into batches of 20 (Kalshi limit)
1103
+ for (let i = 0; i < orders.length; i += 20) {
1104
+ const chunk = orders.slice(i, i + 20);
1105
+ const url = `${KALSHI_API_URL}/portfolio/orders/batched`;
1106
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'POST', url);
1107
+ const body = {
1108
+ orders: chunk.map(o => ({
1109
+ ticker: o.ticker,
1110
+ side: o.side,
1111
+ action: o.action,
1112
+ type: o.orderType === 'FOK' ? 'market' : 'limit',
1113
+ yes_price: o.side === 'yes' ? Math.round(o.price * 100) : undefined,
1114
+ no_price: o.side === 'no' ? Math.round(o.price * 100) : undefined,
1115
+ count: o.count,
1116
+ })),
1117
+ };
1118
+ try {
1119
+ const response = await fetch(url, {
1120
+ method: 'POST',
1121
+ headers: { ...headers, 'Content-Type': 'application/json' },
1122
+ body: JSON.stringify(body),
1123
+ });
1124
+ if (!response.ok) {
1125
+ const error = await response.text();
1126
+ logger_1.logger.error({ status: response.status, error, count: chunk.length }, 'Kalshi batch order failed');
1127
+ results.push(...chunk.map(() => ({ success: false, error: `HTTP ${response.status}` })));
1128
+ continue;
1129
+ }
1130
+ const data = (await response.json());
1131
+ const respOrders = data.orders || [];
1132
+ for (let j = 0; j < chunk.length; j++) {
1133
+ const r = respOrders[j];
1134
+ if (r?.order_id) {
1135
+ results.push({
1136
+ success: true,
1137
+ orderId: r.order_id,
1138
+ status: r.status || 'open',
1139
+ filledSize: r.filled_count,
1140
+ });
1141
+ }
1142
+ else {
1143
+ results.push({ success: false, error: 'No order_id in response' });
1144
+ }
1145
+ }
1146
+ logger_1.logger.info({ count: chunk.length, successful: respOrders.filter(r => r?.order_id).length }, 'Kalshi batch orders placed');
1147
+ }
1148
+ catch (error) {
1149
+ logger_1.logger.error({ error }, 'Error placing Kalshi batch orders');
1150
+ results.push(...chunk.map(() => ({
1151
+ success: false,
1152
+ error: error instanceof Error ? error.message : 'Batch order failed',
1153
+ })));
1154
+ }
1155
+ }
1156
+ return results;
1157
+ }
1158
+ /**
1159
+ * Cancel multiple Kalshi orders in a single batch request.
1160
+ * Kalshi supports up to 20 cancels per batch via DELETE /portfolio/orders/batched.
1161
+ */
1162
+ async function cancelKalshiOrdersBatch(auth, orderIds) {
1163
+ if (orderIds.length === 0)
1164
+ return [];
1165
+ const results = [];
1166
+ for (let i = 0; i < orderIds.length; i += 20) {
1167
+ const chunk = orderIds.slice(i, i + 20);
1168
+ const url = `${KALSHI_API_URL}/portfolio/orders/batched`;
1169
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'DELETE', url);
1170
+ const body = {
1171
+ orders: chunk.map(id => ({ order_id: id })),
1172
+ };
1173
+ try {
1174
+ const response = await fetch(url, {
1175
+ method: 'DELETE',
1176
+ headers: { ...headers, 'Content-Type': 'application/json' },
1177
+ body: JSON.stringify(body),
1178
+ });
1179
+ if (!response.ok) {
1180
+ logger_1.logger.error({ status: response.status, count: chunk.length }, 'Kalshi batch cancel failed');
1181
+ results.push(...chunk.map(id => ({ orderId: id, success: false })));
1182
+ continue;
1183
+ }
1184
+ logger_1.logger.info({ count: chunk.length }, 'Kalshi batch cancel completed');
1185
+ results.push(...chunk.map(id => ({ orderId: id, success: true })));
1186
+ }
1187
+ catch (error) {
1188
+ logger_1.logger.error({ error }, 'Error batch cancelling Kalshi orders');
1189
+ results.push(...chunk.map(id => ({ orderId: id, success: false })));
1190
+ }
1191
+ }
1192
+ return results;
1193
+ }
1194
+ /**
1195
+ * Amend a Kalshi order (change price and/or count without losing queue position).
1196
+ * POST /portfolio/orders/{order_id}/amend
1197
+ */
1198
+ async function amendKalshiOrder(auth, orderId, updates) {
1199
+ const url = `${KALSHI_API_URL}/portfolio/orders/${orderId}/amend`;
1200
+ const headers = (0, kalshi_auth_1.buildKalshiHeadersForUrl)(auth, 'POST', url);
1201
+ const body = {};
1202
+ if (updates.price != null && updates.side) {
1203
+ if (updates.side === 'yes') {
1204
+ body.yes_price = Math.round(updates.price * 100);
1205
+ }
1206
+ else {
1207
+ body.no_price = Math.round(updates.price * 100);
1208
+ }
1209
+ }
1210
+ if (updates.count != null) {
1211
+ body.count = updates.count;
1212
+ }
1213
+ try {
1214
+ const response = await fetch(url, {
1215
+ method: 'POST',
1216
+ headers: { ...headers, 'Content-Type': 'application/json' },
1217
+ body: JSON.stringify(body),
1218
+ });
1219
+ const data = (await response.json());
1220
+ if (!response.ok) {
1221
+ logger_1.logger.error({ status: response.status, orderId }, 'Kalshi order amend failed');
1222
+ return { success: false, error: `HTTP ${response.status}` };
1223
+ }
1224
+ logger_1.logger.info({ orderId, updates }, 'Kalshi order amended');
1225
+ return {
1226
+ success: true,
1227
+ orderId: data.order?.order_id || orderId,
1228
+ status: data.order?.status || 'open',
1229
+ };
1230
+ }
1231
+ catch (error) {
1232
+ logger_1.logger.error({ error, orderId }, 'Error amending Kalshi order');
1233
+ return { success: false, error: error instanceof Error ? error.message : 'Unknown error' };
1234
+ }
1235
+ }
1236
+ // =============================================================================
1237
+ // OPINION.TRADE EXECUTION (delegates to exchange module with EIP-712 signing)
1238
+ // =============================================================================
1239
+ /**
1240
+ * Convert ExecutionConfig opinion fields to OpinionConfig for the exchange module.
1241
+ * The exchange module uses the unofficial-opinion-clob-sdk which handles
1242
+ * EIP-712 order signing internally — raw REST calls skip signing entirely.
1243
+ */
1244
+ function toOpinionConfig(auth) {
1245
+ return {
1246
+ apiKey: auth.apiKey,
1247
+ privateKey: auth.privateKey || '',
1248
+ vaultAddress: auth.multiSigAddress || '',
1249
+ rpcUrl: auth.rpcUrl,
1250
+ };
1251
+ }
1252
+ async function placeOpinionOrder(auth, tokenId, side, price, size, orderType = 'GTC') {
1253
+ if (!auth.privateKey) {
1254
+ return { success: false, error: 'Opinion privateKey required for order signing' };
1255
+ }
1256
+ if (!auth.multiSigAddress) {
1257
+ return { success: false, error: 'Opinion multiSigAddress (vaultAddress) required for trading' };
1258
+ }
1259
+ const config = toOpinionConfig(auth);
1260
+ // Extract marketId from tokenId (Opinion tokens use format: marketId-outcomeIndex)
1261
+ const marketId = parseInt(tokenId.split('-')[0], 10) || 0;
1262
+ const result = await opinion.placeOrder(config, marketId, tokenId, side === 'buy' ? 'BUY' : 'SELL', price, size, orderType === 'FOK' ? 'MARKET' : 'LIMIT');
1263
+ return {
1264
+ success: result.success,
1265
+ orderId: result.orderId,
1266
+ status: result.status,
1267
+ error: result.error,
1268
+ };
1269
+ }
1270
+ async function cancelOpinionOrder(auth, orderId) {
1271
+ const config = toOpinionConfig(auth);
1272
+ return opinion.cancelOrder(config, orderId);
1273
+ }
1274
+ async function getOpinionOpenOrders(auth) {
1275
+ const config = toOpinionConfig(auth);
1276
+ try {
1277
+ const orders = await opinion.getOpenOrders(config);
1278
+ return orders.map((o) => ({
1279
+ orderId: o.orderId,
1280
+ platform: 'opinion',
1281
+ marketId: o.marketId?.toString() || '',
1282
+ tokenId: o.orderId, // tokenId not directly available from getOpenOrders
1283
+ side: o.side.toLowerCase(),
1284
+ price: parseFloat(o.price),
1285
+ originalSize: parseFloat(o.orderShares),
1286
+ remainingSize: parseFloat(o.orderShares) - parseFloat(o.filledShares || '0'),
1287
+ filledSize: parseFloat(o.filledShares || '0'),
1288
+ orderType: 'GTC',
1289
+ status: o.status.toLowerCase(),
1290
+ createdAt: new Date(o.createdAt),
1291
+ }));
1292
+ }
1293
+ catch (error) {
1294
+ logger_1.logger.error({ error }, 'Error fetching Opinion orders');
1295
+ return [];
1296
+ }
1297
+ }
1298
+ async function placeOpinionOrdersBatch(auth, orders) {
1299
+ if (!auth.privateKey || !auth.multiSigAddress) {
1300
+ return orders.map(() => ({
1301
+ success: false,
1302
+ error: 'Opinion privateKey and multiSigAddress required for order signing',
1303
+ }));
1304
+ }
1305
+ const config = toOpinionConfig(auth);
1306
+ const results = await opinion.placeOrdersBatch(config, orders);
1307
+ return results.map(r => ({
1308
+ success: r.success,
1309
+ orderId: r.orderId,
1310
+ error: r.error,
1311
+ }));
1312
+ }
1313
+ async function cancelOpinionOrdersBatch(auth, orderIds) {
1314
+ const config = toOpinionConfig(auth);
1315
+ return opinion.cancelOrdersBatch(config, orderIds);
1316
+ }
1317
+ async function cancelAllOpinionOrders(auth, marketId) {
1318
+ const config = toOpinionConfig(auth);
1319
+ const result = await opinion.cancelAllOrders(config, marketId ? parseInt(marketId, 10) : undefined);
1320
+ return result.cancelled;
1321
+ }
1322
+ // =============================================================================
1323
+ // PREDICTFUN EXECUTION
1324
+ // =============================================================================
1325
+ async function placePredictFunOrder(config, tokenId, side, price, size, marketId) {
1326
+ try {
1327
+ const result = await predictfun.createOrder({ ...config, dryRun: false }, {
1328
+ marketId,
1329
+ tokenId,
1330
+ side: side.toUpperCase(),
1331
+ price,
1332
+ quantity: size,
1333
+ isYieldBearing: true, // Default to yield-bearing
1334
+ });
1335
+ if (!result.success) {
1336
+ return {
1337
+ success: false,
1338
+ error: result.error || 'Order placement failed',
1339
+ };
1340
+ }
1341
+ logger_1.logger.info({ orderHash: result.orderHash, tokenId, side, price, size }, 'PredictFun order placed');
1342
+ return {
1343
+ success: true,
1344
+ orderId: result.orderHash,
1345
+ status: 'open',
1346
+ };
1347
+ }
1348
+ catch (error) {
1349
+ logger_1.logger.error({ error }, 'Error placing PredictFun order');
1350
+ return {
1351
+ success: false,
1352
+ error: error instanceof Error ? error.message : 'Unknown error',
1353
+ };
1354
+ }
1355
+ }
1356
+ async function cancelPredictFunOrder(config, orderHash) {
1357
+ try {
1358
+ // We need to figure out if it's negRisk/yieldBearing by fetching orders first
1359
+ const orders = await predictfun.getOpenOrders(config);
1360
+ const order = orders.find(o => o.orderHash === orderHash);
1361
+ if (!order) {
1362
+ logger_1.logger.warn({ orderHash }, 'Order not found for cancellation');
1363
+ return false;
1364
+ }
1365
+ const result = await predictfun.cancelOrders(config, [orderHash], { isNegRisk: order.isNegRisk, isYieldBearing: order.isYieldBearing });
1366
+ if (!result.success) {
1367
+ logger_1.logger.error({ orderHash, error: result.error }, 'Failed to cancel PredictFun order');
1368
+ return false;
1369
+ }
1370
+ logger_1.logger.info({ orderHash }, 'PredictFun order cancelled');
1371
+ return true;
1372
+ }
1373
+ catch (error) {
1374
+ logger_1.logger.error({ error, orderHash }, 'Error cancelling PredictFun order');
1375
+ return false;
1376
+ }
1377
+ }
1378
+ async function cancelAllPredictFunOrders(config) {
1379
+ try {
1380
+ const result = await predictfun.cancelAllOrders(config);
1381
+ return result.cancelled;
1382
+ }
1383
+ catch (error) {
1384
+ logger_1.logger.error({ error }, 'Error cancelling all PredictFun orders');
1385
+ return 0;
1386
+ }
1387
+ }
1388
+ async function getPredictFunOpenOrders(config) {
1389
+ try {
1390
+ const orders = await predictfun.getOpenOrders(config);
1391
+ return orders.map((o) => ({
1392
+ orderId: o.orderHash,
1393
+ platform: 'predictfun',
1394
+ marketId: o.marketId,
1395
+ tokenId: o.orderHash, // Use hash as tokenId fallback
1396
+ side: o.side.toLowerCase(),
1397
+ price: parseFloat(o.price),
1398
+ originalSize: parseFloat(o.size),
1399
+ remainingSize: parseFloat(o.size) - parseFloat(o.filled),
1400
+ filledSize: parseFloat(o.filled),
1401
+ orderType: 'GTC',
1402
+ status: o.status.toLowerCase(),
1403
+ createdAt: new Date(o.createdAt),
1404
+ }));
1405
+ }
1406
+ catch (error) {
1407
+ logger_1.logger.error({ error }, 'Error fetching PredictFun orders');
1408
+ return [];
1409
+ }
1410
+ }
1411
+ /**
1412
+ * Fetch PredictFun orderbook for slippage calculation
1413
+ */
1414
+ async function fetchPredictFunOrderbook(config, marketId) {
1415
+ try {
1416
+ const data = await predictfun.getOrderbook(config, marketId);
1417
+ if (!data)
1418
+ return null;
1419
+ const bids = (data.bids || [])
1420
+ .map(b => [parseFloat(b.price), parseFloat(b.size)])
1421
+ .filter(([price, size]) => !isNaN(price) && !isNaN(size))
1422
+ .sort((a, b) => b[0] - a[0]);
1423
+ const asks = (data.asks || [])
1424
+ .map(a => [parseFloat(a.price), parseFloat(a.size)])
1425
+ .filter(([price, size]) => !isNaN(price) && !isNaN(size))
1426
+ .sort((a, b) => a[0] - b[0]);
1427
+ const bestBid = bids[0]?.[0] ?? 0;
1428
+ const bestAsk = asks[0]?.[0] ?? 0.99;
1429
+ const midPrice = (bestBid + bestAsk) / 2;
1430
+ return { bids, asks, midPrice };
1431
+ }
1432
+ catch (error) {
1433
+ logger_1.logger.warn({ error, marketId }, 'Failed to fetch PredictFun orderbook');
1434
+ return null;
1435
+ }
1436
+ }
1437
+ /**
1438
+ * Fetch Opinion orderbook for slippage calculation
1439
+ */
1440
+ async function fetchOpinionOrderbook(tokenId) {
1441
+ try {
1442
+ const response = await fetch(`https://proxy.opinion.trade:8443/openapi/token/orderbook?tokenId=${encodeURIComponent(tokenId)}`);
1443
+ if (!response.ok)
1444
+ return null;
1445
+ const data = await response.json();
1446
+ const orderbook = data.orderbook || data;
1447
+ const bids = (orderbook.bids || [])
1448
+ .map(b => [parseFloat(b.price), parseFloat(b.size)])
1449
+ .filter(([price, size]) => !isNaN(price) && !isNaN(size))
1450
+ .sort((a, b) => b[0] - a[0]);
1451
+ const asks = (orderbook.asks || [])
1452
+ .map(a => [parseFloat(a.price), parseFloat(a.size)])
1453
+ .filter(([price, size]) => !isNaN(price) && !isNaN(size))
1454
+ .sort((a, b) => a[0] - b[0]);
1455
+ const bestBid = bids[0]?.[0] ?? 0;
1456
+ const bestAsk = asks[0]?.[0] ?? 0.99;
1457
+ const midPrice = (bestBid + bestAsk) / 2;
1458
+ return { bids, asks, midPrice };
1459
+ }
1460
+ catch (error) {
1461
+ logger_1.logger.warn({ error, tokenId }, 'Failed to fetch Opinion orderbook');
1462
+ return null;
1463
+ }
1464
+ }
1465
+ // =============================================================================
1466
+ // POLYMARKET SETTLEMENT & APPROVAL
1467
+ // =============================================================================
1468
+ // USDC contract address on Polygon
1469
+ const POLY_USDC_ADDRESS = process.env.POLY_USDC_ADDRESS || '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174';
1470
+ // Conditional Token Framework address
1471
+ const POLY_CTF_ADDRESS = process.env.POLY_CTF_ADDRESS || '0x4D97DCd97eC945f40cF65F87097ACe5EA0476045';
1472
+ /**
1473
+ * Get pending settlements for resolved markets
1474
+ */
1475
+ async function getPolymarketPendingSettlements(auth, funderAddress) {
1476
+ const address = funderAddress || auth.address;
1477
+ const url = `${POLY_CLOB_URL}/positions?address=${address}`;
1478
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)(auth, 'GET', url);
1479
+ try {
1480
+ const response = await fetch(url, { headers });
1481
+ if (!response.ok) {
1482
+ throw new Error(`HTTP ${response.status}`);
1483
+ }
1484
+ const positions = await response.json();
1485
+ // Filter to resolved positions with claimable amounts
1486
+ return positions
1487
+ .filter(p => p.resolved && parseFloat(p.claimable || '0') > 0)
1488
+ .map(p => ({
1489
+ marketId: p.market_id || p.condition_id || '',
1490
+ conditionId: p.condition_id || '',
1491
+ tokenId: p.asset_id || '',
1492
+ outcome: (p.outcome?.toLowerCase() || 'yes'),
1493
+ size: parseFloat(p.size || '0'),
1494
+ claimable: parseFloat(p.claimable || '0'),
1495
+ resolutionStatus: 'resolved',
1496
+ resolvedAt: undefined, // API doesn't return resolution time
1497
+ }));
1498
+ }
1499
+ catch (error) {
1500
+ logger_1.logger.error({ error, address }, 'Failed to fetch pending settlements');
1501
+ return [];
1502
+ }
1503
+ }
1504
+ /**
1505
+ * Approve USDC spending for CTF exchange (required before first trade)
1506
+ * This requires a transaction signing - returns the approval status
1507
+ */
1508
+ async function approvePolymarketUSDC(privateKey, spender, amount = Number.MAX_SAFE_INTEGER) {
1509
+ try {
1510
+ const { Wallet, Contract, JsonRpcProvider, MaxUint256 } = await Promise.resolve().then(() => __importStar(require('ethers')));
1511
+ const rpcUrl = process.env.POLYGON_RPC_URL || 'https://polygon-rpc.com';
1512
+ const provider = new JsonRpcProvider(rpcUrl);
1513
+ const wallet = new Wallet(privateKey, provider);
1514
+ // USDC on Polygon
1515
+ const USDC_ADDRESS = '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174';
1516
+ const ERC20_ABI = ['function approve(address spender, uint256 amount) returns (bool)'];
1517
+ const usdc = new Contract(USDC_ADDRESS, ERC20_ABI, wallet);
1518
+ const tx = await usdc.approve(spender, MaxUint256);
1519
+ const receipt = await tx.wait();
1520
+ logger_1.logger.info({ txHash: receipt.hash, spender }, 'USDC approval confirmed');
1521
+ return { success: true, txHash: receipt.hash };
1522
+ }
1523
+ catch (error) {
1524
+ logger_1.logger.error({ error, spender }, 'USDC approval failed');
1525
+ return {
1526
+ success: false,
1527
+ error: error instanceof Error ? error.message : 'Approval failed',
1528
+ };
1529
+ }
1530
+ }
1531
+ /**
1532
+ * Get current USDC allowance for trading
1533
+ */
1534
+ async function getPolymarketUSDCAllowance(ownerAddress, spenderAddress) {
1535
+ try {
1536
+ // ERC20 allowance check via RPC
1537
+ // This is a read-only call that doesn't require signing
1538
+ const allowanceSelector = '0xdd62ed3e'; // allowance(address,address)
1539
+ const paddedOwner = ownerAddress.slice(2).toLowerCase().padStart(64, '0');
1540
+ const paddedSpender = spenderAddress.slice(2).toLowerCase().padStart(64, '0');
1541
+ const data = `${allowanceSelector}${paddedOwner}${paddedSpender}`;
1542
+ const rpcUrl = process.env.POLYGON_RPC_URL || 'https://polygon-rpc.com';
1543
+ const response = await fetch(rpcUrl, {
1544
+ method: 'POST',
1545
+ headers: { 'Content-Type': 'application/json' },
1546
+ body: JSON.stringify({
1547
+ jsonrpc: '2.0',
1548
+ method: 'eth_call',
1549
+ params: [{ to: POLY_USDC_ADDRESS, data }, 'latest'],
1550
+ id: 1,
1551
+ }),
1552
+ });
1553
+ const result = await response.json();
1554
+ if (!result.result || result.result === '0x') {
1555
+ return 0;
1556
+ }
1557
+ // USDC has 6 decimals
1558
+ const allowanceWei = BigInt(result.result);
1559
+ return Number(allowanceWei) / 1e6;
1560
+ }
1561
+ catch (error) {
1562
+ logger_1.logger.warn({ error, ownerAddress }, 'Failed to fetch USDC allowance');
1563
+ return 0;
1564
+ }
1565
+ }
1566
+ /**
1567
+ * Batch fetch orderbooks for multiple tokens
1568
+ */
1569
+ async function getPolymarketOrderbooksBatch(tokenIds) {
1570
+ const results = new Map();
1571
+ // Fetch in parallel with concurrency limit
1572
+ const BATCH_SIZE = 10;
1573
+ for (let i = 0; i < tokenIds.length; i += BATCH_SIZE) {
1574
+ const batch = tokenIds.slice(i, i + BATCH_SIZE);
1575
+ const promises = batch.map(async (tokenId) => {
1576
+ try {
1577
+ const response = await fetch(`${POLY_CLOB_URL}/book?token_id=${tokenId}`);
1578
+ if (!response.ok) {
1579
+ results.set(tokenId, null);
1580
+ return;
1581
+ }
1582
+ const data = await response.json();
1583
+ const bids = (data.bids || [])
1584
+ .map((b) => [parseFloat(b.price), parseFloat(b.size)])
1585
+ .sort((a, b) => b[0] - a[0]);
1586
+ const asks = (data.asks || [])
1587
+ .map((a) => [parseFloat(a.price), parseFloat(a.size)])
1588
+ .sort((a, b) => a[0] - b[0]);
1589
+ const bestBid = bids[0]?.[0] ?? 0;
1590
+ const bestAsk = asks[0]?.[0] ?? 0.99;
1591
+ const midPrice = (bestBid + bestAsk) / 2;
1592
+ results.set(tokenId, { bids, asks, midPrice });
1593
+ }
1594
+ catch {
1595
+ results.set(tokenId, null);
1596
+ }
1597
+ });
1598
+ await Promise.all(promises);
1599
+ }
1600
+ return results;
1601
+ }
1602
+ // =============================================================================
1603
+ // EXECUTION SERVICE
1604
+ // =============================================================================
1605
+ function createExecutionService(config) {
1606
+ const maxOrderSize = config.maxOrderSize || 1000; // Default $1000 max
1607
+ // ==========================================================================
1608
+ // REAL-TIME FILL TRACKING (Polymarket WebSocket)
1609
+ // ==========================================================================
1610
+ let userWs = null;
1611
+ const trackedFills = new Map();
1612
+ const trackedOrders = new Map();
1613
+ const fillCallbacks = new Set();
1614
+ const orderCallbacks = new Set();
1615
+ const fillWaiters = new Map();
1616
+ // Circuit breaker integration
1617
+ let circuitBreaker = null;
1618
+ function handleFillEvent(event) {
1619
+ const fill = {
1620
+ orderId: event.orderId,
1621
+ marketId: event.marketId,
1622
+ tokenId: event.tokenId,
1623
+ side: event.side.toLowerCase(),
1624
+ size: event.size,
1625
+ price: event.price,
1626
+ status: event.status,
1627
+ transactionHash: event.transactionHash,
1628
+ timestamp: event.timestamp,
1629
+ receivedAt: Date.now(),
1630
+ };
1631
+ // Update or insert (only if higher priority status)
1632
+ const existing = trackedFills.get(event.orderId);
1633
+ if (!existing || getStatusPriority(fill.status) > getStatusPriority(existing.status)) {
1634
+ trackedFills.set(event.orderId, fill);
1635
+ logger_1.logger.info({ fill }, 'Fill tracked via WebSocket');
1636
+ // Notify subscribers
1637
+ for (const callback of fillCallbacks) {
1638
+ try {
1639
+ callback(fill);
1640
+ }
1641
+ catch (err) {
1642
+ logger_1.logger.error({ err }, 'Fill callback error');
1643
+ }
1644
+ }
1645
+ // Resolve waiters if CONFIRMED or FAILED
1646
+ if (fill.status === 'CONFIRMED' || fill.status === 'FAILED') {
1647
+ const waiters = fillWaiters.get(event.orderId);
1648
+ if (waiters) {
1649
+ for (const resolve of waiters) {
1650
+ resolve(fill);
1651
+ }
1652
+ fillWaiters.delete(event.orderId);
1653
+ }
1654
+ }
1655
+ }
1656
+ }
1657
+ function handleOrderEvent(event) {
1658
+ const order = {
1659
+ orderId: event.orderId,
1660
+ marketId: event.marketId,
1661
+ tokenId: event.tokenId,
1662
+ type: event.type,
1663
+ side: event.side.toLowerCase(),
1664
+ price: event.price,
1665
+ originalSize: event.originalSize,
1666
+ sizeMatched: event.sizeMatched,
1667
+ timestamp: event.timestamp,
1668
+ receivedAt: Date.now(),
1669
+ };
1670
+ trackedOrders.set(event.orderId, order);
1671
+ logger_1.logger.info({ order }, 'Order event tracked via WebSocket');
1672
+ // Notify subscribers
1673
+ for (const callback of orderCallbacks) {
1674
+ try {
1675
+ callback(order);
1676
+ }
1677
+ catch (err) {
1678
+ logger_1.logger.error({ err }, 'Order callback error');
1679
+ }
1680
+ }
1681
+ }
1682
+ function getStatusPriority(status) {
1683
+ switch (status) {
1684
+ case 'MATCHED': return 1;
1685
+ case 'MINED': return 2;
1686
+ case 'CONFIRMED': return 3;
1687
+ case 'FAILED': return 0;
1688
+ default: return -1;
1689
+ }
1690
+ }
1691
+ async function connectFillsWebSocket() {
1692
+ if (!config.polymarket) {
1693
+ throw new Error('Polymarket not configured');
1694
+ }
1695
+ if (userWs?.isConnected()) {
1696
+ return;
1697
+ }
1698
+ const userId = config.polymarket.funderAddress || config.polymarket.apiKey;
1699
+ userWs = (0, user_ws_1.createUserWebSocket)(userId, {
1700
+ privateKey: config.polymarket.privateKey || '',
1701
+ apiKey: config.polymarket.apiKey,
1702
+ apiSecret: config.polymarket.apiSecret,
1703
+ apiPassphrase: config.polymarket.apiPassphrase,
1704
+ funderAddress: config.polymarket.funderAddress || '',
1705
+ });
1706
+ userWs.on('fill', handleFillEvent);
1707
+ userWs.on('order', handleOrderEvent);
1708
+ userWs.on('error', (err) => {
1709
+ logger_1.logger.error({ err }, 'Fills WebSocket error');
1710
+ });
1711
+ await userWs.connect();
1712
+ logger_1.logger.info('Fills WebSocket connected - real-time order confirmations enabled');
1713
+ }
1714
+ function disconnectFillsWebSocket() {
1715
+ if (userWs) {
1716
+ userWs.disconnect();
1717
+ userWs = null;
1718
+ logger_1.logger.info('Fills WebSocket disconnected');
1719
+ }
1720
+ }
1721
+ // ==========================================================================
1722
+ // ORDER HEARTBEAT (Polymarket - orders cancelled if no heartbeat within 10s)
1723
+ // ==========================================================================
1724
+ let heartbeatId = null;
1725
+ let heartbeatInterval = null;
1726
+ const HEARTBEAT_INTERVAL_MS = 8000; // 8s to be safe (10s timeout)
1727
+ async function postHeartbeat(existingId) {
1728
+ if (!config.polymarket) {
1729
+ throw new Error('Polymarket not configured');
1730
+ }
1731
+ const url = `${POLY_CLOB_URL}/heartbeat`;
1732
+ const body = existingId ? { heartbeat_id: existingId } : {};
1733
+ const headers = (0, polymarket_auth_1.buildPolymarketHeadersForUrl)({
1734
+ address: config.polymarket.funderAddress || '',
1735
+ apiKey: config.polymarket.apiKey,
1736
+ apiSecret: config.polymarket.apiSecret,
1737
+ apiPassphrase: config.polymarket.apiPassphrase,
1738
+ }, 'POST', url);
1739
+ const response = await fetch(url, {
1740
+ method: 'POST',
1741
+ headers: {
1742
+ 'Content-Type': 'application/json',
1743
+ ...headers,
1744
+ },
1745
+ body: JSON.stringify(body),
1746
+ });
1747
+ if (!response.ok) {
1748
+ const text = await response.text();
1749
+ throw new Error(`Heartbeat failed: ${response.status} ${text}`);
1750
+ }
1751
+ const data = await response.json();
1752
+ return data.heartbeat_id || existingId || '';
1753
+ }
1754
+ async function startHeartbeat() {
1755
+ if (heartbeatInterval) {
1756
+ // Already running, just return current ID
1757
+ if (heartbeatId)
1758
+ return heartbeatId;
1759
+ }
1760
+ // Initial heartbeat
1761
+ heartbeatId = await postHeartbeat();
1762
+ logger_1.logger.info({ heartbeatId }, 'Polymarket heartbeat started');
1763
+ // Start recurring heartbeat
1764
+ heartbeatInterval = setInterval(async () => {
1765
+ try {
1766
+ heartbeatId = await postHeartbeat(heartbeatId || undefined);
1767
+ logger_1.logger.debug({ heartbeatId }, 'Heartbeat sent');
1768
+ }
1769
+ catch (err) {
1770
+ logger_1.logger.error({ err }, 'Heartbeat failed - orders may be cancelled');
1771
+ }
1772
+ }, HEARTBEAT_INTERVAL_MS);
1773
+ return heartbeatId;
1774
+ }
1775
+ async function sendHeartbeat(id) {
1776
+ heartbeatId = await postHeartbeat(id);
1777
+ return heartbeatId;
1778
+ }
1779
+ function stopHeartbeat() {
1780
+ if (heartbeatInterval) {
1781
+ clearInterval(heartbeatInterval);
1782
+ heartbeatInterval = null;
1783
+ }
1784
+ heartbeatId = null;
1785
+ logger_1.logger.info('Polymarket heartbeat stopped');
1786
+ }
1787
+ function isHeartbeatActive() {
1788
+ return heartbeatInterval !== null;
1789
+ }
1790
+ function waitForFill(orderId, timeoutMs = 60000) {
1791
+ // Check if already have a confirmed/failed fill
1792
+ const existing = trackedFills.get(orderId);
1793
+ if (existing && (existing.status === 'CONFIRMED' || existing.status === 'FAILED')) {
1794
+ return Promise.resolve(existing);
1795
+ }
1796
+ return new Promise((resolve) => {
1797
+ // Set up timeout
1798
+ const timeout = setTimeout(() => {
1799
+ const waiters = fillWaiters.get(orderId);
1800
+ if (waiters) {
1801
+ const idx = waiters.indexOf(resolve);
1802
+ if (idx !== -1)
1803
+ waiters.splice(idx, 1);
1804
+ if (waiters.length === 0)
1805
+ fillWaiters.delete(orderId);
1806
+ }
1807
+ resolve(null); // Timeout - return null
1808
+ }, timeoutMs);
1809
+ // Add to waiters
1810
+ const resolveWrapper = (fill) => {
1811
+ clearTimeout(timeout);
1812
+ resolve(fill);
1813
+ };
1814
+ if (!fillWaiters.has(orderId)) {
1815
+ fillWaiters.set(orderId, []);
1816
+ }
1817
+ fillWaiters.get(orderId).push(resolveWrapper);
1818
+ });
1819
+ }
1820
+ // ==========================================================================
1821
+ function validateOrder(request) {
1822
+ // Circuit breaker check - block orders when tripped
1823
+ if (circuitBreaker && !circuitBreaker.canTrade()) {
1824
+ const state = circuitBreaker.getState();
1825
+ return `Trading blocked by circuit breaker: ${state.tripReason || 'tripped'}. Reset at: ${state.resetAt?.toISOString() || 'manual reset required'}`;
1826
+ }
1827
+ const notional = request.price * request.size;
1828
+ if (notional > maxOrderSize) {
1829
+ return `Order size $${notional.toFixed(2)} exceeds max $${maxOrderSize}`;
1830
+ }
1831
+ if (request.price < 0.01 || request.price > 0.99) {
1832
+ return `Price ${request.price} out of range [0.01, 0.99]`;
1833
+ }
1834
+ if (request.size <= 0) {
1835
+ return `Invalid size: ${request.size}`;
1836
+ }
1837
+ return null;
1838
+ }
1839
+ /**
1840
+ * Record order result to circuit breaker (if enabled)
1841
+ * Note: P&L is calculated when position is closed, not on order placement
1842
+ */
1843
+ function recordOrderToCircuitBreaker(result, sizeUsd) {
1844
+ if (!circuitBreaker)
1845
+ return;
1846
+ // Record as trade (P&L = 0 for now, actual P&L tracked on fills/closes)
1847
+ circuitBreaker.recordTrade({
1848
+ pnlUsd: 0, // P&L unknown at order time
1849
+ success: result.success,
1850
+ sizeUsd,
1851
+ error: result.error,
1852
+ });
1853
+ // Record error if order failed
1854
+ if (!result.success && result.error) {
1855
+ circuitBreaker.recordError(result.error);
1856
+ }
1857
+ }
1858
+ async function executeOrder(request) {
1859
+ // Validate
1860
+ const error = validateOrder(request);
1861
+ if (error) {
1862
+ return { success: false, error };
1863
+ }
1864
+ // Security shield pre-trade check (runs before dry-run so security is always enforced)
1865
+ if (request.destination) {
1866
+ try {
1867
+ const { getSecurityShield } = await Promise.resolve().then(() => __importStar(require('../security/shield.js')));
1868
+ const shield = getSecurityShield();
1869
+ const check = await shield.validateTx({
1870
+ destination: request.destination,
1871
+ amount: request.size,
1872
+ token: request.token,
1873
+ });
1874
+ if (!check.allowed) {
1875
+ return { success: false, error: `Security blocked: ${check.flags.join(', ')}` };
1876
+ }
1877
+ }
1878
+ catch (err) {
1879
+ // Shield not loaded or RPC failure — log but don't block
1880
+ logger_1.logger.debug({ err }, 'Security shield check skipped');
1881
+ }
1882
+ }
1883
+ // Dry run mode
1884
+ if (config.dryRun) {
1885
+ logger_1.logger.info({ ...request, dryRun: true }, 'Dry run order');
1886
+ return {
1887
+ success: true,
1888
+ orderId: `dry_${(0, crypto_1.randomBytes)(8).toString('hex')}`,
1889
+ status: 'open',
1890
+ };
1891
+ }
1892
+ // Execute on appropriate platform
1893
+ if (request.platform === 'polymarket') {
1894
+ if (!config.polymarket) {
1895
+ return { success: false, error: 'Polymarket not configured' };
1896
+ }
1897
+ if (!request.tokenId) {
1898
+ return { success: false, error: 'tokenId required for Polymarket' };
1899
+ }
1900
+ const result = await placePolymarketOrder(config.polymarket, request.tokenId, request.side, request.price, request.size, request.orderType, request.negRisk, request.postOnly);
1901
+ // Auto-start heartbeat for GTC/GTD orders (orders that stay on the book)
1902
+ // Polymarket cancels orders if no heartbeat received within 10 seconds
1903
+ if (result.success && (request.orderType === 'GTC' || request.orderType === 'GTD')) {
1904
+ if (!isHeartbeatActive()) {
1905
+ try {
1906
+ await startHeartbeat();
1907
+ logger_1.logger.info('Heartbeat auto-started for GTC order');
1908
+ }
1909
+ catch (err) {
1910
+ logger_1.logger.warn({ err }, 'Failed to auto-start heartbeat (order placed but heartbeat not started)');
1911
+ }
1912
+ }
1913
+ }
1914
+ return result;
1915
+ }
1916
+ if (request.platform === 'kalshi') {
1917
+ if (!config.kalshi) {
1918
+ return { success: false, error: 'Kalshi not configured' };
1919
+ }
1920
+ const outcome = request.outcome?.toLowerCase() || 'yes';
1921
+ return placeKalshiOrder(config.kalshi, request.marketId, outcome, request.side, request.price, request.size, request.orderType, request.maxSlippage);
1922
+ }
1923
+ if (request.platform === 'opinion') {
1924
+ if (!config.opinion) {
1925
+ return { success: false, error: 'Opinion not configured' };
1926
+ }
1927
+ if (!request.tokenId) {
1928
+ return { success: false, error: 'tokenId required for Opinion' };
1929
+ }
1930
+ return placeOpinionOrder(config.opinion, request.tokenId, request.side, request.price, request.size, request.orderType);
1931
+ }
1932
+ if (request.platform === 'predictfun') {
1933
+ if (!config.predictfun) {
1934
+ return { success: false, error: 'PredictFun not configured' };
1935
+ }
1936
+ if (!request.tokenId) {
1937
+ return { success: false, error: 'tokenId required for PredictFun' };
1938
+ }
1939
+ return placePredictFunOrder(config.predictfun, request.tokenId, request.side, request.price, request.size, request.marketId);
1940
+ }
1941
+ return { success: false, error: `Unknown platform: ${request.platform}` };
1942
+ }
1943
+ const service = {
1944
+ async buyLimit(request) {
1945
+ const result = await executeOrder({ ...request, side: 'buy', orderType: request.orderType || 'GTC' });
1946
+ recordOrderToCircuitBreaker(result, request.price * request.size);
1947
+ return result;
1948
+ },
1949
+ async sellLimit(request) {
1950
+ const result = await executeOrder({ ...request, side: 'sell', orderType: request.orderType || 'GTC' });
1951
+ recordOrderToCircuitBreaker(result, request.price * request.size);
1952
+ return result;
1953
+ },
1954
+ async marketBuy(request) {
1955
+ // Market orders use FOK (Fill or Kill)
1956
+ // Price is set to max (0.99) to ensure fill
1957
+ const result = await executeOrder({ ...request, side: 'buy', price: 0.99, orderType: 'FOK' });
1958
+ recordOrderToCircuitBreaker(result, 0.99 * request.size);
1959
+ return result;
1960
+ },
1961
+ async marketSell(request) {
1962
+ // Price is set to min (0.01) to ensure fill
1963
+ const result = await executeOrder({ ...request, side: 'sell', price: 0.01, orderType: 'FOK' });
1964
+ recordOrderToCircuitBreaker(result, 0.01 * request.size);
1965
+ return result;
1966
+ },
1967
+ async makerBuy(request) {
1968
+ const result = await executeOrder({ ...request, side: 'buy', orderType: 'GTC', postOnly: true });
1969
+ recordOrderToCircuitBreaker(result, request.price * request.size);
1970
+ return result;
1971
+ },
1972
+ async makerSell(request) {
1973
+ const result = await executeOrder({ ...request, side: 'sell', orderType: 'GTC', postOnly: true });
1974
+ recordOrderToCircuitBreaker(result, request.price * request.size);
1975
+ return result;
1976
+ },
1977
+ async cancelOrder(platform, orderId) {
1978
+ if (config.dryRun) {
1979
+ logger_1.logger.info({ platform, orderId, dryRun: true }, 'Dry run cancel');
1980
+ return true;
1981
+ }
1982
+ if (platform === 'polymarket' && config.polymarket) {
1983
+ return cancelPolymarketOrder(config.polymarket, orderId);
1984
+ }
1985
+ if (platform === 'kalshi' && config.kalshi) {
1986
+ return cancelKalshiOrder(config.kalshi, orderId);
1987
+ }
1988
+ if (platform === 'opinion' && config.opinion) {
1989
+ return cancelOpinionOrder(config.opinion, orderId);
1990
+ }
1991
+ if (platform === 'predictfun' && config.predictfun) {
1992
+ return cancelPredictFunOrder(config.predictfun, orderId);
1993
+ }
1994
+ return false;
1995
+ },
1996
+ async cancelAllOrders(platform, marketId) {
1997
+ if (config.dryRun) {
1998
+ logger_1.logger.info({ platform, marketId, dryRun: true }, 'Dry run cancel all');
1999
+ return 0;
2000
+ }
2001
+ let count = 0;
2002
+ if ((!platform || platform === 'polymarket') && config.polymarket) {
2003
+ count += await cancelAllPolymarketOrders(config.polymarket, marketId);
2004
+ // Auto-stop heartbeat if all Polymarket orders cancelled (no market filter)
2005
+ // Heartbeat is only needed when there are open GTC/GTD orders
2006
+ if (!marketId && isHeartbeatActive()) {
2007
+ stopHeartbeat();
2008
+ logger_1.logger.info('Heartbeat auto-stopped after cancelling all orders');
2009
+ }
2010
+ }
2011
+ // Kalshi: fetch open orders, batch cancel matching ones
2012
+ if ((!platform || platform === 'kalshi') && config.kalshi) {
2013
+ const orders = await getKalshiOpenOrders(config.kalshi);
2014
+ const toCancel = orders
2015
+ .filter(o => !marketId || o.marketId === marketId)
2016
+ .map(o => o.orderId);
2017
+ if (toCancel.length > 0) {
2018
+ const results = await cancelKalshiOrdersBatch(config.kalshi, toCancel);
2019
+ count += results.filter(r => r.success).length;
2020
+ }
2021
+ }
2022
+ // Opinion: use SDK's cancelAllOrders (handles batch internally)
2023
+ if ((!platform || platform === 'opinion') && config.opinion) {
2024
+ count += await cancelAllOpinionOrders(config.opinion, marketId);
2025
+ }
2026
+ // PredictFun has bulk cancel support
2027
+ if ((!platform || platform === 'predictfun') && config.predictfun) {
2028
+ if (marketId) {
2029
+ // Filter by market if specified
2030
+ const orders = await getPredictFunOpenOrders(config.predictfun);
2031
+ for (const order of orders) {
2032
+ if (order.marketId === marketId) {
2033
+ if (await cancelPredictFunOrder(config.predictfun, order.orderId)) {
2034
+ count++;
2035
+ }
2036
+ }
2037
+ }
2038
+ }
2039
+ else {
2040
+ count += await cancelAllPredictFunOrders(config.predictfun);
2041
+ }
2042
+ }
2043
+ return count;
2044
+ },
2045
+ async getOpenOrders(platform) {
2046
+ const orders = [];
2047
+ if ((!platform || platform === 'polymarket') && config.polymarket) {
2048
+ const polyOrders = await getPolymarketOpenOrders(config.polymarket);
2049
+ orders.push(...polyOrders);
2050
+ }
2051
+ if ((!platform || platform === 'kalshi') && config.kalshi) {
2052
+ const kalshiOrders = await getKalshiOpenOrders(config.kalshi);
2053
+ orders.push(...kalshiOrders);
2054
+ }
2055
+ if ((!platform || platform === 'opinion') && config.opinion) {
2056
+ const opinionOrders = await getOpinionOpenOrders(config.opinion);
2057
+ orders.push(...opinionOrders);
2058
+ }
2059
+ if ((!platform || platform === 'predictfun') && config.predictfun) {
2060
+ const predictfunOrders = await getPredictFunOpenOrders(config.predictfun);
2061
+ orders.push(...predictfunOrders);
2062
+ }
2063
+ return orders;
2064
+ },
2065
+ async getOrder(platform, orderId) {
2066
+ const orders = await this.getOpenOrders(platform);
2067
+ return orders.find((o) => o.orderId === orderId) || null;
2068
+ },
2069
+ async estimateFill(request) {
2070
+ try {
2071
+ let orderbook = null;
2072
+ if (request.platform === 'polymarket' && request.tokenId) {
2073
+ orderbook = await fetchPolymarketOrderbook(request.tokenId);
2074
+ }
2075
+ else if (request.platform === 'kalshi') {
2076
+ orderbook = await fetchKalshiOrderbook(request.marketId);
2077
+ }
2078
+ else if (request.platform === 'opinion' && request.tokenId) {
2079
+ orderbook = await fetchOpinionOrderbook(request.tokenId);
2080
+ }
2081
+ else if (request.platform === 'predictfun' && config.predictfun) {
2082
+ orderbook = await fetchPredictFunOrderbook(config.predictfun, request.marketId);
2083
+ }
2084
+ if (!orderbook) {
2085
+ return { avgPrice: request.price, filledSize: request.size };
2086
+ }
2087
+ const orders = request.side === 'buy' ? orderbook.asks : orderbook.bids;
2088
+ const { avgFillPrice, totalFilled } = calculateFillFromOrderbook(orders, request.size, request.side);
2089
+ return {
2090
+ avgPrice: totalFilled > 0 ? avgFillPrice : request.price,
2091
+ filledSize: totalFilled,
2092
+ };
2093
+ }
2094
+ catch {
2095
+ return { avgPrice: request.price, filledSize: request.size };
2096
+ }
2097
+ },
2098
+ async protectedBuy(request, maxSlippageOverride) {
2099
+ const slippageConfig = {
2100
+ maxSlippage: 0.02, // 2% default
2101
+ checkOrderbook: true,
2102
+ autoCancel: true,
2103
+ useLimitOrders: true,
2104
+ limitPriceBuffer: 0.01,
2105
+ ...config.slippageProtection,
2106
+ };
2107
+ const maxSlippage = maxSlippageOverride ?? request.maxSlippage ?? slippageConfig.maxSlippage;
2108
+ // Estimate slippage before executing
2109
+ const slippageEstimate = await this.estimateSlippage({ ...request, side: 'buy' });
2110
+ if (slippageEstimate.slippage > maxSlippage) {
2111
+ logger_1.logger.warn({ slippage: slippageEstimate.slippage, maxSlippage, request }, 'Slippage protection triggered - order rejected');
2112
+ return {
2113
+ success: false,
2114
+ error: `Slippage ${(slippageEstimate.slippage * 100).toFixed(2)}% exceeds max ${(maxSlippage * 100).toFixed(2)}%`,
2115
+ };
2116
+ }
2117
+ // Use limit order with buffer if enabled
2118
+ if (slippageConfig.useLimitOrders) {
2119
+ const limitPrice = Math.min(0.99, slippageEstimate.expectedPrice * (1 + slippageConfig.limitPriceBuffer));
2120
+ return executeOrder({
2121
+ ...request,
2122
+ side: 'buy',
2123
+ price: limitPrice,
2124
+ orderType: 'GTC',
2125
+ });
2126
+ }
2127
+ return executeOrder({ ...request, side: 'buy', orderType: request.orderType || 'GTC' });
2128
+ },
2129
+ async protectedSell(request, maxSlippageOverride) {
2130
+ const slippageConfig = {
2131
+ maxSlippage: 0.02,
2132
+ checkOrderbook: true,
2133
+ autoCancel: true,
2134
+ useLimitOrders: true,
2135
+ limitPriceBuffer: 0.01,
2136
+ ...config.slippageProtection,
2137
+ };
2138
+ const maxSlippage = maxSlippageOverride ?? request.maxSlippage ?? slippageConfig.maxSlippage;
2139
+ // Estimate slippage before executing
2140
+ const slippageEstimate = await this.estimateSlippage({ ...request, side: 'sell' });
2141
+ if (slippageEstimate.slippage > maxSlippage) {
2142
+ logger_1.logger.warn({ slippage: slippageEstimate.slippage, maxSlippage, request }, 'Slippage protection triggered - order rejected');
2143
+ return {
2144
+ success: false,
2145
+ error: `Slippage ${(slippageEstimate.slippage * 100).toFixed(2)}% exceeds max ${(maxSlippage * 100).toFixed(2)}%`,
2146
+ };
2147
+ }
2148
+ // Use limit order with buffer if enabled
2149
+ if (slippageConfig.useLimitOrders) {
2150
+ const limitPrice = Math.max(0.01, slippageEstimate.expectedPrice * (1 - slippageConfig.limitPriceBuffer));
2151
+ return executeOrder({
2152
+ ...request,
2153
+ side: 'sell',
2154
+ price: limitPrice,
2155
+ orderType: 'GTC',
2156
+ });
2157
+ }
2158
+ return executeOrder({ ...request, side: 'sell', orderType: request.orderType || 'GTC' });
2159
+ },
2160
+ async estimateSlippage(request) {
2161
+ try {
2162
+ // Fetch orderbook based on platform
2163
+ let orderbook = null;
2164
+ if (request.platform === 'polymarket' && request.tokenId) {
2165
+ orderbook = await fetchPolymarketOrderbook(request.tokenId);
2166
+ }
2167
+ else if (request.platform === 'kalshi') {
2168
+ orderbook = await fetchKalshiOrderbook(request.marketId);
2169
+ }
2170
+ else if (request.platform === 'opinion' && request.tokenId) {
2171
+ orderbook = await fetchOpinionOrderbook(request.tokenId);
2172
+ }
2173
+ else if (request.platform === 'predictfun' && config.predictfun) {
2174
+ orderbook = await fetchPredictFunOrderbook(config.predictfun, request.marketId);
2175
+ }
2176
+ if (!orderbook || (orderbook.bids.length === 0 && orderbook.asks.length === 0)) {
2177
+ // Fallback to heuristic estimate if no orderbook
2178
+ const baseSlippage = 0.005;
2179
+ const sizeImpact = Math.min(0.05, request.size * 0.0001);
2180
+ const estimatedSlippage = baseSlippage + sizeImpact;
2181
+ return {
2182
+ slippage: estimatedSlippage,
2183
+ expectedPrice: request.side === 'buy'
2184
+ ? request.price * (1 + estimatedSlippage)
2185
+ : request.price * (1 - estimatedSlippage),
2186
+ };
2187
+ }
2188
+ // Calculate average fill price by walking through orderbook
2189
+ const { avgFillPrice, totalFilled } = calculateFillFromOrderbook(request.side === 'buy' ? orderbook.asks : orderbook.bids, request.size, request.side);
2190
+ if (totalFilled < request.size * 0.5) {
2191
+ // Less than 50% can be filled - high slippage market
2192
+ logger_1.logger.warn({ request, totalFilled, requested: request.size }, 'Orderbook too thin - less than 50% fillable');
2193
+ }
2194
+ // Calculate slippage relative to mid price
2195
+ const midPrice = orderbook.midPrice || request.price;
2196
+ const slippage = request.side === 'buy'
2197
+ ? (avgFillPrice - midPrice) / midPrice
2198
+ : (midPrice - avgFillPrice) / midPrice;
2199
+ return {
2200
+ slippage: Math.max(0, slippage),
2201
+ expectedPrice: avgFillPrice,
2202
+ };
2203
+ }
2204
+ catch (error) {
2205
+ logger_1.logger.warn({ error, request }, 'Failed to estimate slippage from orderbook');
2206
+ // Fallback to heuristic
2207
+ const baseSlippage = 0.005;
2208
+ const sizeImpact = Math.min(0.05, request.size * 0.0001);
2209
+ return {
2210
+ slippage: baseSlippage + sizeImpact,
2211
+ expectedPrice: request.side === 'buy'
2212
+ ? request.price * (1 + baseSlippage + sizeImpact)
2213
+ : request.price * (1 - baseSlippage - sizeImpact),
2214
+ };
2215
+ }
2216
+ },
2217
+ async placeOrdersBatch(orders) {
2218
+ const polyOrders = orders.filter(o => o.platform === 'polymarket');
2219
+ const kalshiOrders = orders.filter(o => o.platform === 'kalshi');
2220
+ const opinionOrders = orders.filter(o => o.platform === 'opinion');
2221
+ const predictfunOrders = orders.filter(o => o.platform === 'predictfun');
2222
+ const otherOrders = orders.filter(o => o.platform !== 'opinion' && o.platform !== 'polymarket' && o.platform !== 'kalshi' && o.platform !== 'predictfun');
2223
+ const results = [];
2224
+ // Execute Polymarket batch if we have Polymarket orders and config
2225
+ if (polyOrders.length > 0 && config.polymarket) {
2226
+ try {
2227
+ const batchInput = polyOrders.map(o => ({
2228
+ tokenId: o.tokenId,
2229
+ side: o.side,
2230
+ price: o.price,
2231
+ size: o.size,
2232
+ negRisk: o.negRisk,
2233
+ postOnly: o.postOnly,
2234
+ }));
2235
+ const batchResults = await placePolymarketOrdersBatch(config.polymarket, batchInput);
2236
+ results.push(...batchResults);
2237
+ }
2238
+ catch (err) {
2239
+ results.push(...polyOrders.map(() => ({
2240
+ success: false,
2241
+ error: err instanceof Error ? err.message : 'Batch order failed',
2242
+ })));
2243
+ }
2244
+ }
2245
+ else if (polyOrders.length > 0) {
2246
+ results.push(...polyOrders.map(() => ({
2247
+ success: false,
2248
+ error: 'Polymarket trading not configured',
2249
+ })));
2250
+ }
2251
+ // Execute Kalshi batch if we have Kalshi orders and config
2252
+ if (kalshiOrders.length > 0 && config.kalshi) {
2253
+ try {
2254
+ const batchInput = kalshiOrders.map(o => ({
2255
+ ticker: o.marketId,
2256
+ side: o.outcome?.toLowerCase() || 'yes',
2257
+ action: o.side,
2258
+ price: o.price,
2259
+ count: o.size,
2260
+ }));
2261
+ const batchResults = await placeKalshiOrdersBatch(config.kalshi, batchInput);
2262
+ results.push(...batchResults);
2263
+ }
2264
+ catch (err) {
2265
+ results.push(...kalshiOrders.map(() => ({
2266
+ success: false,
2267
+ error: err instanceof Error ? err.message : 'Batch order failed',
2268
+ })));
2269
+ }
2270
+ }
2271
+ else if (kalshiOrders.length > 0) {
2272
+ results.push(...kalshiOrders.map(() => ({
2273
+ success: false,
2274
+ error: 'Kalshi trading not configured',
2275
+ })));
2276
+ }
2277
+ // Execute Opinion batch if we have Opinion orders and config
2278
+ if (opinionOrders.length > 0 && config.opinion) {
2279
+ try {
2280
+ const batchInput = opinionOrders.map(o => ({
2281
+ marketId: parseInt(o.marketId, 10),
2282
+ tokenId: o.tokenId,
2283
+ side: o.side.toUpperCase(),
2284
+ price: o.price,
2285
+ amount: o.size,
2286
+ }));
2287
+ const batchResults = await placeOpinionOrdersBatch(config.opinion, batchInput);
2288
+ results.push(...batchResults.map(r => ({
2289
+ success: r.success,
2290
+ orderId: r.orderId,
2291
+ error: r.error,
2292
+ })));
2293
+ }
2294
+ catch (err) {
2295
+ // All Opinion orders failed
2296
+ results.push(...opinionOrders.map(() => ({
2297
+ success: false,
2298
+ error: err instanceof Error ? err.message : 'Batch order failed',
2299
+ })));
2300
+ }
2301
+ }
2302
+ else if (opinionOrders.length > 0) {
2303
+ // No Opinion config
2304
+ results.push(...opinionOrders.map(() => ({
2305
+ success: false,
2306
+ error: 'Opinion trading not configured',
2307
+ })));
2308
+ }
2309
+ // Execute PredictFun orders (no native batch API — sequential via SDK with EIP-712 signing)
2310
+ if (predictfunOrders.length > 0 && config.predictfun) {
2311
+ for (const order of predictfunOrders) {
2312
+ try {
2313
+ const result = await placePredictFunOrder(config.predictfun, order.tokenId, order.side, order.price, order.size, order.marketId);
2314
+ results.push(result);
2315
+ }
2316
+ catch (err) {
2317
+ results.push({
2318
+ success: false,
2319
+ error: err instanceof Error ? err.message : 'Order failed',
2320
+ });
2321
+ }
2322
+ }
2323
+ }
2324
+ else if (predictfunOrders.length > 0) {
2325
+ results.push(...predictfunOrders.map(() => ({
2326
+ success: false,
2327
+ error: 'PredictFun trading not configured',
2328
+ })));
2329
+ }
2330
+ // Execute other orders individually (fallback)
2331
+ for (const order of otherOrders) {
2332
+ try {
2333
+ const result = order.side === 'buy'
2334
+ ? await this.buyLimit(order)
2335
+ : await this.sellLimit(order);
2336
+ results.push(result);
2337
+ }
2338
+ catch (err) {
2339
+ results.push({
2340
+ success: false,
2341
+ error: err instanceof Error ? err.message : 'Order failed',
2342
+ });
2343
+ }
2344
+ }
2345
+ return results;
2346
+ },
2347
+ async cancelOrdersBatch(platform, orderIds) {
2348
+ if (platform === 'polymarket' && config.polymarket) {
2349
+ try {
2350
+ return await cancelPolymarketOrdersBatch(config.polymarket, orderIds);
2351
+ }
2352
+ catch (err) {
2353
+ return orderIds.map(orderId => ({ orderId, success: false }));
2354
+ }
2355
+ }
2356
+ if (platform === 'kalshi' && config.kalshi) {
2357
+ try {
2358
+ return await cancelKalshiOrdersBatch(config.kalshi, orderIds);
2359
+ }
2360
+ catch (err) {
2361
+ return orderIds.map(orderId => ({ orderId, success: false }));
2362
+ }
2363
+ }
2364
+ if (platform === 'opinion' && config.opinion) {
2365
+ try {
2366
+ return await cancelOpinionOrdersBatch(config.opinion, orderIds);
2367
+ }
2368
+ catch (err) {
2369
+ return orderIds.map(orderId => ({
2370
+ orderId,
2371
+ success: false,
2372
+ }));
2373
+ }
2374
+ }
2375
+ if (platform === 'predictfun' && config.predictfun) {
2376
+ // PredictFun cancel requires isNegRisk/isYieldBearing — cancel individually via SDK
2377
+ const results = [];
2378
+ for (const orderId of orderIds) {
2379
+ const success = await cancelPredictFunOrder(config.predictfun, orderId);
2380
+ results.push({ orderId, success });
2381
+ }
2382
+ return results;
2383
+ }
2384
+ // Fallback: cancel individually
2385
+ const results = [];
2386
+ for (const orderId of orderIds) {
2387
+ try {
2388
+ const success = await this.cancelOrder(platform, orderId);
2389
+ results.push({ orderId, success });
2390
+ }
2391
+ catch {
2392
+ results.push({ orderId, success: false });
2393
+ }
2394
+ }
2395
+ return results;
2396
+ },
2397
+ // =========================================================================
2398
+ // REAL-TIME FILL TRACKING (Polymarket WebSocket)
2399
+ // =========================================================================
2400
+ async connectFillsWebSocket() {
2401
+ return connectFillsWebSocket();
2402
+ },
2403
+ disconnectFillsWebSocket() {
2404
+ disconnectFillsWebSocket();
2405
+ },
2406
+ isFillsWebSocketConnected() {
2407
+ return userWs?.isConnected() ?? false;
2408
+ },
2409
+ onFill(callback) {
2410
+ fillCallbacks.add(callback);
2411
+ return () => {
2412
+ fillCallbacks.delete(callback);
2413
+ };
2414
+ },
2415
+ onOrder(callback) {
2416
+ orderCallbacks.add(callback);
2417
+ return () => {
2418
+ orderCallbacks.delete(callback);
2419
+ };
2420
+ },
2421
+ getTrackedFills() {
2422
+ return Array.from(trackedFills.values());
2423
+ },
2424
+ getTrackedFill(orderId) {
2425
+ return trackedFills.get(orderId);
2426
+ },
2427
+ clearOldFills(maxAgeMs = 3600000) {
2428
+ const now = Date.now();
2429
+ let cleared = 0;
2430
+ for (const [orderId, fill] of trackedFills) {
2431
+ if (now - fill.receivedAt > maxAgeMs) {
2432
+ trackedFills.delete(orderId);
2433
+ cleared++;
2434
+ }
2435
+ }
2436
+ // Also clear old orders
2437
+ for (const [orderId, order] of trackedOrders) {
2438
+ if (now - order.receivedAt > maxAgeMs) {
2439
+ trackedOrders.delete(orderId);
2440
+ }
2441
+ }
2442
+ return cleared;
2443
+ },
2444
+ waitForFill(orderId, timeoutMs) {
2445
+ return waitForFill(orderId, timeoutMs);
2446
+ },
2447
+ // =========================================================================
2448
+ // POLYMARKET ORDER HEARTBEAT
2449
+ // =========================================================================
2450
+ async startHeartbeat() {
2451
+ return startHeartbeat();
2452
+ },
2453
+ async sendHeartbeat(id) {
2454
+ return sendHeartbeat(id);
2455
+ },
2456
+ stopHeartbeat() {
2457
+ stopHeartbeat();
2458
+ },
2459
+ isHeartbeatActive() {
2460
+ return isHeartbeatActive();
2461
+ },
2462
+ // =========================================================================
2463
+ // POLYMARKET SETTLEMENT
2464
+ // =========================================================================
2465
+ async getPendingSettlements() {
2466
+ if (!config.polymarket) {
2467
+ return [];
2468
+ }
2469
+ return getPolymarketPendingSettlements(config.polymarket, config.polymarket.funderAddress);
2470
+ },
2471
+ // =========================================================================
2472
+ // POLYMARKET COLLATERAL APPROVAL
2473
+ // =========================================================================
2474
+ async approveUSDC(amount) {
2475
+ if (!config.polymarket?.privateKey) {
2476
+ return {
2477
+ success: false,
2478
+ error: 'Polymarket private key not configured',
2479
+ };
2480
+ }
2481
+ // Approve for both CTF exchanges
2482
+ const spender = POLY_CTF_EXCHANGE;
2483
+ return approvePolymarketUSDC(config.polymarket.privateKey, spender, amount);
2484
+ },
2485
+ async getUSDCAllowance() {
2486
+ if (!config.polymarket) {
2487
+ return 0;
2488
+ }
2489
+ const owner = config.polymarket.funderAddress || config.polymarket.address;
2490
+ return getPolymarketUSDCAllowance(owner, POLY_CTF_EXCHANGE);
2491
+ },
2492
+ // =========================================================================
2493
+ // BATCH ORDERBOOK FETCHING
2494
+ // =========================================================================
2495
+ async getOrderbooksBatch(tokenIds) {
2496
+ return getPolymarketOrderbooksBatch(tokenIds);
2497
+ },
2498
+ // =========================================================================
2499
+ // CIRCUIT BREAKER INTEGRATION
2500
+ // =========================================================================
2501
+ setCircuitBreaker(breaker) {
2502
+ circuitBreaker = breaker;
2503
+ if (breaker) {
2504
+ logger_1.logger.info('Circuit breaker enabled for order validation');
2505
+ }
2506
+ else {
2507
+ logger_1.logger.info('Circuit breaker disabled');
2508
+ }
2509
+ },
2510
+ getCircuitBreakerState() {
2511
+ return circuitBreaker?.getState() ?? null;
2512
+ },
2513
+ };
2514
+ return service;
2515
+ }
2516
+ // Exchange addresses
2517
+ exports.POLYMARKET_EXCHANGES = {
2518
+ CTF: POLY_CTF_EXCHANGE,
2519
+ NEG_RISK_CTF: POLY_NEG_RISK_CTF_EXCHANGE,
2520
+ };
2521
+ // Re-export sub-modules
2522
+ __exportStar(require("./smart-router"), exports);
2523
+ __exportStar(require("./mev-protection"), exports);
2524
+ __exportStar(require("./circuit-breaker"), exports);
2525
+ __exportStar(require("./position-manager"), exports);
2526
+ __exportStar(require("./futures"), exports);
2527
+ __exportStar(require("./auto-redeem"), exports);
2528
+ __exportStar(require("./twap"), exports);
2529
+ __exportStar(require("./bracket-orders"), exports);
2530
+ __exportStar(require("./trigger-orders"), exports);
2531
+ __exportStar(require("./order-persistence"), exports);
2532
+ //# sourceMappingURL=index.js.map