httpcat-cli 0.3.0 → 0.3.1-rc.2

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 (760) hide show
  1. package/.github/workflows/ci.yml +3 -0
  2. package/.github/workflows/rc-publish.yml +6 -0
  3. package/.github/workflows/release.yml +107 -0
  4. package/.github/workflows/sync-version.yml +40 -2
  5. package/README.md +128 -1685
  6. package/additions.txt +3 -0
  7. package/brand-assets/png/expressions/compact-160-dark.png +0 -0
  8. package/brand-assets/png/expressions/compact-160-light.png +0 -0
  9. package/brand-assets/png/expressions/compact-320-dark.png +0 -0
  10. package/brand-assets/png/expressions/compact-320-light.png +0 -0
  11. package/brand-assets/png/expressions/default-160-dark.png +0 -0
  12. package/brand-assets/png/expressions/default-160-light.png +0 -0
  13. package/brand-assets/png/expressions/default-320-dark.png +0 -0
  14. package/brand-assets/png/expressions/default-320-light.png +0 -0
  15. package/brand-assets/png/expressions/minimal-160-dark.png +0 -0
  16. package/brand-assets/png/expressions/minimal-160-light.png +0 -0
  17. package/brand-assets/png/expressions/minimal-320-dark.png +0 -0
  18. package/brand-assets/png/expressions/minimal-320-light.png +0 -0
  19. package/brand-assets/png/expressions/pointy-160-dark.png +0 -0
  20. package/brand-assets/png/expressions/pointy-160-light.png +0 -0
  21. package/brand-assets/png/expressions/pointy-320-dark.png +0 -0
  22. package/brand-assets/png/expressions/pointy-320-light.png +0 -0
  23. package/brand-assets/png/expressions/simplified-160-dark.png +0 -0
  24. package/brand-assets/png/expressions/simplified-160-light.png +0 -0
  25. package/brand-assets/png/expressions/simplified-320-dark.png +0 -0
  26. package/brand-assets/png/expressions/simplified-320-light.png +0 -0
  27. package/brand-assets/png/expressions/winking-160-dark.png +0 -0
  28. package/brand-assets/png/expressions/winking-160-light.png +0 -0
  29. package/brand-assets/png/expressions/winking-320-dark.png +0 -0
  30. package/brand-assets/png/expressions/winking-320-light.png +0 -0
  31. package/brand-assets/png/favicon/apple-touch-180-dark.png +0 -0
  32. package/brand-assets/png/favicon/apple-touch-180-light.png +0 -0
  33. package/brand-assets/png/favicon/favicon-16-dark.png +0 -0
  34. package/brand-assets/png/favicon/favicon-16-light.png +0 -0
  35. package/brand-assets/png/favicon/favicon-180-dark.png +0 -0
  36. package/brand-assets/png/favicon/favicon-180-light.png +0 -0
  37. package/brand-assets/png/favicon/favicon-32-dark.png +0 -0
  38. package/brand-assets/png/favicon/favicon-32-light.png +0 -0
  39. package/brand-assets/png/favicon/favicon-48-dark.png +0 -0
  40. package/brand-assets/png/favicon/favicon-48-light.png +0 -0
  41. package/brand-assets/png/favicon/v6-minimal-32-dark.png +0 -0
  42. package/brand-assets/png/favicon/v6-minimal-32-light.png +0 -0
  43. package/brand-assets/png/mark/v11-pointy-400-dark.png +0 -0
  44. package/brand-assets/png/mark/v11-pointy-400-light.png +0 -0
  45. package/brand-assets/png/mark/v12-ears-only-160-dark.png +0 -0
  46. package/brand-assets/png/mark/v12-ears-only-160-light.png +0 -0
  47. package/brand-assets/png/mark/v12-ears-only-320-dark.png +0 -0
  48. package/brand-assets/png/mark/v12-ears-only-320-light.png +0 -0
  49. package/brand-assets/png/mark/v12-ears-only-400-dark.png +0 -0
  50. package/brand-assets/png/mark/v12-ears-only-400-light.png +0 -0
  51. package/brand-assets/png/mark/v12-ears-only-80-dark.png +0 -0
  52. package/brand-assets/png/mark/v12-ears-only-80-light.png +0 -0
  53. package/brand-assets/png/mark/v5-ears-400-dark.png +0 -0
  54. package/brand-assets/png/mark/v5-ears-400-light.png +0 -0
  55. package/brand-assets/png/mark/v8-minimal-400-dark.png +0 -0
  56. package/brand-assets/png/mark/v8-minimal-400-light.png +0 -0
  57. package/brand-assets/png/og-1200x630-v2-dark.png +0 -0
  58. package/brand-assets/png/og-feral-a.png +0 -0
  59. package/brand-assets/png/og-feral-b.png +0 -0
  60. package/brand-assets/png/og-feral-c.png +0 -0
  61. package/brand-assets/png/og-feral-d.png +0 -0
  62. package/brand-assets/png/og-v2-variation-a.png +0 -0
  63. package/brand-assets/png/og-v2-variation-b.png +0 -0
  64. package/brand-assets/png/og-v2-variation-c.png +0 -0
  65. package/brand-assets/png/social/banner-cat-ticker-1500x500-dark.png +0 -0
  66. package/brand-assets/png/social/banner-cat-ticker-1500x500-light.png +0 -0
  67. package/brand-assets/png/social/og-v11-pointy-1200x630-dark.png +0 -0
  68. package/brand-assets/png/social/og-v11-pointy-1200x630-light.png +0 -0
  69. package/brand-assets/png/social/og-v12-ears-1200x630-dark.png +0 -0
  70. package/brand-assets/png/social/og-v12-ears-1200x630-light.png +0 -0
  71. package/brand-assets/png/social/og-v12-ears-1280x320-dark.png +0 -0
  72. package/brand-assets/png/social/og-v12-ticker-1200x630-dark.png +0 -0
  73. package/brand-assets/png/social/og-v12-ticker-1200x630-light.png +0 -0
  74. package/brand-assets/png/social/pfp-ears-400-dark.png +0 -0
  75. package/brand-assets/png/social/pfp-ears-400-light.png +0 -0
  76. package/brand-assets/png/social/twitter-banner-v11-1500x500-dark.png +0 -0
  77. package/brand-assets/png/social/twitter-pfp-400-dark.png +0 -0
  78. package/brand-assets/png/social/twitter-pfp-400-light.png +0 -0
  79. package/brand-assets/png/social/twitter-pfp-v11-400-dark.png +0 -0
  80. package/brand-assets/png/v12-ears-only-1000-dark.png +0 -0
  81. package/brand-assets/svg/Archive/402cat-banner-1200x400-dark.svg +13 -0
  82. package/brand-assets/svg/Archive/402cat-banner-1200x400-light.svg +13 -0
  83. package/brand-assets/svg/Archive/402cat-default-160-dark.svg +12 -0
  84. package/brand-assets/svg/Archive/402cat-default-160-light.svg +12 -0
  85. package/brand-assets/svg/Archive/402cat-excited-160-dark.svg +12 -0
  86. package/brand-assets/svg/Archive/402cat-excited-160-light.svg +12 -0
  87. package/brand-assets/svg/Archive/402cat-facilitator-160-dark.svg +12 -0
  88. package/brand-assets/svg/Archive/402cat-facilitator-160-light.svg +12 -0
  89. package/brand-assets/svg/Archive/402cat-facilitator-320-dark.svg +12 -0
  90. package/brand-assets/svg/Archive/402cat-facilitator-320-light.svg +12 -0
  91. package/brand-assets/svg/Archive/402cat-facilitator-80-dark.svg +12 -0
  92. package/brand-assets/svg/Archive/402cat-facilitator-80-light.svg +12 -0
  93. package/brand-assets/svg/Archive/402cat-favicon-16-dark.svg +10 -0
  94. package/brand-assets/svg/Archive/402cat-favicon-16-light.svg +10 -0
  95. package/brand-assets/svg/Archive/402cat-favicon-32-dark.svg +10 -0
  96. package/brand-assets/svg/Archive/402cat-favicon-32-light.svg +10 -0
  97. package/brand-assets/svg/Archive/402cat-og-1200x630-dark.svg +14 -0
  98. package/brand-assets/svg/Archive/402cat-og-1200x630-light.svg +14 -0
  99. package/brand-assets/svg/Archive/402cat-server-40-dark.svg +11 -0
  100. package/brand-assets/svg/Archive/402cat-server-40-light.svg +11 -0
  101. package/brand-assets/svg/Archive/402cat-server-80-dark.svg +11 -0
  102. package/brand-assets/svg/Archive/402cat-server-80-light.svg +11 -0
  103. package/brand-assets/svg/Archive/402cat-sleeping-160-dark.svg +13 -0
  104. package/brand-assets/svg/Archive/402cat-sleeping-160-light.svg +13 -0
  105. package/brand-assets/svg/Archive/402cat-twitter-pfp-dark.svg +12 -0
  106. package/brand-assets/svg/Archive/402cat-twitter-pfp-light.svg +12 -0
  107. package/brand-assets/svg/Archive/mark/neko1-kawaii-80-dark.svg +8 -0
  108. package/brand-assets/svg/Archive/mark/neko1-kawaii-80-light.svg +8 -0
  109. package/brand-assets/svg/Archive/mark/neko1-right-80-dark.svg +8 -0
  110. package/brand-assets/svg/Archive/mark/neko1-right-80-light.svg +8 -0
  111. package/brand-assets/svg/Archive/mark/neko10-pointy-80-dark.svg +8 -0
  112. package/brand-assets/svg/Archive/mark/neko10-pointy-80-light.svg +8 -0
  113. package/brand-assets/svg/Archive/mark/neko2-clean-80-dark.svg +8 -0
  114. package/brand-assets/svg/Archive/mark/neko2-clean-80-light.svg +8 -0
  115. package/brand-assets/svg/Archive/mark/neko2-left-80-dark.svg +8 -0
  116. package/brand-assets/svg/Archive/mark/neko2-left-80-light.svg +8 -0
  117. package/brand-assets/svg/Archive/mark/neko3-both-80-dark.svg +8 -0
  118. package/brand-assets/svg/Archive/mark/neko3-both-80-light.svg +8 -0
  119. package/brand-assets/svg/Archive/mark/neko3-money-80-dark.svg +8 -0
  120. package/brand-assets/svg/Archive/mark/neko3-money-80-light.svg +8 -0
  121. package/brand-assets/svg/Archive/mark/neko4-beckon-80-dark.svg +8 -0
  122. package/brand-assets/svg/Archive/mark/neko4-beckon-80-light.svg +8 -0
  123. package/brand-assets/svg/Archive/mark/neko4-coin-80-dark.svg +8 -0
  124. package/brand-assets/svg/Archive/mark/neko4-coin-80-light.svg +8 -0
  125. package/brand-assets/svg/Archive/mark/neko5-compact-80-dark.svg +8 -0
  126. package/brand-assets/svg/Archive/mark/neko5-compact-80-light.svg +8 -0
  127. package/brand-assets/svg/Archive/mark/neko5-mini-80-dark.svg +8 -0
  128. package/brand-assets/svg/Archive/mark/neko5-mini-80-light.svg +8 -0
  129. package/brand-assets/svg/Archive/mark/neko6-coin-80-dark.svg +8 -0
  130. package/brand-assets/svg/Archive/mark/neko6-coin-80-light.svg +8 -0
  131. package/brand-assets/svg/Archive/mark/neko6-money-80-dark.svg +8 -0
  132. package/brand-assets/svg/Archive/mark/neko6-money-80-light.svg +8 -0
  133. package/brand-assets/svg/Archive/mark/neko7-lucky-80-dark.svg +8 -0
  134. package/brand-assets/svg/Archive/mark/neko7-lucky-80-light.svg +8 -0
  135. package/brand-assets/svg/Archive/mark/neko7-simple-80-dark.svg +8 -0
  136. package/brand-assets/svg/Archive/mark/neko7-simple-80-light.svg +8 -0
  137. package/brand-assets/svg/Archive/mark/neko8-classic-80-dark.svg +8 -0
  138. package/brand-assets/svg/Archive/mark/neko8-classic-80-light.svg +8 -0
  139. package/brand-assets/svg/Archive/mark/neko8-mini-80-dark.svg +8 -0
  140. package/brand-assets/svg/Archive/mark/neko8-mini-80-light.svg +8 -0
  141. package/brand-assets/svg/Archive/mark/neko9-box-80-dark.svg +8 -0
  142. package/brand-assets/svg/Archive/mark/neko9-box-80-light.svg +8 -0
  143. package/brand-assets/svg/Archive/mark/v1-simplified-80-dark.svg +8 -0
  144. package/brand-assets/svg/Archive/mark/v1-simplified-80-light.svg +8 -0
  145. package/brand-assets/svg/Archive/mark/v10-bracket-80-dark.svg +8 -0
  146. package/brand-assets/svg/Archive/mark/v10-bracket-80-light.svg +8 -0
  147. package/brand-assets/svg/Archive/mark/v11b-pointy-wink-80-dark.svg +8 -0
  148. package/brand-assets/svg/Archive/mark/v11b-pointy-wink-80-light.svg +8 -0
  149. package/brand-assets/svg/Archive/mark/v12-face-80-dark.svg +7 -0
  150. package/brand-assets/svg/Archive/mark/v12-face-80-light.svg +7 -0
  151. package/brand-assets/svg/Archive/mark/v2-full-80-dark.svg +9 -0
  152. package/brand-assets/svg/Archive/mark/v2-full-80-light.svg +9 -0
  153. package/brand-assets/svg/Archive/mark/v3-compact-80-dark.svg +8 -0
  154. package/brand-assets/svg/Archive/mark/v3-compact-80-light.svg +8 -0
  155. package/brand-assets/svg/Archive/mark/v4-default-80-dark.svg +9 -0
  156. package/brand-assets/svg/Archive/mark/v4-default-80-light.svg +9 -0
  157. package/brand-assets/svg/Archive/mark/v6-ears-bold-80-dark.svg +7 -0
  158. package/brand-assets/svg/Archive/mark/v6-ears-bold-80-light.svg +7 -0
  159. package/brand-assets/svg/Archive/mark/v7-ears-wide-80-dark.svg +7 -0
  160. package/brand-assets/svg/Archive/mark/v7-ears-wide-80-light.svg +7 -0
  161. package/brand-assets/svg/Archive/mark/v9-box-80-dark.svg +8 -0
  162. package/brand-assets/svg/Archive/mark/v9-box-80-light.svg +8 -0
  163. package/brand-assets/svg/Archive.zip +0 -0
  164. package/brand-assets/svg/expressions/box-cat-160-dark.svg +8 -0
  165. package/brand-assets/svg/expressions/box-cat-160-light.svg +8 -0
  166. package/brand-assets/svg/expressions/bracket-160-dark.svg +8 -0
  167. package/brand-assets/svg/expressions/bracket-160-light.svg +8 -0
  168. package/brand-assets/svg/expressions/compact-160-dark.svg +8 -0
  169. package/brand-assets/svg/expressions/compact-160-light.svg +8 -0
  170. package/brand-assets/svg/expressions/default-160-dark.svg +9 -0
  171. package/brand-assets/svg/expressions/default-160-light.svg +9 -0
  172. package/brand-assets/svg/expressions/ears-bold-160-dark.svg +7 -0
  173. package/brand-assets/svg/expressions/ears-bold-160-light.svg +7 -0
  174. package/brand-assets/svg/expressions/ears-only-160-dark.svg +7 -0
  175. package/brand-assets/svg/expressions/ears-only-160-light.svg +7 -0
  176. package/brand-assets/svg/expressions/ears-wide-160-dark.svg +7 -0
  177. package/brand-assets/svg/expressions/ears-wide-160-light.svg +7 -0
  178. package/brand-assets/svg/expressions/excited-160-dark.svg +9 -0
  179. package/brand-assets/svg/expressions/excited-160-light.svg +9 -0
  180. package/brand-assets/svg/expressions/face-only-160-dark.svg +7 -0
  181. package/brand-assets/svg/expressions/face-only-160-light.svg +7 -0
  182. package/brand-assets/svg/expressions/minimal-160-dark.svg +8 -0
  183. package/brand-assets/svg/expressions/minimal-160-light.svg +8 -0
  184. package/brand-assets/svg/expressions/pointy-160-dark.svg +8 -0
  185. package/brand-assets/svg/expressions/pointy-160-light.svg +8 -0
  186. package/brand-assets/svg/expressions/simplified-160-dark.svg +8 -0
  187. package/brand-assets/svg/expressions/simplified-160-light.svg +8 -0
  188. package/brand-assets/svg/expressions/sleeping-160-dark.svg +10 -0
  189. package/brand-assets/svg/expressions/sleeping-160-light.svg +10 -0
  190. package/brand-assets/svg/expressions/winking-160-dark.svg +9 -0
  191. package/brand-assets/svg/expressions/winking-160-light.svg +9 -0
  192. package/brand-assets/svg/expressions-paths/compact-160-dark.svg +42 -0
  193. package/brand-assets/svg/expressions-paths/compact-160-light.svg +42 -0
  194. package/brand-assets/svg/expressions-paths/default-160-dark.svg +47 -0
  195. package/brand-assets/svg/expressions-paths/default-160-light.svg +47 -0
  196. package/brand-assets/svg/expressions-paths/minimal-160-dark.svg +42 -0
  197. package/brand-assets/svg/expressions-paths/minimal-160-light.svg +42 -0
  198. package/brand-assets/svg/expressions-paths/pointy-160-dark.svg +42 -0
  199. package/brand-assets/svg/expressions-paths/pointy-160-light.svg +42 -0
  200. package/brand-assets/svg/expressions-paths/simplified-160-dark.svg +42 -0
  201. package/brand-assets/svg/expressions-paths/simplified-160-light.svg +42 -0
  202. package/brand-assets/svg/expressions-paths/winking-160-dark.svg +47 -0
  203. package/brand-assets/svg/expressions-paths/winking-160-light.svg +47 -0
  204. package/brand-assets/svg/favicon/apple-touch-180-dark.svg +8 -0
  205. package/brand-assets/svg/favicon/apple-touch-180-light.svg +8 -0
  206. package/brand-assets/svg/favicon/favicon-16-dark.svg +8 -0
  207. package/brand-assets/svg/favicon/favicon-16-light.svg +8 -0
  208. package/brand-assets/svg/favicon/favicon-32-dark.svg +11 -0
  209. package/brand-assets/svg/favicon/favicon-32-light.svg +11 -0
  210. package/brand-assets/svg/favicon/favicon-48-dark.svg +8 -0
  211. package/brand-assets/svg/favicon/favicon-48-light.svg +8 -0
  212. package/brand-assets/svg/favicon/v11-pointy-path-16-dark.svg +18 -0
  213. package/brand-assets/svg/favicon/v11-pointy-path-32-dark.svg +19 -0
  214. package/brand-assets/svg/favicon/v4-ears-32-dark.svg +7 -0
  215. package/brand-assets/svg/favicon/v4-ears-32-light.svg +7 -0
  216. package/brand-assets/svg/favicon/v5-pointy-32-dark.svg +8 -0
  217. package/brand-assets/svg/favicon/v5-pointy-32-light.svg +8 -0
  218. package/brand-assets/svg/favicon/v6-minimal-32-dark.svg +8 -0
  219. package/brand-assets/svg/favicon/v6-minimal-32-light.svg +8 -0
  220. package/brand-assets/svg/favicon/v7-ears-only-32-dark.svg +5 -0
  221. package/brand-assets/svg/favicon/v7-ears-only-32-light.svg +5 -0
  222. package/brand-assets/svg/favicon-paths/v12-ears-only-16-dark.svg +4 -0
  223. package/brand-assets/svg/favicon-paths/v12-ears-only-16-light.svg +4 -0
  224. package/brand-assets/svg/favicon-paths/v12-ears-only-48-dark.svg +4 -0
  225. package/brand-assets/svg/favicon-paths/v12-ears-only-48-light.svg +4 -0
  226. package/brand-assets/svg/favicon-paths/v12-ears-only-96-dark.svg +4 -0
  227. package/brand-assets/svg/favicon-paths/v12-ears-only-96-light.svg +4 -0
  228. package/brand-assets/svg/favicon-paths/v6-minimal-32-dark.svg +42 -0
  229. package/brand-assets/svg/favicon-paths/v6-minimal-32-light.svg +42 -0
  230. package/brand-assets/svg/favicon-paths/v7-ears-only-32-dark.svg +34 -0
  231. package/brand-assets/svg/favicon-paths/v7-ears-only-32-light.svg +34 -0
  232. package/brand-assets/svg/mark/facilitator-160-dark.svg +11 -0
  233. package/brand-assets/svg/mark/facilitator-160-light.svg +11 -0
  234. package/brand-assets/svg/mark/facilitator-320-dark.svg +12 -0
  235. package/brand-assets/svg/mark/facilitator-320-light.svg +12 -0
  236. package/brand-assets/svg/mark/facilitator-40-dark.svg +11 -0
  237. package/brand-assets/svg/mark/facilitator-40-light.svg +11 -0
  238. package/brand-assets/svg/mark/facilitator-44-dark.svg +8 -0
  239. package/brand-assets/svg/mark/facilitator-44-light.svg +8 -0
  240. package/brand-assets/svg/mark/facilitator-72-dark.svg +8 -0
  241. package/brand-assets/svg/mark/facilitator-72-light.svg +8 -0
  242. package/brand-assets/svg/mark/facilitator-80-dark.svg +11 -0
  243. package/brand-assets/svg/mark/facilitator-80-light.svg +11 -0
  244. package/brand-assets/svg/mark/facilitator-ears-44-dark.svg +7 -0
  245. package/brand-assets/svg/mark/facilitator-ears-44-light.svg +7 -0
  246. package/brand-assets/svg/mark/facilitator-ears-72-dark.svg +7 -0
  247. package/brand-assets/svg/mark/facilitator-ears-72-light.svg +7 -0
  248. package/brand-assets/svg/mark/facilitator-pointy-44-dark.svg +8 -0
  249. package/brand-assets/svg/mark/facilitator-pointy-44-light.svg +8 -0
  250. package/brand-assets/svg/mark/facilitator-pointy-72-dark.svg +8 -0
  251. package/brand-assets/svg/mark/facilitator-pointy-72-light.svg +8 -0
  252. package/brand-assets/svg/mark/v11-pointy-80-dark.svg +8 -0
  253. package/brand-assets/svg/mark/v11-pointy-80-light.svg +8 -0
  254. package/brand-assets/svg/mark/v11-pointy-path-160-dark.svg +13 -0
  255. package/brand-assets/svg/mark/v11-pointy-path-180-dark.svg +13 -0
  256. package/brand-assets/svg/mark/v11-pointy-path-320-dark.svg +13 -0
  257. package/brand-assets/svg/mark/v11-pointy-path-40-dark.svg +13 -0
  258. package/brand-assets/svg/mark/v11-pointy-path-80-dark.svg +26 -0
  259. package/brand-assets/svg/mark/v11-pointy-path-80-light.svg +26 -0
  260. package/brand-assets/svg/mark/v11-pointy-path-transparent.svg +25 -0
  261. package/brand-assets/svg/mark/v12-ears-only-1000-dark.svg +7 -0
  262. package/brand-assets/svg/mark/v12-ears-only-80-dark.svg +7 -0
  263. package/brand-assets/svg/mark/v12-ears-only-80-light.svg +7 -0
  264. package/brand-assets/svg/mark/v5-ears-80-dark.svg +7 -0
  265. package/brand-assets/svg/mark/v5-ears-80-light.svg +7 -0
  266. package/brand-assets/svg/mark/v8-minimal-80-dark.svg +8 -0
  267. package/brand-assets/svg/mark/v8-minimal-80-light.svg +8 -0
  268. package/brand-assets/svg/mark-paths/facilitator-80-dark.svg +46 -0
  269. package/brand-assets/svg/mark-paths/v12-ears-only-160-dark.svg +4 -0
  270. package/brand-assets/svg/mark-paths/v12-ears-only-160-light.svg +4 -0
  271. package/brand-assets/svg/mark-paths/v12-ears-only-180-dark.svg +4 -0
  272. package/brand-assets/svg/mark-paths/v12-ears-only-180-light.svg +4 -0
  273. package/brand-assets/svg/mark-paths/v12-ears-only-320-dark.svg +4 -0
  274. package/brand-assets/svg/mark-paths/v12-ears-only-320-light.svg +4 -0
  275. package/brand-assets/svg/mark-paths/v12-ears-only-40-dark.svg +4 -0
  276. package/brand-assets/svg/mark-paths/v12-ears-only-40-light.svg +4 -0
  277. package/brand-assets/svg/mark-paths/v12-ears-only-80-dark.svg +37 -0
  278. package/brand-assets/svg/mark-paths/v12-ears-only-80-light.svg +37 -0
  279. package/brand-assets/svg/mark-paths/v12-ears-only-transparent.svg +4 -0
  280. package/brand-assets/svg/server/icon-40-dark.svg +8 -0
  281. package/brand-assets/svg/server/icon-40-light.svg +8 -0
  282. package/brand-assets/svg/server/icon-80-dark.svg +8 -0
  283. package/brand-assets/svg/server/icon-80-light.svg +8 -0
  284. package/brand-assets/svg/social/banner-1200x400-dark.svg +14 -0
  285. package/brand-assets/svg/social/banner-1200x400-light.svg +14 -0
  286. package/brand-assets/svg/social/banner-cat-ticker-1500x500-dark.svg +7 -0
  287. package/brand-assets/svg/social/banner-cat-ticker-1500x500-light.svg +7 -0
  288. package/brand-assets/svg/social/banner-cat1-left-dark.svg +10 -0
  289. package/brand-assets/svg/social/banner-cat1-left-light.svg +10 -0
  290. package/brand-assets/svg/social/banner-cat2-right-dark.svg +10 -0
  291. package/brand-assets/svg/social/banner-cat2-right-light.svg +10 -0
  292. package/brand-assets/svg/social/banner-cat3-stacked-dark.svg +9 -0
  293. package/brand-assets/svg/social/banner-cat3-stacked-light.svg +9 -0
  294. package/brand-assets/svg/social/banner-cat4-wordmark-dark.svg +8 -0
  295. package/brand-assets/svg/social/banner-cat4-wordmark-light.svg +8 -0
  296. package/brand-assets/svg/social/banner-cc1-left-dark.svg +10 -0
  297. package/brand-assets/svg/social/banner-cc1-left-light.svg +10 -0
  298. package/brand-assets/svg/social/banner-cc2-right-dark.svg +10 -0
  299. package/brand-assets/svg/social/banner-cc2-right-light.svg +10 -0
  300. package/brand-assets/svg/social/banner-cc3-stacked-dark.svg +9 -0
  301. package/brand-assets/svg/social/banner-cc3-stacked-light.svg +9 -0
  302. package/brand-assets/svg/social/banner-cc4-centered-dark.svg +9 -0
  303. package/brand-assets/svg/social/banner-cc4-centered-light.svg +9 -0
  304. package/brand-assets/svg/social/banner-cc5-right-big-dark.svg +9 -0
  305. package/brand-assets/svg/social/banner-cc5-right-big-light.svg +9 -0
  306. package/brand-assets/svg/social/banner-cc6-ears-right-dark.svg +8 -0
  307. package/brand-assets/svg/social/banner-cc6-ears-right-light.svg +8 -0
  308. package/brand-assets/svg/social/banner-cc7-wordmark-dark.svg +8 -0
  309. package/brand-assets/svg/social/banner-cc7-wordmark-light.svg +8 -0
  310. package/brand-assets/svg/social/banner-cc8-minimal-dark.svg +9 -0
  311. package/brand-assets/svg/social/banner-cc8-minimal-light.svg +9 -0
  312. package/brand-assets/svg/social/banner-cc9-dramatic-dark.svg +9 -0
  313. package/brand-assets/svg/social/banner-cc9-dramatic-light.svg +9 -0
  314. package/brand-assets/svg/social/banner-ccat1-left-dark.svg +10 -0
  315. package/brand-assets/svg/social/banner-ccat1-left-light.svg +10 -0
  316. package/brand-assets/svg/social/banner-ccat2-right-dark.svg +10 -0
  317. package/brand-assets/svg/social/banner-ccat2-right-light.svg +10 -0
  318. package/brand-assets/svg/social/banner-ccat3-stacked-dark.svg +9 -0
  319. package/brand-assets/svg/social/banner-ccat3-stacked-light.svg +9 -0
  320. package/brand-assets/svg/social/banner-ccat4-wordmark-dark.svg +8 -0
  321. package/brand-assets/svg/social/banner-ccat4-wordmark-light.svg +8 -0
  322. package/brand-assets/svg/social/banner-sn1-snuggle-dark.svg +10 -0
  323. package/brand-assets/svg/social/banner-sn1-snuggle-light.svg +10 -0
  324. package/brand-assets/svg/social/banner-sn2-snuggle-big-dark.svg +9 -0
  325. package/brand-assets/svg/social/banner-sn2-snuggle-big-light.svg +9 -0
  326. package/brand-assets/svg/social/banner-sn3-snuggle-centered-dark.svg +10 -0
  327. package/brand-assets/svg/social/banner-sn3-snuggle-centered-light.svg +10 -0
  328. package/brand-assets/svg/social/banner-sn4-snuggle-simple-dark.svg +9 -0
  329. package/brand-assets/svg/social/banner-sn4-snuggle-simple-light.svg +9 -0
  330. package/brand-assets/svg/social/banner-sn5-snuggle-compact-dark.svg +9 -0
  331. package/brand-assets/svg/social/banner-sn5-snuggle-compact-light.svg +9 -0
  332. package/brand-assets/svg/social/banner-v1-left-dark.svg +10 -0
  333. package/brand-assets/svg/social/banner-v1-left-light.svg +10 -0
  334. package/brand-assets/svg/social/banner-v10-dramatic-dark.svg +9 -0
  335. package/brand-assets/svg/social/banner-v10-dramatic-light.svg +9 -0
  336. package/brand-assets/svg/social/banner-v11-bold-right-dark.svg +8 -0
  337. package/brand-assets/svg/social/banner-v11-bold-right-light.svg +8 -0
  338. package/brand-assets/svg/social/banner-v12-pointy-right-dark.svg +9 -0
  339. package/brand-assets/svg/social/banner-v12-pointy-right-light.svg +9 -0
  340. package/brand-assets/svg/social/banner-v13-ears-twitter-dark.svg +8 -0
  341. package/brand-assets/svg/social/banner-v13-ears-twitter-light.svg +8 -0
  342. package/brand-assets/svg/social/banner-v14-bold-twitter-dark.svg +8 -0
  343. package/brand-assets/svg/social/banner-v14-bold-twitter-light.svg +8 -0
  344. package/brand-assets/svg/social/banner-v15-pointy-twitter-dark.svg +9 -0
  345. package/brand-assets/svg/social/banner-v15-pointy-twitter-light.svg +9 -0
  346. package/brand-assets/svg/social/banner-v16-pointy-wink-twitter-dark.svg +9 -0
  347. package/brand-assets/svg/social/banner-v16-pointy-wink-twitter-light.svg +9 -0
  348. package/brand-assets/svg/social/banner-v17-bold-twitter-big-dark.svg +8 -0
  349. package/brand-assets/svg/social/banner-v17-bold-twitter-big-light.svg +8 -0
  350. package/brand-assets/svg/social/banner-v2-right-dark.svg +10 -0
  351. package/brand-assets/svg/social/banner-v2-right-light.svg +10 -0
  352. package/brand-assets/svg/social/banner-v3-stacked-dark.svg +9 -0
  353. package/brand-assets/svg/social/banner-v3-stacked-light.svg +9 -0
  354. package/brand-assets/svg/social/banner-v4-minimal-dark.svg +9 -0
  355. package/brand-assets/svg/social/banner-v4-minimal-light.svg +9 -0
  356. package/brand-assets/svg/social/banner-v5-right-far-dark.svg +10 -0
  357. package/brand-assets/svg/social/banner-v5-right-far-light.svg +10 -0
  358. package/brand-assets/svg/social/banner-v6-right-big-dark.svg +9 -0
  359. package/brand-assets/svg/social/banner-v6-right-big-light.svg +9 -0
  360. package/brand-assets/svg/social/banner-v7-centered-dark.svg +9 -0
  361. package/brand-assets/svg/social/banner-v7-centered-light.svg +9 -0
  362. package/brand-assets/svg/social/banner-v8-wordmark-dark.svg +8 -0
  363. package/brand-assets/svg/social/banner-v8-wordmark-light.svg +8 -0
  364. package/brand-assets/svg/social/banner-v9-ears-right-dark.svg +8 -0
  365. package/brand-assets/svg/social/banner-v9-ears-right-light.svg +8 -0
  366. package/brand-assets/svg/social/og-1200x630-dark.svg +16 -0
  367. package/brand-assets/svg/social/og-1200x630-light.svg +16 -0
  368. package/brand-assets/svg/social/og-1200x630-v2-dark.svg +73 -0
  369. package/brand-assets/svg/social/og-box-centered-dark.svg +10 -0
  370. package/brand-assets/svg/social/og-box-centered-light.svg +10 -0
  371. package/brand-assets/svg/social/og-cat1-centered-dark.svg +10 -0
  372. package/brand-assets/svg/social/og-cat1-centered-light.svg +10 -0
  373. package/brand-assets/svg/social/og-cat2-hero-dark.svg +11 -0
  374. package/brand-assets/svg/social/og-cat2-hero-light.svg +11 -0
  375. package/brand-assets/svg/social/og-cat3-minimal-dark.svg +10 -0
  376. package/brand-assets/svg/social/og-cat3-minimal-light.svg +10 -0
  377. package/brand-assets/svg/social/og-cc1-centered-dark.svg +11 -0
  378. package/brand-assets/svg/social/og-cc1-centered-light.svg +11 -0
  379. package/brand-assets/svg/social/og-cc2-hero-dark.svg +10 -0
  380. package/brand-assets/svg/social/og-cc2-hero-light.svg +10 -0
  381. package/brand-assets/svg/social/og-cc3-minimal-dark.svg +10 -0
  382. package/brand-assets/svg/social/og-cc3-minimal-light.svg +10 -0
  383. package/brand-assets/svg/social/og-cc4-split-dark.svg +11 -0
  384. package/brand-assets/svg/social/og-cc4-split-light.svg +11 -0
  385. package/brand-assets/svg/social/og-feral-a.svg +68 -0
  386. package/brand-assets/svg/social/og-feral-b.svg +80 -0
  387. package/brand-assets/svg/social/og-feral-c.svg +73 -0
  388. package/brand-assets/svg/social/og-feral-d.svg +63 -0
  389. package/brand-assets/svg/social/og-minimal-centered-dark.svg +10 -0
  390. package/brand-assets/svg/social/og-minimal-centered-light.svg +10 -0
  391. package/brand-assets/svg/social/og-neko1-kawaii-dark.svg +10 -0
  392. package/brand-assets/svg/social/og-neko1-kawaii-light.svg +10 -0
  393. package/brand-assets/svg/social/og-neko2-money-dark.svg +10 -0
  394. package/brand-assets/svg/social/og-neko2-money-light.svg +10 -0
  395. package/brand-assets/svg/social/og-neko3-lucky-dark.svg +10 -0
  396. package/brand-assets/svg/social/og-neko3-lucky-light.svg +10 -0
  397. package/brand-assets/svg/social/og-neko4-clean-dark.svg +10 -0
  398. package/brand-assets/svg/social/og-neko4-clean-light.svg +10 -0
  399. package/brand-assets/svg/social/og-pointy-hero-dark.svg +10 -0
  400. package/brand-assets/svg/social/og-pointy-hero-light.svg +10 -0
  401. package/brand-assets/svg/social/og-v1-centered-dark.svg +11 -0
  402. package/brand-assets/svg/social/og-v1-centered-light.svg +11 -0
  403. package/brand-assets/svg/social/og-v11-pointy-1200x630-dark.svg +38 -0
  404. package/brand-assets/svg/social/og-v11-pointy-1200x630-light.svg +38 -0
  405. package/brand-assets/svg/social/og-v12-ears-1200x630-dark.svg +5 -0
  406. package/brand-assets/svg/social/og-v12-ears-1200x630-light.svg +5 -0
  407. package/brand-assets/svg/social/og-v12-ticker-1200x630-dark.svg +6 -0
  408. package/brand-assets/svg/social/og-v12-ticker-1200x630-light.svg +6 -0
  409. package/brand-assets/svg/social/og-v2-split-dark.svg +11 -0
  410. package/brand-assets/svg/social/og-v2-split-light.svg +11 -0
  411. package/brand-assets/svg/social/og-v2-variation-a.svg +74 -0
  412. package/brand-assets/svg/social/og-v2-variation-b.svg +63 -0
  413. package/brand-assets/svg/social/og-v2-variation-c.svg +71 -0
  414. package/brand-assets/svg/social/og-v3-hero-dark.svg +11 -0
  415. package/brand-assets/svg/social/og-v3-hero-light.svg +11 -0
  416. package/brand-assets/svg/social/og-v4-minimal-dark.svg +10 -0
  417. package/brand-assets/svg/social/og-v4-minimal-light.svg +10 -0
  418. package/brand-assets/svg/social/pfp-ears-400-dark.svg +5 -0
  419. package/brand-assets/svg/social/pfp-ears-400-light.svg +5 -0
  420. package/brand-assets/svg/social/pfp-v5-pointy-dark.svg +8 -0
  421. package/brand-assets/svg/social/pfp-v5-pointy-light.svg +8 -0
  422. package/brand-assets/svg/social/twitter-banner-v11-1500x500-dark.svg +35 -0
  423. package/brand-assets/svg/social/twitter-pfp-400-dark.svg +12 -0
  424. package/brand-assets/svg/social/twitter-pfp-400-light.svg +12 -0
  425. package/brand-assets/svg/social/twitter-pfp-v11-400-dark.svg +20 -0
  426. package/brand-assets/svg/social-paths/banner-cat-ticker-1500x500-dark.svg +44 -0
  427. package/brand-assets/svg/social-paths/banner-cat-ticker-1500x500-light.svg +44 -0
  428. package/brand-assets/svg/social-paths/og-v12-ears-1200x630-dark.svg +34 -0
  429. package/brand-assets/svg/social-paths/og-v12-ears-1200x630-light.svg +34 -0
  430. package/brand-assets/svg/social-paths/og-v12-ticker-1200x630-dark.svg +39 -0
  431. package/brand-assets/svg/social-paths/og-v12-ticker-1200x630-light.svg +39 -0
  432. package/brand-assets/svg/social-paths/pfp-ears-400-dark.svg +35 -0
  433. package/brand-assets/svg/social-paths/pfp-ears-400-light.svg +35 -0
  434. package/brand-assets/svg/social-paths/twitter-pfp-400-dark.svg +51 -0
  435. package/brand-assets/svg/social-paths/twitter-pfp-400-light.svg +51 -0
  436. package/brand-assets/svg/web/apple-touch-icon-180.svg +4 -0
  437. package/brand-assets/svg/web/favicon-32-dark.svg +4 -0
  438. package/brand-assets/svg/web/favicon-32-light.svg +4 -0
  439. package/brand-assets/svg/web/mark-80-alert.svg +4 -0
  440. package/brand-assets/svg/web/mark-80-dark.svg +4 -0
  441. package/brand-assets/svg/web/mark-80-light.svg +4 -0
  442. package/brand-assets/svg/web/mark-80-success.svg +4 -0
  443. package/brand-assets/svg/web/mark-80-wink.svg +4 -0
  444. package/brand-assets/svg/web/og-image-1200x630.svg +13 -0
  445. package/bun.lock +260 -25
  446. package/dist/agent/autonomous-trader.d.ts.map +1 -0
  447. package/dist/agent/autonomous-trader.js +362 -0
  448. package/dist/agent/autonomous-trader.js.map +1 -0
  449. package/dist/agent/ax-agent.d.ts.map +1 -1
  450. package/dist/agent/ax-agent.js +356 -18
  451. package/dist/agent/ax-agent.js.map +1 -1
  452. package/dist/agent/event-client.d.ts.map +1 -0
  453. package/dist/agent/event-client.js +82 -0
  454. package/dist/agent/event-client.js.map +1 -0
  455. package/dist/agent/log-stream.d.ts.map +1 -0
  456. package/dist/agent/log-stream.js +95 -0
  457. package/dist/agent/log-stream.js.map +1 -0
  458. package/dist/agent/memory/conversation-session.d.ts.map +1 -0
  459. package/dist/agent/memory/conversation-session.js +232 -0
  460. package/dist/agent/memory/conversation-session.js.map +1 -0
  461. package/dist/agent/memory/conversation-store.d.ts.map +1 -0
  462. package/dist/agent/memory/conversation-store.js +214 -0
  463. package/dist/agent/memory/conversation-store.js.map +1 -0
  464. package/dist/agent/memory/database-schema.d.ts.map +1 -0
  465. package/dist/agent/memory/database-schema.js +355 -0
  466. package/dist/agent/memory/database-schema.js.map +1 -0
  467. package/dist/agent/memory/decision-tracker.d.ts.map +1 -0
  468. package/dist/agent/memory/decision-tracker.js +274 -0
  469. package/dist/agent/memory/decision-tracker.js.map +1 -0
  470. package/dist/agent/memory/memory-manager.d.ts.map +1 -0
  471. package/dist/agent/memory/memory-manager.js +187 -0
  472. package/dist/agent/memory/memory-manager.js.map +1 -0
  473. package/dist/agent/memory/types.d.ts.map +1 -0
  474. package/dist/agent/memory/types.js +5 -0
  475. package/dist/agent/memory/types.js.map +1 -0
  476. package/dist/agent/message-formatter.d.ts.map +1 -0
  477. package/dist/agent/message-formatter.js +76 -0
  478. package/dist/agent/message-formatter.js.map +1 -0
  479. package/dist/agent/position-db.d.ts.map +1 -0
  480. package/dist/agent/position-db.js +154 -0
  481. package/dist/agent/position-db.js.map +1 -0
  482. package/dist/agent/simple-chat-ui-static.d.ts.map +1 -0
  483. package/dist/agent/simple-chat-ui-static.js +129 -0
  484. package/dist/agent/simple-chat-ui-static.js.map +1 -0
  485. package/dist/agent/simple-chat-ui.d.ts.map +1 -0
  486. package/dist/agent/simple-chat-ui.js +90 -0
  487. package/dist/agent/simple-chat-ui.js.map +1 -0
  488. package/dist/agent/tools.d.ts.map +1 -1
  489. package/dist/agent/tools.js +297 -4
  490. package/dist/agent/tools.js.map +1 -1
  491. package/dist/agent/ui.d.ts.map +1 -0
  492. package/dist/agent/ui.js +84 -0
  493. package/dist/agent/ui.js.map +1 -0
  494. package/dist/agent/unified-runtime.d.ts.map +1 -0
  495. package/dist/agent/unified-runtime.js +397 -0
  496. package/dist/agent/unified-runtime.js.map +1 -0
  497. package/dist/client.d.ts.map +1 -1
  498. package/dist/client.js +274 -21
  499. package/dist/client.js.map +1 -1
  500. package/dist/commands/account.d.ts.map +1 -1
  501. package/dist/commands/account.js +187 -33
  502. package/dist/commands/account.js.map +1 -1
  503. package/dist/commands/agent.d.ts.map +1 -0
  504. package/dist/commands/agent.js +125 -0
  505. package/dist/commands/agent.js.map +1 -0
  506. package/dist/commands/approve.d.ts.map +1 -0
  507. package/dist/commands/approve.js +505 -0
  508. package/dist/commands/approve.js.map +1 -0
  509. package/dist/commands/automation.d.ts.map +1 -0
  510. package/dist/commands/automation.js +346 -0
  511. package/dist/commands/automation.js.map +1 -0
  512. package/dist/commands/balances.d.ts.map +1 -1
  513. package/dist/commands/balances.js +226 -73
  514. package/dist/commands/balances.js.map +1 -1
  515. package/dist/commands/buy.d.ts.map +1 -1
  516. package/dist/commands/buy.js +149 -146
  517. package/dist/commands/buy.js.map +1 -1
  518. package/dist/commands/call.d.ts.map +1 -0
  519. package/dist/commands/call.js +51 -0
  520. package/dist/commands/call.js.map +1 -0
  521. package/dist/commands/cex.d.ts.map +1 -0
  522. package/dist/commands/cex.js +958 -0
  523. package/dist/commands/cex.js.map +1 -0
  524. package/dist/commands/chat.d.ts.map +1 -1
  525. package/dist/commands/chat.js +169 -411
  526. package/dist/commands/chat.js.map +1 -1
  527. package/dist/commands/claim.d.ts.map +1 -1
  528. package/dist/commands/claim.js +313 -29
  529. package/dist/commands/claim.js.map +1 -1
  530. package/dist/commands/create.d.ts.map +1 -1
  531. package/dist/commands/create.js +151 -43
  532. package/dist/commands/create.js.map +1 -1
  533. package/dist/commands/gasless-swap.d.ts.map +1 -0
  534. package/dist/commands/gasless-swap.js +232 -0
  535. package/dist/commands/gasless-swap.js.map +1 -0
  536. package/dist/commands/health.d.ts.map +1 -1
  537. package/dist/commands/health.js +63 -7
  538. package/dist/commands/health.js.map +1 -1
  539. package/dist/commands/info.d.ts.map +1 -1
  540. package/dist/commands/info.js +131 -47
  541. package/dist/commands/info.js.map +1 -1
  542. package/dist/commands/launchpad.d.ts.map +1 -0
  543. package/dist/commands/launchpad.js +708 -0
  544. package/dist/commands/launchpad.js.map +1 -0
  545. package/dist/commands/list.d.ts.map +1 -1
  546. package/dist/commands/list.js +57 -23
  547. package/dist/commands/list.js.map +1 -1
  548. package/dist/commands/market.d.ts.map +1 -0
  549. package/dist/commands/market.js +960 -0
  550. package/dist/commands/market.js.map +1 -0
  551. package/dist/commands/mcp-install.d.ts.map +1 -0
  552. package/dist/commands/mcp-install.js +387 -0
  553. package/dist/commands/mcp-install.js.map +1 -0
  554. package/dist/commands/opps.d.ts.map +1 -0
  555. package/dist/commands/opps.js +409 -0
  556. package/dist/commands/opps.js.map +1 -0
  557. package/dist/commands/perps.d.ts.map +1 -0
  558. package/dist/commands/perps.js +248 -0
  559. package/dist/commands/perps.js.map +1 -0
  560. package/dist/commands/portfolio.d.ts.map +1 -0
  561. package/dist/commands/portfolio.js +679 -0
  562. package/dist/commands/portfolio.js.map +1 -0
  563. package/dist/commands/positions.d.ts.map +1 -1
  564. package/dist/commands/positions.js +76 -47
  565. package/dist/commands/positions.js.map +1 -1
  566. package/dist/commands/predict.d.ts.map +1 -0
  567. package/dist/commands/predict.js +280 -0
  568. package/dist/commands/predict.js.map +1 -0
  569. package/dist/commands/predictions.d.ts.map +1 -0
  570. package/dist/commands/predictions.js +486 -0
  571. package/dist/commands/predictions.js.map +1 -0
  572. package/dist/commands/risk.d.ts.map +1 -0
  573. package/dist/commands/risk.js +225 -0
  574. package/dist/commands/risk.js.map +1 -0
  575. package/dist/commands/security.d.ts.map +1 -0
  576. package/dist/commands/security.js +244 -0
  577. package/dist/commands/security.js.map +1 -0
  578. package/dist/commands/sell.d.ts.map +1 -1
  579. package/dist/commands/sell.js +67 -34
  580. package/dist/commands/sell.js.map +1 -1
  581. package/dist/commands/send.d.ts.map +1 -0
  582. package/dist/commands/send.js +733 -0
  583. package/dist/commands/send.js.map +1 -0
  584. package/dist/commands/sign.d.ts.map +1 -0
  585. package/dist/commands/sign.js +1048 -0
  586. package/dist/commands/sign.js.map +1 -0
  587. package/dist/commands/swap.d.ts.map +1 -0
  588. package/dist/commands/swap.js +744 -0
  589. package/dist/commands/swap.js.map +1 -0
  590. package/dist/commands/system.d.ts.map +1 -0
  591. package/dist/commands/system.js +417 -0
  592. package/dist/commands/system.js.map +1 -0
  593. package/dist/commands/tools/index.d.ts.map +1 -0
  594. package/dist/commands/tools/index.js +2040 -0
  595. package/dist/commands/tools/index.js.map +1 -0
  596. package/dist/commands/trade.d.ts.map +1 -0
  597. package/dist/commands/trade.js +237 -0
  598. package/dist/commands/trade.js.map +1 -0
  599. package/dist/commands/transactions.d.ts.map +1 -1
  600. package/dist/commands/transactions.js +29 -17
  601. package/dist/commands/transactions.js.map +1 -1
  602. package/dist/commands/update.d.ts.map +1 -0
  603. package/dist/commands/update.js +429 -0
  604. package/dist/commands/update.js.map +1 -0
  605. package/dist/config.d.ts.map +1 -1
  606. package/dist/config.js +351 -40
  607. package/dist/config.js.map +1 -1
  608. package/dist/index.js +4525 -924
  609. package/dist/index.js.map +1 -1
  610. package/dist/interactive/art.d.ts.map +1 -1
  611. package/dist/interactive/art.js +33 -1
  612. package/dist/interactive/art.js.map +1 -1
  613. package/dist/interactive/shell.d.ts.map +1 -1
  614. package/dist/interactive/shell.js +467 -2652
  615. package/dist/interactive/shell.js.map +1 -1
  616. package/dist/mcp/context.d.ts.map +1 -0
  617. package/dist/mcp/context.js +211 -0
  618. package/dist/mcp/context.js.map +1 -0
  619. package/dist/mcp/onboarding.d.ts.map +1 -0
  620. package/dist/mcp/onboarding.js +266 -0
  621. package/dist/mcp/onboarding.js.map +1 -0
  622. package/dist/mcp/resources.d.ts.map +1 -0
  623. package/dist/mcp/resources.js +222 -0
  624. package/dist/mcp/resources.js.map +1 -0
  625. package/dist/mcp/server.d.ts.map +1 -1
  626. package/dist/mcp/server.js +51 -1
  627. package/dist/mcp/server.js.map +1 -1
  628. package/dist/mcp/tools.d.ts.map +1 -1
  629. package/dist/mcp/tools.js +4119 -169
  630. package/dist/mcp/tools.js.map +1 -1
  631. package/dist/mcp/types.d.ts.map +1 -1
  632. package/dist/types/agent-info.d.ts.map +1 -0
  633. package/dist/types/agent-info.js +11 -0
  634. package/dist/types/agent-info.js.map +1 -0
  635. package/dist/ui/components/ScrollableList.d.ts.map +1 -0
  636. package/dist/ui/components/ScrollableList.js +72 -0
  637. package/dist/ui/components/ScrollableList.js.map +1 -0
  638. package/dist/ui/components/ThemeProvider.d.ts.map +1 -0
  639. package/dist/ui/components/ThemeProvider.js +87 -0
  640. package/dist/ui/components/ThemeProvider.js.map +1 -0
  641. package/dist/ui/components/ThemedBox.d.ts.map +1 -0
  642. package/dist/ui/components/ThemedBox.js +24 -0
  643. package/dist/ui/components/ThemedBox.js.map +1 -0
  644. package/dist/ui/components/agent/ChatHeader.d.ts.map +1 -0
  645. package/dist/ui/components/agent/ChatHeader.js +39 -0
  646. package/dist/ui/components/agent/ChatHeader.js.map +1 -0
  647. package/dist/ui/components/agent/Header.d.ts.map +1 -0
  648. package/dist/ui/components/agent/Header.js +14 -0
  649. package/dist/ui/components/agent/Header.js.map +1 -0
  650. package/dist/ui/components/agent/Input.d.ts.map +1 -0
  651. package/dist/ui/components/agent/Input.js +23 -0
  652. package/dist/ui/components/agent/Input.js.map +1 -0
  653. package/dist/ui/components/agent/Output.d.ts.map +1 -0
  654. package/dist/ui/components/agent/Output.js +23 -0
  655. package/dist/ui/components/agent/Output.js.map +1 -0
  656. package/dist/ui/components/chat/TokenChatUI.d.ts.map +1 -0
  657. package/dist/ui/components/chat/TokenChatUI.js +133 -0
  658. package/dist/ui/components/chat/TokenChatUI.js.map +1 -0
  659. package/dist/ui/components/shell/ShellHeader.d.ts.map +1 -0
  660. package/dist/ui/components/shell/ShellHeader.js +31 -0
  661. package/dist/ui/components/shell/ShellHeader.js.map +1 -0
  662. package/dist/ui/components/shell/ShellInput.d.ts.map +1 -0
  663. package/dist/ui/components/shell/ShellInput.js +151 -0
  664. package/dist/ui/components/shell/ShellInput.js.map +1 -0
  665. package/dist/ui/components/shell/ShellOutput.d.ts.map +1 -0
  666. package/dist/ui/components/shell/ShellOutput.js +8 -0
  667. package/dist/ui/components/shell/ShellOutput.js.map +1 -0
  668. package/dist/ui/hooks/useChatWebSocket.d.ts.map +1 -0
  669. package/dist/ui/hooks/useChatWebSocket.js +76 -0
  670. package/dist/ui/hooks/useChatWebSocket.js.map +1 -0
  671. package/dist/ui/hooks/useCommandHistory.d.ts.map +1 -0
  672. package/dist/ui/hooks/useCommandHistory.js +70 -0
  673. package/dist/ui/hooks/useCommandHistory.js.map +1 -0
  674. package/dist/ui/hooks/useDebounce.d.ts.map +1 -0
  675. package/dist/ui/hooks/useDebounce.js +17 -0
  676. package/dist/ui/hooks/useDebounce.js.map +1 -0
  677. package/dist/ui/hooks/useLogStream.d.ts.map +1 -0
  678. package/dist/ui/hooks/useLogStream.js +20 -0
  679. package/dist/ui/hooks/useLogStream.js.map +1 -0
  680. package/dist/ui/hooks/useVirtualScroll.d.ts.map +1 -0
  681. package/dist/ui/hooks/useVirtualScroll.js +70 -0
  682. package/dist/ui/hooks/useVirtualScroll.js.map +1 -0
  683. package/dist/utils/admin.d.ts.map +1 -0
  684. package/dist/utils/admin.js +144 -0
  685. package/dist/utils/admin.js.map +1 -0
  686. package/dist/utils/autoSetup.d.ts.map +1 -0
  687. package/dist/utils/autoSetup.js +252 -0
  688. package/dist/utils/autoSetup.js.map +1 -0
  689. package/dist/utils/build-constants.d.ts.map +1 -0
  690. package/dist/utils/build-constants.js +10 -0
  691. package/dist/utils/build-constants.js.map +1 -0
  692. package/dist/utils/constants.d.ts.map +1 -1
  693. package/dist/utils/errors.d.ts.map +1 -1
  694. package/dist/utils/errors.js +10 -1
  695. package/dist/utils/errors.js.map +1 -1
  696. package/dist/utils/formatting.d.ts.map +1 -1
  697. package/dist/utils/formatting.js +46 -9
  698. package/dist/utils/formatting.js.map +1 -1
  699. package/dist/utils/llm-cli-config.d.ts.map +1 -0
  700. package/dist/utils/llm-cli-config.js +963 -0
  701. package/dist/utils/llm-cli-config.js.map +1 -0
  702. package/dist/utils/llm-cli-detector.d.ts.map +1 -0
  703. package/dist/utils/llm-cli-detector.js +202 -0
  704. package/dist/utils/llm-cli-detector.js.map +1 -0
  705. package/dist/utils/loading.d.ts.map +1 -1
  706. package/dist/utils/loading.js +25 -3
  707. package/dist/utils/loading.js.map +1 -1
  708. package/dist/utils/maintenance.d.ts.map +1 -0
  709. package/dist/utils/maintenance.js +17 -0
  710. package/dist/utils/maintenance.js.map +1 -0
  711. package/dist/utils/mcp-config.d.ts.map +1 -0
  712. package/dist/utils/mcp-config.js +77 -0
  713. package/dist/utils/mcp-config.js.map +1 -0
  714. package/dist/utils/privateKeyPrompt.d.ts.map +1 -1
  715. package/dist/utils/privateKeyPrompt.js +308 -129
  716. package/dist/utils/privateKeyPrompt.js.map +1 -1
  717. package/dist/utils/process-cleanup.d.ts.map +1 -0
  718. package/dist/utils/process-cleanup.js +136 -0
  719. package/dist/utils/process-cleanup.js.map +1 -0
  720. package/dist/utils/retry.d.ts.map +1 -0
  721. package/dist/utils/retry.js +56 -0
  722. package/dist/utils/retry.js.map +1 -0
  723. package/dist/utils/rpc-helpers.d.ts.map +1 -0
  724. package/dist/utils/rpc-helpers.js +70 -0
  725. package/dist/utils/rpc-helpers.js.map +1 -0
  726. package/dist/utils/rpc-transport.d.ts.map +1 -0
  727. package/dist/utils/rpc-transport.js +87 -0
  728. package/dist/utils/rpc-transport.js.map +1 -0
  729. package/dist/utils/shell-setup.d.ts.map +1 -0
  730. package/dist/utils/shell-setup.js +531 -0
  731. package/dist/utils/shell-setup.js.map +1 -0
  732. package/dist/utils/status.d.ts.map +1 -1
  733. package/dist/utils/status.js +34 -5
  734. package/dist/utils/status.js.map +1 -1
  735. package/dist/utils/token-resolver.d.ts.map +1 -1
  736. package/dist/utils/token-resolver.js +51 -8
  737. package/dist/utils/token-resolver.js.map +1 -1
  738. package/dist/utils/x402-caller.d.ts.map +1 -0
  739. package/dist/utils/x402-caller.js +17 -0
  740. package/dist/utils/x402-caller.js.map +1 -0
  741. package/docs/README.md +28 -0
  742. package/docs/agent/README.md +18 -0
  743. package/docs/api/README.md +41 -0
  744. package/docs/cli/README.md +42 -0
  745. package/docs/guides/README.md +26 -0
  746. package/docs/implementation/README.md +18 -0
  747. package/docs/planning/README.md +19 -0
  748. package/docs/testing/README.md +15 -0
  749. package/docs/ux/README.md +16 -0
  750. package/issues.txt +2 -0
  751. package/package.json +24 -9
  752. package/scripts/cat-spin.sh +417 -0
  753. package/scripts/deprecate-rc-versions.js +58 -0
  754. package/scripts/inject-build-constants.js +43 -0
  755. package/scripts/monitor-foobar.js +117 -0
  756. package/swap.logs +61 -0
  757. package/swapping.txt +108 -0
  758. package/test.txt +12 -0
  759. package/tests/fixtures/test-data.json +16 -0
  760. package/Screenshot 2025-12-21 at 8.56.02/342/200/257PM.png +0 -0
@@ -0,0 +1,733 @@
1
+ import chalk from "chalk";
2
+ import { printBox, formatAddress, } from "../utils/formatting.js";
3
+ import { printSuccess } from "../interactive/art.js";
4
+ import { resolveTokenId } from "../utils/token-resolver.js";
5
+ import { createPublicClient, createWalletClient, parseAbi, formatUnits, parseUnits, parseEther, formatEther, isAddress, getAddress, encodeFunctionData, } from "viem";
6
+ import { privateKeyToAccount } from "viem/accounts";
7
+ import { config } from "../config.js";
8
+ import { createRpcTransport } from "../utils/rpc-transport.js";
9
+ import { getNetworkConfig } from "../utils/constants.js";
10
+ import inquirer from "inquirer";
11
+ import { readFileSync } from "fs";
12
+ import Table from "cli-table3";
13
+ // ERC20 ABI for token operations
14
+ const ERC20_ABI = parseAbi([
15
+ "function transfer(address to, uint256 amount) returns (bool)",
16
+ "function balanceOf(address owner) view returns (uint256)",
17
+ "function decimals() view returns (uint8)",
18
+ "function symbol() view returns (string)",
19
+ "function name() view returns (string)",
20
+ ]);
21
+ /**
22
+ * Validate and checksum an Ethereum address
23
+ */
24
+ function validateAddress(address) {
25
+ if (!isAddress(address)) {
26
+ throw new Error(`Invalid address format: ${address}`);
27
+ }
28
+ return getAddress(address);
29
+ }
30
+ /**
31
+ * Parse amount string to bigint
32
+ */
33
+ function parseAmount(amount, decimals = 18) {
34
+ try {
35
+ return parseUnits(amount, decimals);
36
+ }
37
+ catch (error) {
38
+ throw new Error(`Invalid amount format: ${amount}. ${error instanceof Error ? error.message : ""}`);
39
+ }
40
+ }
41
+ /**
42
+ * Get gas price configuration
43
+ */
44
+ async function getGasConfig(publicClient, options) {
45
+ const gasConfig = {};
46
+ // Legacy gas price
47
+ if (options.gasPrice) {
48
+ const gwei = parseFloat(options.gasPrice);
49
+ gasConfig.gasPrice = parseUnits(gwei.toString(), 9); // Convert gwei to wei
50
+ }
51
+ // EIP-1559 fees
52
+ if (options.maxFeePerGas || options.maxPriorityFeePerGas) {
53
+ if (options.maxFeePerGas) {
54
+ const gwei = parseFloat(options.maxFeePerGas);
55
+ gasConfig.maxFeePerGas = parseUnits(gwei.toString(), 9);
56
+ }
57
+ if (options.maxPriorityFeePerGas) {
58
+ const gwei = parseFloat(options.maxPriorityFeePerGas);
59
+ gasConfig.maxPriorityFeePerGas = parseUnits(gwei.toString(), 9);
60
+ }
61
+ }
62
+ else if (!options.gasPrice) {
63
+ // Auto-estimate EIP-1559 fees if not provided
64
+ try {
65
+ const feeData = await publicClient.estimateFeesPerGas();
66
+ if (feeData) {
67
+ gasConfig.maxFeePerGas = feeData.maxFeePerGas;
68
+ gasConfig.maxPriorityFeePerGas =
69
+ feeData.maxPriorityFeePerGas || feeData.maxFeePerGas / 2n;
70
+ }
71
+ }
72
+ catch {
73
+ // Fallback to legacy gas price
74
+ try {
75
+ const gasPrice = await publicClient.getGasPrice();
76
+ gasConfig.gasPrice = gasPrice;
77
+ }
78
+ catch {
79
+ // Use default if all else fails
80
+ }
81
+ }
82
+ }
83
+ // Gas limit
84
+ if (options.gasLimit) {
85
+ gasConfig.gas = options.gasLimit;
86
+ }
87
+ return gasConfig;
88
+ }
89
+ /**
90
+ * Prompt for confirmation before sending
91
+ */
92
+ async function promptConfirmation(summary, options) {
93
+ if (options.noConfirm || options.silent) {
94
+ return true;
95
+ }
96
+ if (options.confirm || !process.stdin.isTTY) {
97
+ // Force confirmation prompt
98
+ const answers = await inquirer.prompt([
99
+ {
100
+ type: "confirm",
101
+ name: "confirm",
102
+ message: `Send ${summary.amount} ${summary.tokenSymbol || "ETH"} to ${summary.to}?`,
103
+ default: false,
104
+ },
105
+ ]);
106
+ return answers.confirm;
107
+ }
108
+ // Default: show summary but don't require confirmation in non-interactive mode
109
+ return true;
110
+ }
111
+ /**
112
+ * Send native currency (ETH)
113
+ */
114
+ export async function sendNativeCurrency(client, to, amount, privateKey, options = {}) {
115
+ const account = privateKeyToAccount(privateKey);
116
+ const from = account.address;
117
+ const network = client.getNetwork();
118
+ const { chain } = await getNetworkConfig(network);
119
+ const publicClient = createPublicClient({
120
+ chain,
121
+ transport: createRpcTransport({
122
+ chainId: chain.id,
123
+ httpcatClient: client,
124
+ }),
125
+ });
126
+ const walletClient = createWalletClient({
127
+ account,
128
+ chain,
129
+ transport: createRpcTransport({
130
+ chainId: chain.id,
131
+ httpcatClient: client,
132
+ }),
133
+ });
134
+ // Validate address
135
+ const toAddress = validateAddress(to);
136
+ // Parse amount
137
+ const amountWei = parseEther(amount);
138
+ // Check balance
139
+ const balance = await publicClient.getBalance({ address: from });
140
+ if (balance < amountWei) {
141
+ throw new Error(`Insufficient balance. Have ${formatEther(balance)} ETH, need ${amount} ETH`);
142
+ }
143
+ // Get gas configuration
144
+ const gasConfig = await getGasConfig(publicClient, options);
145
+ // Estimate gas (don't include gas config in estimation)
146
+ let estimatedGas;
147
+ try {
148
+ estimatedGas = await publicClient.estimateGas({
149
+ account: from,
150
+ to: toAddress,
151
+ value: amountWei,
152
+ });
153
+ }
154
+ catch (error) {
155
+ throw new Error(`Failed to estimate gas: ${error instanceof Error ? error.message : "Unknown error"}`);
156
+ }
157
+ // Check if we have enough for gas
158
+ const totalNeeded = amountWei +
159
+ (gasConfig.gas || estimatedGas) *
160
+ (gasConfig.gasPrice || gasConfig.maxFeePerGas || 0n);
161
+ if (balance < totalNeeded) {
162
+ throw new Error(`Insufficient balance for transaction. Need ${formatEther(totalNeeded)} ETH (${amount} ETH + gas)`);
163
+ }
164
+ // Show summary and prompt for confirmation
165
+ const estimatedGasEth = formatEther((gasConfig.gas || estimatedGas) *
166
+ (gasConfig.gasPrice || gasConfig.maxFeePerGas || 0n));
167
+ const confirmed = await promptConfirmation({
168
+ type: "native",
169
+ from,
170
+ to: toAddress,
171
+ amount,
172
+ estimatedGas: estimatedGasEth,
173
+ }, options);
174
+ if (!confirmed) {
175
+ throw new Error("Transaction cancelled by user");
176
+ }
177
+ // Dry run mode
178
+ if (options.dryRun) {
179
+ if (!options.silent) {
180
+ console.log(chalk.yellow("\nšŸ” Dry Run Mode - Transaction not broadcast\n"));
181
+ console.log(chalk.cyan(`From: ${from}`));
182
+ console.log(chalk.cyan(`To: ${toAddress}`));
183
+ console.log(chalk.cyan(`Amount: ${amount} ETH`));
184
+ console.log(chalk.cyan(`Estimated Gas: ${estimatedGas.toString()}`));
185
+ console.log(chalk.cyan(`Estimated Gas Cost: ${estimatedGasEth} ETH`));
186
+ }
187
+ return {
188
+ success: true,
189
+ type: "native",
190
+ from,
191
+ to: toAddress,
192
+ amount,
193
+ gasUsed: estimatedGas,
194
+ };
195
+ }
196
+ // Build transaction
197
+ // Note: Don't include 'account' field - walletClient already has it configured
198
+ const txRequest = {
199
+ to: toAddress,
200
+ value: amountWei,
201
+ gas: gasConfig.gas || estimatedGas,
202
+ ...gasConfig,
203
+ };
204
+ // Set nonce if provided
205
+ if (options.nonce !== undefined) {
206
+ txRequest.nonce = options.nonce;
207
+ }
208
+ // Send transaction
209
+ if (!options.silent) {
210
+ console.log(chalk.cyan(`\nšŸ“¤ Sending ${amount} ETH to ${toAddress}...`));
211
+ }
212
+ const txHash = await walletClient.sendTransaction(txRequest);
213
+ let result = {
214
+ success: true,
215
+ type: "native",
216
+ txHash,
217
+ from,
218
+ to: toAddress,
219
+ amount,
220
+ };
221
+ // Wait for confirmation if requested
222
+ if (options.wait) {
223
+ if (!options.silent) {
224
+ console.log(chalk.cyan(`ā³ Waiting for confirmation...`));
225
+ }
226
+ const receipt = await publicClient.waitForTransactionReceipt({
227
+ hash: txHash,
228
+ timeout: (options.timeout || 300) * 1000,
229
+ });
230
+ result.gasUsed = receipt.gasUsed;
231
+ result.blockNumber = receipt.blockNumber;
232
+ result.confirmations = 1; // At least 1 confirmation
233
+ if (!options.silent) {
234
+ console.log(chalk.green(`āœ… Transaction confirmed in block ${receipt.blockNumber.toString()}`));
235
+ }
236
+ }
237
+ return result;
238
+ }
239
+ /**
240
+ * Send ERC20 token
241
+ */
242
+ export async function sendToken(client, tokenIdentifier, to, amount, privateKey, options = {}) {
243
+ const account = privateKeyToAccount(privateKey);
244
+ const from = account.address;
245
+ const network = client.getNetwork();
246
+ const { chain } = await getNetworkConfig(network);
247
+ const publicClient = createPublicClient({
248
+ chain,
249
+ transport: createRpcTransport({
250
+ chainId: chain.id,
251
+ httpcatClient: client,
252
+ }),
253
+ });
254
+ const walletClient = createWalletClient({
255
+ account,
256
+ chain,
257
+ transport: createRpcTransport({
258
+ chainId: chain.id,
259
+ httpcatClient: client,
260
+ }),
261
+ });
262
+ // Validate address
263
+ const toAddress = validateAddress(to);
264
+ // Resolve token identifier to address
265
+ let tokenAddress;
266
+ try {
267
+ const resolved = await resolveTokenId(tokenIdentifier, client, options.silent);
268
+ tokenAddress = validateAddress(resolved);
269
+ }
270
+ catch (error) {
271
+ // If resolution fails, try treating it as an address directly
272
+ if (isAddress(tokenIdentifier)) {
273
+ tokenAddress = getAddress(tokenIdentifier);
274
+ }
275
+ else {
276
+ throw new Error(`Failed to resolve token "${tokenIdentifier}": ${error instanceof Error ? error.message : "Unknown error"}`);
277
+ }
278
+ }
279
+ // Get token metadata
280
+ let tokenDecimals = options.decimals;
281
+ let tokenSymbol = "TOKEN";
282
+ let tokenName = "Token";
283
+ try {
284
+ if (!tokenDecimals) {
285
+ tokenDecimals = (await publicClient.readContract({
286
+ address: tokenAddress,
287
+ abi: ERC20_ABI,
288
+ functionName: "decimals",
289
+ }));
290
+ }
291
+ tokenSymbol = (await publicClient.readContract({
292
+ address: tokenAddress,
293
+ abi: ERC20_ABI,
294
+ functionName: "symbol",
295
+ }));
296
+ tokenName = (await publicClient.readContract({
297
+ address: tokenAddress,
298
+ abi: ERC20_ABI,
299
+ functionName: "name",
300
+ }));
301
+ }
302
+ catch (error) {
303
+ if (!tokenDecimals) {
304
+ throw new Error(`Failed to get token decimals. Use --decimals flag or ensure token contract is valid. ${error instanceof Error ? error.message : ""}`);
305
+ }
306
+ // Use provided decimals if available
307
+ }
308
+ // Parse amount
309
+ const amountWei = parseAmount(amount, tokenDecimals);
310
+ // Check balance
311
+ const balance = (await publicClient.readContract({
312
+ address: tokenAddress,
313
+ abi: ERC20_ABI,
314
+ functionName: "balanceOf",
315
+ args: [from],
316
+ }));
317
+ if (balance < amountWei) {
318
+ throw new Error(`Insufficient token balance. Have ${formatUnits(balance, tokenDecimals)} ${tokenSymbol}, need ${amount} ${tokenSymbol}`);
319
+ }
320
+ // Get gas configuration
321
+ const gasConfig = await getGasConfig(publicClient, options);
322
+ // Estimate gas for transfer (don't include gas config in estimation)
323
+ let estimatedGas;
324
+ try {
325
+ estimatedGas = await publicClient.estimateGas({
326
+ account: from,
327
+ to: tokenAddress,
328
+ data: encodeFunctionData({
329
+ abi: ERC20_ABI,
330
+ functionName: "transfer",
331
+ args: [toAddress, amountWei],
332
+ }),
333
+ });
334
+ }
335
+ catch (error) {
336
+ throw new Error(`Failed to estimate gas: ${error instanceof Error ? error.message : "Unknown error"}`);
337
+ }
338
+ // Check ETH balance for gas
339
+ const ethBalance = await publicClient.getBalance({ address: from });
340
+ const estimatedGasCost = (gasConfig.gas || estimatedGas) *
341
+ (gasConfig.gasPrice || gasConfig.maxFeePerGas || 0n);
342
+ if (ethBalance < estimatedGasCost) {
343
+ throw new Error(`Insufficient ETH for gas. Need ${formatEther(estimatedGasCost)} ETH`);
344
+ }
345
+ // Show summary and prompt for confirmation
346
+ const estimatedGasEth = formatEther(estimatedGasCost);
347
+ const confirmed = await promptConfirmation({
348
+ type: "token",
349
+ from,
350
+ to: toAddress,
351
+ amount,
352
+ tokenSymbol,
353
+ estimatedGas: estimatedGasEth,
354
+ }, options);
355
+ if (!confirmed) {
356
+ throw new Error("Transaction cancelled by user");
357
+ }
358
+ // Dry run mode
359
+ if (options.dryRun) {
360
+ if (!options.silent) {
361
+ console.log(chalk.yellow("\nšŸ” Dry Run Mode - Transaction not broadcast\n"));
362
+ console.log(chalk.cyan(`From: ${from}`));
363
+ console.log(chalk.cyan(`To: ${toAddress}`));
364
+ console.log(chalk.cyan(`Token: ${tokenName} (${tokenSymbol})`));
365
+ console.log(chalk.cyan(`Token Address: ${tokenAddress}`));
366
+ console.log(chalk.cyan(`Amount: ${amount} ${tokenSymbol}`));
367
+ console.log(chalk.cyan(`Estimated Gas: ${estimatedGas.toString()}`));
368
+ console.log(chalk.cyan(`Estimated Gas Cost: ${estimatedGasEth} ETH`));
369
+ }
370
+ return {
371
+ success: true,
372
+ type: "token",
373
+ from,
374
+ to: toAddress,
375
+ amount,
376
+ tokenAddress,
377
+ tokenSymbol,
378
+ gasUsed: estimatedGas,
379
+ };
380
+ }
381
+ // Build transaction
382
+ // Note: Don't include 'account' field - walletClient already has it configured
383
+ const txRequest = {
384
+ to: tokenAddress,
385
+ data: encodeFunctionData({
386
+ abi: ERC20_ABI,
387
+ functionName: "transfer",
388
+ args: [toAddress, amountWei],
389
+ }),
390
+ gas: gasConfig.gas || estimatedGas,
391
+ ...gasConfig,
392
+ };
393
+ // Set nonce if provided
394
+ if (options.nonce !== undefined) {
395
+ txRequest.nonce = options.nonce;
396
+ }
397
+ // Send transaction
398
+ if (!options.silent) {
399
+ console.log(chalk.cyan(`\nšŸ“¤ Sending ${amount} ${tokenSymbol} to ${toAddress}...`));
400
+ }
401
+ const txHash = await walletClient.sendTransaction(txRequest);
402
+ let result = {
403
+ success: true,
404
+ type: "token",
405
+ txHash,
406
+ from,
407
+ to: toAddress,
408
+ amount,
409
+ tokenAddress,
410
+ tokenSymbol,
411
+ };
412
+ // Wait for confirmation if requested
413
+ if (options.wait) {
414
+ if (!options.silent) {
415
+ console.log(chalk.cyan(`ā³ Waiting for confirmation...`));
416
+ }
417
+ const receipt = await publicClient.waitForTransactionReceipt({
418
+ hash: txHash,
419
+ timeout: (options.timeout || 300) * 1000,
420
+ });
421
+ result.gasUsed = receipt.gasUsed;
422
+ result.blockNumber = receipt.blockNumber;
423
+ result.confirmations = 1;
424
+ if (!options.silent) {
425
+ console.log(chalk.green(`āœ… Transaction confirmed in block ${receipt.blockNumber.toString()}`));
426
+ }
427
+ }
428
+ return result;
429
+ }
430
+ /**
431
+ * Resolve recipient (account index or address) - helper for batch sends
432
+ */
433
+ function resolveRecipientForBatch(to) {
434
+ // Check if it's a number (account index)
435
+ const accountIndex = parseInt(to, 10);
436
+ if (!isNaN(accountIndex) && to.trim() === accountIndex.toString()) {
437
+ // It's a number - try to resolve to account address
438
+ const accounts = config.getAllAccounts();
439
+ const account = accounts.find((acc) => acc.index === accountIndex);
440
+ if (!account) {
441
+ throw new Error(`Account at index ${accountIndex} not found. Use "httpcat account list" to see available accounts.`);
442
+ }
443
+ return account.address;
444
+ }
445
+ // Not a number - treat as address
446
+ return to;
447
+ }
448
+ /**
449
+ * Send batch transactions
450
+ */
451
+ export async function sendBatch(client, batchInput, privateKey, options = {}) {
452
+ // Parse batch input if it's a string (file path or JSON)
453
+ let batch;
454
+ if (typeof batchInput === "string") {
455
+ try {
456
+ // Try to read as file first
457
+ try {
458
+ const fileContent = readFileSync(batchInput, "utf-8");
459
+ batch = JSON.parse(fileContent);
460
+ }
461
+ catch {
462
+ // If file read fails, try parsing as JSON string
463
+ batch = JSON.parse(batchInput);
464
+ }
465
+ }
466
+ catch (error) {
467
+ throw new Error(`Failed to parse batch input: ${error instanceof Error ? error.message : "Unknown error"}`);
468
+ }
469
+ }
470
+ else {
471
+ batch = batchInput;
472
+ }
473
+ const results = [];
474
+ // Process native currency sends
475
+ if (batch.native && batch.native.length > 0) {
476
+ if (!options.silent) {
477
+ console.log(chalk.cyan(`\nšŸ“¦ Processing ${batch.native.length} native currency send(s)...`));
478
+ }
479
+ for (const item of batch.native) {
480
+ try {
481
+ // Resolve recipient (account index or address)
482
+ const recipientAddress = resolveRecipientForBatch(item.to);
483
+ const result = await sendNativeCurrency(client, recipientAddress, item.amount, privateKey, { ...options, silent: true } // Suppress individual confirmations in batch
484
+ );
485
+ results.push(result);
486
+ if (!options.silent) {
487
+ console.log(chalk.green(` āœ… Sent ${item.amount} ETH to ${recipientAddress}`));
488
+ }
489
+ }
490
+ catch (error) {
491
+ results.push({
492
+ success: false,
493
+ type: "native",
494
+ from: privateKeyToAccount(privateKey).address,
495
+ to: item.to,
496
+ amount: item.amount,
497
+ error: error instanceof Error ? error.message : "Unknown error",
498
+ });
499
+ if (!options.silent) {
500
+ console.log(chalk.red(` āŒ Failed to send ${item.amount} ETH to ${item.to}: ${error instanceof Error ? error.message : "Unknown error"}`));
501
+ }
502
+ }
503
+ }
504
+ }
505
+ // Process token sends
506
+ if (batch.tokens && batch.tokens.length > 0) {
507
+ if (!options.silent) {
508
+ console.log(chalk.cyan(`\nšŸ“¦ Processing ${batch.tokens.length} token send(s)...`));
509
+ }
510
+ for (const item of batch.tokens) {
511
+ if (!item.token) {
512
+ results.push({
513
+ success: false,
514
+ type: "token",
515
+ from: privateKeyToAccount(privateKey).address,
516
+ to: item.to,
517
+ amount: item.amount,
518
+ error: "Token identifier required",
519
+ });
520
+ continue;
521
+ }
522
+ try {
523
+ // Resolve recipient (account index or address)
524
+ const recipientAddress = resolveRecipientForBatch(item.to);
525
+ const result = await sendToken(client, item.token, recipientAddress, item.amount, privateKey, { ...options, silent: true } // Suppress individual confirmations in batch
526
+ );
527
+ results.push(result);
528
+ if (!options.silent) {
529
+ console.log(chalk.green(` āœ… Sent ${item.amount} ${result.tokenSymbol || "tokens"} to ${recipientAddress}`));
530
+ }
531
+ }
532
+ catch (error) {
533
+ results.push({
534
+ success: false,
535
+ type: "token",
536
+ from: privateKeyToAccount(privateKey).address,
537
+ to: item.to,
538
+ amount: item.amount,
539
+ tokenAddress: item.token,
540
+ error: error instanceof Error ? error.message : "Unknown error",
541
+ });
542
+ if (!options.silent) {
543
+ console.log(chalk.red(` āŒ Failed to send ${item.amount} ${item.token} to ${item.to}: ${error instanceof Error ? error.message : "Unknown error"}`));
544
+ }
545
+ }
546
+ }
547
+ }
548
+ return results;
549
+ }
550
+ /**
551
+ * Send custom transaction
552
+ */
553
+ export async function sendCustomTransaction(client, to, data, privateKey, value = 0n, options = {}) {
554
+ const account = privateKeyToAccount(privateKey);
555
+ const from = account.address;
556
+ const network = client.getNetwork();
557
+ const { chain } = await getNetworkConfig(network);
558
+ const publicClient = createPublicClient({
559
+ chain,
560
+ transport: createRpcTransport({
561
+ chainId: chain.id,
562
+ httpcatClient: client,
563
+ }),
564
+ });
565
+ const walletClient = createWalletClient({
566
+ account,
567
+ chain,
568
+ transport: createRpcTransport({
569
+ chainId: chain.id,
570
+ httpcatClient: client,
571
+ }),
572
+ });
573
+ // Validate address
574
+ const toAddress = validateAddress(to);
575
+ // Validate data
576
+ if (!data || !data.startsWith("0x")) {
577
+ throw new Error("Invalid transaction data. Must be hex string starting with 0x");
578
+ }
579
+ // Get gas configuration
580
+ const gasConfig = await getGasConfig(publicClient, options);
581
+ // Estimate gas (don't include gas config in estimation)
582
+ let estimatedGas;
583
+ try {
584
+ estimatedGas = await publicClient.estimateGas({
585
+ account: from,
586
+ to: toAddress,
587
+ data,
588
+ value,
589
+ });
590
+ }
591
+ catch (error) {
592
+ throw new Error(`Failed to estimate gas: ${error instanceof Error ? error.message : "Unknown error"}`);
593
+ }
594
+ // Check ETH balance for gas + value
595
+ const ethBalance = await publicClient.getBalance({ address: from });
596
+ const estimatedGasCost = (gasConfig.gas || estimatedGas) *
597
+ (gasConfig.gasPrice || gasConfig.maxFeePerGas || 0n);
598
+ const totalNeeded = value + estimatedGasCost;
599
+ if (ethBalance < totalNeeded) {
600
+ throw new Error(`Insufficient ETH. Need ${formatEther(totalNeeded)} ETH (${formatEther(value)} value + ${formatEther(estimatedGasCost)} gas)`);
601
+ }
602
+ // Show summary
603
+ if (!options.silent) {
604
+ console.log(chalk.cyan(`\nšŸ“¤ Sending custom transaction to ${toAddress}...`));
605
+ console.log(chalk.dim(`Data: ${data.substring(0, 66)}...`));
606
+ console.log(chalk.dim(`Value: ${formatEther(value)} ETH`));
607
+ console.log(chalk.dim(`Estimated Gas: ${estimatedGas.toString()}`));
608
+ }
609
+ // Dry run mode
610
+ if (options.dryRun) {
611
+ if (!options.silent) {
612
+ console.log(chalk.yellow("\nšŸ” Dry Run Mode - Transaction not broadcast\n"));
613
+ }
614
+ return {
615
+ success: true,
616
+ type: "custom",
617
+ from,
618
+ to: toAddress,
619
+ gasUsed: estimatedGas,
620
+ };
621
+ }
622
+ // Build transaction
623
+ // Note: Don't include 'account' field - walletClient already has it configured
624
+ const txRequest = {
625
+ to: toAddress,
626
+ data,
627
+ value,
628
+ gas: gasConfig.gas || estimatedGas,
629
+ ...gasConfig,
630
+ };
631
+ // Set nonce if provided
632
+ if (options.nonce !== undefined) {
633
+ txRequest.nonce = options.nonce;
634
+ }
635
+ const txHash = await walletClient.sendTransaction(txRequest);
636
+ let result = {
637
+ success: true,
638
+ type: "custom",
639
+ txHash,
640
+ from,
641
+ to: toAddress,
642
+ };
643
+ // Wait for confirmation if requested
644
+ if (options.wait) {
645
+ if (!options.silent) {
646
+ console.log(chalk.cyan(`ā³ Waiting for confirmation...`));
647
+ }
648
+ const receipt = await publicClient.waitForTransactionReceipt({
649
+ hash: txHash,
650
+ timeout: (options.timeout || 300) * 1000,
651
+ });
652
+ result.gasUsed = receipt.gasUsed;
653
+ result.blockNumber = receipt.blockNumber;
654
+ result.confirmations = 1;
655
+ if (!options.silent) {
656
+ console.log(chalk.green(`āœ… Transaction confirmed in block ${receipt.blockNumber.toString()}`));
657
+ }
658
+ }
659
+ return result;
660
+ }
661
+ /**
662
+ * Display send result for interactive mode
663
+ */
664
+ export function displaySendResult(result) {
665
+ console.log();
666
+ printSuccess(result.success ? "Transaction sent successfully!" : "Transaction failed");
667
+ const boxData = {
668
+ Type: chalk.cyan(result.type.toUpperCase()),
669
+ From: formatAddress(result.from),
670
+ To: formatAddress(result.to),
671
+ };
672
+ if (result.amount) {
673
+ boxData["Amount"] = chalk.green(result.amount + (result.tokenSymbol ? ` ${result.tokenSymbol}` : " ETH"));
674
+ }
675
+ if (result.tokenAddress) {
676
+ boxData["Token"] = formatAddress(result.tokenAddress);
677
+ }
678
+ if (result.txHash) {
679
+ boxData["Transaction"] = chalk.blue(result.txHash);
680
+ }
681
+ if (result.gasUsed) {
682
+ boxData["Gas Used"] = result.gasUsed.toString();
683
+ }
684
+ if (result.blockNumber) {
685
+ boxData["Block"] = result.blockNumber.toString();
686
+ }
687
+ if (result.error) {
688
+ boxData["Error"] = chalk.red(result.error);
689
+ }
690
+ printBox("Send Result", boxData);
691
+ console.log();
692
+ }
693
+ /**
694
+ * Display batch send results
695
+ */
696
+ export function displayBatchResults(results) {
697
+ const successful = results.filter((r) => r.success);
698
+ const failed = results.filter((r) => !r.success);
699
+ console.log();
700
+ printSuccess(`Batch send completed: ${successful.length} successful, ${failed.length} failed`);
701
+ console.log(chalk.magenta.bold("šŸ“¦ Batch Send Summary"));
702
+ console.log();
703
+ const table = new Table({
704
+ head: [
705
+ chalk.blue.bold("Status"),
706
+ chalk.cyan.bold("Type"),
707
+ chalk.green.bold("To"),
708
+ chalk.yellow.bold("Amount"),
709
+ chalk.magenta.bold("Tx Hash"),
710
+ ],
711
+ colAligns: ["left", "left", "left", "right", "left"],
712
+ });
713
+ for (const result of results) {
714
+ const status = result.success ? chalk.green("āœ…") : chalk.red("āŒ");
715
+ const type = result.type.toUpperCase();
716
+ const to = formatAddress(result.to);
717
+ const amount = result.amount
718
+ ? result.amount + (result.tokenSymbol ? ` ${result.tokenSymbol}` : " ETH")
719
+ : "-";
720
+ const txHash = result.txHash
721
+ ? chalk.blue(result.txHash.substring(0, 20) + "...")
722
+ : chalk.red(result.error || "-");
723
+ table.push([status, type, to, amount, txHash]);
724
+ }
725
+ console.log(table.toString());
726
+ console.log();
727
+ console.log(chalk.green(`āœ… Successful: ${successful.length}`));
728
+ if (failed.length > 0) {
729
+ console.log(chalk.red(`āŒ Failed: ${failed.length}`));
730
+ }
731
+ console.log();
732
+ }
733
+ //# sourceMappingURL=send.js.map