forgex-cli 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 (275) hide show
  1. package/README.md +479 -0
  2. package/dist/bin/forgex.d.ts +12 -0
  3. package/dist/bin/forgex.d.ts.map +1 -0
  4. package/dist/bin/forgex.js +23 -0
  5. package/dist/bin/forgex.js.map +1 -0
  6. package/dist/src/adapters/codex-adapter.d.ts +238 -0
  7. package/dist/src/adapters/codex-adapter.d.ts.map +1 -0
  8. package/dist/src/adapters/codex-adapter.js +524 -0
  9. package/dist/src/adapters/codex-adapter.js.map +1 -0
  10. package/dist/src/adapters/connection.d.ts +20 -0
  11. package/dist/src/adapters/connection.d.ts.map +1 -0
  12. package/dist/src/adapters/connection.js +43 -0
  13. package/dist/src/adapters/connection.js.map +1 -0
  14. package/dist/src/adapters/ipfs.d.ts +17 -0
  15. package/dist/src/adapters/ipfs.d.ts.map +1 -0
  16. package/dist/src/adapters/ipfs.js +30 -0
  17. package/dist/src/adapters/ipfs.js.map +1 -0
  18. package/dist/src/adapters/jito-adapter.d.ts +194 -0
  19. package/dist/src/adapters/jito-adapter.d.ts.map +1 -0
  20. package/dist/src/adapters/jito-adapter.js +474 -0
  21. package/dist/src/adapters/jito-adapter.js.map +1 -0
  22. package/dist/src/adapters/rpc-adapter.d.ts +148 -0
  23. package/dist/src/adapters/rpc-adapter.d.ts.map +1 -0
  24. package/dist/src/adapters/rpc-adapter.js +410 -0
  25. package/dist/src/adapters/rpc-adapter.js.map +1 -0
  26. package/dist/src/adapters/sdk-adapter.d.ts +148 -0
  27. package/dist/src/adapters/sdk-adapter.d.ts.map +1 -0
  28. package/dist/src/adapters/sdk-adapter.js +554 -0
  29. package/dist/src/adapters/sdk-adapter.js.map +1 -0
  30. package/dist/src/commands/config/index.d.ts +8 -0
  31. package/dist/src/commands/config/index.d.ts.map +1 -0
  32. package/dist/src/commands/config/index.js +91 -0
  33. package/dist/src/commands/config/index.js.map +1 -0
  34. package/dist/src/commands/query/index.d.ts +10 -0
  35. package/dist/src/commands/query/index.d.ts.map +1 -0
  36. package/dist/src/commands/query/index.js +376 -0
  37. package/dist/src/commands/query/index.js.map +1 -0
  38. package/dist/src/commands/sniper/index.d.ts +16 -0
  39. package/dist/src/commands/sniper/index.d.ts.map +1 -0
  40. package/dist/src/commands/sniper/index.js +292 -0
  41. package/dist/src/commands/sniper/index.js.map +1 -0
  42. package/dist/src/commands/token/index.d.ts +16 -0
  43. package/dist/src/commands/token/index.d.ts.map +1 -0
  44. package/dist/src/commands/token/index.js +295 -0
  45. package/dist/src/commands/token/index.js.map +1 -0
  46. package/dist/src/commands/tools/index.d.ts +17 -0
  47. package/dist/src/commands/tools/index.d.ts.map +1 -0
  48. package/dist/src/commands/tools/index.js +626 -0
  49. package/dist/src/commands/tools/index.js.map +1 -0
  50. package/dist/src/commands/trade/index.d.ts +8 -0
  51. package/dist/src/commands/trade/index.d.ts.map +1 -0
  52. package/dist/src/commands/trade/index.js +531 -0
  53. package/dist/src/commands/trade/index.js.map +1 -0
  54. package/dist/src/commands/transfer/index.d.ts +16 -0
  55. package/dist/src/commands/transfer/index.d.ts.map +1 -0
  56. package/dist/src/commands/transfer/index.js +509 -0
  57. package/dist/src/commands/transfer/index.js.map +1 -0
  58. package/dist/src/commands/wallet/index.d.ts +10 -0
  59. package/dist/src/commands/wallet/index.d.ts.map +1 -0
  60. package/dist/src/commands/wallet/index.js +828 -0
  61. package/dist/src/commands/wallet/index.js.map +1 -0
  62. package/dist/src/config.d.ts +74 -0
  63. package/dist/src/config.d.ts.map +1 -0
  64. package/dist/src/config.js +190 -0
  65. package/dist/src/config.js.map +1 -0
  66. package/dist/src/const/IDL/index.d.ts +4 -0
  67. package/dist/src/const/IDL/index.d.ts.map +1 -0
  68. package/dist/src/const/IDL/index.js +2 -0
  69. package/dist/src/const/IDL/index.js.map +1 -0
  70. package/dist/src/const/IDL/meteora-DLMM.d.ts +10249 -0
  71. package/dist/src/const/IDL/meteora-DLMM.d.ts.map +1 -0
  72. package/dist/src/const/IDL/meteora-DLMM.js +4177 -0
  73. package/dist/src/const/IDL/meteora-DLMM.js.map +1 -0
  74. package/dist/src/const/IDL/pump-fun.d.ts +4811 -0
  75. package/dist/src/const/IDL/pump-fun.d.ts.map +1 -0
  76. package/dist/src/const/IDL/pump-fun.js +2954 -0
  77. package/dist/src/const/IDL/pump-fun.js.map +1 -0
  78. package/dist/src/const/IDL/pump-swap-IDL.d.ts +3119 -0
  79. package/dist/src/const/IDL/pump-swap-IDL.d.ts.map +1 -0
  80. package/dist/src/const/IDL/pump-swap-IDL.js +2095 -0
  81. package/dist/src/const/IDL/pump-swap-IDL.js.map +1 -0
  82. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts +4031 -0
  83. package/dist/src/const/IDL/raydium-launchlab-IDL.d.ts.map +1 -0
  84. package/dist/src/const/IDL/raydium-launchlab-IDL.js +2110 -0
  85. package/dist/src/const/IDL/raydium-launchlab-IDL.js.map +1 -0
  86. package/dist/src/const/index.d.ts +40 -0
  87. package/dist/src/const/index.d.ts.map +1 -0
  88. package/dist/src/const/index.js +57 -0
  89. package/dist/src/const/index.js.map +1 -0
  90. package/dist/src/data-source.d.ts +270 -0
  91. package/dist/src/data-source.d.ts.map +1 -0
  92. package/dist/src/data-source.js +628 -0
  93. package/dist/src/data-source.js.map +1 -0
  94. package/dist/src/data-store/index.d.ts +87 -0
  95. package/dist/src/data-store/index.d.ts.map +1 -0
  96. package/dist/src/data-store/index.js +561 -0
  97. package/dist/src/data-store/index.js.map +1 -0
  98. package/dist/src/data-store/types.d.ts +91 -0
  99. package/dist/src/data-store/types.d.ts.map +1 -0
  100. package/dist/src/data-store/types.js +8 -0
  101. package/dist/src/data-store/types.js.map +1 -0
  102. package/dist/src/index.d.ts +8 -0
  103. package/dist/src/index.d.ts.map +1 -0
  104. package/dist/src/index.js +36 -0
  105. package/dist/src/index.js.map +1 -0
  106. package/dist/src/output.d.ts +52 -0
  107. package/dist/src/output.d.ts.map +1 -0
  108. package/dist/src/output.js +218 -0
  109. package/dist/src/output.js.map +1 -0
  110. package/dist/src/shims/store.d.ts +58 -0
  111. package/dist/src/shims/store.d.ts.map +1 -0
  112. package/dist/src/shims/store.js +55 -0
  113. package/dist/src/shims/store.js.map +1 -0
  114. package/dist/src/sol-sdk/account/index.d.ts +13 -0
  115. package/dist/src/sol-sdk/account/index.d.ts.map +1 -0
  116. package/dist/src/sol-sdk/account/index.js +174 -0
  117. package/dist/src/sol-sdk/account/index.js.map +1 -0
  118. package/dist/src/sol-sdk/account/lookupTable.d.ts +24 -0
  119. package/dist/src/sol-sdk/account/lookupTable.d.ts.map +1 -0
  120. package/dist/src/sol-sdk/account/lookupTable.js +103 -0
  121. package/dist/src/sol-sdk/account/lookupTable.js.map +1 -0
  122. package/dist/src/sol-sdk/batch/create.d.ts +23 -0
  123. package/dist/src/sol-sdk/batch/create.d.ts.map +1 -0
  124. package/dist/src/sol-sdk/batch/create.js +580 -0
  125. package/dist/src/sol-sdk/batch/create.js.map +1 -0
  126. package/dist/src/sol-sdk/batch/external-sniper.d.ts +31 -0
  127. package/dist/src/sol-sdk/batch/external-sniper.d.ts.map +1 -0
  128. package/dist/src/sol-sdk/batch/external-sniper.js +163 -0
  129. package/dist/src/sol-sdk/batch/external-sniper.js.map +1 -0
  130. package/dist/src/sol-sdk/batch/index.d.ts +144 -0
  131. package/dist/src/sol-sdk/batch/index.d.ts.map +1 -0
  132. package/dist/src/sol-sdk/batch/index.js +1573 -0
  133. package/dist/src/sol-sdk/batch/index.js.map +1 -0
  134. package/dist/src/sol-sdk/calc.d.ts +277 -0
  135. package/dist/src/sol-sdk/calc.d.ts.map +1 -0
  136. package/dist/src/sol-sdk/calc.js +590 -0
  137. package/dist/src/sol-sdk/calc.js.map +1 -0
  138. package/dist/src/sol-sdk/index.d.ts +1 -0
  139. package/dist/src/sol-sdk/index.d.ts.map +1 -0
  140. package/dist/src/sol-sdk/index.js +1 -0
  141. package/dist/src/sol-sdk/index.js.map +1 -0
  142. package/dist/src/sol-sdk/jito/index.d.ts +50 -0
  143. package/dist/src/sol-sdk/jito/index.d.ts.map +1 -0
  144. package/dist/src/sol-sdk/jito/index.js +225 -0
  145. package/dist/src/sol-sdk/jito/index.js.map +1 -0
  146. package/dist/src/sol-sdk/launchlab/index.d.ts +32 -0
  147. package/dist/src/sol-sdk/launchlab/index.d.ts.map +1 -0
  148. package/dist/src/sol-sdk/launchlab/index.js +78 -0
  149. package/dist/src/sol-sdk/launchlab/index.js.map +1 -0
  150. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts +27 -0
  151. package/dist/src/sol-sdk/launchlab/instructions/buy.d.ts.map +1 -0
  152. package/dist/src/sol-sdk/launchlab/instructions/buy.js +124 -0
  153. package/dist/src/sol-sdk/launchlab/instructions/buy.js.map +1 -0
  154. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts +27 -0
  155. package/dist/src/sol-sdk/launchlab/instructions/create.d.ts.map +1 -0
  156. package/dist/src/sol-sdk/launchlab/instructions/create.js +125 -0
  157. package/dist/src/sol-sdk/launchlab/instructions/create.js.map +1 -0
  158. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts +15 -0
  159. package/dist/src/sol-sdk/launchlab/instructions/sell.d.ts.map +1 -0
  160. package/dist/src/sol-sdk/launchlab/instructions/sell.js +65 -0
  161. package/dist/src/sol-sdk/launchlab/instructions/sell.js.map +1 -0
  162. package/dist/src/sol-sdk/meteora/index.d.ts +32 -0
  163. package/dist/src/sol-sdk/meteora/index.d.ts.map +1 -0
  164. package/dist/src/sol-sdk/meteora/index.js +72 -0
  165. package/dist/src/sol-sdk/meteora/index.js.map +1 -0
  166. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts +46 -0
  167. package/dist/src/sol-sdk/meteora/instructions/buy.d.ts.map +1 -0
  168. package/dist/src/sol-sdk/meteora/instructions/buy.js +153 -0
  169. package/dist/src/sol-sdk/meteora/instructions/buy.js.map +1 -0
  170. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts +24 -0
  171. package/dist/src/sol-sdk/meteora/instructions/sell.d.ts.map +1 -0
  172. package/dist/src/sol-sdk/meteora/instructions/sell.js +98 -0
  173. package/dist/src/sol-sdk/meteora/instructions/sell.js.map +1 -0
  174. package/dist/src/sol-sdk/pump/index.d.ts +22 -0
  175. package/dist/src/sol-sdk/pump/index.d.ts.map +1 -0
  176. package/dist/src/sol-sdk/pump/index.js +101 -0
  177. package/dist/src/sol-sdk/pump/index.js.map +1 -0
  178. package/dist/src/sol-sdk/pump/instructions/buy.d.ts +29 -0
  179. package/dist/src/sol-sdk/pump/instructions/buy.d.ts.map +1 -0
  180. package/dist/src/sol-sdk/pump/instructions/buy.js +131 -0
  181. package/dist/src/sol-sdk/pump/instructions/buy.js.map +1 -0
  182. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts +36 -0
  183. package/dist/src/sol-sdk/pump/instructions/createAndBuy.d.ts.map +1 -0
  184. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js +77 -0
  185. package/dist/src/sol-sdk/pump/instructions/createAndBuy.js.map +1 -0
  186. package/dist/src/sol-sdk/pump/instructions/sell.d.ts +7 -0
  187. package/dist/src/sol-sdk/pump/instructions/sell.d.ts.map +1 -0
  188. package/dist/src/sol-sdk/pump/instructions/sell.js +38 -0
  189. package/dist/src/sol-sdk/pump/instructions/sell.js.map +1 -0
  190. package/dist/src/sol-sdk/pumpswap/index.d.ts +9 -0
  191. package/dist/src/sol-sdk/pumpswap/index.d.ts.map +1 -0
  192. package/dist/src/sol-sdk/pumpswap/index.js +27 -0
  193. package/dist/src/sol-sdk/pumpswap/index.js.map +1 -0
  194. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts +61 -0
  195. package/dist/src/sol-sdk/pumpswap/instructions/buy.d.ts.map +1 -0
  196. package/dist/src/sol-sdk/pumpswap/instructions/buy.js +215 -0
  197. package/dist/src/sol-sdk/pumpswap/instructions/buy.js.map +1 -0
  198. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts +3 -0
  199. package/dist/src/sol-sdk/pumpswap/instructions/migrate.d.ts.map +1 -0
  200. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js +33 -0
  201. package/dist/src/sol-sdk/pumpswap/instructions/migrate.js.map +1 -0
  202. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts +20 -0
  203. package/dist/src/sol-sdk/pumpswap/instructions/sell.d.ts.map +1 -0
  204. package/dist/src/sol-sdk/pumpswap/instructions/sell.js +107 -0
  205. package/dist/src/sol-sdk/pumpswap/instructions/sell.js.map +1 -0
  206. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts +28 -0
  207. package/dist/src/sol-sdk/pumpswap/rpc/index.d.ts.map +1 -0
  208. package/dist/src/sol-sdk/pumpswap/rpc/index.js +63 -0
  209. package/dist/src/sol-sdk/pumpswap/rpc/index.js.map +1 -0
  210. package/dist/src/sol-sdk/raydium/index.d.ts +16 -0
  211. package/dist/src/sol-sdk/raydium/index.d.ts.map +1 -0
  212. package/dist/src/sol-sdk/raydium/index.js +47 -0
  213. package/dist/src/sol-sdk/raydium/index.js.map +1 -0
  214. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts +29 -0
  215. package/dist/src/sol-sdk/raydium/instructions/buy.d.ts.map +1 -0
  216. package/dist/src/sol-sdk/raydium/instructions/buy.js +106 -0
  217. package/dist/src/sol-sdk/raydium/instructions/buy.js.map +1 -0
  218. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts +29 -0
  219. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.d.ts.map +1 -0
  220. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js +80 -0
  221. package/dist/src/sol-sdk/raydium/instructions/cpmmBuy.js.map +1 -0
  222. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts +17 -0
  223. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.d.ts.map +1 -0
  224. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js +56 -0
  225. package/dist/src/sol-sdk/raydium/instructions/cpmmSell.js.map +1 -0
  226. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts +8558 -0
  227. package/dist/src/sol-sdk/raydium/instructions/sell.d.ts.map +1 -0
  228. package/dist/src/sol-sdk/raydium/instructions/sell.js +70 -0
  229. package/dist/src/sol-sdk/raydium/instructions/sell.js.map +1 -0
  230. package/dist/src/sol-sdk/raydium/rpc/index.d.ts +39 -0
  231. package/dist/src/sol-sdk/raydium/rpc/index.d.ts.map +1 -0
  232. package/dist/src/sol-sdk/raydium/rpc/index.js +82 -0
  233. package/dist/src/sol-sdk/raydium/rpc/index.js.map +1 -0
  234. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts +5 -0
  235. package/dist/src/sol-sdk/raydium/rpc/raydium.d.ts.map +1 -0
  236. package/dist/src/sol-sdk/raydium/rpc/raydium.js +18 -0
  237. package/dist/src/sol-sdk/raydium/rpc/raydium.js.map +1 -0
  238. package/dist/src/sol-sdk/rpc/index.d.ts +33 -0
  239. package/dist/src/sol-sdk/rpc/index.d.ts.map +1 -0
  240. package/dist/src/sol-sdk/rpc/index.js +128 -0
  241. package/dist/src/sol-sdk/rpc/index.js.map +1 -0
  242. package/dist/src/sol-sdk/transfer/index.d.ts +24 -0
  243. package/dist/src/sol-sdk/transfer/index.d.ts.map +1 -0
  244. package/dist/src/sol-sdk/transfer/index.js +65 -0
  245. package/dist/src/sol-sdk/transfer/index.js.map +1 -0
  246. package/dist/src/sol-sdk/turnover/index.d.ts +84 -0
  247. package/dist/src/sol-sdk/turnover/index.d.ts.map +1 -0
  248. package/dist/src/sol-sdk/turnover/index.js +569 -0
  249. package/dist/src/sol-sdk/turnover/index.js.map +1 -0
  250. package/dist/src/tx-tracker/detail-adapter.d.ts +100 -0
  251. package/dist/src/tx-tracker/detail-adapter.d.ts.map +1 -0
  252. package/dist/src/tx-tracker/detail-adapter.js +215 -0
  253. package/dist/src/tx-tracker/detail-adapter.js.map +1 -0
  254. package/dist/src/tx-tracker/index.d.ts +142 -0
  255. package/dist/src/tx-tracker/index.d.ts.map +1 -0
  256. package/dist/src/tx-tracker/index.js +447 -0
  257. package/dist/src/tx-tracker/index.js.map +1 -0
  258. package/dist/src/types/index.d.ts +76 -0
  259. package/dist/src/types/index.d.ts.map +1 -0
  260. package/dist/src/types/index.js +69 -0
  261. package/dist/src/types/index.js.map +1 -0
  262. package/dist/src/types/websocket.d.ts +15 -0
  263. package/dist/src/types/websocket.d.ts.map +1 -0
  264. package/dist/src/types/websocket.js +18 -0
  265. package/dist/src/types/websocket.js.map +1 -0
  266. package/dist/src/utils/index.d.ts +13 -0
  267. package/dist/src/utils/index.d.ts.map +1 -0
  268. package/dist/src/utils/index.js +174 -0
  269. package/dist/src/utils/index.js.map +1 -0
  270. package/dist/src/wallet-store.d.ts +124 -0
  271. package/dist/src/wallet-store.d.ts.map +1 -0
  272. package/dist/src/wallet-store.js +524 -0
  273. package/dist/src/wallet-store.js.map +1 -0
  274. package/package.json +86 -0
  275. package/scripts/postinstall.js +88 -0
@@ -0,0 +1,628 @@
1
+ /**
2
+ * ForgeX CLI DataSource -- 统一数据源门面
3
+ *
4
+ * 命令层唯一的数据访问接口。将所有数据适配器(CodexAdapter、RpcAdapter、
5
+ * JitoAdapter、DataStore)统一封装,提供简洁的接口供命令层调用。
6
+ *
7
+ * 路由逻辑:
8
+ * 代币信息 / 价格 / K线 / 池信息 --> CodexAdapter (远程, 缓存穿透到 DataStore)
9
+ * 余额 / 账户信息 / 交易确认 --> RpcAdapter (链上)
10
+ * Bundle 发送 / 状态查询 --> JitoAdapter (Jito Block Engine)
11
+ * 交易记录 / 持仓 / 钱包组数据 --> DataStore (本地文件)
12
+ *
13
+ * 缓存穿透:
14
+ * 优先读 DataStore 本地缓存。如果 miss 或过期,则从远程 (Codex/RPC) 获取
15
+ * 最新数据,写入 DataStore 后返回。
16
+ *
17
+ * 容错:
18
+ * 当 Codex API 不可用时,fallback 到 DataStore 中的历史缓存。
19
+ * RPC/Jito 不可用时,抛出 DataSourceError 供命令层处理。
20
+ *
21
+ * 设计参考: ARCH-DESIGN-v2.md Section 2.7
22
+ */
23
+ import { getCodexAdapter } from './adapters/codex-adapter.js';
24
+ import { getRpcAdapter } from './adapters/rpc-adapter.js';
25
+ import { getJitoAdapter } from './adapters/jito-adapter.js';
26
+ import { getDataStore } from './data-store/index.js';
27
+ import { getTxTracker } from './tx-tracker/index.js';
28
+ // ============================================================
29
+ // 统一错误类型
30
+ // ============================================================
31
+ export class DataSourceError extends Error {
32
+ /** 错误来源 */
33
+ source;
34
+ /** 是否已 fallback 到缓存 */
35
+ fellBackToCache;
36
+ /** 原始错误 */
37
+ cause;
38
+ constructor(message, source, options) {
39
+ super(message);
40
+ this.name = 'DataSourceError';
41
+ this.source = source;
42
+ this.fellBackToCache = options?.fellBackToCache ?? false;
43
+ this.cause = options?.cause;
44
+ }
45
+ }
46
+ // ============================================================
47
+ // 缓存过期阈值 (ms)
48
+ // ============================================================
49
+ /** 代币信息缓存有效期: 10 分钟 */
50
+ const TOKEN_INFO_TTL_MS = 10 * 60 * 1000;
51
+ /** 池信息缓存有效期: 2 分钟 */
52
+ const POOL_INFO_TTL_MS = 2 * 60 * 1000;
53
+ /** SOL 价格缓存有效期: 1 分钟 */
54
+ const SOL_PRICE_TTL_MS = 60 * 1000;
55
+ // ============================================================
56
+ // DataSource 实现
57
+ // ============================================================
58
+ export class DataSource {
59
+ codex;
60
+ rpc;
61
+ jito;
62
+ store;
63
+ tracker;
64
+ constructor(options) {
65
+ this.codex = options?.codex ?? getCodexAdapter();
66
+ this.rpc = options?.rpc ?? getRpcAdapter();
67
+ this.jito = options?.jito ?? getJitoAdapter();
68
+ this.store = options?.store ?? getDataStore();
69
+ this.tracker = options?.tracker ?? getTxTracker();
70
+ }
71
+ // ============================================================
72
+ // 代币信息 -- CodexAdapter + DataStore 缓存穿透
73
+ // ============================================================
74
+ /**
75
+ * 获取代币基本信息。
76
+ *
77
+ * 流程:
78
+ * 1. 先查 DataStore 缓存
79
+ * 2. 缓存命中且未过期 -> 直接返回
80
+ * 3. 缓存 miss 或过期 -> 从 Codex 获取并写入 DataStore
81
+ * 4. Codex 不可用 -> fallback 到 DataStore 陈旧缓存 (如有)
82
+ */
83
+ async getTokenInfo(ca) {
84
+ // 1. 查本地缓存
85
+ const cached = this.store.getTokenInfo(ca);
86
+ if (cached && !this.isExpired(cached.updatedAt, TOKEN_INFO_TTL_MS)) {
87
+ return cached;
88
+ }
89
+ // 2. 从 Codex 获取
90
+ try {
91
+ const marketData = await this.codex.getTokenMarketData(ca);
92
+ const topPair = await this.codex.getTopPair(ca).catch(() => null);
93
+ const tokenInfo = {
94
+ ca: marketData.address,
95
+ symbol: marketData.symbol,
96
+ name: marketData.name,
97
+ decimals: marketData.decimals,
98
+ creatorAddress: '',
99
+ dex: this.inferDex(topPair?.exchangeName),
100
+ pairAddress: marketData.topPairAddress || topPair?.pairAddress || '',
101
+ updatedAt: Date.now(),
102
+ };
103
+ // 写入 DataStore
104
+ await this.store.saveTokenInfo(ca, tokenInfo);
105
+ return tokenInfo;
106
+ }
107
+ catch (err) {
108
+ // 3. Codex 不可用, fallback 到陈旧缓存
109
+ if (cached) {
110
+ return cached;
111
+ }
112
+ throw new DataSourceError(`获取代币信息失败 (${ca}): ${err.message}`, 'codex', { cause: err });
113
+ }
114
+ }
115
+ /**
116
+ * 获取代币详细市场数据 (包含价格、交易量、持有者等)。
117
+ * 直接从 Codex 获取, 不做本地缓存穿透 (市场数据实时性要求高)。
118
+ */
119
+ async getTokenMarketData(ca) {
120
+ try {
121
+ return await this.codex.getTokenMarketData(ca);
122
+ }
123
+ catch (err) {
124
+ throw new DataSourceError(`获取代币市场数据失败 (${ca}): ${err.message}`, 'codex', { cause: err });
125
+ }
126
+ }
127
+ // ============================================================
128
+ // 价格 -- CodexAdapter + DataStore 缓存穿透
129
+ // ============================================================
130
+ /**
131
+ * 获取代币价格 (SOL 和 USD)。
132
+ *
133
+ * 缓存穿透: 先查 DataStore pool-info 缓存的价格, 过期则从 Codex 获取。
134
+ */
135
+ async getTokenPrice(ca) {
136
+ try {
137
+ const result = await this.codex.getTokenPriceInSolAndUsd(ca);
138
+ return result;
139
+ }
140
+ catch (err) {
141
+ // fallback: 从 DataStore 的 pool-info 中读取历史价格
142
+ const poolInfo = this.store.getPoolInfo(ca);
143
+ if (poolInfo) {
144
+ return { priceSol: poolInfo.priceSol, priceUsd: poolInfo.priceUsd };
145
+ }
146
+ throw new DataSourceError(`获取代币价格失败 (${ca}): ${err.message}`, 'codex', { cause: err });
147
+ }
148
+ }
149
+ /**
150
+ * 获取 SOL 价格 (USD)。
151
+ *
152
+ * 缓存穿透: 先查 DataStore, 过期则从 Codex 获取并更新。
153
+ */
154
+ async getSolPrice() {
155
+ // 1. 查本地缓存
156
+ const cachedPrice = this.store.getSolPrice();
157
+ if (cachedPrice > 0) {
158
+ // 检查缓存是否过期 -- getSolPrice 返回的是数字, 需要额外检查时间
159
+ // DataStore 内部的 MemoryCache 有 30s TTL, 这里再加一层文件级 TTL
160
+ // 由于 DataStore.getSolPrice() 已经有 MemoryCache, 这里信任它即可
161
+ // 但如果明确需要刷新, 下面的 try 会尝试
162
+ }
163
+ // 2. 从 Codex 获取
164
+ try {
165
+ const price = await this.codex.getSolPrice();
166
+ await this.store.saveSolPrice(price);
167
+ return price;
168
+ }
169
+ catch (err) {
170
+ // fallback: 使用缓存
171
+ if (cachedPrice > 0) {
172
+ return cachedPrice;
173
+ }
174
+ throw new DataSourceError(`获取 SOL 价格失败: ${err.message}`, 'codex', { fellBackToCache: false, cause: err });
175
+ }
176
+ }
177
+ // ============================================================
178
+ // 池/流动性信息 -- CodexAdapter + DataStore 缓存穿透
179
+ // ============================================================
180
+ /**
181
+ * 获取流动性池信息。
182
+ *
183
+ * 缓存穿透: DataStore 有效 -> 返回; miss/过期 -> Codex 获取并写入。
184
+ */
185
+ async getPoolInfo(ca) {
186
+ // 1. 查本地缓存
187
+ const cached = this.store.getPoolInfo(ca);
188
+ if (cached && !this.isExpired(cached.updatedAt, POOL_INFO_TTL_MS)) {
189
+ return cached;
190
+ }
191
+ // 2. 从 Codex 获取
192
+ try {
193
+ const codexPool = await this.codex.getPoolInfo(ca);
194
+ const poolInfo = {
195
+ ca: codexPool.ca,
196
+ pairAddress: codexPool.pairAddress,
197
+ dex: codexPool.dex,
198
+ liquidity: codexPool.liquidity,
199
+ priceSol: codexPool.priceSol,
200
+ priceUsd: codexPool.priceUsd,
201
+ updatedAt: codexPool.updatedAt,
202
+ };
203
+ await this.store.savePoolInfo(ca, poolInfo);
204
+ return poolInfo;
205
+ }
206
+ catch (err) {
207
+ // fallback 到陈旧缓存
208
+ if (cached) {
209
+ return cached;
210
+ }
211
+ throw new DataSourceError(`获取池信息失败 (${ca}): ${err.message}`, 'codex', { cause: err });
212
+ }
213
+ }
214
+ // ============================================================
215
+ // K线数据 -- CodexAdapter (无本地缓存)
216
+ // ============================================================
217
+ /**
218
+ * 获取 K线 (OHLCV) 数据。
219
+ * K线数据量大且时效性强, 不做本地缓存。
220
+ */
221
+ async getKlineData(params) {
222
+ try {
223
+ return await this.codex.getBars(params);
224
+ }
225
+ catch (err) {
226
+ throw new DataSourceError(`获取 K线数据失败: ${err.message}`, 'codex', { cause: err });
227
+ }
228
+ }
229
+ /**
230
+ * 获取代币的交易对列表。
231
+ */
232
+ async getPairsForToken(ca, limit) {
233
+ try {
234
+ return await this.codex.getPairsForToken(ca, limit);
235
+ }
236
+ catch (err) {
237
+ throw new DataSourceError(`获取交易对失败 (${ca}): ${err.message}`, 'codex', { cause: err });
238
+ }
239
+ }
240
+ // ============================================================
241
+ // 余额查询 -- RpcAdapter (链上实时数据)
242
+ // ============================================================
243
+ /**
244
+ * 获取单个钱包的 SOL 余额。
245
+ */
246
+ async getSolBalance(address) {
247
+ try {
248
+ return await this.rpc.getSolBalance(address);
249
+ }
250
+ catch (err) {
251
+ throw new DataSourceError(`获取 SOL 余额失败 (${address}): ${err.message}`, 'rpc', { cause: err });
252
+ }
253
+ }
254
+ /**
255
+ * 批量获取多个钱包的 SOL 余额。
256
+ */
257
+ async getBatchSolBalances(addresses) {
258
+ try {
259
+ return await this.rpc.getBatchSolBalances(addresses);
260
+ }
261
+ catch (err) {
262
+ throw new DataSourceError(`批量获取 SOL 余额失败: ${err.message}`, 'rpc', { cause: err });
263
+ }
264
+ }
265
+ /**
266
+ * 获取单个钱包的单个 Token 余额。
267
+ */
268
+ async getTokenBalance(walletAddress, tokenMint) {
269
+ try {
270
+ return await this.rpc.getTokenBalance(walletAddress, tokenMint);
271
+ }
272
+ catch (err) {
273
+ throw new DataSourceError(`获取 Token 余额失败 (${walletAddress}): ${err.message}`, 'rpc', { cause: err });
274
+ }
275
+ }
276
+ /**
277
+ * 批量获取多个钱包在指定代币上的余额。
278
+ */
279
+ async getBatchTokenBalances(walletAddresses, tokenMint) {
280
+ try {
281
+ return await this.rpc.getBatchTokenBalances(walletAddresses, tokenMint);
282
+ }
283
+ catch (err) {
284
+ throw new DataSourceError(`批量获取 Token 余额失败: ${err.message}`, 'rpc', { cause: err });
285
+ }
286
+ }
287
+ /**
288
+ * 获取单个钱包的所有 Token 账户。
289
+ */
290
+ async getTokenAccountsByOwner(walletAddress) {
291
+ try {
292
+ return await this.rpc.getTokenAccountsByOwner(walletAddress);
293
+ }
294
+ catch (err) {
295
+ throw new DataSourceError(`获取 Token 账户列表失败 (${walletAddress}): ${err.message}`, 'rpc', { cause: err });
296
+ }
297
+ }
298
+ /**
299
+ * 获取钱包组在指定代币上的完整余额数据。
300
+ *
301
+ * 从 RPC 实时获取并更新 DataStore, 然后返回 BalancesFile。
302
+ */
303
+ async getWalletBalances(walletAddresses, ca, groupId) {
304
+ try {
305
+ // 并行获取 SOL 和 Token 余额
306
+ const [solBalances, tokenBalances] = await Promise.all([
307
+ this.rpc.getBatchSolBalances(walletAddresses),
308
+ this.rpc.getBatchTokenBalances(walletAddresses, ca),
309
+ ]);
310
+ const now = Date.now();
311
+ const balances = walletAddresses.map((addr) => ({
312
+ walletAddress: addr,
313
+ solBalance: solBalances[addr] ?? 0,
314
+ tokenBalance: tokenBalances[addr] ?? 0,
315
+ updatedAt: now,
316
+ }));
317
+ // 批量写入 DataStore
318
+ await this.store.updateBalancesBatch(ca, groupId, balances);
319
+ return {
320
+ ca,
321
+ groupId,
322
+ balances,
323
+ updatedAt: now,
324
+ };
325
+ }
326
+ catch (err) {
327
+ // fallback: 返回 DataStore 中的历史数据
328
+ const cached = this.store.getBalances(ca, groupId);
329
+ if (cached) {
330
+ return cached;
331
+ }
332
+ throw new DataSourceError(`获取钱包余额失败: ${err.message}`, 'rpc', { cause: err });
333
+ }
334
+ }
335
+ // ============================================================
336
+ // 交易状态 -- RpcAdapter
337
+ // ============================================================
338
+ /**
339
+ * 查询单笔交易的确认状态。
340
+ */
341
+ async getTransactionStatus(txHash) {
342
+ try {
343
+ return await this.rpc.getTransactionStatus(txHash);
344
+ }
345
+ catch (err) {
346
+ throw new DataSourceError(`获取交易状态失败 (${txHash}): ${err.message}`, 'rpc', { cause: err });
347
+ }
348
+ }
349
+ /**
350
+ * 获取交易详情。
351
+ */
352
+ async getTransactionDetail(txHash) {
353
+ try {
354
+ return await this.rpc.getTransactionDetail(txHash);
355
+ }
356
+ catch (err) {
357
+ throw new DataSourceError(`获取交易详情失败 (${txHash}): ${err.message}`, 'rpc', { cause: err });
358
+ }
359
+ }
360
+ /**
361
+ * 批量查询交易状态。
362
+ */
363
+ async getBatchTransactionStatuses(txHashes) {
364
+ try {
365
+ return await this.rpc.getBatchTransactionStatuses(txHashes);
366
+ }
367
+ catch (err) {
368
+ throw new DataSourceError(`批量获取交易状态失败: ${err.message}`, 'rpc', { cause: err });
369
+ }
370
+ }
371
+ // ============================================================
372
+ // Bundle 操作 -- JitoAdapter
373
+ // ============================================================
374
+ /**
375
+ * 发送 Bundle 到 Jito Block Engine。
376
+ */
377
+ async sendBundle(base64Txs) {
378
+ try {
379
+ return await this.jito.sendBundle(base64Txs);
380
+ }
381
+ catch (err) {
382
+ throw new DataSourceError(`发送 Bundle 失败: ${err.message}`, 'jito', { cause: err });
383
+ }
384
+ }
385
+ /**
386
+ * 查询 Bundle 状态。
387
+ */
388
+ async getBundleStatus(bundleId) {
389
+ try {
390
+ return await this.jito.getBundleStatus(bundleId);
391
+ }
392
+ catch (err) {
393
+ throw new DataSourceError(`获取 Bundle 状态失败 (${bundleId}): ${err.message}`, 'jito', { cause: err });
394
+ }
395
+ }
396
+ /**
397
+ * 等待 Bundle 确认。
398
+ */
399
+ async waitForBundleConfirmation(bundleId, options) {
400
+ try {
401
+ return await this.jito.waitForBundleConfirmation(bundleId, options);
402
+ }
403
+ catch (err) {
404
+ throw new DataSourceError(`等待 Bundle 确认失败 (${bundleId}): ${err.message}`, 'jito', { cause: err });
405
+ }
406
+ }
407
+ // ============================================================
408
+ // 交易记录 -- DataStore (本地文件)
409
+ // ============================================================
410
+ /**
411
+ * 获取交易记录。
412
+ */
413
+ getTransactions(ca, groupId) {
414
+ return this.store.getTransactions(ca, groupId);
415
+ }
416
+ /**
417
+ * 获取指定钱包的交易记录。
418
+ */
419
+ getTransactionsByWallet(ca, groupId, wallet) {
420
+ return this.store.getTransactionsByWallet(ca, groupId, wallet);
421
+ }
422
+ /**
423
+ * 追加交易记录。
424
+ */
425
+ async appendTransaction(ca, groupId, tx) {
426
+ try {
427
+ await this.store.appendTransaction(ca, groupId, tx);
428
+ }
429
+ catch (err) {
430
+ throw new DataSourceError(`写入交易记录失败: ${err.message}`, 'store', { cause: err });
431
+ }
432
+ }
433
+ // ============================================================
434
+ // 持仓数据 -- DataStore (本地文件)
435
+ // ============================================================
436
+ /**
437
+ * 获取持仓数据。
438
+ */
439
+ getHoldings(ca, groupId) {
440
+ return this.store.getHoldings(ca, groupId);
441
+ }
442
+ /**
443
+ * 更新持仓数据。
444
+ */
445
+ async updateHolding(ca, groupId, wallet, update) {
446
+ try {
447
+ await this.store.updateHolding(ca, groupId, wallet, update);
448
+ }
449
+ catch (err) {
450
+ throw new DataSourceError(`更新持仓失败: ${err.message}`, 'store', { cause: err });
451
+ }
452
+ }
453
+ // ============================================================
454
+ // 余额快照 -- DataStore (本地文件)
455
+ // ============================================================
456
+ /**
457
+ * 获取本地缓存的余额快照。
458
+ */
459
+ getBalancesSnapshot(ca, groupId) {
460
+ return this.store.getBalances(ca, groupId);
461
+ }
462
+ /**
463
+ * 更新余额快照。
464
+ */
465
+ async updateBalance(ca, groupId, wallet, balance) {
466
+ try {
467
+ await this.store.updateBalance(ca, groupId, wallet, balance);
468
+ }
469
+ catch (err) {
470
+ throw new DataSourceError(`更新余额快照失败: ${err.message}`, 'store', { cause: err });
471
+ }
472
+ }
473
+ // ============================================================
474
+ // 全局数据 -- DataStore
475
+ // ============================================================
476
+ /**
477
+ * 获取手续费配置。
478
+ */
479
+ getFeeConfig() {
480
+ return this.store.getFeeConfig();
481
+ }
482
+ /**
483
+ * 保存手续费配置。
484
+ */
485
+ async saveFeeConfig(config) {
486
+ try {
487
+ await this.store.saveFeeConfig(config);
488
+ }
489
+ catch (err) {
490
+ throw new DataSourceError(`保存手续费配置失败: ${err.message}`, 'store', { cause: err });
491
+ }
492
+ }
493
+ // ============================================================
494
+ // DataStore 工具方法
495
+ // ============================================================
496
+ /**
497
+ * 列出所有有数据的代币 CA。
498
+ */
499
+ listTokens() {
500
+ return this.store.listTokens();
501
+ }
502
+ /**
503
+ * 列出某个代币下所有有数据的钱包组 ID。
504
+ */
505
+ listGroups(ca) {
506
+ return this.store.listGroups(ca);
507
+ }
508
+ // ============================================================
509
+ // 交易追踪 -- TxTracker
510
+ // ============================================================
511
+ /**
512
+ * 追踪单笔交易。
513
+ * 轮询确认后自动写入 DataStore (交易记录 + 持仓 + 余额)。
514
+ */
515
+ async trackTransaction(txHash, context, options) {
516
+ return this.tracker.trackTransaction(txHash, context, options);
517
+ }
518
+ /**
519
+ * 追踪 Jito Bundle。
520
+ * Bundle 确认后逐个处理内部交易并写入 DataStore。
521
+ */
522
+ async trackBundle(bundleId, txHashes, context, options) {
523
+ return this.tracker.trackBundle(bundleId, txHashes, context, options);
524
+ }
525
+ /**
526
+ * 批量追踪多笔独立交易。
527
+ */
528
+ async trackBatch(entries, options) {
529
+ return this.tracker.trackBatch(entries, options);
530
+ }
531
+ // ============================================================
532
+ // 健康检查
533
+ // ============================================================
534
+ /**
535
+ * 检查所有数据源的健康状态。
536
+ */
537
+ async healthCheck() {
538
+ const [codexResult, rpcResult, jitoResult] = await Promise.all([
539
+ this.codex.healthCheck().catch((err) => ({ healthy: false, endpoint: '', error: err.message })),
540
+ this.rpc.healthCheck().catch((err) => ({ healthy: false, endpoint: '', error: err.message })),
541
+ this.jito.healthCheck().catch((err) => ({ healthy: false, endpoint: '', error: err.message })),
542
+ ]);
543
+ return {
544
+ codex: { healthy: codexResult.healthy, error: codexResult.error },
545
+ rpc: { healthy: rpcResult.healthy, endpoint: rpcResult.endpoint, error: rpcResult.error },
546
+ jito: { healthy: jitoResult.healthy, endpoint: jitoResult.endpoint, error: jitoResult.error },
547
+ };
548
+ }
549
+ // ============================================================
550
+ // 底层适配器直接访问 (高级用途)
551
+ // ============================================================
552
+ /** 获取底层 CodexAdapter (仅当 DataSource 接口不够用时使用) */
553
+ getCodexAdapter() {
554
+ return this.codex;
555
+ }
556
+ /** 获取底层 RpcAdapter */
557
+ getRpcAdapter() {
558
+ return this.rpc;
559
+ }
560
+ /** 获取底层 JitoAdapter */
561
+ getJitoAdapter() {
562
+ return this.jito;
563
+ }
564
+ /** 获取底层 DataStore */
565
+ getDataStore() {
566
+ return this.store;
567
+ }
568
+ /** 获取底层 TxTracker */
569
+ getTxTracker() {
570
+ return this.tracker;
571
+ }
572
+ // ============================================================
573
+ // 内部工具方法
574
+ // ============================================================
575
+ /**
576
+ * 检查时间戳是否已过期。
577
+ * @param updatedAt 上次更新时间 (ms)
578
+ * @param ttlMs 有效期 (ms)
579
+ * @returns true 表示已过期
580
+ */
581
+ isExpired(updatedAt, ttlMs) {
582
+ return Date.now() - updatedAt > ttlMs;
583
+ }
584
+ /**
585
+ * 根据 DEX/交易所名称推断 DEX 类型。
586
+ * Codex API 返回的 exchangeName 映射到 TokenInfoFile.dex 枚举。
587
+ */
588
+ inferDex(exchangeName) {
589
+ if (!exchangeName)
590
+ return 'pump';
591
+ const name = exchangeName.toLowerCase();
592
+ if (name.includes('pump') && name.includes('swap'))
593
+ return 'pumpswap';
594
+ if (name.includes('pump'))
595
+ return 'pump';
596
+ if (name.includes('raydium'))
597
+ return 'raydium';
598
+ if (name.includes('launchlab') || name.includes('launch'))
599
+ return 'launchlab';
600
+ if (name.includes('meteora'))
601
+ return 'meteora';
602
+ // 无法识别时默认 pump
603
+ return 'pump';
604
+ }
605
+ }
606
+ // ============================================================
607
+ // 单例管理
608
+ // ============================================================
609
+ let _instance = null;
610
+ /**
611
+ * 获取 DataSource 全局单例。
612
+ * 命令层的标准入口:
613
+ * import { getDataSource } from '../data-source.js';
614
+ * const ds = getDataSource();
615
+ */
616
+ export function getDataSource() {
617
+ if (!_instance) {
618
+ _instance = new DataSource();
619
+ }
620
+ return _instance;
621
+ }
622
+ /**
623
+ * 重置单例 (用于测试或配置变更后重新初始化)。
624
+ */
625
+ export function resetDataSource() {
626
+ _instance = null;
627
+ }
628
+ //# sourceMappingURL=data-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/data-source.ts"],"names":[],"mappings":"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"}