@zeroexcore/trader 1.0.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 (323) hide show
  1. package/README.md +125 -0
  2. package/dist/cli.d.ts +3 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +28 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/book.d.ts +3 -0
  7. package/dist/commands/book.d.ts.map +1 -0
  8. package/dist/commands/book.js +44 -0
  9. package/dist/commands/book.js.map +1 -0
  10. package/dist/commands/diagnose.d.ts +3 -0
  11. package/dist/commands/diagnose.d.ts.map +1 -0
  12. package/dist/commands/diagnose.js +148 -0
  13. package/dist/commands/diagnose.js.map +1 -0
  14. package/dist/commands/nft/floor.d.ts +3 -0
  15. package/dist/commands/nft/floor.d.ts.map +1 -0
  16. package/dist/commands/nft/floor.js +30 -0
  17. package/dist/commands/nft/floor.js.map +1 -0
  18. package/dist/commands/nft/index.d.ts +3 -0
  19. package/dist/commands/nft/index.d.ts.map +1 -0
  20. package/dist/commands/nft/index.js +14 -0
  21. package/dist/commands/nft/index.js.map +1 -0
  22. package/dist/commands/nft/listings.d.ts +3 -0
  23. package/dist/commands/nft/listings.d.ts.map +1 -0
  24. package/dist/commands/nft/listings.js +37 -0
  25. package/dist/commands/nft/listings.js.map +1 -0
  26. package/dist/commands/nft/popular.d.ts +3 -0
  27. package/dist/commands/nft/popular.d.ts.map +1 -0
  28. package/dist/commands/nft/popular.js +32 -0
  29. package/dist/commands/nft/popular.js.map +1 -0
  30. package/dist/commands/nft/portfolio.d.ts +3 -0
  31. package/dist/commands/nft/portfolio.d.ts.map +1 -0
  32. package/dist/commands/nft/portfolio.js +43 -0
  33. package/dist/commands/nft/portfolio.js.map +1 -0
  34. package/dist/commands/nft/search.d.ts +3 -0
  35. package/dist/commands/nft/search.d.ts.map +1 -0
  36. package/dist/commands/nft/search.js +36 -0
  37. package/dist/commands/nft/search.js.map +1 -0
  38. package/dist/commands/nft.d.ts +3 -0
  39. package/dist/commands/nft.d.ts.map +1 -0
  40. package/dist/commands/nft.js +165 -0
  41. package/dist/commands/nft.js.map +1 -0
  42. package/dist/commands/nfts/floor.d.ts +3 -0
  43. package/dist/commands/nfts/floor.d.ts.map +1 -0
  44. package/dist/commands/nfts/floor.js +30 -0
  45. package/dist/commands/nfts/floor.js.map +1 -0
  46. package/dist/commands/nfts/index.d.ts +3 -0
  47. package/dist/commands/nfts/index.d.ts.map +1 -0
  48. package/dist/commands/nfts/index.js +14 -0
  49. package/dist/commands/nfts/index.js.map +1 -0
  50. package/dist/commands/nfts/listings.d.ts +3 -0
  51. package/dist/commands/nfts/listings.d.ts.map +1 -0
  52. package/dist/commands/nfts/listings.js +37 -0
  53. package/dist/commands/nfts/listings.js.map +1 -0
  54. package/dist/commands/nfts/popular.d.ts +3 -0
  55. package/dist/commands/nfts/popular.d.ts.map +1 -0
  56. package/dist/commands/nfts/popular.js +32 -0
  57. package/dist/commands/nfts/popular.js.map +1 -0
  58. package/dist/commands/nfts/positions.d.ts +3 -0
  59. package/dist/commands/nfts/positions.d.ts.map +1 -0
  60. package/dist/commands/nfts/positions.js +23 -0
  61. package/dist/commands/nfts/positions.js.map +1 -0
  62. package/dist/commands/nfts/search.d.ts +3 -0
  63. package/dist/commands/nfts/search.d.ts.map +1 -0
  64. package/dist/commands/nfts/search.js +36 -0
  65. package/dist/commands/nfts/search.js.map +1 -0
  66. package/dist/commands/perps/index.d.ts +3 -0
  67. package/dist/commands/perps/index.d.ts.map +1 -0
  68. package/dist/commands/perps/index.js +10 -0
  69. package/dist/commands/perps/index.js.map +1 -0
  70. package/dist/commands/perps/info.d.ts +3 -0
  71. package/dist/commands/perps/info.d.ts.map +1 -0
  72. package/dist/commands/perps/info.js +51 -0
  73. package/dist/commands/perps/info.js.map +1 -0
  74. package/dist/commands/perps/markets.d.ts +3 -0
  75. package/dist/commands/perps/markets.d.ts.map +1 -0
  76. package/dist/commands/perps/markets.js +43 -0
  77. package/dist/commands/perps/markets.js.map +1 -0
  78. package/dist/commands/perps/pool.d.ts +3 -0
  79. package/dist/commands/perps/pool.d.ts.map +1 -0
  80. package/dist/commands/perps/pool.js +33 -0
  81. package/dist/commands/perps/pool.js.map +1 -0
  82. package/dist/commands/perps/positions.d.ts +3 -0
  83. package/dist/commands/perps/positions.d.ts.map +1 -0
  84. package/dist/commands/perps/positions.js +68 -0
  85. package/dist/commands/perps/positions.js.map +1 -0
  86. package/dist/commands/perps/show.d.ts +3 -0
  87. package/dist/commands/perps/show.d.ts.map +1 -0
  88. package/dist/commands/perps/show.js +37 -0
  89. package/dist/commands/perps/show.js.map +1 -0
  90. package/dist/commands/perps.d.ts +3 -0
  91. package/dist/commands/perps.d.ts.map +1 -0
  92. package/dist/commands/perps.js +186 -0
  93. package/dist/commands/perps.js.map +1 -0
  94. package/dist/commands/portfolio.d.ts +3 -0
  95. package/dist/commands/portfolio.d.ts.map +1 -0
  96. package/dist/commands/portfolio.js +89 -0
  97. package/dist/commands/portfolio.js.map +1 -0
  98. package/dist/commands/positions/close.d.ts +3 -0
  99. package/dist/commands/positions/close.d.ts.map +1 -0
  100. package/dist/commands/positions/close.js +31 -0
  101. package/dist/commands/positions/close.js.map +1 -0
  102. package/dist/commands/positions/filter.d.ts +3 -0
  103. package/dist/commands/positions/filter.d.ts.map +1 -0
  104. package/dist/commands/positions/filter.js +20 -0
  105. package/dist/commands/positions/filter.js.map +1 -0
  106. package/dist/commands/positions/index.d.ts +3 -0
  107. package/dist/commands/positions/index.d.ts.map +1 -0
  108. package/dist/commands/positions/index.js +22 -0
  109. package/dist/commands/positions/index.js.map +1 -0
  110. package/dist/commands/positions/list.d.ts +3 -0
  111. package/dist/commands/positions/list.d.ts.map +1 -0
  112. package/dist/commands/positions/list.js +38 -0
  113. package/dist/commands/positions/list.js.map +1 -0
  114. package/dist/commands/positions/note.d.ts +3 -0
  115. package/dist/commands/positions/note.d.ts.map +1 -0
  116. package/dist/commands/positions/note.js +19 -0
  117. package/dist/commands/positions/note.js.map +1 -0
  118. package/dist/commands/positions/open.d.ts +3 -0
  119. package/dist/commands/positions/open.d.ts.map +1 -0
  120. package/dist/commands/positions/open.js +47 -0
  121. package/dist/commands/positions/open.js.map +1 -0
  122. package/dist/commands/positions/show.d.ts +3 -0
  123. package/dist/commands/positions/show.d.ts.map +1 -0
  124. package/dist/commands/positions/show.js +46 -0
  125. package/dist/commands/positions/show.js.map +1 -0
  126. package/dist/commands/positions/stats.d.ts +3 -0
  127. package/dist/commands/positions/stats.d.ts.map +1 -0
  128. package/dist/commands/positions/stats.js +27 -0
  129. package/dist/commands/positions/stats.js.map +1 -0
  130. package/dist/commands/positions/tag.d.ts +3 -0
  131. package/dist/commands/positions/tag.d.ts.map +1 -0
  132. package/dist/commands/positions/tag.js +19 -0
  133. package/dist/commands/positions/tag.js.map +1 -0
  134. package/dist/commands/positions/update.d.ts +3 -0
  135. package/dist/commands/positions/update.d.ts.map +1 -0
  136. package/dist/commands/positions/update.js +35 -0
  137. package/dist/commands/positions/update.js.map +1 -0
  138. package/dist/commands/positions.d.ts +3 -0
  139. package/dist/commands/positions.d.ts.map +1 -0
  140. package/dist/commands/positions.js +247 -0
  141. package/dist/commands/positions.js.map +1 -0
  142. package/dist/commands/predict/browse.d.ts +3 -0
  143. package/dist/commands/predict/browse.d.ts.map +1 -0
  144. package/dist/commands/predict/browse.js +46 -0
  145. package/dist/commands/predict/browse.js.map +1 -0
  146. package/dist/commands/predict/buy.d.ts +3 -0
  147. package/dist/commands/predict/buy.d.ts.map +1 -0
  148. package/dist/commands/predict/buy.js +79 -0
  149. package/dist/commands/predict/buy.js.map +1 -0
  150. package/dist/commands/predict/claim.d.ts +3 -0
  151. package/dist/commands/predict/claim.d.ts.map +1 -0
  152. package/dist/commands/predict/claim.js +58 -0
  153. package/dist/commands/predict/claim.js.map +1 -0
  154. package/dist/commands/predict/close.d.ts +3 -0
  155. package/dist/commands/predict/close.d.ts.map +1 -0
  156. package/dist/commands/predict/close.js +56 -0
  157. package/dist/commands/predict/close.js.map +1 -0
  158. package/dist/commands/predict/index.d.ts +3 -0
  159. package/dist/commands/predict/index.d.ts.map +1 -0
  160. package/dist/commands/predict/index.js +20 -0
  161. package/dist/commands/predict/index.js.map +1 -0
  162. package/dist/commands/predict/list.d.ts +3 -0
  163. package/dist/commands/predict/list.d.ts.map +1 -0
  164. package/dist/commands/predict/list.js +46 -0
  165. package/dist/commands/predict/list.js.map +1 -0
  166. package/dist/commands/predict/market.d.ts +3 -0
  167. package/dist/commands/predict/market.d.ts.map +1 -0
  168. package/dist/commands/predict/market.js +37 -0
  169. package/dist/commands/predict/market.js.map +1 -0
  170. package/dist/commands/predict/positions.d.ts +3 -0
  171. package/dist/commands/predict/positions.d.ts.map +1 -0
  172. package/dist/commands/predict/positions.js +71 -0
  173. package/dist/commands/predict/positions.js.map +1 -0
  174. package/dist/commands/predict/search.d.ts +3 -0
  175. package/dist/commands/predict/search.d.ts.map +1 -0
  176. package/dist/commands/predict/search.js +32 -0
  177. package/dist/commands/predict/search.js.map +1 -0
  178. package/dist/commands/predict/sell.d.ts +3 -0
  179. package/dist/commands/predict/sell.d.ts.map +1 -0
  180. package/dist/commands/predict/sell.js +65 -0
  181. package/dist/commands/predict/sell.js.map +1 -0
  182. package/dist/commands/predict/show.d.ts +3 -0
  183. package/dist/commands/predict/show.d.ts.map +1 -0
  184. package/dist/commands/predict/show.js +37 -0
  185. package/dist/commands/predict/show.js.map +1 -0
  186. package/dist/commands/predict/watch.d.ts +3 -0
  187. package/dist/commands/predict/watch.d.ts.map +1 -0
  188. package/dist/commands/predict/watch.js +73 -0
  189. package/dist/commands/predict/watch.js.map +1 -0
  190. package/dist/commands/predict.d.ts +3 -0
  191. package/dist/commands/predict.d.ts.map +1 -0
  192. package/dist/commands/predict.js +484 -0
  193. package/dist/commands/predict.js.map +1 -0
  194. package/dist/commands/shared.d.ts +18 -0
  195. package/dist/commands/shared.d.ts.map +1 -0
  196. package/dist/commands/shared.js +51 -0
  197. package/dist/commands/shared.js.map +1 -0
  198. package/dist/commands/tokens/add.d.ts +3 -0
  199. package/dist/commands/tokens/add.d.ts.map +1 -0
  200. package/dist/commands/tokens/add.js +17 -0
  201. package/dist/commands/tokens/add.js.map +1 -0
  202. package/dist/commands/tokens/browse.d.ts +3 -0
  203. package/dist/commands/tokens/browse.d.ts.map +1 -0
  204. package/dist/commands/tokens/browse.js +19 -0
  205. package/dist/commands/tokens/browse.js.map +1 -0
  206. package/dist/commands/tokens/index.d.ts +3 -0
  207. package/dist/commands/tokens/index.d.ts.map +1 -0
  208. package/dist/commands/tokens/index.js +22 -0
  209. package/dist/commands/tokens/index.js.map +1 -0
  210. package/dist/commands/tokens/info.d.ts +3 -0
  211. package/dist/commands/tokens/info.d.ts.map +1 -0
  212. package/dist/commands/tokens/info.js +13 -0
  213. package/dist/commands/tokens/info.js.map +1 -0
  214. package/dist/commands/tokens/list.d.ts +3 -0
  215. package/dist/commands/tokens/list.d.ts.map +1 -0
  216. package/dist/commands/tokens/list.js +16 -0
  217. package/dist/commands/tokens/list.js.map +1 -0
  218. package/dist/commands/tokens/positions.d.ts +3 -0
  219. package/dist/commands/tokens/positions.d.ts.map +1 -0
  220. package/dist/commands/tokens/positions.js +25 -0
  221. package/dist/commands/tokens/positions.js.map +1 -0
  222. package/dist/commands/tokens/quote.d.ts +3 -0
  223. package/dist/commands/tokens/quote.d.ts.map +1 -0
  224. package/dist/commands/tokens/quote.js +50 -0
  225. package/dist/commands/tokens/quote.js.map +1 -0
  226. package/dist/commands/tokens/remove.d.ts +3 -0
  227. package/dist/commands/tokens/remove.d.ts.map +1 -0
  228. package/dist/commands/tokens/remove.js +17 -0
  229. package/dist/commands/tokens/remove.js.map +1 -0
  230. package/dist/commands/tokens/search.d.ts +3 -0
  231. package/dist/commands/tokens/search.d.ts.map +1 -0
  232. package/dist/commands/tokens/search.js +19 -0
  233. package/dist/commands/tokens/search.js.map +1 -0
  234. package/dist/commands/tokens/swap.d.ts +3 -0
  235. package/dist/commands/tokens/swap.d.ts.map +1 -0
  236. package/dist/commands/tokens/swap.js +88 -0
  237. package/dist/commands/tokens/swap.js.map +1 -0
  238. package/dist/commands/trade/index.d.ts +3 -0
  239. package/dist/commands/trade/index.d.ts.map +1 -0
  240. package/dist/commands/trade/index.js +8 -0
  241. package/dist/commands/trade/index.js.map +1 -0
  242. package/dist/commands/trade/info.d.ts +3 -0
  243. package/dist/commands/trade/info.d.ts.map +1 -0
  244. package/dist/commands/trade/info.js +37 -0
  245. package/dist/commands/trade/info.js.map +1 -0
  246. package/dist/commands/trade/quote.d.ts +3 -0
  247. package/dist/commands/trade/quote.d.ts.map +1 -0
  248. package/dist/commands/trade/quote.js +56 -0
  249. package/dist/commands/trade/quote.js.map +1 -0
  250. package/dist/commands/trade/search.d.ts +3 -0
  251. package/dist/commands/trade/search.d.ts.map +1 -0
  252. package/dist/commands/trade/search.js +22 -0
  253. package/dist/commands/trade/search.js.map +1 -0
  254. package/dist/commands/trade/swap.d.ts +3 -0
  255. package/dist/commands/trade/swap.d.ts.map +1 -0
  256. package/dist/commands/trade/swap.js +70 -0
  257. package/dist/commands/trade/swap.js.map +1 -0
  258. package/dist/commands/trade.d.ts +5 -0
  259. package/dist/commands/trade.d.ts.map +1 -0
  260. package/dist/commands/trade.js +167 -0
  261. package/dist/commands/trade.js.map +1 -0
  262. package/dist/commands/wallet.d.ts +3 -0
  263. package/dist/commands/wallet.d.ts.map +1 -0
  264. package/dist/commands/wallet.js +45 -0
  265. package/dist/commands/wallet.js.map +1 -0
  266. package/dist/config.d.ts +86 -0
  267. package/dist/config.d.ts.map +1 -0
  268. package/dist/config.js +169 -0
  269. package/dist/config.js.map +1 -0
  270. package/dist/utils/amounts.d.ts +40 -0
  271. package/dist/utils/amounts.d.ts.map +1 -0
  272. package/dist/utils/amounts.js +113 -0
  273. package/dist/utils/amounts.js.map +1 -0
  274. package/dist/utils/helius.d.ts +39 -0
  275. package/dist/utils/helius.d.ts.map +1 -0
  276. package/dist/utils/helius.js +253 -0
  277. package/dist/utils/helius.js.map +1 -0
  278. package/dist/utils/jupiter.d.ts +42 -0
  279. package/dist/utils/jupiter.d.ts.map +1 -0
  280. package/dist/utils/jupiter.js +106 -0
  281. package/dist/utils/jupiter.js.map +1 -0
  282. package/dist/utils/nft.d.ts +75 -0
  283. package/dist/utils/nft.d.ts.map +1 -0
  284. package/dist/utils/nft.js +168 -0
  285. package/dist/utils/nft.js.map +1 -0
  286. package/dist/utils/perps/doves-idl.d.ts +380 -0
  287. package/dist/utils/perps/doves-idl.d.ts.map +1 -0
  288. package/dist/utils/perps/doves-idl.js +379 -0
  289. package/dist/utils/perps/doves-idl.js.map +1 -0
  290. package/dist/utils/perps/idl.json +7241 -0
  291. package/dist/utils/perps/index.d.ts +45 -0
  292. package/dist/utils/perps/index.d.ts.map +1 -0
  293. package/dist/utils/perps/index.js +102 -0
  294. package/dist/utils/perps/index.js.map +1 -0
  295. package/dist/utils/perps/jupiter-perpetuals-idl.d.ts +7243 -0
  296. package/dist/utils/perps/jupiter-perpetuals-idl.d.ts.map +1 -0
  297. package/dist/utils/perps/jupiter-perpetuals-idl.js +7242 -0
  298. package/dist/utils/perps/jupiter-perpetuals-idl.js.map +1 -0
  299. package/dist/utils/positions.d.ts +198 -0
  300. package/dist/utils/positions.d.ts.map +1 -0
  301. package/dist/utils/positions.js +595 -0
  302. package/dist/utils/positions.js.map +1 -0
  303. package/dist/utils/prediction.d.ts +196 -0
  304. package/dist/utils/prediction.d.ts.map +1 -0
  305. package/dist/utils/prediction.js +187 -0
  306. package/dist/utils/prediction.js.map +1 -0
  307. package/dist/utils/solana.d.ts +9 -0
  308. package/dist/utils/solana.d.ts.map +1 -0
  309. package/dist/utils/solana.js +45 -0
  310. package/dist/utils/solana.js.map +1 -0
  311. package/dist/utils/token-book.d.ts +9 -0
  312. package/dist/utils/token-book.d.ts.map +1 -0
  313. package/dist/utils/token-book.js +69 -0
  314. package/dist/utils/token-book.js.map +1 -0
  315. package/dist/utils/token-info.d.ts +48 -0
  316. package/dist/utils/token-info.d.ts.map +1 -0
  317. package/dist/utils/token-info.js +332 -0
  318. package/dist/utils/token-info.js.map +1 -0
  319. package/dist/utils/wallet.d.ts +31 -0
  320. package/dist/utils/wallet.d.ts.map +1 -0
  321. package/dist/utils/wallet.js +181 -0
  322. package/dist/utils/wallet.js.map +1 -0
  323. package/package.json +46 -0
@@ -0,0 +1,113 @@
1
+ import Big from 'big.js';
2
+ import { requireHeliusKey, apis, tokens, getDecimalsFromCache } from '../config.js';
3
+ /**
4
+ * Convert human-readable amount to smallest unit (with decimals)
5
+ * Uses Big.js for precision - safe for large numbers and financial calculations
6
+ *
7
+ * Examples:
8
+ * toSmallestUnit(1, 9) = "1000000000" (1 SOL)
9
+ * toSmallestUnit(100, 6) = "100000000" (100 USDC)
10
+ * toSmallestUnit(0.000001, 9) = "1000" (0.000001 SOL)
11
+ */
12
+ export function toSmallestUnit(amount, decimals) {
13
+ try {
14
+ const bigAmount = new Big(amount);
15
+ const multiplier = new Big(10).pow(decimals);
16
+ const result = bigAmount.times(multiplier);
17
+ // Return as integer string (no decimals in smallest unit)
18
+ return result.round(0, Big.roundDown).toFixed(0);
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Invalid amount for conversion: ${amount}`);
22
+ }
23
+ }
24
+ /**
25
+ * Convert smallest unit to human-readable amount
26
+ * Uses Big.js for precision
27
+ *
28
+ * Examples:
29
+ * fromSmallestUnit('1000000000', 9) = "1" (1 SOL)
30
+ * fromSmallestUnit('100000000', 6) = "100" (100 USDC)
31
+ */
32
+ export function fromSmallestUnit(amount, decimals) {
33
+ try {
34
+ const bigAmount = new Big(amount);
35
+ const divisor = new Big(10).pow(decimals);
36
+ const result = bigAmount.div(divisor);
37
+ return result.toFixed(); // Returns string with appropriate precision
38
+ }
39
+ catch (error) {
40
+ throw new Error(`Invalid amount for conversion: ${amount}`);
41
+ }
42
+ }
43
+ /**
44
+ * Safe multiplication for token amounts
45
+ */
46
+ export function multiplyAmounts(amount1, amount2) {
47
+ const big1 = new Big(amount1);
48
+ const big2 = new Big(amount2);
49
+ return big1.times(big2).toFixed();
50
+ }
51
+ /**
52
+ * Safe division for token amounts
53
+ */
54
+ export function divideAmounts(amount1, amount2) {
55
+ const big1 = new Big(amount1);
56
+ const big2 = new Big(amount2);
57
+ return big1.div(big2).toFixed();
58
+ }
59
+ /**
60
+ * Safe addition for token amounts
61
+ */
62
+ export function addAmounts(amount1, amount2) {
63
+ const big1 = new Big(amount1);
64
+ const big2 = new Big(amount2);
65
+ return big1.plus(big2).toFixed();
66
+ }
67
+ /**
68
+ * Safe subtraction for token amounts
69
+ */
70
+ export function subtractAmounts(amount1, amount2) {
71
+ const big1 = new Big(amount1);
72
+ const big2 = new Big(amount2);
73
+ return big1.minus(big2).toFixed();
74
+ }
75
+ /**
76
+ * Get token decimals from Helius or cache
77
+ */
78
+ export async function getTokenDecimals(mintAddress) {
79
+ const heliusApiKey = requireHeliusKey();
80
+ // Special case for native SOL
81
+ if (mintAddress === tokens.SOL) {
82
+ return 9;
83
+ }
84
+ // Check centralized cache first
85
+ const cached = getDecimalsFromCache(mintAddress);
86
+ if (cached !== undefined) {
87
+ return cached;
88
+ }
89
+ // Fetch from Helius DAS API
90
+ try {
91
+ const url = apis.heliusRpc(heliusApiKey);
92
+ const response = await fetch(url, {
93
+ method: 'POST',
94
+ headers: { 'Content-Type': 'application/json' },
95
+ body: JSON.stringify({
96
+ jsonrpc: '2.0',
97
+ id: 'decimals',
98
+ method: 'getAsset',
99
+ params: { id: mintAddress },
100
+ }),
101
+ });
102
+ const { result } = await response.json();
103
+ if (result?.token_info?.decimals !== undefined) {
104
+ return result.token_info.decimals;
105
+ }
106
+ }
107
+ catch (error) {
108
+ console.warn('Failed to fetch decimals from Helius, defaulting to 9');
109
+ }
110
+ // Default to 9 if we can't fetch (most SPL tokens use 9)
111
+ return 9;
112
+ }
113
+ //# sourceMappingURL=amounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amounts.js","sourceRoot":"","sources":["../../src/utils/amounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface TokenBalance {
2
+ name: string;
3
+ symbol: string;
4
+ mint: string;
5
+ balance: number;
6
+ decimals: number;
7
+ valueUsd: number;
8
+ pricePerToken: number;
9
+ }
10
+ export interface PortfolioData {
11
+ totalValueUsd: number;
12
+ tokens: TokenBalance[];
13
+ }
14
+ /**
15
+ * Fetch portfolio using Helius DAS API
16
+ */
17
+ export declare function getPortfolio(address: string): Promise<PortfolioData>;
18
+ /**
19
+ * Get transaction history for PnL calculation
20
+ */
21
+ export declare function getTransactionHistory(address: string, mint?: string): Promise<any[]>;
22
+ /**
23
+ * Calculate PnL for a specific token
24
+ */
25
+ export declare function calculatePnL(address: string, mint: string): Promise<{
26
+ mint: string;
27
+ totalBought: number;
28
+ totalSold: number;
29
+ currentHolding: number;
30
+ costBasis: number;
31
+ avgPurchasePrice: number;
32
+ currentPrice: number;
33
+ priceChange: number;
34
+ currentValue: number;
35
+ realizedPnL: number;
36
+ unrealizedPnL: number;
37
+ totalPnL: number;
38
+ }>;
39
+ //# sourceMappingURL=helius.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helius.d.ts","sourceRoot":"","sources":["../../src/utils/helius.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA+I1E;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,EAAE,CAAC,CAehB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;;;;;;;;;;;;;GA+G/D"}
@@ -0,0 +1,253 @@
1
+ import { requireHeliusKey, apis, tokens } from '../config.js';
2
+ /**
3
+ * Fetch portfolio using Helius DAS API
4
+ */
5
+ export async function getPortfolio(address) {
6
+ const heliusApiKey = requireHeliusKey();
7
+ const url = apis.heliusRpc(heliusApiKey);
8
+ const response = await fetch(url, {
9
+ method: 'POST',
10
+ headers: { 'Content-Type': 'application/json' },
11
+ body: JSON.stringify({
12
+ jsonrpc: '2.0',
13
+ id: 'portfolio-fetch',
14
+ method: 'getAssetsByOwner',
15
+ params: {
16
+ ownerAddress: address,
17
+ displayOptions: {
18
+ showFungible: true,
19
+ showNativeBalance: true,
20
+ },
21
+ },
22
+ }),
23
+ });
24
+ const data = await response.json();
25
+ if (data.error) {
26
+ throw new Error(`Helius API error: ${data.error.message}`);
27
+ }
28
+ const tokenBalances = [];
29
+ let totalValueUsd = 0;
30
+ // Get native SOL balance separately using getBalance RPC call
31
+ try {
32
+ const solBalanceResponse = await fetch(url, {
33
+ method: 'POST',
34
+ headers: { 'Content-Type': 'application/json' },
35
+ body: JSON.stringify({
36
+ jsonrpc: '2.0',
37
+ id: 'sol-balance',
38
+ method: 'getBalance',
39
+ params: [address],
40
+ }),
41
+ });
42
+ const solData = await solBalanceResponse.json();
43
+ if (solData.result && solData.result.value > 0) {
44
+ const solBalance = solData.result.value / 1e9; // Convert lamports to SOL
45
+ // Get SOL price from Helius DAS API (same as wSOL)
46
+ // SOL/wSOL are the same token, DAS API provides USDC price
47
+ let solPrice = 0;
48
+ try {
49
+ const solPriceResponse = await fetch(url, {
50
+ method: 'POST',
51
+ headers: { 'Content-Type': 'application/json' },
52
+ body: JSON.stringify({
53
+ jsonrpc: '2.0',
54
+ id: 'sol-price',
55
+ method: 'getAsset',
56
+ params: {
57
+ id: tokens.SOL,
58
+ },
59
+ }),
60
+ });
61
+ const solPriceData = await solPriceResponse.json();
62
+ if (solPriceData.result?.token_info?.price_info?.price_per_token) {
63
+ solPrice = solPriceData.result.token_info.price_info.price_per_token;
64
+ }
65
+ }
66
+ catch (e) {
67
+ console.warn('Unable to fetch SOL price from Helius DAS API');
68
+ solPrice = 0;
69
+ }
70
+ const solValueUsd = solBalance * solPrice;
71
+ tokenBalances.push({
72
+ name: 'Solana',
73
+ symbol: 'SOL',
74
+ mint: tokens.SOL,
75
+ balance: solBalance,
76
+ decimals: 9,
77
+ valueUsd: solValueUsd,
78
+ pricePerToken: solPrice,
79
+ });
80
+ totalValueUsd += solValueUsd;
81
+ }
82
+ }
83
+ catch (error) {
84
+ console.error('Error fetching SOL balance:', error);
85
+ }
86
+ // Process fungible tokens (SPL tokens)
87
+ for (const asset of data.result?.items || []) {
88
+ if (asset.interface === 'FungibleToken' || asset.interface === 'FungibleAsset') {
89
+ const balance = asset.token_info?.balance || 0;
90
+ const decimals = asset.token_info?.decimals || 0;
91
+ const normalizedBalance = balance / Math.pow(10, decimals);
92
+ let pricePerToken = asset.token_info?.price_info?.price_per_token || 0;
93
+ // If Helius doesn't have price, try Jupiter quote vs USDC
94
+ if (pricePerToken === 0 && normalizedBalance > 0) {
95
+ try {
96
+ const quoteUrl = new URL(apis.jupiterQuote);
97
+ quoteUrl.searchParams.append('inputMint', asset.id);
98
+ quoteUrl.searchParams.append('outputMint', tokens.USDC);
99
+ quoteUrl.searchParams.append('amount', Math.pow(10, decimals).toString()); // 1 token
100
+ const quoteResponse = await fetch(quoteUrl.toString());
101
+ const quoteData = await quoteResponse.json();
102
+ if (quoteData.outAmount) {
103
+ pricePerToken = parseFloat(quoteData.outAmount) / 1e6; // USDC has 6 decimals
104
+ }
105
+ }
106
+ catch (e) {
107
+ // Silently fail, keep price as 0
108
+ }
109
+ }
110
+ const valueUsd = normalizedBalance * pricePerToken;
111
+ tokenBalances.push({
112
+ name: asset.content?.metadata?.name || 'Unknown',
113
+ symbol: asset.content?.metadata?.symbol || '???',
114
+ mint: asset.id,
115
+ balance: normalizedBalance,
116
+ decimals,
117
+ valueUsd,
118
+ pricePerToken,
119
+ });
120
+ totalValueUsd += valueUsd;
121
+ }
122
+ }
123
+ // Sort by USD value descending
124
+ tokenBalances.sort((a, b) => b.valueUsd - a.valueUsd);
125
+ return {
126
+ totalValueUsd,
127
+ tokens: tokenBalances,
128
+ };
129
+ }
130
+ /**
131
+ * Get transaction history for PnL calculation
132
+ */
133
+ export async function getTransactionHistory(address, mint) {
134
+ const heliusApiKey = requireHeliusKey();
135
+ const url = apis.heliusTransactions(address, heliusApiKey);
136
+ const response = await fetch(url);
137
+ const transactions = await response.json();
138
+ // Filter by mint if provided
139
+ if (mint) {
140
+ return transactions.filter((tx) => {
141
+ return tx.tokenTransfers?.some((t) => t.mint === mint);
142
+ });
143
+ }
144
+ return transactions;
145
+ }
146
+ /**
147
+ * Calculate PnL for a specific token
148
+ */
149
+ export async function calculatePnL(address, mint) {
150
+ const heliusApiKey = requireHeliusKey();
151
+ const url = apis.heliusTransactions(address, heliusApiKey);
152
+ const response = await fetch(url);
153
+ const transactions = await response.json();
154
+ let totalBought = 0;
155
+ let totalCostBasis = 0;
156
+ let totalSold = 0;
157
+ let totalRevenue = 0;
158
+ // Special handling for native SOL
159
+ const isNativeSOL = mint === tokens.SOL;
160
+ for (const tx of transactions) {
161
+ if (isNativeSOL) {
162
+ // Process native SOL transfers
163
+ for (const transfer of tx.nativeTransfers || []) {
164
+ const amount = transfer.amount / 1e9; // Convert lamports to SOL
165
+ // Get SOL price at the time of the transaction
166
+ let priceAtTime = 0;
167
+ try {
168
+ // In production, you'd fetch historical price. For now, use current price as estimate
169
+ const solPriceUrl = apis.heliusRpc(heliusApiKey);
170
+ const priceResponse = await fetch(solPriceUrl, {
171
+ method: 'POST',
172
+ headers: { 'Content-Type': 'application/json' },
173
+ body: JSON.stringify({
174
+ jsonrpc: '2.0',
175
+ id: 'price',
176
+ method: 'getAsset',
177
+ params: { id: mint },
178
+ }),
179
+ });
180
+ const priceData = await priceResponse.json();
181
+ priceAtTime = priceData.result?.token_info?.price_info?.price_per_token || 0;
182
+ }
183
+ catch (e) {
184
+ priceAtTime = 0;
185
+ }
186
+ const usdValue = amount * priceAtTime;
187
+ if (transfer.fromUserAccount === address) {
188
+ // Outgoing (sell/spend)
189
+ totalSold += amount;
190
+ totalRevenue += usdValue;
191
+ }
192
+ else if (transfer.toUserAccount === address) {
193
+ // Incoming (buy/receive)
194
+ totalBought += amount;
195
+ totalCostBasis += usdValue;
196
+ }
197
+ }
198
+ }
199
+ else {
200
+ // Process SPL token transfers
201
+ for (const transfer of tx.tokenTransfers || []) {
202
+ if (transfer.mint !== mint)
203
+ continue;
204
+ const amount = transfer.tokenAmount;
205
+ const usdValue = transfer.tokenAmount * (transfer.pricePerToken || 0);
206
+ if (transfer.fromUserAccount === address) {
207
+ // Sell
208
+ totalSold += amount;
209
+ totalRevenue += usdValue;
210
+ }
211
+ else if (transfer.toUserAccount === address) {
212
+ // Buy
213
+ totalBought += amount;
214
+ totalCostBasis += usdValue;
215
+ }
216
+ }
217
+ }
218
+ }
219
+ // Current holdings
220
+ const portfolio = await getPortfolio(address);
221
+ const currentHolding = portfolio.tokens.find(t => t.mint === mint);
222
+ const currentValue = currentHolding?.valueUsd || 0;
223
+ const currentPrice = currentHolding?.pricePerToken || 0;
224
+ // Realized PnL (from sells)
225
+ const realizedPnL = totalBought > 0
226
+ ? totalRevenue - (totalCostBasis * (totalSold / totalBought))
227
+ : 0;
228
+ // Unrealized PnL (current holdings)
229
+ const remainingCostBasis = totalBought > 0
230
+ ? totalCostBasis - (totalCostBasis * (totalSold / totalBought))
231
+ : 0;
232
+ const unrealizedPnL = currentValue - remainingCostBasis;
233
+ // Calculate average purchase price
234
+ const avgPurchasePrice = totalBought > 0 ? totalCostBasis / totalBought : 0;
235
+ const priceChange = avgPurchasePrice > 0
236
+ ? ((currentPrice - avgPurchasePrice) / avgPurchasePrice) * 100
237
+ : 0;
238
+ return {
239
+ mint,
240
+ totalBought,
241
+ totalSold,
242
+ currentHolding: currentHolding?.balance || 0,
243
+ costBasis: totalCostBasis,
244
+ avgPurchasePrice,
245
+ currentPrice,
246
+ priceChange,
247
+ currentValue,
248
+ realizedPnL,
249
+ unrealizedPnL,
250
+ totalPnL: realizedPnL + unrealizedPnL,
251
+ };
252
+ }
253
+ //# sourceMappingURL=helius.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helius.js","sourceRoot":"","sources":["../../src/utils/helius.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Connection, Keypair } from '@solana/web3.js';
2
+ export interface SwapParams {
3
+ inputMint: string;
4
+ outputMint: string;
5
+ amount: number;
6
+ slippageBps?: number;
7
+ }
8
+ export interface SwapQuote {
9
+ inputMint: string;
10
+ outputMint: string;
11
+ inAmount: string;
12
+ outAmount: string;
13
+ priceImpactPct: number;
14
+ route: any;
15
+ transaction?: string;
16
+ requestId?: string;
17
+ }
18
+ /**
19
+ * Get swap order from Jupiter Ultra API v1
20
+ */
21
+ export declare function getSwapQuote(params: SwapParams & {
22
+ taker?: string;
23
+ }): Promise<SwapQuote>;
24
+ /**
25
+ * Execute swap via Jupiter Ultra API v1
26
+ * Ultra handles transaction building, signing, sending, and confirmation
27
+ */
28
+ export declare function executeSwap(connection: Connection, keypair: Keypair, quote: SwapQuote, priorityFeeLamports?: number): Promise<string>;
29
+ /**
30
+ * Search tokens via Jupiter Token API V2
31
+ */
32
+ export declare function searchToken(query: string): Promise<any[]>;
33
+ /**
34
+ * Browse top tokens by organic score via Jupiter Token API V2
35
+ */
36
+ export declare function browseTokens(limit?: number): Promise<any[]>;
37
+ export declare const COMMON_TOKENS: {
38
+ SOL: string;
39
+ USDC: string;
40
+ USDT: string;
41
+ };
42
+ //# sourceMappingURL=jupiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiter.d.ts","sourceRoot":"","sources":["../../src/utils/jupiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAwB,MAAM,iBAAiB,CAAC;AAG5E,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAkC9F;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,EAChB,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,MAAM,CAAC,CAyCjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAQ7D;AAGD,eAAO,MAAM,aAAa;;;;CAIzB,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { VersionedTransaction } from '@solana/web3.js';
2
+ import { apis, tokens, requireJupiterKey } from '../config.js';
3
+ /**
4
+ * Get swap order from Jupiter Ultra API v1
5
+ */
6
+ export async function getSwapQuote(params) {
7
+ const { inputMint, outputMint, amount, slippageBps = 50, taker } = params;
8
+ const jupiterApiKey = requireJupiterKey();
9
+ const url = new URL(`${apis.jupiterUltra}/order`);
10
+ url.searchParams.append('inputMint', inputMint);
11
+ url.searchParams.append('outputMint', outputMint);
12
+ url.searchParams.append('amount', amount.toString());
13
+ url.searchParams.append('slippageBps', slippageBps.toString());
14
+ // Add taker (wallet address) to get transaction included in response
15
+ if (taker) {
16
+ url.searchParams.append('taker', taker);
17
+ }
18
+ const response = await fetch(url.toString(), {
19
+ headers: {
20
+ 'x-api-key': jupiterApiKey,
21
+ },
22
+ });
23
+ if (!response.ok) {
24
+ const errorText = await response.text();
25
+ throw new Error(`Jupiter API error (${response.status}): ${errorText}`);
26
+ }
27
+ const quote = await response.json();
28
+ if (quote.error) {
29
+ throw new Error(`Jupiter quote error: ${quote.error}`);
30
+ }
31
+ return quote;
32
+ }
33
+ /**
34
+ * Execute swap via Jupiter Ultra API v1
35
+ * Ultra handles transaction building, signing, sending, and confirmation
36
+ */
37
+ export async function executeSwap(connection, keypair, quote, priorityFeeLamports) {
38
+ const jupiterApiKey = requireJupiterKey();
39
+ // Extract transaction from order response
40
+ const transactionBase64 = quote.transaction;
41
+ if (!transactionBase64) {
42
+ throw new Error('No transaction in order response');
43
+ }
44
+ // Deserialize, sign, and re-serialize transaction
45
+ const transaction = VersionedTransaction.deserialize(Buffer.from(transactionBase64, 'base64'));
46
+ transaction.sign([keypair]);
47
+ const signedTransaction = Buffer.from(transaction.serialize()).toString('base64');
48
+ // Execute via Ultra API
49
+ const executeResponse = await fetch(`${apis.jupiterUltra}/execute`, {
50
+ method: 'POST',
51
+ headers: {
52
+ 'Content-Type': 'application/json',
53
+ 'x-api-key': jupiterApiKey,
54
+ },
55
+ body: JSON.stringify({
56
+ signedTransaction,
57
+ requestId: quote.requestId,
58
+ }),
59
+ });
60
+ if (!executeResponse.ok) {
61
+ const errorText = await executeResponse.text();
62
+ throw new Error(`Execute error (${executeResponse.status}): ${errorText}`);
63
+ }
64
+ const result = await executeResponse.json();
65
+ // Check execution status
66
+ if (result.status === 'Success') {
67
+ console.log('✅ Swap executed successfully via Jupiter Ultra API');
68
+ return result.signature;
69
+ }
70
+ else {
71
+ throw new Error(`Swap failed: ${JSON.stringify(result)}`);
72
+ }
73
+ }
74
+ /**
75
+ * Search tokens via Jupiter Token API V2
76
+ */
77
+ export async function searchToken(query) {
78
+ const jupiterApiKey = requireJupiterKey();
79
+ const url = `${apis.jupiterTokenSearch}?query=${encodeURIComponent(query)}`;
80
+ const response = await fetch(url, {
81
+ headers: { 'x-api-key': jupiterApiKey },
82
+ });
83
+ if (!response.ok)
84
+ throw new Error(`Token search failed: ${response.status}`);
85
+ return (await response.json());
86
+ }
87
+ /**
88
+ * Browse top tokens by organic score via Jupiter Token API V2
89
+ */
90
+ export async function browseTokens(limit = 15) {
91
+ const jupiterApiKey = requireJupiterKey();
92
+ const url = `${apis.jupiterTokenTop}?limit=${limit}`;
93
+ const response = await fetch(url, {
94
+ headers: { 'x-api-key': jupiterApiKey },
95
+ });
96
+ if (!response.ok)
97
+ throw new Error(`Token browse failed: ${response.status}`);
98
+ return (await response.json());
99
+ }
100
+ // Common token mints for quick reference
101
+ export const COMMON_TOKENS = {
102
+ SOL: tokens.SOL,
103
+ USDC: tokens.USDC,
104
+ USDT: tokens.USDT,
105
+ };
106
+ //# sourceMappingURL=jupiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jupiter.js","sourceRoot":"","sources":["../../src/utils/jupiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAoB/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAuC;IACxE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAE1E,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAE1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,QAAQ,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAChD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAClD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;IAE/D,qEAAqE;IACrE,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QAC3C,OAAO,EAAE;YACP,WAAW,EAAE,aAAa;SAC3B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;IAE3C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAsB,EACtB,OAAgB,EAChB,KAAgB,EAChB,mBAA4B;IAE5B,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAE1C,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC;IAC5C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,kDAAkD;IAClD,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/F,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5B,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAElF,wBAAwB;IACxB,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,YAAY,UAAU,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,aAAa;SAC3B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,iBAAiB;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,kBAAkB,eAAe,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAS,CAAC;IAEnD,yBAAyB;IACzB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa;IAC7C,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,kBAAkB,UAAU,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAU,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAK,GAAG,EAAE;IAC3C,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,UAAU,KAAK,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAU,CAAC;AAC1C,CAAC;AAED,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;IACf,IAAI,EAAE,MAAM,CAAC,IAAI;IACjB,IAAI,EAAE,MAAM,CAAC,IAAI;CAClB,CAAC"}
@@ -0,0 +1,75 @@
1
+ import Big from 'big.js';
2
+ export interface NFTListing {
3
+ mint: string;
4
+ name: string;
5
+ image: string;
6
+ price: Big;
7
+ seller: string;
8
+ collection: string;
9
+ attributes?: Record<string, string>;
10
+ }
11
+ export interface CollectionStats {
12
+ symbol: string;
13
+ name: string;
14
+ floorPrice: Big;
15
+ listedCount: number;
16
+ volumeAll: Big;
17
+ }
18
+ export interface CryptCard {
19
+ mint: string;
20
+ name: string;
21
+ image: string;
22
+ insuredValue: number;
23
+ grade?: string;
24
+ gradeNum?: number;
25
+ year?: string;
26
+ category: string;
27
+ rarity?: string;
28
+ }
29
+ export interface GachaStock {
30
+ common: number;
31
+ uncommon: number;
32
+ rare: number;
33
+ epic: number;
34
+ }
35
+ /**
36
+ * Get collection stats including floor price
37
+ */
38
+ export declare function getCollectionStats(symbol: string): Promise<CollectionStats>;
39
+ /**
40
+ * Get listings for a collection
41
+ */
42
+ export declare function getListings(symbol: string, limit?: number): Promise<NFTListing[]>;
43
+ /**
44
+ * Get popular collections
45
+ */
46
+ export declare function getPopularCollections(limit?: number): Promise<CollectionStats[]>;
47
+ /**
48
+ * Search collections by name
49
+ */
50
+ export declare function searchCollections(query: string): Promise<CollectionStats[]>;
51
+ /**
52
+ * Get NFTs owned by a wallet
53
+ */
54
+ export declare function getWalletNFTs(walletAddress: string): Promise<any[]>;
55
+ /**
56
+ * Get gacha machine stock
57
+ */
58
+ export declare function getGachaStock(): Promise<Record<string, GachaStock>>;
59
+ /**
60
+ * Get cards available in gacha by rarity
61
+ */
62
+ export declare function getGachaCards(packType?: 'pokemon_50' | 'pokemon_250' | 'pokemon_1000', rarity?: 'common' | 'uncommon' | 'rare' | 'epic'): Promise<CryptCard[]>;
63
+ /**
64
+ * Get Pokemon listings from Collector Crypt on Magic Eden
65
+ */
66
+ export declare function getCryptListings(limit?: number): Promise<NFTListing[]>;
67
+ /**
68
+ * Get gacha machine status
69
+ */
70
+ export declare function getGachaStatus(): Promise<{
71
+ machineStatus: string;
72
+ }>;
73
+ export declare function formatSol(amount: Big): string;
74
+ export declare function solToUsd(sol: Big, solPrice?: number): Big;
75
+ //# sourceMappingURL=nft.d.ts.map