@oobe-protocol-labs/synapse-client-sdk 1.0.0-beta

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 (460) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1393 -0
  3. package/dist/cjs/advanced/circuit-breaker.d.ts +111 -0
  4. package/dist/cjs/advanced/circuit-breaker.d.ts.map +1 -0
  5. package/dist/cjs/advanced/circuit-breaker.js +278 -0
  6. package/dist/cjs/advanced/circuit-breaker.js.map +1 -0
  7. package/dist/cjs/advanced/index.d.ts +8 -0
  8. package/dist/cjs/advanced/index.d.ts.map +1 -0
  9. package/dist/cjs/advanced/index.js +13 -0
  10. package/dist/cjs/advanced/index.js.map +1 -0
  11. package/dist/cjs/advanced/load-balancer.d.ts +114 -0
  12. package/dist/cjs/advanced/load-balancer.d.ts.map +1 -0
  13. package/dist/cjs/advanced/load-balancer.js +354 -0
  14. package/dist/cjs/advanced/load-balancer.js.map +1 -0
  15. package/dist/cjs/advanced/smart-caching.d.ts +113 -0
  16. package/dist/cjs/advanced/smart-caching.d.ts.map +1 -0
  17. package/dist/cjs/advanced/smart-caching.js +461 -0
  18. package/dist/cjs/advanced/smart-caching.js.map +1 -0
  19. package/dist/cjs/advanced/types.d.ts +228 -0
  20. package/dist/cjs/advanced/types.d.ts.map +1 -0
  21. package/dist/cjs/advanced/types.js +7 -0
  22. package/dist/cjs/advanced/types.js.map +1 -0
  23. package/dist/cjs/ai/index.d.ts +15 -0
  24. package/dist/cjs/ai/index.d.ts.map +1 -0
  25. package/dist/cjs/ai/index.js +20 -0
  26. package/dist/cjs/ai/index.js.map +1 -0
  27. package/dist/cjs/ai/merkle-operation.d.ts +245 -0
  28. package/dist/cjs/ai/merkle-operation.d.ts.map +1 -0
  29. package/dist/cjs/ai/merkle-operation.js +522 -0
  30. package/dist/cjs/ai/merkle-operation.js.map +1 -0
  31. package/dist/cjs/ai/pda-manager.d.ts +134 -0
  32. package/dist/cjs/ai/pda-manager.d.ts.map +1 -0
  33. package/dist/cjs/ai/pda-manager.js +250 -0
  34. package/dist/cjs/ai/pda-manager.js.map +1 -0
  35. package/dist/cjs/ai/types.ai.d.ts +172 -0
  36. package/dist/cjs/ai/types.ai.d.ts.map +1 -0
  37. package/dist/cjs/ai/types.ai.js +14 -0
  38. package/dist/cjs/ai/types.ai.js.map +1 -0
  39. package/dist/cjs/ai/zero-combine-fetcher.d.ts +171 -0
  40. package/dist/cjs/ai/zero-combine-fetcher.d.ts.map +1 -0
  41. package/dist/cjs/ai/zero-combine-fetcher.js +412 -0
  42. package/dist/cjs/ai/zero-combine-fetcher.js.map +1 -0
  43. package/dist/cjs/client.d.ts +83 -0
  44. package/dist/cjs/client.d.ts.map +1 -0
  45. package/dist/cjs/client.js +287 -0
  46. package/dist/cjs/client.js.map +1 -0
  47. package/dist/cjs/defi/advanced-features.d.ts +207 -0
  48. package/dist/cjs/defi/advanced-features.d.ts.map +1 -0
  49. package/dist/cjs/defi/advanced-features.js +382 -0
  50. package/dist/cjs/defi/advanced-features.js.map +1 -0
  51. package/dist/cjs/defi/index.d.ts +29 -0
  52. package/dist/cjs/defi/index.d.ts.map +1 -0
  53. package/dist/cjs/defi/index.js +50 -0
  54. package/dist/cjs/defi/index.js.map +1 -0
  55. package/dist/cjs/defi/jito.d.ts +118 -0
  56. package/dist/cjs/defi/jito.d.ts.map +1 -0
  57. package/dist/cjs/defi/jito.js +291 -0
  58. package/dist/cjs/defi/jito.js.map +1 -0
  59. package/dist/cjs/defi/jupiter.d.ts +143 -0
  60. package/dist/cjs/defi/jupiter.d.ts.map +1 -0
  61. package/dist/cjs/defi/jupiter.js +219 -0
  62. package/dist/cjs/defi/jupiter.js.map +1 -0
  63. package/dist/cjs/defi/price-feed.d.ts +63 -0
  64. package/dist/cjs/defi/price-feed.d.ts.map +1 -0
  65. package/dist/cjs/defi/price-feed.js +153 -0
  66. package/dist/cjs/defi/price-feed.js.map +1 -0
  67. package/dist/cjs/defi/token-data.d.ts +83 -0
  68. package/dist/cjs/defi/token-data.d.ts.map +1 -0
  69. package/dist/cjs/defi/token-data.js +205 -0
  70. package/dist/cjs/defi/token-data.js.map +1 -0
  71. package/dist/cjs/defi/unstable-features.d.ts +207 -0
  72. package/dist/cjs/defi/unstable-features.d.ts.map +1 -0
  73. package/dist/cjs/defi/unstable-features.js +382 -0
  74. package/dist/cjs/defi/unstable-features.js.map +1 -0
  75. package/dist/cjs/defi/utils.d.ts +265 -0
  76. package/dist/cjs/defi/utils.d.ts.map +1 -0
  77. package/dist/cjs/defi/utils.js +619 -0
  78. package/dist/cjs/defi/utils.js.map +1 -0
  79. package/dist/cjs/index.d.ts +31 -0
  80. package/dist/cjs/index.d.ts.map +1 -0
  81. package/dist/cjs/index.js +71 -0
  82. package/dist/cjs/index.js.map +1 -0
  83. package/dist/cjs/methods/solana-rpc.d.ts +362 -0
  84. package/dist/cjs/methods/solana-rpc.d.ts.map +1 -0
  85. package/dist/cjs/methods/solana-rpc.js +584 -0
  86. package/dist/cjs/methods/solana-rpc.js.map +1 -0
  87. package/dist/cjs/nft/advanced-features.d.ts +205 -0
  88. package/dist/cjs/nft/advanced-features.d.ts.map +1 -0
  89. package/dist/cjs/nft/advanced-features.js +529 -0
  90. package/dist/cjs/nft/advanced-features.js.map +1 -0
  91. package/dist/cjs/nft/clients/index.d.ts +8 -0
  92. package/dist/cjs/nft/clients/index.d.ts.map +1 -0
  93. package/dist/cjs/nft/clients/index.js +14 -0
  94. package/dist/cjs/nft/clients/index.js.map +1 -0
  95. package/dist/cjs/nft/clients/magic-eden-client.d.ts +101 -0
  96. package/dist/cjs/nft/clients/magic-eden-client.d.ts.map +1 -0
  97. package/dist/cjs/nft/clients/magic-eden-client.js +263 -0
  98. package/dist/cjs/nft/clients/magic-eden-client.js.map +1 -0
  99. package/dist/cjs/nft/clients/metaplex-onchain-client.d.ts +154 -0
  100. package/dist/cjs/nft/clients/metaplex-onchain-client.d.ts.map +1 -0
  101. package/dist/cjs/nft/clients/metaplex-onchain-client.js +408 -0
  102. package/dist/cjs/nft/clients/metaplex-onchain-client.js.map +1 -0
  103. package/dist/cjs/nft/clients/tensor-client.d.ts +79 -0
  104. package/dist/cjs/nft/clients/tensor-client.d.ts.map +1 -0
  105. package/dist/cjs/nft/clients/tensor-client.js +222 -0
  106. package/dist/cjs/nft/clients/tensor-client.js.map +1 -0
  107. package/dist/cjs/nft/index.d.ts +13 -0
  108. package/dist/cjs/nft/index.d.ts.map +1 -0
  109. package/dist/cjs/nft/index.js +37 -0
  110. package/dist/cjs/nft/index.js.map +1 -0
  111. package/dist/cjs/nft/types.nft.d.ts +342 -0
  112. package/dist/cjs/nft/types.nft.d.ts.map +1 -0
  113. package/dist/cjs/nft/types.nft.js +3 -0
  114. package/dist/cjs/nft/types.nft.js.map +1 -0
  115. package/dist/cjs/nft/utils.d.ts +46 -0
  116. package/dist/cjs/nft/utils.d.ts.map +1 -0
  117. package/dist/cjs/nft/utils.js +281 -0
  118. package/dist/cjs/nft/utils.js.map +1 -0
  119. package/dist/cjs/types.d.ts +525 -0
  120. package/dist/cjs/types.d.ts.map +1 -0
  121. package/dist/cjs/types.js +192 -0
  122. package/dist/cjs/types.js.map +1 -0
  123. package/dist/cjs/utils/constant.d.ts +8 -0
  124. package/dist/cjs/utils/constant.d.ts.map +1 -0
  125. package/dist/cjs/utils/constant.js +12 -0
  126. package/dist/cjs/utils/constant.js.map +1 -0
  127. package/dist/cjs/utils/helpers.d.ts +92 -0
  128. package/dist/cjs/utils/helpers.d.ts.map +1 -0
  129. package/dist/cjs/utils/helpers.js +248 -0
  130. package/dist/cjs/utils/helpers.js.map +1 -0
  131. package/dist/cjs/websocket/client.d.ts +182 -0
  132. package/dist/cjs/websocket/client.d.ts.map +1 -0
  133. package/dist/cjs/websocket/client.js +465 -0
  134. package/dist/cjs/websocket/client.js.map +1 -0
  135. package/dist/cjs/websocket/index.d.ts +6 -0
  136. package/dist/cjs/websocket/index.d.ts.map +1 -0
  137. package/dist/cjs/websocket/index.js +9 -0
  138. package/dist/cjs/websocket/index.js.map +1 -0
  139. package/dist/docs/.nojekyll +1 -0
  140. package/dist/docs/assets/highlight.css +113 -0
  141. package/dist/docs/assets/icons.js +18 -0
  142. package/dist/docs/assets/icons.svg +1 -0
  143. package/dist/docs/assets/main.js +60 -0
  144. package/dist/docs/assets/navigation.js +1 -0
  145. package/dist/docs/assets/search.js +1 -0
  146. package/dist/docs/assets/style.css +1493 -0
  147. package/dist/docs/classes/AIError.html +40 -0
  148. package/dist/docs/classes/AIInvestmentAdvisor.html +26 -0
  149. package/dist/docs/classes/AIRarityCalculator.html +28 -0
  150. package/dist/docs/classes/ArbitrageDetector.html +30 -0
  151. package/dist/docs/classes/BatchingError.html +40 -0
  152. package/dist/docs/classes/CacheError.html +40 -0
  153. package/dist/docs/classes/CircuitBreaker.html +38 -0
  154. package/dist/docs/classes/CircuitBreakerError.html +40 -0
  155. package/dist/docs/classes/CollectionAnalytics.html +30 -0
  156. package/dist/docs/classes/DeFiError.html +40 -0
  157. package/dist/docs/classes/FlashLoanSimulator.html +26 -0
  158. package/dist/docs/classes/JitoIntegration.html +53 -0
  159. package/dist/docs/classes/JupiterIntegration.html +43 -0
  160. package/dist/docs/classes/Keypair.html +28 -0
  161. package/dist/docs/classes/LoadBalancer.html +34 -0
  162. package/dist/docs/classes/MEVProtection.html +28 -0
  163. package/dist/docs/classes/MarketplaceAggregator.html +28 -0
  164. package/dist/docs/classes/MerkleOperation.html +74 -0
  165. package/dist/docs/classes/NFTEngine.html +29 -0
  166. package/dist/docs/classes/NFTError.html +40 -0
  167. package/dist/docs/classes/NetworkError.html +40 -0
  168. package/dist/docs/classes/PDAManager.html +46 -0
  169. package/dist/docs/classes/PortfolioAnalytics.html +26 -0
  170. package/dist/docs/classes/PriceFeedIntegration.html +37 -0
  171. package/dist/docs/classes/PublicKey.html +46 -0
  172. package/dist/docs/classes/RateLimitError.html +39 -0
  173. package/dist/docs/classes/SmartCaching.html +42 -0
  174. package/dist/docs/classes/Synapse.html +6 -0
  175. package/dist/docs/classes/SynapseClient.html +55 -0
  176. package/dist/docs/classes/SynapseError.html +37 -0
  177. package/dist/docs/classes/SynapseSolanaEngine.html +49 -0
  178. package/dist/docs/classes/SynapseUtils.html +25 -0
  179. package/dist/docs/classes/TokenDataIntegration.html +41 -0
  180. package/dist/docs/classes/Transaction.html +87 -0
  181. package/dist/docs/classes/TransactionInstruction.html +10 -0
  182. package/dist/docs/classes/UpstreamError.html +39 -0
  183. package/dist/docs/classes/WebSocketClient.html +47 -0
  184. package/dist/docs/classes/WebSocketError.html +40 -0
  185. package/dist/docs/classes/YieldFarmingFinder.html +26 -0
  186. package/dist/docs/classes/ZeroCombineFetcher.html +25 -0
  187. package/dist/docs/functions/createSynapseClient.html +2 -0
  188. package/dist/docs/hierarchy.html +1 -0
  189. package/dist/docs/index.html +776 -0
  190. package/dist/docs/interfaces/AIAgentConfig.html +11 -0
  191. package/dist/docs/interfaces/AIAgentContext.html +7 -0
  192. package/dist/docs/interfaces/AIContext.html +6 -0
  193. package/dist/docs/interfaces/AIMethodResult.html +6 -0
  194. package/dist/docs/interfaces/AIRarityAnalysis.html +3 -0
  195. package/dist/docs/interfaces/AIResponse.html +5 -0
  196. package/dist/docs/interfaces/AccountInfo.html +8 -0
  197. package/dist/docs/interfaces/AdvancedClientConfig.html +7 -0
  198. package/dist/docs/interfaces/AdvancedEvents.html +9 -0
  199. package/dist/docs/interfaces/AdvancedMetricsData.html +5 -0
  200. package/dist/docs/interfaces/AdvancedPerformanceMetrics.html +6 -0
  201. package/dist/docs/interfaces/AgentAdapter.html +6 -0
  202. package/dist/docs/interfaces/AgentRiskReport.html +6 -0
  203. package/dist/docs/interfaces/AgentTradeSuggestion.html +10 -0
  204. package/dist/docs/interfaces/AggregatedCollectionStats.html +36 -0
  205. package/dist/docs/interfaces/ArbitrageOpportunity.html +8 -0
  206. package/dist/docs/interfaces/AutoTradingStrategy.html +13 -0
  207. package/dist/docs/interfaces/BatchResponse.html +4 -0
  208. package/dist/docs/interfaces/BatchResult.html +6 -0
  209. package/dist/docs/interfaces/BatcherConfig.html +5 -0
  210. package/dist/docs/interfaces/BirdeyeTokenPrice.html +4 -0
  211. package/dist/docs/interfaces/BlockhashInfo.html +5 -0
  212. package/dist/docs/interfaces/BuildSwapTxResult.html +7 -0
  213. package/dist/docs/interfaces/CacheStats.html +9 -0
  214. package/dist/docs/interfaces/ChunkInfo.html +10 -0
  215. package/dist/docs/interfaces/CircuitBreakerConfig.html +6 -0
  216. package/dist/docs/interfaces/ClientStats.html +14 -0
  217. package/dist/docs/interfaces/CollectionStats.html +17 -0
  218. package/dist/docs/interfaces/CollectionTrends.html +7 -0
  219. package/dist/docs/interfaces/CompressedNFTInfo.html +13 -0
  220. package/dist/docs/interfaces/ConfirmedTransaction.html +6 -0
  221. package/dist/docs/interfaces/ConnectionEvents.html +11 -0
  222. package/dist/docs/interfaces/DeFiConfig.html +16 -0
  223. package/dist/docs/interfaces/DiagnosticsResult.html +6 -0
  224. package/dist/docs/interfaces/EpochInfo.html +9 -0
  225. package/dist/docs/interfaces/ExecuteSwapParams.html +10 -0
  226. package/dist/docs/interfaces/FetchConfig.html +7 -0
  227. package/dist/docs/interfaces/FlashLoanAction.html +6 -0
  228. package/dist/docs/interfaces/FlashLoanSimulation.html +9 -0
  229. package/dist/docs/interfaces/GatewayStats.html +7 -0
  230. package/dist/docs/interfaces/InscriptionResult.html +18 -0
  231. package/dist/docs/interfaces/InvestmentRecommendation.html +10 -0
  232. package/dist/docs/interfaces/JitoBundleParams.html +4 -0
  233. package/dist/docs/interfaces/JitoBundleResult.html +6 -0
  234. package/dist/docs/interfaces/JitoBundleStatus.html +6 -0
  235. package/dist/docs/interfaces/JitoTipAccount.html +3 -0
  236. package/dist/docs/interfaces/JupiterQuoteParams.html +10 -0
  237. package/dist/docs/interfaces/JupiterQuoteRequest.html +17 -0
  238. package/dist/docs/interfaces/JupiterQuoteResponse.html +13 -0
  239. package/dist/docs/interfaces/JupiterSwapOptions.html +8 -0
  240. package/dist/docs/interfaces/JupiterSwapResponse.html +4 -0
  241. package/dist/docs/interfaces/JupiterTokenPrice.html +5 -0
  242. package/dist/docs/interfaces/LoadBalancerConfig.html +5 -0
  243. package/dist/docs/interfaces/MEVProtectionConfig.html +11 -0
  244. package/dist/docs/interfaces/MEVProtectionResult.html +6 -0
  245. package/dist/docs/interfaces/MagicEdenActivity.html +22 -0
  246. package/dist/docs/interfaces/MagicEdenCollection.html +22 -0
  247. package/dist/docs/interfaces/MagicEdenCollectionStats.html +17 -0
  248. package/dist/docs/interfaces/MagicEdenErrorResponse.html +4 -0
  249. package/dist/docs/interfaces/MagicEdenListing.html +24 -0
  250. package/dist/docs/interfaces/MarketplaceClientConfig.html +14 -0
  251. package/dist/docs/interfaces/MarketplaceFloorPrices.html +7 -0
  252. package/dist/docs/interfaces/MarketplaceListing.html +9 -0
  253. package/dist/docs/interfaces/MerkleLeaf.html +6 -0
  254. package/dist/docs/interfaces/MerkleProof.html +8 -0
  255. package/dist/docs/interfaces/MerkleValidationResult.html +10 -0
  256. package/dist/docs/interfaces/MultiChainSignal.html +8 -0
  257. package/dist/docs/interfaces/NFTAttribute.html +4 -0
  258. package/dist/docs/interfaces/NFTConfig.html +6 -0
  259. package/dist/docs/interfaces/NFTInfo.html +10 -0
  260. package/dist/docs/interfaces/NFTMetadata.html +9 -0
  261. package/dist/docs/interfaces/NormalizedMarketplaceListing.html +18 -0
  262. package/dist/docs/interfaces/OOBECompatibleAgent.html +8 -0
  263. package/dist/docs/interfaces/PDAConfig.html +10 -0
  264. package/dist/docs/interfaces/ParsedAccountInfo.html +8 -0
  265. package/dist/docs/interfaces/PerformanceMetrics.html +9 -0
  266. package/dist/docs/interfaces/PortfolioMetrics.html +10 -0
  267. package/dist/docs/interfaces/PriceData.html +8 -0
  268. package/dist/docs/interfaces/ProofRecord.html +12 -0
  269. package/dist/docs/interfaces/QuoteRequestCommon.html +11 -0
  270. package/dist/docs/interfaces/QuoteResponse.html +6 -0
  271. package/dist/docs/interfaces/RarityAlgorithmConfig.html +3 -0
  272. package/dist/docs/interfaces/RarityScore.html +8 -0
  273. package/dist/docs/interfaces/RaydiumBuildSwapParams.html +14 -0
  274. package/dist/docs/interfaces/RaydiumQuoteRequest.html +14 -0
  275. package/dist/docs/interfaces/RequestOptions.html +12 -0
  276. package/dist/docs/interfaces/RetryAttempt.html +5 -0
  277. package/dist/docs/interfaces/RpcError.html +5 -0
  278. package/dist/docs/interfaces/RpcRequest.html +6 -0
  279. package/dist/docs/interfaces/RpcResponse.html +6 -0
  280. package/dist/docs/interfaces/SecurityThreat.html +6 -0
  281. package/dist/docs/interfaces/SignatureInfo.html +8 -0
  282. package/dist/docs/interfaces/Signer.html +4 -0
  283. package/dist/docs/interfaces/SmartCacheConfig.html +7 -0
  284. package/dist/docs/interfaces/SmartQueryOptions.html +10 -0
  285. package/dist/docs/interfaces/StressTestOptions.html +8 -0
  286. package/dist/docs/interfaces/StressTestResult.html +9 -0
  287. package/dist/docs/interfaces/SubscriptionConfig.html +9 -0
  288. package/dist/docs/interfaces/SubscriptionOptions.html +7 -0
  289. package/dist/docs/interfaces/SubscriptionResult.html +7 -0
  290. package/dist/docs/interfaces/SynapseConfig.html +13 -0
  291. package/dist/docs/interfaces/SynapseLikeClient.html +4 -0
  292. package/dist/docs/interfaces/TensorCollectionStats.html +33 -0
  293. package/dist/docs/interfaces/TensorErrorResponse.html +5 -0
  294. package/dist/docs/interfaces/TensorListing.html +16 -0
  295. package/dist/docs/interfaces/TensorSale.html +16 -0
  296. package/dist/docs/interfaces/TokenAccount.html +7 -0
  297. package/dist/docs/interfaces/TokenAccountInfo.html +12 -0
  298. package/dist/docs/interfaces/TokenHolding.html +8 -0
  299. package/dist/docs/interfaces/TokenInfo.html +7 -0
  300. package/dist/docs/interfaces/TokenLargestAccount.html +5 -0
  301. package/dist/docs/interfaces/TokenSupply.html +5 -0
  302. package/dist/docs/interfaces/TradeExecution.html +14 -0
  303. package/dist/docs/interfaces/TransactionSignature.html +8 -0
  304. package/dist/docs/interfaces/UpstreamHealth.html +8 -0
  305. package/dist/docs/interfaces/UserPDAs.html +10 -0
  306. package/dist/docs/interfaces/WebSocketConfig.html +12 -0
  307. package/dist/docs/interfaces/WebSocketMessage.html +6 -0
  308. package/dist/docs/interfaces/YieldOpportunity.html +8 -0
  309. package/dist/docs/interfaces/ZeroChunk.html +8 -0
  310. package/dist/docs/interfaces/ZeroCombineResult.html +3 -0
  311. package/dist/docs/media/LICENSE +21 -0
  312. package/dist/docs/media/README-1.md +778 -0
  313. package/dist/docs/media/README-2.md +1050 -0
  314. package/dist/docs/media/README-3.md +1522 -0
  315. package/dist/docs/media/README-4.md +869 -0
  316. package/dist/docs/media/README-5.md +857 -0
  317. package/dist/docs/media/README-6.md +727 -0
  318. package/dist/docs/media/README.md +766 -0
  319. package/dist/docs/modules.html +168 -0
  320. package/dist/docs/types/BlockhashWithExpiryBlockHeight.html +1 -0
  321. package/dist/docs/types/Commitment.html +3 -0
  322. package/dist/docs/types/RiskTolerance.html +1 -0
  323. package/dist/docs/types/SimulatedTransactionResponse.html +1 -0
  324. package/dist/esm/advanced/circuit-breaker.d.ts +111 -0
  325. package/dist/esm/advanced/circuit-breaker.d.ts.map +1 -0
  326. package/dist/esm/advanced/circuit-breaker.js +274 -0
  327. package/dist/esm/advanced/circuit-breaker.js.map +1 -0
  328. package/dist/esm/advanced/index.d.ts +8 -0
  329. package/dist/esm/advanced/index.d.ts.map +1 -0
  330. package/dist/esm/advanced/index.js +7 -0
  331. package/dist/esm/advanced/index.js.map +1 -0
  332. package/dist/esm/advanced/load-balancer.d.ts +114 -0
  333. package/dist/esm/advanced/load-balancer.d.ts.map +1 -0
  334. package/dist/esm/advanced/load-balancer.js +350 -0
  335. package/dist/esm/advanced/load-balancer.js.map +1 -0
  336. package/dist/esm/advanced/smart-caching.d.ts +113 -0
  337. package/dist/esm/advanced/smart-caching.d.ts.map +1 -0
  338. package/dist/esm/advanced/smart-caching.js +457 -0
  339. package/dist/esm/advanced/smart-caching.js.map +1 -0
  340. package/dist/esm/advanced/types.d.ts +228 -0
  341. package/dist/esm/advanced/types.d.ts.map +1 -0
  342. package/dist/esm/advanced/types.js +6 -0
  343. package/dist/esm/advanced/types.js.map +1 -0
  344. package/dist/esm/ai/index.d.ts +15 -0
  345. package/dist/esm/ai/index.d.ts.map +1 -0
  346. package/dist/esm/ai/index.js +14 -0
  347. package/dist/esm/ai/index.js.map +1 -0
  348. package/dist/esm/ai/merkle-operation.d.ts +245 -0
  349. package/dist/esm/ai/merkle-operation.d.ts.map +1 -0
  350. package/dist/esm/ai/merkle-operation.js +485 -0
  351. package/dist/esm/ai/merkle-operation.js.map +1 -0
  352. package/dist/esm/ai/pda-manager.d.ts +134 -0
  353. package/dist/esm/ai/pda-manager.d.ts.map +1 -0
  354. package/dist/esm/ai/pda-manager.js +213 -0
  355. package/dist/esm/ai/pda-manager.js.map +1 -0
  356. package/dist/esm/ai/types.ai.d.ts +172 -0
  357. package/dist/esm/ai/types.ai.d.ts.map +1 -0
  358. package/dist/esm/ai/types.ai.js +13 -0
  359. package/dist/esm/ai/types.ai.js.map +1 -0
  360. package/dist/esm/ai/zero-combine-fetcher.d.ts +171 -0
  361. package/dist/esm/ai/zero-combine-fetcher.d.ts.map +1 -0
  362. package/dist/esm/ai/zero-combine-fetcher.js +408 -0
  363. package/dist/esm/ai/zero-combine-fetcher.js.map +1 -0
  364. package/dist/esm/client.d.ts +83 -0
  365. package/dist/esm/client.d.ts.map +1 -0
  366. package/dist/esm/client.js +283 -0
  367. package/dist/esm/client.js.map +1 -0
  368. package/dist/esm/defi/advanced-features.d.ts +207 -0
  369. package/dist/esm/defi/advanced-features.d.ts.map +1 -0
  370. package/dist/esm/defi/advanced-features.js +374 -0
  371. package/dist/esm/defi/advanced-features.js.map +1 -0
  372. package/dist/esm/defi/index.d.ts +29 -0
  373. package/dist/esm/defi/index.d.ts.map +1 -0
  374. package/dist/esm/defi/index.js +37 -0
  375. package/dist/esm/defi/index.js.map +1 -0
  376. package/dist/esm/defi/jito.d.ts +118 -0
  377. package/dist/esm/defi/jito.d.ts.map +1 -0
  378. package/dist/esm/defi/jito.js +287 -0
  379. package/dist/esm/defi/jito.js.map +1 -0
  380. package/dist/esm/defi/jupiter.d.ts +143 -0
  381. package/dist/esm/defi/jupiter.d.ts.map +1 -0
  382. package/dist/esm/defi/jupiter.js +215 -0
  383. package/dist/esm/defi/jupiter.js.map +1 -0
  384. package/dist/esm/defi/price-feed.d.ts +63 -0
  385. package/dist/esm/defi/price-feed.d.ts.map +1 -0
  386. package/dist/esm/defi/price-feed.js +149 -0
  387. package/dist/esm/defi/price-feed.js.map +1 -0
  388. package/dist/esm/defi/token-data.d.ts +83 -0
  389. package/dist/esm/defi/token-data.d.ts.map +1 -0
  390. package/dist/esm/defi/token-data.js +201 -0
  391. package/dist/esm/defi/token-data.js.map +1 -0
  392. package/dist/esm/defi/unstable-features.d.ts +207 -0
  393. package/dist/esm/defi/unstable-features.d.ts.map +1 -0
  394. package/dist/esm/defi/unstable-features.js +374 -0
  395. package/dist/esm/defi/unstable-features.js.map +1 -0
  396. package/dist/esm/defi/utils.d.ts +265 -0
  397. package/dist/esm/defi/utils.d.ts.map +1 -0
  398. package/dist/esm/defi/utils.js +582 -0
  399. package/dist/esm/defi/utils.js.map +1 -0
  400. package/dist/esm/index.d.ts +31 -0
  401. package/dist/esm/index.d.ts.map +1 -0
  402. package/dist/esm/index.js +47 -0
  403. package/dist/esm/index.js.map +1 -0
  404. package/dist/esm/methods/solana-rpc.d.ts +362 -0
  405. package/dist/esm/methods/solana-rpc.d.ts.map +1 -0
  406. package/dist/esm/methods/solana-rpc.js +532 -0
  407. package/dist/esm/methods/solana-rpc.js.map +1 -0
  408. package/dist/esm/nft/advanced-features.d.ts +205 -0
  409. package/dist/esm/nft/advanced-features.d.ts.map +1 -0
  410. package/dist/esm/nft/advanced-features.js +489 -0
  411. package/dist/esm/nft/advanced-features.js.map +1 -0
  412. package/dist/esm/nft/clients/index.d.ts +8 -0
  413. package/dist/esm/nft/clients/index.d.ts.map +1 -0
  414. package/dist/esm/nft/clients/index.js +8 -0
  415. package/dist/esm/nft/clients/index.js.map +1 -0
  416. package/dist/esm/nft/clients/magic-eden-client.d.ts +101 -0
  417. package/dist/esm/nft/clients/magic-eden-client.d.ts.map +1 -0
  418. package/dist/esm/nft/clients/magic-eden-client.js +259 -0
  419. package/dist/esm/nft/clients/magic-eden-client.js.map +1 -0
  420. package/dist/esm/nft/clients/metaplex-onchain-client.d.ts +154 -0
  421. package/dist/esm/nft/clients/metaplex-onchain-client.d.ts.map +1 -0
  422. package/dist/esm/nft/clients/metaplex-onchain-client.js +404 -0
  423. package/dist/esm/nft/clients/metaplex-onchain-client.js.map +1 -0
  424. package/dist/esm/nft/clients/tensor-client.d.ts +79 -0
  425. package/dist/esm/nft/clients/tensor-client.d.ts.map +1 -0
  426. package/dist/esm/nft/clients/tensor-client.js +218 -0
  427. package/dist/esm/nft/clients/tensor-client.js.map +1 -0
  428. package/dist/esm/nft/index.d.ts +13 -0
  429. package/dist/esm/nft/index.d.ts.map +1 -0
  430. package/dist/esm/nft/index.js +15 -0
  431. package/dist/esm/nft/index.js.map +1 -0
  432. package/dist/esm/nft/types.nft.d.ts +342 -0
  433. package/dist/esm/nft/types.nft.d.ts.map +1 -0
  434. package/dist/esm/nft/types.nft.js +2 -0
  435. package/dist/esm/nft/types.nft.js.map +1 -0
  436. package/dist/esm/nft/utils.d.ts +46 -0
  437. package/dist/esm/nft/utils.d.ts.map +1 -0
  438. package/dist/esm/nft/utils.js +276 -0
  439. package/dist/esm/nft/utils.js.map +1 -0
  440. package/dist/esm/types.d.ts +525 -0
  441. package/dist/esm/types.d.ts.map +1 -0
  442. package/dist/esm/types.js +178 -0
  443. package/dist/esm/types.js.map +1 -0
  444. package/dist/esm/utils/constant.d.ts +8 -0
  445. package/dist/esm/utils/constant.d.ts.map +1 -0
  446. package/dist/esm/utils/constant.js +8 -0
  447. package/dist/esm/utils/constant.js.map +1 -0
  448. package/dist/esm/utils/helpers.d.ts +92 -0
  449. package/dist/esm/utils/helpers.d.ts.map +1 -0
  450. package/dist/esm/utils/helpers.js +243 -0
  451. package/dist/esm/utils/helpers.js.map +1 -0
  452. package/dist/esm/websocket/client.d.ts +182 -0
  453. package/dist/esm/websocket/client.d.ts.map +1 -0
  454. package/dist/esm/websocket/client.js +458 -0
  455. package/dist/esm/websocket/client.js.map +1 -0
  456. package/dist/esm/websocket/index.d.ts +6 -0
  457. package/dist/esm/websocket/index.d.ts.map +1 -0
  458. package/dist/esm/websocket/index.js +5 -0
  459. package/dist/esm/websocket/index.js.map +1 -0
  460. package/package.json +160 -0
@@ -0,0 +1,778 @@
1
+ # WebSocket Client Module
2
+
3
+ Real-time Solana blockchain data streaming with intelligent reconnection, subscription management, and enterprise-grade reliability.
4
+
5
+ ## Architecture
6
+
7
+ ```
8
+ ┌──────────────────────────────────────────────────────┐
9
+ │ WebSocket Client Architecture │
10
+ ├──────────────────────────────────────────────────────┤
11
+ │ │
12
+ │ Application Layer │
13
+ │ ├─ Account Subscriptions │
14
+ │ ├─ Slot Subscriptions │
15
+ │ ├─ Program Subscriptions │
16
+ │ └─ Transaction Subscriptions │
17
+ │ │ │
18
+ │ ▼ │
19
+ │ Subscription Manager │
20
+ │ ├─ ID Mapping │
21
+ │ ├─ Callback Registry │
22
+ │ ├─ Filter Management │
23
+ │ └─ Priority Queue │
24
+ │ │ │
25
+ │ ▼ │
26
+ │ Connection Manager │
27
+ │ ├─ Auto-reconnect (exponential backoff) │
28
+ │ ├─ Heartbeat monitoring │
29
+ │ ├─ Message buffering │
30
+ │ └─ State tracking │
31
+ │ │ │
32
+ │ ▼ │
33
+ │ WebSocket Layer (ws) │
34
+ │ └─ Binary protocol with compression │
35
+ │ │
36
+ ├──────────────────────────────────────────────────────┤
37
+ │ Solana RPC Gateway (WSS) │
38
+ └──────────────────────────────────────────────────────┘
39
+ ```
40
+
41
+ ## Features
42
+
43
+ | Feature | Description | Status |
44
+ |---------|-------------|--------|
45
+ | **Auto-reconnect** | Exponential backoff with configurable max attempts | Production |
46
+ | **Subscription Management** | Track and restore subscriptions on reconnect | Production |
47
+ | **Message Buffering** | Queue messages during disconnection | Production |
48
+ | **Smart Filtering** | Client-side filtering with custom predicates | Production |
49
+ | **Circuit Breaker** | Automatic failure protection | Production |
50
+ | **Smart Caching** | Cache subscription data | Production |
51
+ | **Compression** | WebSocket compression support | Production |
52
+ | **Heartbeat** | Connection health monitoring | Production |
53
+
54
+ ## Installation
55
+
56
+ ```bash
57
+ npm install @synapse/client-sdk
58
+ ```
59
+
60
+ ## Quick Start
61
+
62
+ ```typescript
63
+ import { WebSocketClient } from '@synapse/client-sdk/websocket';
64
+
65
+ const wsClient = new WebSocketClient({
66
+ endpoint: 'wss://your-synapse-gateway.com',
67
+ apiKey: process.env.SYNAPSE_API_KEY,
68
+ autoReconnect: true,
69
+ maxReconnectAttempts: 10,
70
+ reconnectDelay: 5000,
71
+ enableSmartCaching: true,
72
+ enableCircuitBreaker: true,
73
+ });
74
+
75
+ // Connect
76
+ await wsClient.connect();
77
+
78
+ // Subscribe to account changes
79
+ const subId = await wsClient.accountSubscribe(
80
+ 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC mint
81
+ (accountInfo) => {
82
+ console.log('Account updated:', accountInfo);
83
+ },
84
+ {
85
+ commitment: 'confirmed',
86
+ encoding: 'jsonParsed',
87
+ }
88
+ );
89
+
90
+ // Unsubscribe
91
+ await wsClient.accountUnsubscribe(subId);
92
+
93
+ // Cleanup
94
+ await wsClient.disconnect();
95
+ ```
96
+
97
+ ## Configuration
98
+
99
+ ```typescript
100
+ interface WebSocketConfig {
101
+ endpoint: string; // WSS endpoint URL
102
+ apiKey?: string; // Optional API key
103
+ autoReconnect?: boolean; // Enable auto-reconnect (default: true)
104
+ maxReconnectAttempts?: number; // Max reconnection attempts (default: 10)
105
+ reconnectDelay?: number; // Initial reconnect delay ms (default: 5000)
106
+ heartbeatInterval?: number; // Heartbeat interval ms (default: 30000)
107
+ enableCompression?: boolean; // Enable compression (default: true)
108
+ enableSmartCaching?: boolean; // Enable caching (default: true)
109
+ enableCircuitBreaker?: boolean; // Enable circuit breaker (default: true)
110
+ maxSubscriptions?: number; // Max concurrent subscriptions (default: 1000)
111
+ bufferSize?: number; // Message buffer size bytes (default: 16MB)
112
+ }
113
+ ```
114
+
115
+ ## Subscription Methods
116
+
117
+ ### Account Subscribe
118
+
119
+ Monitor account changes in real-time.
120
+
121
+ ```typescript
122
+ const subId = await wsClient.accountSubscribe(
123
+ accountAddress,
124
+ (accountInfo) => {
125
+ console.log('Account data:', accountInfo.data);
126
+ console.log('Lamports:', accountInfo.lamports);
127
+ console.log('Owner:', accountInfo.owner);
128
+ },
129
+ {
130
+ commitment: 'confirmed',
131
+ encoding: 'jsonParsed',
132
+ enableCache: true,
133
+ enableFiltering: false,
134
+ }
135
+ );
136
+ ```
137
+
138
+ #### Options
139
+
140
+ ```typescript
141
+ interface SubscriptionOptions {
142
+ commitment?: 'processed' | 'confirmed' | 'finalized';
143
+ encoding?: 'base58' | 'base64' | 'jsonParsed';
144
+ enableCache?: boolean; // Cache subscription data
145
+ enableFiltering?: boolean; // Apply custom filters
146
+ customFilters?: Record<string, any>;
147
+ priority?: 'low' | 'medium' | 'high';
148
+ resilient?: boolean; // Auto-restore on reconnect
149
+ }
150
+ ```
151
+
152
+ ### Program Subscribe
153
+
154
+ Subscribe to all accounts owned by a program.
155
+
156
+ ```typescript
157
+ const subId = await wsClient.programSubscribe(
158
+ 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA', // SPL Token program
159
+ (accountInfo) => {
160
+ console.log('Token account updated:', accountInfo);
161
+ },
162
+ {
163
+ commitment: 'confirmed',
164
+ encoding: 'jsonParsed',
165
+ filters: [
166
+ {
167
+ memcmp: {
168
+ offset: 0,
169
+ bytes: 'mint_address_here',
170
+ },
171
+ },
172
+ ],
173
+ }
174
+ );
175
+ ```
176
+
177
+ ### Slot Subscribe
178
+
179
+ Monitor slot changes for block production tracking.
180
+
181
+ ```typescript
182
+ const subId = await wsClient.slotSubscribe((slotInfo) => {
183
+ console.log('Slot:', slotInfo.slot);
184
+ console.log('Parent:', slotInfo.parent);
185
+ console.log('Root:', slotInfo.root);
186
+ });
187
+ ```
188
+
189
+ ### Signature Subscribe
190
+
191
+ Track transaction confirmation status.
192
+
193
+ ```typescript
194
+ const subId = await wsClient.signatureSubscribe(
195
+ transactionSignature,
196
+ (result) => {
197
+ if (result.err) {
198
+ console.error('Transaction failed:', result.err);
199
+ } else {
200
+ console.log('Transaction confirmed!');
201
+ }
202
+ },
203
+ {
204
+ commitment: 'confirmed',
205
+ }
206
+ );
207
+ ```
208
+
209
+ ### Logs Subscribe
210
+
211
+ Subscribe to transaction logs for specific accounts.
212
+
213
+ ```typescript
214
+ const subId = await wsClient.logsSubscribe(
215
+ {
216
+ mentions: [accountAddress], // Filter by account
217
+ },
218
+ (logs) => {
219
+ console.log('Logs:', logs.logs);
220
+ console.log('Signature:', logs.signature);
221
+ },
222
+ {
223
+ commitment: 'confirmed',
224
+ }
225
+ );
226
+ ```
227
+
228
+ ## Advanced Features
229
+
230
+ ### Smart Filtering
231
+
232
+ Apply custom filters on the client side to reduce callback overhead.
233
+
234
+ ```typescript
235
+ const subId = await wsClient.accountSubscribe(
236
+ tokenMintAddress,
237
+ (accountInfo) => {
238
+ console.log('High-value account:', accountInfo);
239
+ },
240
+ {
241
+ commitment: 'confirmed',
242
+ enableFiltering: true,
243
+ customFilters: {
244
+ // Only trigger callback if lamports > 1 SOL
245
+ 'account.lamports': { min: 1_000_000_000 },
246
+ // Only trigger if owner matches
247
+ 'account.owner': { equals: 'specific_program_id' },
248
+ },
249
+ }
250
+ );
251
+ ```
252
+
253
+ ### Priority Subscriptions
254
+
255
+ Prioritize critical subscriptions for faster delivery.
256
+
257
+ ```typescript
258
+ // High-priority subscription (processed first)
259
+ const criticalSub = await wsClient.accountSubscribe(
260
+ criticalAccountAddress,
261
+ handleCriticalUpdate,
262
+ {
263
+ priority: 'high',
264
+ resilient: true,
265
+ }
266
+ );
267
+
268
+ // Low-priority subscription
269
+ const monitorSub = await wsClient.accountSubscribe(
270
+ monitorAccountAddress,
271
+ handleMonitorUpdate,
272
+ {
273
+ priority: 'low',
274
+ }
275
+ );
276
+ ```
277
+
278
+ ### Resilient Subscriptions
279
+
280
+ Automatically restore subscriptions after reconnection.
281
+
282
+ ```typescript
283
+ const subId = await wsClient.accountSubscribe(
284
+ accountAddress,
285
+ callback,
286
+ {
287
+ resilient: true, // Automatically resubscribe on reconnect
288
+ }
289
+ );
290
+
291
+ // On reconnection, subscription is automatically restored
292
+ wsClient.on('reconnected', () => {
293
+ console.log('All resilient subscriptions restored');
294
+ });
295
+ ```
296
+
297
+ ## Event System
298
+
299
+ ```typescript
300
+ // Connection events
301
+ wsClient.on('connected', () => {
302
+ console.log('WebSocket connected');
303
+ });
304
+
305
+ wsClient.on('disconnected', ({ code, reason }) => {
306
+ console.log('WebSocket disconnected:', code, reason);
307
+ });
308
+
309
+ wsClient.on('reconnecting', ({ attempt, maxAttempts }) => {
310
+ console.log(`Reconnecting: ${attempt}/${maxAttempts}`);
311
+ });
312
+
313
+ wsClient.on('reconnected', () => {
314
+ console.log('WebSocket reconnected successfully');
315
+ });
316
+
317
+ wsClient.on('reconnect-failed', () => {
318
+ console.error('Reconnection failed after max attempts');
319
+ });
320
+
321
+ // Subscription events
322
+ wsClient.on('subscription-added', ({ id, method }) => {
323
+ console.log(`Subscription added: ${method} (${id})`);
324
+ });
325
+
326
+ wsClient.on('subscription-removed', ({ id }) => {
327
+ console.log(`Subscription removed: ${id}`);
328
+ });
329
+
330
+ wsClient.on('subscription-error', ({ id, error }) => {
331
+ console.error(`Subscription error: ${id}`, error);
332
+ });
333
+
334
+ // Error events
335
+ wsClient.on('error', (error) => {
336
+ console.error('WebSocket error:', error);
337
+ });
338
+
339
+ wsClient.on('message-error', ({ message, error }) => {
340
+ console.error('Message parsing error:', error);
341
+ });
342
+
343
+ // Metrics events
344
+ wsClient.on('metrics-update', (metrics) => {
345
+ console.log('WebSocket metrics:', metrics);
346
+ });
347
+ ```
348
+
349
+ ## Metrics
350
+
351
+ ```typescript
352
+ const metrics = wsClient.getMetrics();
353
+
354
+ console.log('WebSocket Metrics:', {
355
+ messagesReceived: metrics.messagesReceived,
356
+ messagesSent: metrics.messagesSent,
357
+ subscriptionsActive: metrics.subscriptionsActive,
358
+ reconnectCount: metrics.reconnectCount,
359
+ lastLatency: metrics.lastLatency,
360
+ averageLatency: metrics.averageLatency,
361
+ });
362
+ ```
363
+
364
+ ## Best Practices
365
+
366
+ ### 1. Connection Management
367
+
368
+ ```typescript
369
+ // ✅ Good: Singleton pattern
370
+ class WebSocketService {
371
+ private static instance: WebSocketClient;
372
+
373
+ static getInstance(): WebSocketClient {
374
+ if (!this.instance) {
375
+ this.instance = new WebSocketClient({
376
+ endpoint: process.env.WS_ENDPOINT!,
377
+ apiKey: process.env.SYNAPSE_API_KEY,
378
+ autoReconnect: true,
379
+ });
380
+ }
381
+ return this.instance;
382
+ }
383
+ }
384
+
385
+ // ❌ Bad: Multiple connections
386
+ function subscribeToAccount(address: string) {
387
+ const ws = new WebSocketClient({ endpoint: '...' }); // Don't do this
388
+ ws.accountSubscribe(address, callback);
389
+ }
390
+ ```
391
+
392
+ ### 2. Subscription Cleanup
393
+
394
+ ```typescript
395
+ // ✅ Good: Always unsubscribe
396
+ const subId = await wsClient.accountSubscribe(address, callback);
397
+
398
+ // When done
399
+ await wsClient.accountUnsubscribe(subId);
400
+
401
+ // Or unsubscribe all
402
+ await wsClient.unsubscribeAll();
403
+
404
+ // ❌ Bad: Leaving subscriptions open
405
+ wsClient.accountSubscribe(address, callback); // Memory leak
406
+ ```
407
+
408
+ ### 3. Error Handling
409
+
410
+ ```typescript
411
+ // ✅ Good: Handle errors gracefully
412
+ wsClient.on('error', async (error) => {
413
+ console.error('WebSocket error:', error);
414
+
415
+ // Implement fallback
416
+ if (error.code === 'CONNECTION_FAILED') {
417
+ await useHttpFallback();
418
+ }
419
+ });
420
+
421
+ wsClient.on('subscription-error', async ({ id, error }) => {
422
+ console.error(`Subscription ${id} failed:`, error);
423
+
424
+ // Retry or cleanup
425
+ await wsClient.accountUnsubscribe(id);
426
+ });
427
+ ```
428
+
429
+ ### 4. Reconnection Strategy
430
+
431
+ ```typescript
432
+ // ✅ Good: Exponential backoff with max attempts
433
+ const wsClient = new WebSocketClient({
434
+ endpoint: process.env.WS_ENDPOINT!,
435
+ autoReconnect: true,
436
+ maxReconnectAttempts: 10, // Limit attempts
437
+ reconnectDelay: 5000, // Start with 5s
438
+ });
439
+
440
+ // Monitor reconnection
441
+ wsClient.on('reconnecting', ({ attempt, maxAttempts }) => {
442
+ if (attempt > 5) {
443
+ console.warn('Multiple reconnection attempts');
444
+ // Alert monitoring system
445
+ }
446
+ });
447
+
448
+ wsClient.on('reconnect-failed', async () => {
449
+ console.error('Reconnection failed');
450
+ // Switch to HTTP fallback
451
+ await switchToHttpMode();
452
+ });
453
+ ```
454
+
455
+ ### 5. Subscription Limits
456
+
457
+ ```typescript
458
+ // ✅ Good: Respect limits
459
+ const wsClient = new WebSocketClient({
460
+ endpoint: process.env.WS_ENDPOINT!,
461
+ maxSubscriptions: 1000,
462
+ });
463
+
464
+ // Track active subscriptions
465
+ const activeSubscriptions = new Set<number>();
466
+
467
+ async function subscribe(address: string) {
468
+ if (activeSubscriptions.size >= 1000) {
469
+ console.warn('Subscription limit reached');
470
+ // Unsubscribe oldest or least important
471
+ const oldestSub = activeSubscriptions.values().next().value;
472
+ await wsClient.accountUnsubscribe(oldestSub);
473
+ activeSubscriptions.delete(oldestSub);
474
+ }
475
+
476
+ const subId = await wsClient.accountSubscribe(address, callback);
477
+ activeSubscriptions.add(subId);
478
+ }
479
+ ```
480
+
481
+ ## Performance Optimization
482
+
483
+ ### Batching Subscriptions
484
+
485
+ ```typescript
486
+ // ✅ Efficient: Batch related subscriptions
487
+ const subscriptions = await Promise.all([
488
+ wsClient.accountSubscribe(addr1, callback1),
489
+ wsClient.accountSubscribe(addr2, callback2),
490
+ wsClient.accountSubscribe(addr3, callback3),
491
+ ]);
492
+
493
+ // ❌ Inefficient: Sequential subscriptions
494
+ const sub1 = await wsClient.accountSubscribe(addr1, callback1);
495
+ const sub2 = await wsClient.accountSubscribe(addr2, callback2);
496
+ const sub3 = await wsClient.accountSubscribe(addr3, callback3);
497
+ ```
498
+
499
+ ### Enable Caching
500
+
501
+ ```typescript
502
+ const wsClient = new WebSocketClient({
503
+ endpoint: process.env.WS_ENDPOINT!,
504
+ enableSmartCaching: true, // Cache subscription data
505
+ });
506
+
507
+ // Cached subscriptions reduce redundant updates
508
+ const subId = await wsClient.accountSubscribe(
509
+ address,
510
+ callback,
511
+ {
512
+ enableCache: true,
513
+ cacheTTL: 30000, // 30-second cache
514
+ }
515
+ );
516
+ ```
517
+
518
+ ### Use Filters Wisely
519
+
520
+ ```typescript
521
+ // ✅ Efficient: Filter on server side (Solana RPC)
522
+ const subId = await wsClient.programSubscribe(
523
+ programId,
524
+ callback,
525
+ {
526
+ filters: [
527
+ { dataSize: 165 }, // Only token accounts
528
+ { memcmp: { offset: 0, bytes: mint } }, // Specific mint
529
+ ],
530
+ }
531
+ );
532
+
533
+ // ❌ Inefficient: Filter on client side
534
+ const subId = await wsClient.programSubscribe(
535
+ programId,
536
+ (account) => {
537
+ if (account.data.length === 165 && account.mint === mint) {
538
+ callback(account);
539
+ }
540
+ }
541
+ );
542
+ ```
543
+
544
+ ## Troubleshooting
545
+
546
+ ### Connection Timeout
547
+
548
+ **Problem:** WebSocket fails to connect
549
+
550
+ **Solution:**
551
+ ```typescript
552
+ // Increase timeout
553
+ const wsClient = new WebSocketClient({
554
+ endpoint: process.env.WS_ENDPOINT!,
555
+ timeout: 30000, // 30 seconds
556
+ });
557
+
558
+ // Check endpoint
559
+ console.log('Connecting to:', wsClient.endpoint);
560
+
561
+ // Enable debug logging
562
+ wsClient.on('connecting', () => {
563
+ console.log('Connection attempt...');
564
+ });
565
+ ```
566
+
567
+ ### Frequent Disconnections
568
+
569
+ **Problem:** WebSocket disconnects frequently
570
+
571
+ **Solution:**
572
+ ```typescript
573
+ // Reduce heartbeat interval
574
+ const wsClient = new WebSocketClient({
575
+ endpoint: process.env.WS_ENDPOINT!,
576
+ heartbeatInterval: 15000, // 15 seconds instead of 30
577
+ });
578
+
579
+ // Monitor connection state
580
+ wsClient.on('disconnected', ({ code, reason }) => {
581
+ console.log('Disconnect reason:', code, reason);
582
+ });
583
+
584
+ // Check network stability
585
+ setInterval(() => {
586
+ const metrics = wsClient.getMetrics();
587
+ if (metrics.reconnectCount > 5) {
588
+ console.warn('Unstable connection detected');
589
+ }
590
+ }, 60000);
591
+ ```
592
+
593
+ ### High Memory Usage
594
+
595
+ **Problem:** Memory consumption grows over time
596
+
597
+ **Solution:**
598
+ ```typescript
599
+ // Limit subscriptions
600
+ const wsClient = new WebSocketClient({
601
+ endpoint: process.env.WS_ENDPOINT!,
602
+ maxSubscriptions: 500, // Reduce from default 1000
603
+ });
604
+
605
+ // Unsubscribe unused subscriptions
606
+ await wsClient.unsubscribeAll();
607
+
608
+ // Monitor memory
609
+ setInterval(() => {
610
+ const used = process.memoryUsage().heapUsed / 1024 / 1024;
611
+ console.log(`Memory usage: ${Math.round(used)} MB`);
612
+ }, 60000);
613
+ ```
614
+
615
+ ### Subscription Not Receiving Updates
616
+
617
+ **Problem:** Callback not triggered despite account changes
618
+
619
+ **Solution:**
620
+ ```typescript
621
+ // Check subscription ID
622
+ const subId = await wsClient.accountSubscribe(address, callback);
623
+ console.log('Subscription ID:', subId);
624
+
625
+ // Verify subscription is active
626
+ wsClient.on('subscription-added', ({ id, method }) => {
627
+ console.log(`Active: ${method} (${id})`);
628
+ });
629
+
630
+ // Check filters
631
+ const subId = await wsClient.accountSubscribe(
632
+ address,
633
+ callback,
634
+ {
635
+ commitment: 'confirmed', // Try 'processed' for faster updates
636
+ enableFiltering: false, // Disable custom filters temporarily
637
+ }
638
+ );
639
+
640
+ // Monitor for errors
641
+ wsClient.on('subscription-error', ({ id, error }) => {
642
+ if (id === subId) {
643
+ console.error('Subscription error:', error);
644
+ }
645
+ });
646
+ ```
647
+
648
+ ## Integration Examples
649
+
650
+ ### Track Token Transfers
651
+
652
+ ```typescript
653
+ const wsClient = new WebSocketClient({
654
+ endpoint: process.env.WS_ENDPOINT!,
655
+ apiKey: process.env.SYNAPSE_API_KEY,
656
+ });
657
+
658
+ await wsClient.connect();
659
+
660
+ // Subscribe to token account
661
+ const subId = await wsClient.accountSubscribe(
662
+ tokenAccountAddress,
663
+ (accountInfo) => {
664
+ const tokenAmount = accountInfo.data.parsed.info.tokenAmount.uiAmount;
665
+ console.log('Token balance:', tokenAmount);
666
+
667
+ // Trigger notifications
668
+ if (tokenAmount < lowBalanceThreshold) {
669
+ sendLowBalanceAlert(tokenAmount);
670
+ }
671
+ },
672
+ {
673
+ commitment: 'confirmed',
674
+ encoding: 'jsonParsed',
675
+ }
676
+ );
677
+ ```
678
+
679
+ ### Monitor NFT Sales
680
+
681
+ ```typescript
682
+ // Subscribe to marketplace program
683
+ const subId = await wsClient.programSubscribe(
684
+ magicEdenProgramId,
685
+ (accountInfo) => {
686
+ const listingData = parseListingData(accountInfo.data);
687
+
688
+ if (listingData.type === 'sale') {
689
+ console.log('NFT Sold:', {
690
+ mint: listingData.mint,
691
+ price: listingData.price,
692
+ buyer: listingData.buyer,
693
+ });
694
+
695
+ // Update database
696
+ updateNFTSaleHistory(listingData);
697
+ }
698
+ },
699
+ {
700
+ commitment: 'confirmed',
701
+ filters: [
702
+ { dataSize: 200 }, // Listing account size
703
+ ],
704
+ }
705
+ );
706
+ ```
707
+
708
+ ### Real-time Block Explorer
709
+
710
+ ```typescript
711
+ // Subscribe to slots for block updates
712
+ const slotSub = await wsClient.slotSubscribe((slotInfo) => {
713
+ console.log(`New slot: ${slotInfo.slot}`);
714
+ updateBlockExplorer(slotInfo);
715
+ });
716
+
717
+ // Subscribe to logs for all transactions
718
+ const logsSub = await wsClient.logsSubscribe(
719
+ 'all', // All transactions
720
+ (logs) => {
721
+ console.log(`Transaction: ${logs.signature}`);
722
+ addTransactionToExplorer(logs);
723
+ },
724
+ {
725
+ commitment: 'confirmed',
726
+ }
727
+ );
728
+ ```
729
+
730
+ ## API Reference
731
+
732
+ ### Constructor
733
+
734
+ ```typescript
735
+ new WebSocketClient(config: WebSocketConfig)
736
+ ```
737
+
738
+ ### Connection Methods
739
+
740
+ | Method | Parameters | Return | Description |
741
+ |--------|------------|--------|-------------|
742
+ | `connect()` | - | `Promise<void>` | Establish WebSocket connection |
743
+ | `disconnect()` | - | `Promise<void>` | Close connection and cleanup |
744
+ | `reconnect()` | - | `Promise<void>` | Force reconnection |
745
+
746
+ ### Subscription Methods
747
+
748
+ | Method | Parameters | Return | Description |
749
+ |--------|------------|--------|-------------|
750
+ | `accountSubscribe` | `address, callback, options?` | `Promise<number>` | Subscribe to account |
751
+ | `accountUnsubscribe` | `subscriptionId` | `Promise<void>` | Unsubscribe from account |
752
+ | `programSubscribe` | `programId, callback, options?` | `Promise<number>` | Subscribe to program accounts |
753
+ | `programUnsubscribe` | `subscriptionId` | `Promise<void>` | Unsubscribe from program |
754
+ | `slotSubscribe` | `callback` | `Promise<number>` | Subscribe to slots |
755
+ | `slotUnsubscribe` | `subscriptionId` | `Promise<void>` | Unsubscribe from slots |
756
+ | `signatureSubscribe` | `signature, callback, options?` | `Promise<number>` | Subscribe to signature |
757
+ | `signatureUnsubscribe` | `subscriptionId` | `Promise<void>` | Unsubscribe from signature |
758
+ | `logsSubscribe` | `filter, callback, options?` | `Promise<number>` | Subscribe to logs |
759
+ | `logsUnsubscribe` | `subscriptionId` | `Promise<void>` | Unsubscribe from logs |
760
+ | `unsubscribeAll` | - | `Promise<void>` | Unsubscribe from all |
761
+
762
+ ### Utility Methods
763
+
764
+ | Method | Return | Description |
765
+ |--------|--------|-------------|
766
+ | `getMetrics()` | `Metrics` | Get connection metrics |
767
+ | `isConnected()` | `boolean` | Check connection status |
768
+ | `getActiveSubscriptions()` | `number[]` | Get active subscription IDs |
769
+
770
+ ---
771
+
772
+ ## License
773
+
774
+ MIT License - See [LICENSE](../../LICENSE) for details.
775
+
776
+ ---
777
+
778
+ **WebSocket Client Module** - Real-time Solana blockchain streaming