@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.
- package/LICENSE +21 -0
- package/README.md +1393 -0
- package/dist/cjs/advanced/circuit-breaker.d.ts +111 -0
- package/dist/cjs/advanced/circuit-breaker.d.ts.map +1 -0
- package/dist/cjs/advanced/circuit-breaker.js +278 -0
- package/dist/cjs/advanced/circuit-breaker.js.map +1 -0
- package/dist/cjs/advanced/index.d.ts +8 -0
- package/dist/cjs/advanced/index.d.ts.map +1 -0
- package/dist/cjs/advanced/index.js +13 -0
- package/dist/cjs/advanced/index.js.map +1 -0
- package/dist/cjs/advanced/load-balancer.d.ts +114 -0
- package/dist/cjs/advanced/load-balancer.d.ts.map +1 -0
- package/dist/cjs/advanced/load-balancer.js +354 -0
- package/dist/cjs/advanced/load-balancer.js.map +1 -0
- package/dist/cjs/advanced/smart-caching.d.ts +113 -0
- package/dist/cjs/advanced/smart-caching.d.ts.map +1 -0
- package/dist/cjs/advanced/smart-caching.js +461 -0
- package/dist/cjs/advanced/smart-caching.js.map +1 -0
- package/dist/cjs/advanced/types.d.ts +228 -0
- package/dist/cjs/advanced/types.d.ts.map +1 -0
- package/dist/cjs/advanced/types.js +7 -0
- package/dist/cjs/advanced/types.js.map +1 -0
- package/dist/cjs/ai/index.d.ts +15 -0
- package/dist/cjs/ai/index.d.ts.map +1 -0
- package/dist/cjs/ai/index.js +20 -0
- package/dist/cjs/ai/index.js.map +1 -0
- package/dist/cjs/ai/merkle-operation.d.ts +245 -0
- package/dist/cjs/ai/merkle-operation.d.ts.map +1 -0
- package/dist/cjs/ai/merkle-operation.js +522 -0
- package/dist/cjs/ai/merkle-operation.js.map +1 -0
- package/dist/cjs/ai/pda-manager.d.ts +134 -0
- package/dist/cjs/ai/pda-manager.d.ts.map +1 -0
- package/dist/cjs/ai/pda-manager.js +250 -0
- package/dist/cjs/ai/pda-manager.js.map +1 -0
- package/dist/cjs/ai/types.ai.d.ts +172 -0
- package/dist/cjs/ai/types.ai.d.ts.map +1 -0
- package/dist/cjs/ai/types.ai.js +14 -0
- package/dist/cjs/ai/types.ai.js.map +1 -0
- package/dist/cjs/ai/zero-combine-fetcher.d.ts +171 -0
- package/dist/cjs/ai/zero-combine-fetcher.d.ts.map +1 -0
- package/dist/cjs/ai/zero-combine-fetcher.js +412 -0
- package/dist/cjs/ai/zero-combine-fetcher.js.map +1 -0
- package/dist/cjs/client.d.ts +83 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +287 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/defi/advanced-features.d.ts +207 -0
- package/dist/cjs/defi/advanced-features.d.ts.map +1 -0
- package/dist/cjs/defi/advanced-features.js +382 -0
- package/dist/cjs/defi/advanced-features.js.map +1 -0
- package/dist/cjs/defi/index.d.ts +29 -0
- package/dist/cjs/defi/index.d.ts.map +1 -0
- package/dist/cjs/defi/index.js +50 -0
- package/dist/cjs/defi/index.js.map +1 -0
- package/dist/cjs/defi/jito.d.ts +118 -0
- package/dist/cjs/defi/jito.d.ts.map +1 -0
- package/dist/cjs/defi/jito.js +291 -0
- package/dist/cjs/defi/jito.js.map +1 -0
- package/dist/cjs/defi/jupiter.d.ts +143 -0
- package/dist/cjs/defi/jupiter.d.ts.map +1 -0
- package/dist/cjs/defi/jupiter.js +219 -0
- package/dist/cjs/defi/jupiter.js.map +1 -0
- package/dist/cjs/defi/price-feed.d.ts +63 -0
- package/dist/cjs/defi/price-feed.d.ts.map +1 -0
- package/dist/cjs/defi/price-feed.js +153 -0
- package/dist/cjs/defi/price-feed.js.map +1 -0
- package/dist/cjs/defi/token-data.d.ts +83 -0
- package/dist/cjs/defi/token-data.d.ts.map +1 -0
- package/dist/cjs/defi/token-data.js +205 -0
- package/dist/cjs/defi/token-data.js.map +1 -0
- package/dist/cjs/defi/unstable-features.d.ts +207 -0
- package/dist/cjs/defi/unstable-features.d.ts.map +1 -0
- package/dist/cjs/defi/unstable-features.js +382 -0
- package/dist/cjs/defi/unstable-features.js.map +1 -0
- package/dist/cjs/defi/utils.d.ts +265 -0
- package/dist/cjs/defi/utils.d.ts.map +1 -0
- package/dist/cjs/defi/utils.js +619 -0
- package/dist/cjs/defi/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +31 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +71 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/methods/solana-rpc.d.ts +362 -0
- package/dist/cjs/methods/solana-rpc.d.ts.map +1 -0
- package/dist/cjs/methods/solana-rpc.js +584 -0
- package/dist/cjs/methods/solana-rpc.js.map +1 -0
- package/dist/cjs/nft/advanced-features.d.ts +205 -0
- package/dist/cjs/nft/advanced-features.d.ts.map +1 -0
- package/dist/cjs/nft/advanced-features.js +529 -0
- package/dist/cjs/nft/advanced-features.js.map +1 -0
- package/dist/cjs/nft/clients/index.d.ts +8 -0
- package/dist/cjs/nft/clients/index.d.ts.map +1 -0
- package/dist/cjs/nft/clients/index.js +14 -0
- package/dist/cjs/nft/clients/index.js.map +1 -0
- package/dist/cjs/nft/clients/magic-eden-client.d.ts +101 -0
- package/dist/cjs/nft/clients/magic-eden-client.d.ts.map +1 -0
- package/dist/cjs/nft/clients/magic-eden-client.js +263 -0
- package/dist/cjs/nft/clients/magic-eden-client.js.map +1 -0
- package/dist/cjs/nft/clients/metaplex-onchain-client.d.ts +154 -0
- package/dist/cjs/nft/clients/metaplex-onchain-client.d.ts.map +1 -0
- package/dist/cjs/nft/clients/metaplex-onchain-client.js +408 -0
- package/dist/cjs/nft/clients/metaplex-onchain-client.js.map +1 -0
- package/dist/cjs/nft/clients/tensor-client.d.ts +79 -0
- package/dist/cjs/nft/clients/tensor-client.d.ts.map +1 -0
- package/dist/cjs/nft/clients/tensor-client.js +222 -0
- package/dist/cjs/nft/clients/tensor-client.js.map +1 -0
- package/dist/cjs/nft/index.d.ts +13 -0
- package/dist/cjs/nft/index.d.ts.map +1 -0
- package/dist/cjs/nft/index.js +37 -0
- package/dist/cjs/nft/index.js.map +1 -0
- package/dist/cjs/nft/types.nft.d.ts +342 -0
- package/dist/cjs/nft/types.nft.d.ts.map +1 -0
- package/dist/cjs/nft/types.nft.js +3 -0
- package/dist/cjs/nft/types.nft.js.map +1 -0
- package/dist/cjs/nft/utils.d.ts +46 -0
- package/dist/cjs/nft/utils.d.ts.map +1 -0
- package/dist/cjs/nft/utils.js +281 -0
- package/dist/cjs/nft/utils.js.map +1 -0
- package/dist/cjs/types.d.ts +525 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +192 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/constant.d.ts +8 -0
- package/dist/cjs/utils/constant.d.ts.map +1 -0
- package/dist/cjs/utils/constant.js +12 -0
- package/dist/cjs/utils/constant.js.map +1 -0
- package/dist/cjs/utils/helpers.d.ts +92 -0
- package/dist/cjs/utils/helpers.d.ts.map +1 -0
- package/dist/cjs/utils/helpers.js +248 -0
- package/dist/cjs/utils/helpers.js.map +1 -0
- package/dist/cjs/websocket/client.d.ts +182 -0
- package/dist/cjs/websocket/client.d.ts.map +1 -0
- package/dist/cjs/websocket/client.js +465 -0
- package/dist/cjs/websocket/client.js.map +1 -0
- package/dist/cjs/websocket/index.d.ts +6 -0
- package/dist/cjs/websocket/index.d.ts.map +1 -0
- package/dist/cjs/websocket/index.js +9 -0
- package/dist/cjs/websocket/index.js.map +1 -0
- package/dist/docs/.nojekyll +1 -0
- package/dist/docs/assets/highlight.css +113 -0
- package/dist/docs/assets/icons.js +18 -0
- package/dist/docs/assets/icons.svg +1 -0
- package/dist/docs/assets/main.js +60 -0
- package/dist/docs/assets/navigation.js +1 -0
- package/dist/docs/assets/search.js +1 -0
- package/dist/docs/assets/style.css +1493 -0
- package/dist/docs/classes/AIError.html +40 -0
- package/dist/docs/classes/AIInvestmentAdvisor.html +26 -0
- package/dist/docs/classes/AIRarityCalculator.html +28 -0
- package/dist/docs/classes/ArbitrageDetector.html +30 -0
- package/dist/docs/classes/BatchingError.html +40 -0
- package/dist/docs/classes/CacheError.html +40 -0
- package/dist/docs/classes/CircuitBreaker.html +38 -0
- package/dist/docs/classes/CircuitBreakerError.html +40 -0
- package/dist/docs/classes/CollectionAnalytics.html +30 -0
- package/dist/docs/classes/DeFiError.html +40 -0
- package/dist/docs/classes/FlashLoanSimulator.html +26 -0
- package/dist/docs/classes/JitoIntegration.html +53 -0
- package/dist/docs/classes/JupiterIntegration.html +43 -0
- package/dist/docs/classes/Keypair.html +28 -0
- package/dist/docs/classes/LoadBalancer.html +34 -0
- package/dist/docs/classes/MEVProtection.html +28 -0
- package/dist/docs/classes/MarketplaceAggregator.html +28 -0
- package/dist/docs/classes/MerkleOperation.html +74 -0
- package/dist/docs/classes/NFTEngine.html +29 -0
- package/dist/docs/classes/NFTError.html +40 -0
- package/dist/docs/classes/NetworkError.html +40 -0
- package/dist/docs/classes/PDAManager.html +46 -0
- package/dist/docs/classes/PortfolioAnalytics.html +26 -0
- package/dist/docs/classes/PriceFeedIntegration.html +37 -0
- package/dist/docs/classes/PublicKey.html +46 -0
- package/dist/docs/classes/RateLimitError.html +39 -0
- package/dist/docs/classes/SmartCaching.html +42 -0
- package/dist/docs/classes/Synapse.html +6 -0
- package/dist/docs/classes/SynapseClient.html +55 -0
- package/dist/docs/classes/SynapseError.html +37 -0
- package/dist/docs/classes/SynapseSolanaEngine.html +49 -0
- package/dist/docs/classes/SynapseUtils.html +25 -0
- package/dist/docs/classes/TokenDataIntegration.html +41 -0
- package/dist/docs/classes/Transaction.html +87 -0
- package/dist/docs/classes/TransactionInstruction.html +10 -0
- package/dist/docs/classes/UpstreamError.html +39 -0
- package/dist/docs/classes/WebSocketClient.html +47 -0
- package/dist/docs/classes/WebSocketError.html +40 -0
- package/dist/docs/classes/YieldFarmingFinder.html +26 -0
- package/dist/docs/classes/ZeroCombineFetcher.html +25 -0
- package/dist/docs/functions/createSynapseClient.html +2 -0
- package/dist/docs/hierarchy.html +1 -0
- package/dist/docs/index.html +776 -0
- package/dist/docs/interfaces/AIAgentConfig.html +11 -0
- package/dist/docs/interfaces/AIAgentContext.html +7 -0
- package/dist/docs/interfaces/AIContext.html +6 -0
- package/dist/docs/interfaces/AIMethodResult.html +6 -0
- package/dist/docs/interfaces/AIRarityAnalysis.html +3 -0
- package/dist/docs/interfaces/AIResponse.html +5 -0
- package/dist/docs/interfaces/AccountInfo.html +8 -0
- package/dist/docs/interfaces/AdvancedClientConfig.html +7 -0
- package/dist/docs/interfaces/AdvancedEvents.html +9 -0
- package/dist/docs/interfaces/AdvancedMetricsData.html +5 -0
- package/dist/docs/interfaces/AdvancedPerformanceMetrics.html +6 -0
- package/dist/docs/interfaces/AgentAdapter.html +6 -0
- package/dist/docs/interfaces/AgentRiskReport.html +6 -0
- package/dist/docs/interfaces/AgentTradeSuggestion.html +10 -0
- package/dist/docs/interfaces/AggregatedCollectionStats.html +36 -0
- package/dist/docs/interfaces/ArbitrageOpportunity.html +8 -0
- package/dist/docs/interfaces/AutoTradingStrategy.html +13 -0
- package/dist/docs/interfaces/BatchResponse.html +4 -0
- package/dist/docs/interfaces/BatchResult.html +6 -0
- package/dist/docs/interfaces/BatcherConfig.html +5 -0
- package/dist/docs/interfaces/BirdeyeTokenPrice.html +4 -0
- package/dist/docs/interfaces/BlockhashInfo.html +5 -0
- package/dist/docs/interfaces/BuildSwapTxResult.html +7 -0
- package/dist/docs/interfaces/CacheStats.html +9 -0
- package/dist/docs/interfaces/ChunkInfo.html +10 -0
- package/dist/docs/interfaces/CircuitBreakerConfig.html +6 -0
- package/dist/docs/interfaces/ClientStats.html +14 -0
- package/dist/docs/interfaces/CollectionStats.html +17 -0
- package/dist/docs/interfaces/CollectionTrends.html +7 -0
- package/dist/docs/interfaces/CompressedNFTInfo.html +13 -0
- package/dist/docs/interfaces/ConfirmedTransaction.html +6 -0
- package/dist/docs/interfaces/ConnectionEvents.html +11 -0
- package/dist/docs/interfaces/DeFiConfig.html +16 -0
- package/dist/docs/interfaces/DiagnosticsResult.html +6 -0
- package/dist/docs/interfaces/EpochInfo.html +9 -0
- package/dist/docs/interfaces/ExecuteSwapParams.html +10 -0
- package/dist/docs/interfaces/FetchConfig.html +7 -0
- package/dist/docs/interfaces/FlashLoanAction.html +6 -0
- package/dist/docs/interfaces/FlashLoanSimulation.html +9 -0
- package/dist/docs/interfaces/GatewayStats.html +7 -0
- package/dist/docs/interfaces/InscriptionResult.html +18 -0
- package/dist/docs/interfaces/InvestmentRecommendation.html +10 -0
- package/dist/docs/interfaces/JitoBundleParams.html +4 -0
- package/dist/docs/interfaces/JitoBundleResult.html +6 -0
- package/dist/docs/interfaces/JitoBundleStatus.html +6 -0
- package/dist/docs/interfaces/JitoTipAccount.html +3 -0
- package/dist/docs/interfaces/JupiterQuoteParams.html +10 -0
- package/dist/docs/interfaces/JupiterQuoteRequest.html +17 -0
- package/dist/docs/interfaces/JupiterQuoteResponse.html +13 -0
- package/dist/docs/interfaces/JupiterSwapOptions.html +8 -0
- package/dist/docs/interfaces/JupiterSwapResponse.html +4 -0
- package/dist/docs/interfaces/JupiterTokenPrice.html +5 -0
- package/dist/docs/interfaces/LoadBalancerConfig.html +5 -0
- package/dist/docs/interfaces/MEVProtectionConfig.html +11 -0
- package/dist/docs/interfaces/MEVProtectionResult.html +6 -0
- package/dist/docs/interfaces/MagicEdenActivity.html +22 -0
- package/dist/docs/interfaces/MagicEdenCollection.html +22 -0
- package/dist/docs/interfaces/MagicEdenCollectionStats.html +17 -0
- package/dist/docs/interfaces/MagicEdenErrorResponse.html +4 -0
- package/dist/docs/interfaces/MagicEdenListing.html +24 -0
- package/dist/docs/interfaces/MarketplaceClientConfig.html +14 -0
- package/dist/docs/interfaces/MarketplaceFloorPrices.html +7 -0
- package/dist/docs/interfaces/MarketplaceListing.html +9 -0
- package/dist/docs/interfaces/MerkleLeaf.html +6 -0
- package/dist/docs/interfaces/MerkleProof.html +8 -0
- package/dist/docs/interfaces/MerkleValidationResult.html +10 -0
- package/dist/docs/interfaces/MultiChainSignal.html +8 -0
- package/dist/docs/interfaces/NFTAttribute.html +4 -0
- package/dist/docs/interfaces/NFTConfig.html +6 -0
- package/dist/docs/interfaces/NFTInfo.html +10 -0
- package/dist/docs/interfaces/NFTMetadata.html +9 -0
- package/dist/docs/interfaces/NormalizedMarketplaceListing.html +18 -0
- package/dist/docs/interfaces/OOBECompatibleAgent.html +8 -0
- package/dist/docs/interfaces/PDAConfig.html +10 -0
- package/dist/docs/interfaces/ParsedAccountInfo.html +8 -0
- package/dist/docs/interfaces/PerformanceMetrics.html +9 -0
- package/dist/docs/interfaces/PortfolioMetrics.html +10 -0
- package/dist/docs/interfaces/PriceData.html +8 -0
- package/dist/docs/interfaces/ProofRecord.html +12 -0
- package/dist/docs/interfaces/QuoteRequestCommon.html +11 -0
- package/dist/docs/interfaces/QuoteResponse.html +6 -0
- package/dist/docs/interfaces/RarityAlgorithmConfig.html +3 -0
- package/dist/docs/interfaces/RarityScore.html +8 -0
- package/dist/docs/interfaces/RaydiumBuildSwapParams.html +14 -0
- package/dist/docs/interfaces/RaydiumQuoteRequest.html +14 -0
- package/dist/docs/interfaces/RequestOptions.html +12 -0
- package/dist/docs/interfaces/RetryAttempt.html +5 -0
- package/dist/docs/interfaces/RpcError.html +5 -0
- package/dist/docs/interfaces/RpcRequest.html +6 -0
- package/dist/docs/interfaces/RpcResponse.html +6 -0
- package/dist/docs/interfaces/SecurityThreat.html +6 -0
- package/dist/docs/interfaces/SignatureInfo.html +8 -0
- package/dist/docs/interfaces/Signer.html +4 -0
- package/dist/docs/interfaces/SmartCacheConfig.html +7 -0
- package/dist/docs/interfaces/SmartQueryOptions.html +10 -0
- package/dist/docs/interfaces/StressTestOptions.html +8 -0
- package/dist/docs/interfaces/StressTestResult.html +9 -0
- package/dist/docs/interfaces/SubscriptionConfig.html +9 -0
- package/dist/docs/interfaces/SubscriptionOptions.html +7 -0
- package/dist/docs/interfaces/SubscriptionResult.html +7 -0
- package/dist/docs/interfaces/SynapseConfig.html +13 -0
- package/dist/docs/interfaces/SynapseLikeClient.html +4 -0
- package/dist/docs/interfaces/TensorCollectionStats.html +33 -0
- package/dist/docs/interfaces/TensorErrorResponse.html +5 -0
- package/dist/docs/interfaces/TensorListing.html +16 -0
- package/dist/docs/interfaces/TensorSale.html +16 -0
- package/dist/docs/interfaces/TokenAccount.html +7 -0
- package/dist/docs/interfaces/TokenAccountInfo.html +12 -0
- package/dist/docs/interfaces/TokenHolding.html +8 -0
- package/dist/docs/interfaces/TokenInfo.html +7 -0
- package/dist/docs/interfaces/TokenLargestAccount.html +5 -0
- package/dist/docs/interfaces/TokenSupply.html +5 -0
- package/dist/docs/interfaces/TradeExecution.html +14 -0
- package/dist/docs/interfaces/TransactionSignature.html +8 -0
- package/dist/docs/interfaces/UpstreamHealth.html +8 -0
- package/dist/docs/interfaces/UserPDAs.html +10 -0
- package/dist/docs/interfaces/WebSocketConfig.html +12 -0
- package/dist/docs/interfaces/WebSocketMessage.html +6 -0
- package/dist/docs/interfaces/YieldOpportunity.html +8 -0
- package/dist/docs/interfaces/ZeroChunk.html +8 -0
- package/dist/docs/interfaces/ZeroCombineResult.html +3 -0
- package/dist/docs/media/LICENSE +21 -0
- package/dist/docs/media/README-1.md +778 -0
- package/dist/docs/media/README-2.md +1050 -0
- package/dist/docs/media/README-3.md +1522 -0
- package/dist/docs/media/README-4.md +869 -0
- package/dist/docs/media/README-5.md +857 -0
- package/dist/docs/media/README-6.md +727 -0
- package/dist/docs/media/README.md +766 -0
- package/dist/docs/modules.html +168 -0
- package/dist/docs/types/BlockhashWithExpiryBlockHeight.html +1 -0
- package/dist/docs/types/Commitment.html +3 -0
- package/dist/docs/types/RiskTolerance.html +1 -0
- package/dist/docs/types/SimulatedTransactionResponse.html +1 -0
- package/dist/esm/advanced/circuit-breaker.d.ts +111 -0
- package/dist/esm/advanced/circuit-breaker.d.ts.map +1 -0
- package/dist/esm/advanced/circuit-breaker.js +274 -0
- package/dist/esm/advanced/circuit-breaker.js.map +1 -0
- package/dist/esm/advanced/index.d.ts +8 -0
- package/dist/esm/advanced/index.d.ts.map +1 -0
- package/dist/esm/advanced/index.js +7 -0
- package/dist/esm/advanced/index.js.map +1 -0
- package/dist/esm/advanced/load-balancer.d.ts +114 -0
- package/dist/esm/advanced/load-balancer.d.ts.map +1 -0
- package/dist/esm/advanced/load-balancer.js +350 -0
- package/dist/esm/advanced/load-balancer.js.map +1 -0
- package/dist/esm/advanced/smart-caching.d.ts +113 -0
- package/dist/esm/advanced/smart-caching.d.ts.map +1 -0
- package/dist/esm/advanced/smart-caching.js +457 -0
- package/dist/esm/advanced/smart-caching.js.map +1 -0
- package/dist/esm/advanced/types.d.ts +228 -0
- package/dist/esm/advanced/types.d.ts.map +1 -0
- package/dist/esm/advanced/types.js +6 -0
- package/dist/esm/advanced/types.js.map +1 -0
- package/dist/esm/ai/index.d.ts +15 -0
- package/dist/esm/ai/index.d.ts.map +1 -0
- package/dist/esm/ai/index.js +14 -0
- package/dist/esm/ai/index.js.map +1 -0
- package/dist/esm/ai/merkle-operation.d.ts +245 -0
- package/dist/esm/ai/merkle-operation.d.ts.map +1 -0
- package/dist/esm/ai/merkle-operation.js +485 -0
- package/dist/esm/ai/merkle-operation.js.map +1 -0
- package/dist/esm/ai/pda-manager.d.ts +134 -0
- package/dist/esm/ai/pda-manager.d.ts.map +1 -0
- package/dist/esm/ai/pda-manager.js +213 -0
- package/dist/esm/ai/pda-manager.js.map +1 -0
- package/dist/esm/ai/types.ai.d.ts +172 -0
- package/dist/esm/ai/types.ai.d.ts.map +1 -0
- package/dist/esm/ai/types.ai.js +13 -0
- package/dist/esm/ai/types.ai.js.map +1 -0
- package/dist/esm/ai/zero-combine-fetcher.d.ts +171 -0
- package/dist/esm/ai/zero-combine-fetcher.d.ts.map +1 -0
- package/dist/esm/ai/zero-combine-fetcher.js +408 -0
- package/dist/esm/ai/zero-combine-fetcher.js.map +1 -0
- package/dist/esm/client.d.ts +83 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +283 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/defi/advanced-features.d.ts +207 -0
- package/dist/esm/defi/advanced-features.d.ts.map +1 -0
- package/dist/esm/defi/advanced-features.js +374 -0
- package/dist/esm/defi/advanced-features.js.map +1 -0
- package/dist/esm/defi/index.d.ts +29 -0
- package/dist/esm/defi/index.d.ts.map +1 -0
- package/dist/esm/defi/index.js +37 -0
- package/dist/esm/defi/index.js.map +1 -0
- package/dist/esm/defi/jito.d.ts +118 -0
- package/dist/esm/defi/jito.d.ts.map +1 -0
- package/dist/esm/defi/jito.js +287 -0
- package/dist/esm/defi/jito.js.map +1 -0
- package/dist/esm/defi/jupiter.d.ts +143 -0
- package/dist/esm/defi/jupiter.d.ts.map +1 -0
- package/dist/esm/defi/jupiter.js +215 -0
- package/dist/esm/defi/jupiter.js.map +1 -0
- package/dist/esm/defi/price-feed.d.ts +63 -0
- package/dist/esm/defi/price-feed.d.ts.map +1 -0
- package/dist/esm/defi/price-feed.js +149 -0
- package/dist/esm/defi/price-feed.js.map +1 -0
- package/dist/esm/defi/token-data.d.ts +83 -0
- package/dist/esm/defi/token-data.d.ts.map +1 -0
- package/dist/esm/defi/token-data.js +201 -0
- package/dist/esm/defi/token-data.js.map +1 -0
- package/dist/esm/defi/unstable-features.d.ts +207 -0
- package/dist/esm/defi/unstable-features.d.ts.map +1 -0
- package/dist/esm/defi/unstable-features.js +374 -0
- package/dist/esm/defi/unstable-features.js.map +1 -0
- package/dist/esm/defi/utils.d.ts +265 -0
- package/dist/esm/defi/utils.d.ts.map +1 -0
- package/dist/esm/defi/utils.js +582 -0
- package/dist/esm/defi/utils.js.map +1 -0
- package/dist/esm/index.d.ts +31 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +47 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/methods/solana-rpc.d.ts +362 -0
- package/dist/esm/methods/solana-rpc.d.ts.map +1 -0
- package/dist/esm/methods/solana-rpc.js +532 -0
- package/dist/esm/methods/solana-rpc.js.map +1 -0
- package/dist/esm/nft/advanced-features.d.ts +205 -0
- package/dist/esm/nft/advanced-features.d.ts.map +1 -0
- package/dist/esm/nft/advanced-features.js +489 -0
- package/dist/esm/nft/advanced-features.js.map +1 -0
- package/dist/esm/nft/clients/index.d.ts +8 -0
- package/dist/esm/nft/clients/index.d.ts.map +1 -0
- package/dist/esm/nft/clients/index.js +8 -0
- package/dist/esm/nft/clients/index.js.map +1 -0
- package/dist/esm/nft/clients/magic-eden-client.d.ts +101 -0
- package/dist/esm/nft/clients/magic-eden-client.d.ts.map +1 -0
- package/dist/esm/nft/clients/magic-eden-client.js +259 -0
- package/dist/esm/nft/clients/magic-eden-client.js.map +1 -0
- package/dist/esm/nft/clients/metaplex-onchain-client.d.ts +154 -0
- package/dist/esm/nft/clients/metaplex-onchain-client.d.ts.map +1 -0
- package/dist/esm/nft/clients/metaplex-onchain-client.js +404 -0
- package/dist/esm/nft/clients/metaplex-onchain-client.js.map +1 -0
- package/dist/esm/nft/clients/tensor-client.d.ts +79 -0
- package/dist/esm/nft/clients/tensor-client.d.ts.map +1 -0
- package/dist/esm/nft/clients/tensor-client.js +218 -0
- package/dist/esm/nft/clients/tensor-client.js.map +1 -0
- package/dist/esm/nft/index.d.ts +13 -0
- package/dist/esm/nft/index.d.ts.map +1 -0
- package/dist/esm/nft/index.js +15 -0
- package/dist/esm/nft/index.js.map +1 -0
- package/dist/esm/nft/types.nft.d.ts +342 -0
- package/dist/esm/nft/types.nft.d.ts.map +1 -0
- package/dist/esm/nft/types.nft.js +2 -0
- package/dist/esm/nft/types.nft.js.map +1 -0
- package/dist/esm/nft/utils.d.ts +46 -0
- package/dist/esm/nft/utils.d.ts.map +1 -0
- package/dist/esm/nft/utils.js +276 -0
- package/dist/esm/nft/utils.js.map +1 -0
- package/dist/esm/types.d.ts +525 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +178 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/constant.d.ts +8 -0
- package/dist/esm/utils/constant.d.ts.map +1 -0
- package/dist/esm/utils/constant.js +8 -0
- package/dist/esm/utils/constant.js.map +1 -0
- package/dist/esm/utils/helpers.d.ts +92 -0
- package/dist/esm/utils/helpers.d.ts.map +1 -0
- package/dist/esm/utils/helpers.js +243 -0
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/esm/websocket/client.d.ts +182 -0
- package/dist/esm/websocket/client.d.ts.map +1 -0
- package/dist/esm/websocket/client.js +458 -0
- package/dist/esm/websocket/client.js.map +1 -0
- package/dist/esm/websocket/index.d.ts +6 -0
- package/dist/esm/websocket/index.d.ts.map +1 -0
- package/dist/esm/websocket/index.js +5 -0
- package/dist/esm/websocket/index.js.map +1 -0
- package/package.json +160 -0
|
@@ -0,0 +1,776 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@oobe-protocol-labs/synapse-client-sdk</title><meta name="description" content="Documentation for @oobe-protocol-labs/synapse-client-sdk"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">@oobe-protocol-labs/synapse-client-sdk</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@oobe-protocol-labs/synapse-client-sdk</h1></div><div class="tsd-panel tsd-typography"><a id="md:synapse-client-sdk" class="tsd-anchor"></a><h1 class="tsd-anchor-link">Synapse Client SDK<a href="#md:synapse-client-sdk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p>TypeScript SDK for Solana blockchain with advanced features including AI integration, real-time WebSocket support, DeFi tools, NFT management, and intelligent caching.</p>
|
|
2
|
+
<blockquote>
|
|
3
|
+
<p><strong>Note:</strong> This SDK is specifically designed to be perfectly aligned with the Synapse Gateway and Oobe Protocol architecture, ensuring optimal compatibility, high performance, and native integration with all gateway enterprise features (rate limiting, distributed caching, load balancing, circuit breaker).</p>
|
|
4
|
+
</blockquote>
|
|
5
|
+
<a id="md:architecture-overview" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Architecture Overview<a href="#md:architecture-overview" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code><span class="hl-0">┌──────────────────────────────────────────────────────────────────────┐</span><br/><span class="hl-0">│ </span><span class="hl-1">Synapse</span><span class="hl-0"> </span><span class="hl-1">Client</span><span class="hl-0"> </span><span class="hl-2">SDK</span><span class="hl-0"> │</span><br/><span class="hl-0">├──────────────────────────────────────────────────────────────────────┤</span><br/><span class="hl-0">│ │</span><br/><span class="hl-0">│ ┌─────────────┐ ┌──────────────┐ ┌────────────┐ ┌────────────┐ │</span><br/><span class="hl-0">│ │ </span><span class="hl-1">Client</span><span class="hl-0"> │ │ </span><span class="hl-1">Advanced</span><span class="hl-0"> │ │ </span><span class="hl-1">WebSocket</span><span class="hl-0"> │ │ </span><span class="hl-1">Analytics</span><span class="hl-0"> │ │</span><br/><span class="hl-0">│ │ </span><span class="hl-1">Core</span><span class="hl-0"> │ │ </span><span class="hl-1">Features</span><span class="hl-0"> │ │ </span><span class="hl-1">Client</span><span class="hl-0"> │ │ </span><span class="hl-1">Engine</span><span class="hl-0"> │ │</span><br/><span class="hl-0">│ └─────────────┘ └──────────────┘ └────────────┘ └────────────┘ │</span><br/><span class="hl-0">│ │</span><br/><span class="hl-0">│ ┌─────────────┐ ┌──────────────┐ ┌────────────┐ ┌────────────┐ │</span><br/><span class="hl-0">│ │ </span><span class="hl-1">DeFi</span><span class="hl-0"> │ │ </span><span class="hl-2">NFT</span><span class="hl-0"> │ │ </span><span class="hl-2">AI</span><span class="hl-0"> │ │ </span><span class="hl-2">RPC</span><span class="hl-0"> │ │</span><br/><span class="hl-0">│ │ </span><span class="hl-1">Module</span><span class="hl-0"> │ │ </span><span class="hl-1">Module</span><span class="hl-0"> │ │ </span><span class="hl-1">Module</span><span class="hl-0"> │ │ </span><span class="hl-1">Methods</span><span class="hl-0"> │ │</span><br/><span class="hl-0">│ └─────────────┘ └──────────────┘ └────────────┘ └────────────┘ │</span><br/><span class="hl-0">│ │</span><br/><span class="hl-0">├──────────────────────────────────────────────────────────────────────┤</span><br/><span class="hl-0">│ </span><span class="hl-1">Solana</span><span class="hl-0"> </span><span class="hl-2">RPC</span><span class="hl-0"> </span><span class="hl-1">Gateway</span><span class="hl-0"> </span><span class="hl-1">Layer</span><span class="hl-0"> │</span><br/><span class="hl-0">└──────────────────────────────────────────────────────────────────────┘</span>
|
|
6
|
+
</code><button>Copy</button></pre>
|
|
7
|
+
|
|
8
|
+
<a id="md:features-matrix" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Features Matrix<a href="#md:features-matrix" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><table>
|
|
9
|
+
<thead>
|
|
10
|
+
<tr>
|
|
11
|
+
<th>Module</th>
|
|
12
|
+
<th>Capabilities</th>
|
|
13
|
+
<th>Status</th>
|
|
14
|
+
<th>Performance</th>
|
|
15
|
+
</tr>
|
|
16
|
+
</thead>
|
|
17
|
+
<tbody>
|
|
18
|
+
<tr>
|
|
19
|
+
<td><strong>Core Client</strong></td>
|
|
20
|
+
<td>RPC calls, batching, rotation, statistics</td>
|
|
21
|
+
<td>Production</td>
|
|
22
|
+
<td>10k+ req/s</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr>
|
|
25
|
+
<td><strong>Advanced</strong></td>
|
|
26
|
+
<td>Circuit breaker, smart caching, load balancing</td>
|
|
27
|
+
<td>Production</td>
|
|
28
|
+
<td>99.9% uptime</td>
|
|
29
|
+
</tr>
|
|
30
|
+
<tr>
|
|
31
|
+
<td><strong>WebSocket</strong></td>
|
|
32
|
+
<td>Real-time subscriptions, auto-reconnect</td>
|
|
33
|
+
<td>Production</td>
|
|
34
|
+
<td><50ms latency</td>
|
|
35
|
+
</tr>
|
|
36
|
+
<tr>
|
|
37
|
+
<td><strong>DeFi</strong></td>
|
|
38
|
+
<td>Jupiter, Jito, token data, price feeds</td>
|
|
39
|
+
<td>Production</td>
|
|
40
|
+
<td>Sub-second execution</td>
|
|
41
|
+
</tr>
|
|
42
|
+
<tr>
|
|
43
|
+
<td><strong>NFT</strong></td>
|
|
44
|
+
<td>Metadata, rarity, marketplace aggregation</td>
|
|
45
|
+
<td>Production</td>
|
|
46
|
+
<td><100ms queries</td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr>
|
|
49
|
+
<td><strong>AI</strong></td>
|
|
50
|
+
<td>OOBE Protocol, Zero-Combine, PDA management</td>
|
|
51
|
+
<td>Production</td>
|
|
52
|
+
<td>ML-powered</td>
|
|
53
|
+
</tr>
|
|
54
|
+
<tr>
|
|
55
|
+
<td><strong>Analytics</strong></td>
|
|
56
|
+
<td>Metrics, predictions, anomaly detection</td>
|
|
57
|
+
<td>Production</td>
|
|
58
|
+
<td>Real-time insights</td>
|
|
59
|
+
</tr>
|
|
60
|
+
<tr>
|
|
61
|
+
<td><strong>Methods</strong></td>
|
|
62
|
+
<td>70+ Solana RPC methods</td>
|
|
63
|
+
<td>Production</td>
|
|
64
|
+
<td>Type-safe</td>
|
|
65
|
+
</tr>
|
|
66
|
+
</tbody>
|
|
67
|
+
</table>
|
|
68
|
+
<a id="md:installation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Installation<a href="#md:installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code class="bash"><span class="hl-3">npm</span><span class="hl-0"> </span><span class="hl-4">install</span><span class="hl-0"> </span><span class="hl-4">@synapse/client-sdk</span><br/><span class="hl-5"># or</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">add</span><span class="hl-0"> </span><span class="hl-4">@synapse/client-sdk</span><br/><span class="hl-5"># or</span><br/><span class="hl-3">yarn</span><span class="hl-0"> </span><span class="hl-4">add</span><span class="hl-0"> </span><span class="hl-4">@synapse/client-sdk</span>
|
|
69
|
+
</code><button type="button">Copy</button></pre>
|
|
70
|
+
|
|
71
|
+
<a id="md:quick-start" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Quick Start<a href="#md:quick-start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:basic-client-initialization" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Basic Client Initialization<a href="#md:basic-client-initialization" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SynapseClient</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-4">'https://your-synapse-gateway.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_API_KEY</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timeout:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">debug:</span><span class="hl-0"> </span><span class="hl-7">false</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Execute RPC call</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'YourPublicKeyHere'</span><span class="hl-0">]);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Balance (SOL):'</span><span class="hl-0">, </span><span class="hl-1">balance</span><span class="hl-0"> / </span><span class="hl-8">1e9</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Batch multiple RPC calls</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">results</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">batch</span><span class="hl-0">([</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getBalance'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address1'</span><span class="hl-0">] },</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getAccountInfo'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address2'</span><span class="hl-0">, { </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0"> }] },</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getBlockHeight'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [] },</span><br/><span class="hl-0">]);</span><br/><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Batch results:'</span><span class="hl-0">, </span><span class="hl-1">results</span><span class="hl-0">);</span>
|
|
72
|
+
</code><button type="button">Copy</button></pre>
|
|
73
|
+
|
|
74
|
+
<a id="md:client-statistics" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Client Statistics<a href="#md:client-statistics" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">stats</span><span class="hl-0"> = </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">getStats</span><span class="hl-0">();</span><br/><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Performance Metrics:'</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">requestCount:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">errorCount:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">errorCount</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">errorRate:</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">errorCount</span><span class="hl-0"> / </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0"> * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">averageLatency:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0">.</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'ms'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">cacheHitRate:</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">cacheHitRate</span><span class="hl-0"> * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">activeConnections:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">activeConnections</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">pendingRequests:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">pendingRequests</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">uptime:</span><span class="hl-0"> </span><span class="hl-1">Math</span><span class="hl-0">.</span><span class="hl-3">floor</span><span class="hl-0">((</span><span class="hl-1">Date</span><span class="hl-0">.</span><span class="hl-3">now</span><span class="hl-0">() - </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">uptime</span><span class="hl-0">) / </span><span class="hl-8">1000</span><span class="hl-0">) + </span><span class="hl-4">'s'</span><span class="hl-0">,</span><br/><span class="hl-0">});</span>
|
|
75
|
+
</code><button type="button">Copy</button></pre>
|
|
76
|
+
|
|
77
|
+
<a id="md:endpoint-rotation" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Endpoint Rotation<a href="#md:endpoint-rotation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>The client automatically rotates between multiple endpoints for high availability:</p>
|
|
78
|
+
<pre><code class="typescript"><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> [</span><br/><span class="hl-0"> </span><span class="hl-4">'https://rpc1.synapse.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-4">'https://rpc2.synapse.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-4">'https://rpc3.synapse.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> ],</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_API_KEY</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timeout:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Client automatically uses next endpoint on failure</span><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'endpoint-rotate'</span><span class="hl-0">, ({ </span><span class="hl-1">oldEndpoint</span><span class="hl-0">, </span><span class="hl-1">newEndpoint</span><span class="hl-0">, </span><span class="hl-1">reason</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Rotated from </span><span class="hl-7">${</span><span class="hl-1">oldEndpoint</span><span class="hl-7">}</span><span class="hl-4"> to </span><span class="hl-7">${</span><span class="hl-1">newEndpoint</span><span class="hl-7">}</span><span class="hl-4">: </span><span class="hl-7">${</span><span class="hl-1">reason</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span>
|
|
79
|
+
</code><button type="button">Copy</button></pre>
|
|
80
|
+
|
|
81
|
+
<hr>
|
|
82
|
+
<a id="md:core-client" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Core Client<a href="#md:core-client" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:configuration" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Configuration<a href="#md:configuration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">SynapseConfig</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0"> | </span><span class="hl-9">string</span><span class="hl-0">[]; </span><span class="hl-5">// Single or multiple RPC endpoints</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey</span><span class="hl-0">?: </span><span class="hl-9">string</span><span class="hl-0">; </span><span class="hl-5">// Optional API key for authentication</span><br/><span class="hl-0"> </span><span class="hl-1">timeout</span><span class="hl-0">?: </span><span class="hl-9">number</span><span class="hl-0">; </span><span class="hl-5">// Request timeout in milliseconds (default: 30000)</span><br/><span class="hl-0"> </span><span class="hl-1">debug</span><span class="hl-0">?: </span><span class="hl-9">boolean</span><span class="hl-0">; </span><span class="hl-5">// Enable debug logging (default: false)</span><br/><span class="hl-0">}</span>
|
|
83
|
+
</code><button type="button">Copy</button></pre>
|
|
84
|
+
|
|
85
|
+
<a id="md:core-methods" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Core Methods<a href="#md:core-methods" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
86
|
+
<thead>
|
|
87
|
+
<tr>
|
|
88
|
+
<th>Method</th>
|
|
89
|
+
<th>Signature</th>
|
|
90
|
+
<th>Description</th>
|
|
91
|
+
</tr>
|
|
92
|
+
</thead>
|
|
93
|
+
<tbody>
|
|
94
|
+
<tr>
|
|
95
|
+
<td><code>call<T></code></td>
|
|
96
|
+
<td><code>(method: string, params?: any[], options?: RequestOptions) => Promise<T></code></td>
|
|
97
|
+
<td>Execute single RPC call</td>
|
|
98
|
+
</tr>
|
|
99
|
+
<tr>
|
|
100
|
+
<td><code>batch</code></td>
|
|
101
|
+
<td><code>(requests: RpcRequest[]) => Promise<RpcResponse[]></code></td>
|
|
102
|
+
<td>Execute multiple RPC calls in parallel</td>
|
|
103
|
+
</tr>
|
|
104
|
+
<tr>
|
|
105
|
+
<td><code>getStats</code></td>
|
|
106
|
+
<td><code>() => ClientStats</code></td>
|
|
107
|
+
<td>Get client performance statistics</td>
|
|
108
|
+
</tr>
|
|
109
|
+
<tr>
|
|
110
|
+
<td><code>setEndpoint</code></td>
|
|
111
|
+
<td><code>(endpoint: string | string[]) => void</code></td>
|
|
112
|
+
<td>Update RPC endpoint(s)</td>
|
|
113
|
+
</tr>
|
|
114
|
+
<tr>
|
|
115
|
+
<td><code>clearCache</code></td>
|
|
116
|
+
<td><code>() => void</code></td>
|
|
117
|
+
<td>Clear internal request cache</td>
|
|
118
|
+
</tr>
|
|
119
|
+
<tr>
|
|
120
|
+
<td><code>destroy</code></td>
|
|
121
|
+
<td><code>() => Promise<void></code></td>
|
|
122
|
+
<td>Cleanup resources and connections</td>
|
|
123
|
+
</tr>
|
|
124
|
+
</tbody>
|
|
125
|
+
</table>
|
|
126
|
+
<a id="md:event-system" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Event System<a href="#md:event-system" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-5">// Request lifecycle events</span><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'request'</span><span class="hl-0">, ({ </span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">params</span><span class="hl-0">, </span><span class="hl-1">id</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`[</span><span class="hl-7">${</span><span class="hl-1">id</span><span class="hl-7">}</span><span class="hl-4">] </span><span class="hl-7">${</span><span class="hl-1">method</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">, </span><span class="hl-1">params</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'response'</span><span class="hl-0">, ({ </span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">result</span><span class="hl-0">, </span><span class="hl-1">latency</span><span class="hl-0">, </span><span class="hl-1">id</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`[</span><span class="hl-7">${</span><span class="hl-1">id</span><span class="hl-7">}</span><span class="hl-4">] </span><span class="hl-7">${</span><span class="hl-1">method</span><span class="hl-7">}</span><span class="hl-4"> completed in </span><span class="hl-7">${</span><span class="hl-1">latency</span><span class="hl-7">}</span><span class="hl-4">ms`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'error'</span><span class="hl-0">, ({ </span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">, </span><span class="hl-1">attempt</span><span class="hl-0">, </span><span class="hl-1">id</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">`[</span><span class="hl-7">${</span><span class="hl-1">id</span><span class="hl-7">}</span><span class="hl-4">] </span><span class="hl-7">${</span><span class="hl-1">method</span><span class="hl-7">}</span><span class="hl-4"> failed (attempt </span><span class="hl-7">${</span><span class="hl-1">attempt</span><span class="hl-7">}</span><span class="hl-4">):`</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Retry and rotation events</span><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'retry'</span><span class="hl-0">, ({ </span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">attempt</span><span class="hl-0">, </span><span class="hl-1">maxAttempts</span><span class="hl-0">, </span><span class="hl-1">delay</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Retrying </span><span class="hl-7">${</span><span class="hl-1">method</span><span class="hl-7">}</span><span class="hl-4">: </span><span class="hl-7">${</span><span class="hl-1">attempt</span><span class="hl-7">}</span><span class="hl-4">/</span><span class="hl-7">${</span><span class="hl-1">maxAttempts</span><span class="hl-7">}</span><span class="hl-4"> after </span><span class="hl-7">${</span><span class="hl-1">delay</span><span class="hl-7">}</span><span class="hl-4">ms`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'endpoint-rotate'</span><span class="hl-0">, ({ </span><span class="hl-1">oldEndpoint</span><span class="hl-0">, </span><span class="hl-1">newEndpoint</span><span class="hl-0">, </span><span class="hl-1">reason</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Endpoint rotation: </span><span class="hl-7">${</span><span class="hl-1">oldEndpoint</span><span class="hl-7">}</span><span class="hl-4"> → </span><span class="hl-7">${</span><span class="hl-1">newEndpoint</span><span class="hl-7">}</span><span class="hl-4"> (</span><span class="hl-7">${</span><span class="hl-1">reason</span><span class="hl-7">}</span><span class="hl-4">)`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Cache events</span><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'cache-hit'</span><span class="hl-0">, ({ </span><span class="hl-1">key</span><span class="hl-0">, </span><span class="hl-1">ttl</span><span class="hl-0">, </span><span class="hl-1">layer</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Cache hit: </span><span class="hl-7">${</span><span class="hl-1">key</span><span class="hl-7">}</span><span class="hl-4"> from </span><span class="hl-7">${</span><span class="hl-1">layer</span><span class="hl-7">}</span><span class="hl-4"> (TTL: </span><span class="hl-7">${</span><span class="hl-1">ttl</span><span class="hl-7">}</span><span class="hl-4">ms)`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'cache-miss'</span><span class="hl-0">, ({ </span><span class="hl-1">key</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Cache miss: </span><span class="hl-7">${</span><span class="hl-1">key</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span>
|
|
127
|
+
</code><button type="button">Copy</button></pre>
|
|
128
|
+
|
|
129
|
+
<hr>
|
|
130
|
+
<a id="md:module-documentation" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Module Documentation<a href="#md:module-documentation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:1-advanced-features-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">1. Advanced Features Module<a href="#md:1-advanced-features-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README.md"><code>src/advanced/</code></a></p>
|
|
131
|
+
<p>Enterprise-grade resilience and performance optimization.</p>
|
|
132
|
+
<a id="md:components" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Components<a href="#md:components" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
133
|
+
<thead>
|
|
134
|
+
<tr>
|
|
135
|
+
<th>Component</th>
|
|
136
|
+
<th>Purpose</th>
|
|
137
|
+
<th>Key Features</th>
|
|
138
|
+
</tr>
|
|
139
|
+
</thead>
|
|
140
|
+
<tbody>
|
|
141
|
+
<tr>
|
|
142
|
+
<td><strong>Circuit Breaker</strong></td>
|
|
143
|
+
<td>Prevent cascade failures</td>
|
|
144
|
+
<td>State machine (closed/open/half-open), automatic recovery, fallback support</td>
|
|
145
|
+
</tr>
|
|
146
|
+
<tr>
|
|
147
|
+
<td><strong>Smart Caching</strong></td>
|
|
148
|
+
<td>Multi-layer intelligent caching</td>
|
|
149
|
+
<td>L1 (memory), L2 (extended), L3 (Redis), ML predictive loading, compression</td>
|
|
150
|
+
</tr>
|
|
151
|
+
<tr>
|
|
152
|
+
<td><strong>Load Balancer</strong></td>
|
|
153
|
+
<td>Request distribution</td>
|
|
154
|
+
<td>Round-robin, weighted, least-connections, IP hash, EWMA strategies</td>
|
|
155
|
+
</tr>
|
|
156
|
+
</tbody>
|
|
157
|
+
</table>
|
|
158
|
+
<a id="md:quick-example" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SmartCaching</span><span class="hl-0">, </span><span class="hl-1">CircuitBreaker</span><span class="hl-0">, </span><span class="hl-1">LoadBalancer</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/advanced'</span><span class="hl-0">;</span><br/><br/><span class="hl-5">// Multi-layer caching</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cache</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SmartCaching</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">maxSize:</span><span class="hl-0"> </span><span class="hl-8">10000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableL2:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableDistributed:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enablePredictive:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Circuit breaker protection</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">breaker</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">CircuitBreaker</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">failureThreshold:</span><span class="hl-0"> </span><span class="hl-8">5</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timeout:</span><span class="hl-0"> </span><span class="hl-8">60000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">retryInterval:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableFallback:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Load balancing</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balancer</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">LoadBalancer</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoints:</span><span class="hl-0"> [</span><span class="hl-4">'rpc1'</span><span class="hl-0">, </span><span class="hl-4">'rpc2'</span><span class="hl-0">, </span><span class="hl-4">'rpc3'</span><span class="hl-0">],</span><br/><span class="hl-0"> </span><span class="hl-1">strategy:</span><span class="hl-0"> </span><span class="hl-4">'ewma'</span><span class="hl-0">, </span><span class="hl-5">// Latency-aware</span><br/><span class="hl-0"> </span><span class="hl-1">healthCheckInterval:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Combined usage</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">result</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">breaker</span><span class="hl-0">.</span><span class="hl-3">execute</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-7">async</span><span class="hl-0"> () </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">endpoint</span><span class="hl-0"> = </span><span class="hl-1">balancer</span><span class="hl-0">.</span><span class="hl-3">getNextEndpoint</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cached</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">get</span><span class="hl-0">(</span><span class="hl-1">cacheKey</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">cached</span><span class="hl-0">) </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">cached</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">data</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-3">fetchFromEndpoint</span><span class="hl-0">(</span><span class="hl-1">endpoint</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">set</span><span class="hl-0">(</span><span class="hl-1">cacheKey</span><span class="hl-0">, </span><span class="hl-1">data</span><span class="hl-0">, { </span><span class="hl-1">ttl:</span><span class="hl-0"> </span><span class="hl-8">60000</span><span class="hl-0"> });</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">data</span><span class="hl-0">;</span><br/><span class="hl-0"> },</span><br/><span class="hl-0"> </span><span class="hl-7">async</span><span class="hl-0"> () </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">// Fallback to stale cache</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">get</span><span class="hl-0">(</span><span class="hl-1">cacheKey</span><span class="hl-0">, { </span><span class="hl-1">allowStale:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0"> });</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">);</span>
|
|
159
|
+
</code><button type="button">Copy</button></pre>
|
|
160
|
+
|
|
161
|
+
<p><strong><a href="media/README.md">Read Full Documentation →</a></strong></p>
|
|
162
|
+
<hr>
|
|
163
|
+
<a id="md:2-websocket-client-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">2. WebSocket Client Module<a href="#md:2-websocket-client-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-1.md"><code>src/websocket/</code></a></p>
|
|
164
|
+
<p>Real-time Solana blockchain data streaming with intelligent reconnection.</p>
|
|
165
|
+
<a id="md:subscription-types" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Subscription Types<a href="#md:subscription-types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
166
|
+
<thead>
|
|
167
|
+
<tr>
|
|
168
|
+
<th>Type</th>
|
|
169
|
+
<th>Method</th>
|
|
170
|
+
<th>Use Case</th>
|
|
171
|
+
<th>Commitment Options</th>
|
|
172
|
+
</tr>
|
|
173
|
+
</thead>
|
|
174
|
+
<tbody>
|
|
175
|
+
<tr>
|
|
176
|
+
<td><strong>Account</strong></td>
|
|
177
|
+
<td><code>accountSubscribe</code></td>
|
|
178
|
+
<td>Monitor account changes</td>
|
|
179
|
+
<td>processed, confirmed, finalized</td>
|
|
180
|
+
</tr>
|
|
181
|
+
<tr>
|
|
182
|
+
<td><strong>Program</strong></td>
|
|
183
|
+
<td><code>programSubscribe</code></td>
|
|
184
|
+
<td>Track program accounts</td>
|
|
185
|
+
<td>processed, confirmed, finalized</td>
|
|
186
|
+
</tr>
|
|
187
|
+
<tr>
|
|
188
|
+
<td><strong>Slot</strong></td>
|
|
189
|
+
<td><code>slotSubscribe</code></td>
|
|
190
|
+
<td>Block production tracking</td>
|
|
191
|
+
<td>N/A</td>
|
|
192
|
+
</tr>
|
|
193
|
+
<tr>
|
|
194
|
+
<td><strong>Signature</strong></td>
|
|
195
|
+
<td><code>signatureSubscribe</code></td>
|
|
196
|
+
<td>Transaction confirmation</td>
|
|
197
|
+
<td>processed, confirmed, finalized</td>
|
|
198
|
+
</tr>
|
|
199
|
+
<tr>
|
|
200
|
+
<td><strong>Logs</strong></td>
|
|
201
|
+
<td><code>logsSubscribe</code></td>
|
|
202
|
+
<td>Transaction logs</td>
|
|
203
|
+
<td>processed, confirmed, finalized</td>
|
|
204
|
+
</tr>
|
|
205
|
+
</tbody>
|
|
206
|
+
</table>
|
|
207
|
+
<a id="md:quick-example-1" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">WebSocketClient</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/websocket'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">wsClient</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">WebSocketClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-4">'wss://your-synapse-gateway.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_API_KEY</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">autoReconnect:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">maxReconnectAttempts:</span><span class="hl-0"> </span><span class="hl-8">10</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">reconnectDelay:</span><span class="hl-0"> </span><span class="hl-8">5000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableSmartCaching:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableCircuitBreaker:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">connect</span><span class="hl-0">();</span><br/><br/><span class="hl-5">// Subscribe to account changes</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">subId</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">accountSubscribe</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-4">'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'</span><span class="hl-0">, </span><span class="hl-5">// USDC mint</span><br/><span class="hl-0"> (</span><span class="hl-1">accountInfo</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Account lamports:'</span><span class="hl-0">, </span><span class="hl-1">accountInfo</span><span class="hl-0">.</span><span class="hl-1">lamports</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Account owner:'</span><span class="hl-0">, </span><span class="hl-1">accountInfo</span><span class="hl-0">.</span><span class="hl-1">owner</span><span class="hl-0">);</span><br/><span class="hl-0"> },</span><br/><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">commitment:</span><span class="hl-0"> </span><span class="hl-4">'confirmed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableCache:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">resilient:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">, </span><span class="hl-5">// Auto-restore on reconnect</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">);</span><br/><br/><span class="hl-5">// Monitor metrics</span><br/><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'metrics-update'</span><span class="hl-0">, (</span><span class="hl-1">metrics</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Subscriptions active:'</span><span class="hl-0">, </span><span class="hl-1">metrics</span><span class="hl-0">.</span><span class="hl-1">subscriptionsActive</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Average latency:'</span><span class="hl-0">, </span><span class="hl-1">metrics</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Cleanup</span><br/><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">accountUnsubscribe</span><span class="hl-0">(</span><span class="hl-1">subId</span><span class="hl-0">);</span><br/><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">disconnect</span><span class="hl-0">();</span>
|
|
208
|
+
</code><button type="button">Copy</button></pre>
|
|
209
|
+
|
|
210
|
+
<p><strong><a href="media/README-1.md">Read Full Documentation →</a></strong></p>
|
|
211
|
+
<hr>
|
|
212
|
+
<a id="md:3-defi-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">3. DeFi Module<a href="#md:3-defi-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-2.md"><code>src/defi/</code></a></p>
|
|
213
|
+
<p>Production-ready DeFi integrations for Solana.</p>
|
|
214
|
+
<a id="md:integrations-matrix" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Integrations Matrix<a href="#md:integrations-matrix" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
215
|
+
<thead>
|
|
216
|
+
<tr>
|
|
217
|
+
<th>Integration</th>
|
|
218
|
+
<th>Protocol</th>
|
|
219
|
+
<th>Features</th>
|
|
220
|
+
<th>Performance</th>
|
|
221
|
+
</tr>
|
|
222
|
+
</thead>
|
|
223
|
+
<tbody>
|
|
224
|
+
<tr>
|
|
225
|
+
<td><strong>Jupiter</strong></td>
|
|
226
|
+
<td>Jupiter V6 API</td>
|
|
227
|
+
<td>Swap aggregation, route optimization, price discovery</td>
|
|
228
|
+
<td><200ms quotes</td>
|
|
229
|
+
</tr>
|
|
230
|
+
<tr>
|
|
231
|
+
<td><strong>Jito</strong></td>
|
|
232
|
+
<td>Jito Block Engine</td>
|
|
233
|
+
<td>MEV protection, bundle submission, 8 regional endpoints</td>
|
|
234
|
+
<td><50ms bundle</td>
|
|
235
|
+
</tr>
|
|
236
|
+
<tr>
|
|
237
|
+
<td><strong>Token Data</strong></td>
|
|
238
|
+
<td>Solana RPC</td>
|
|
239
|
+
<td>SPL token accounts, supply, holders, balances</td>
|
|
240
|
+
<td><100ms queries</td>
|
|
241
|
+
</tr>
|
|
242
|
+
<tr>
|
|
243
|
+
<td><strong>Price Feed</strong></td>
|
|
244
|
+
<td>Jupiter + Birdeye</td>
|
|
245
|
+
<td>Multi-source aggregation, median calculation, streaming</td>
|
|
246
|
+
<td><150ms prices</td>
|
|
247
|
+
</tr>
|
|
248
|
+
</tbody>
|
|
249
|
+
</table>
|
|
250
|
+
<a id="md:advanced-features" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Advanced Features<a href="#md:advanced-features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
251
|
+
<thead>
|
|
252
|
+
<tr>
|
|
253
|
+
<th>Feature</th>
|
|
254
|
+
<th>Description</th>
|
|
255
|
+
<th>Complexity</th>
|
|
256
|
+
</tr>
|
|
257
|
+
</thead>
|
|
258
|
+
<tbody>
|
|
259
|
+
<tr>
|
|
260
|
+
<td><strong>MEV Protection</strong></td>
|
|
261
|
+
<td>Sandwich attack prevention via Jito bundles</td>
|
|
262
|
+
<td>High</td>
|
|
263
|
+
</tr>
|
|
264
|
+
<tr>
|
|
265
|
+
<td><strong>Arbitrage Detection</strong></td>
|
|
266
|
+
<td>Cross-DEX opportunity scanning</td>
|
|
267
|
+
<td>High</td>
|
|
268
|
+
</tr>
|
|
269
|
+
<tr>
|
|
270
|
+
<td><strong>Portfolio Analytics</strong></td>
|
|
271
|
+
<td>Risk assessment and diversification scoring</td>
|
|
272
|
+
<td>Medium</td>
|
|
273
|
+
</tr>
|
|
274
|
+
<tr>
|
|
275
|
+
<td><strong>Flash Loan Simulator</strong></td>
|
|
276
|
+
<td>Profitability analysis without execution</td>
|
|
277
|
+
<td>Medium</td>
|
|
278
|
+
</tr>
|
|
279
|
+
<tr>
|
|
280
|
+
<td><strong>Yield Farming Finder</strong></td>
|
|
281
|
+
<td>APY discovery across protocols</td>
|
|
282
|
+
<td>Low</td>
|
|
283
|
+
</tr>
|
|
284
|
+
</tbody>
|
|
285
|
+
</table>
|
|
286
|
+
<a id="md:quick-example-2" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">JupiterIntegration</span><span class="hl-0">, </span><span class="hl-1">JitoIntegration</span><span class="hl-0">, </span><span class="hl-1">TokenDataIntegration</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/defi'</span><span class="hl-0">;</span><br/><br/><span class="hl-5">// Jupiter swap</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">jupiter</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">JupiterIntegration</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">quote</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">jupiter</span><span class="hl-0">.</span><span class="hl-3">getQuote</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">inputMint:</span><span class="hl-0"> </span><span class="hl-4">'So11111111111111111111111111111111111111112'</span><span class="hl-0">, </span><span class="hl-5">// SOL</span><br/><span class="hl-0"> </span><span class="hl-1">outputMint:</span><span class="hl-0"> </span><span class="hl-4">'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'</span><span class="hl-0">, </span><span class="hl-5">// USDC</span><br/><span class="hl-0"> </span><span class="hl-1">amount:</span><span class="hl-0"> </span><span class="hl-8">1_000_000_000</span><span class="hl-0">, </span><span class="hl-5">// 1 SOL</span><br/><span class="hl-0"> </span><span class="hl-1">slippageBps:</span><span class="hl-0"> </span><span class="hl-8">50</span><span class="hl-0">, </span><span class="hl-5">// 0.5%</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Quote:'</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">inAmount:</span><span class="hl-0"> </span><span class="hl-1">quote</span><span class="hl-0">.</span><span class="hl-1">inAmount</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">outAmount:</span><span class="hl-0"> </span><span class="hl-1">quote</span><span class="hl-0">.</span><span class="hl-1">outAmount</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">priceImpact:</span><span class="hl-0"> </span><span class="hl-1">quote</span><span class="hl-0">.</span><span class="hl-1">priceImpactPct</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Jito MEV protection</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">jito</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">JitoIntegration</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">tipAccount</span><span class="hl-0"> = </span><span class="hl-1">jito</span><span class="hl-0">.</span><span class="hl-3">getTipAccount</span><span class="hl-0">(</span><span class="hl-4">'ny'</span><span class="hl-0">); </span><span class="hl-5">// New York region</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">bundle</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">jito</span><span class="hl-0">.</span><span class="hl-3">submitBundle</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">transactions:</span><span class="hl-0"> [</span><span class="hl-1">signedTxBase64</span><span class="hl-0">],</span><br/><span class="hl-0"> </span><span class="hl-1">tipLamports:</span><span class="hl-0"> </span><span class="hl-8">1_000_000</span><span class="hl-0">, </span><span class="hl-5">// 0.001 SOL</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Bundle ID:'</span><span class="hl-0">, </span><span class="hl-1">bundle</span><span class="hl-0">.</span><span class="hl-1">bundleId</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Token data</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">tokenData</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">TokenDataIntegration</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">tokens</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">tokenData</span><span class="hl-0">.</span><span class="hl-3">getTokenAccountsByOwner</span><span class="hl-0">(</span><span class="hl-4">'YourWalletAddress'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Token accounts:'</span><span class="hl-0">, </span><span class="hl-1">tokens</span><span class="hl-0">.</span><span class="hl-1">length</span><span class="hl-0">);</span>
|
|
287
|
+
</code><button type="button">Copy</button></pre>
|
|
288
|
+
|
|
289
|
+
<p><strong><a href="media/README-2.md">Read Full Documentation →</a></strong></p>
|
|
290
|
+
<hr>
|
|
291
|
+
<a id="md:4-nft-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">4. NFT Module<a href="#md:4-nft-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-3.md"><code>src/nft/</code></a></p>
|
|
292
|
+
<p>Complete NFT toolkit for Solana with AI-powered features.</p>
|
|
293
|
+
<a id="md:features-matrix-1" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Features Matrix<a href="#md:features-matrix-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
294
|
+
<thead>
|
|
295
|
+
<tr>
|
|
296
|
+
<th>Feature</th>
|
|
297
|
+
<th>Description</th>
|
|
298
|
+
<th>Data Sources</th>
|
|
299
|
+
</tr>
|
|
300
|
+
</thead>
|
|
301
|
+
<tbody>
|
|
302
|
+
<tr>
|
|
303
|
+
<td><strong>Metadata Fetching</strong></td>
|
|
304
|
+
<td>NFT metadata parsing and validation</td>
|
|
305
|
+
<td>On-chain + Arweave/IPFS</td>
|
|
306
|
+
</tr>
|
|
307
|
+
<tr>
|
|
308
|
+
<td><strong>Rarity Calculation</strong></td>
|
|
309
|
+
<td>Statistical rarity scoring algorithms</td>
|
|
310
|
+
<td>Collection traits</td>
|
|
311
|
+
</tr>
|
|
312
|
+
<tr>
|
|
313
|
+
<td><strong>Collection Analytics</strong></td>
|
|
314
|
+
<td>Floor price, volume, trends</td>
|
|
315
|
+
<td>Magic Eden, Tensor, Solanart</td>
|
|
316
|
+
</tr>
|
|
317
|
+
<tr>
|
|
318
|
+
<td><strong>Marketplace Aggregation</strong></td>
|
|
319
|
+
<td>Multi-marketplace listing aggregation</td>
|
|
320
|
+
<td>5+ marketplaces</td>
|
|
321
|
+
</tr>
|
|
322
|
+
<tr>
|
|
323
|
+
<td><strong>AI Recommendations</strong></td>
|
|
324
|
+
<td>ML-powered investment suggestions</td>
|
|
325
|
+
<td>Historical data + ML models</td>
|
|
326
|
+
</tr>
|
|
327
|
+
</tbody>
|
|
328
|
+
</table>
|
|
329
|
+
<a id="md:quick-example-3" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-3" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">NFTEngine</span><span class="hl-0">, </span><span class="hl-1">CollectionAnalytics</span><span class="hl-0">, </span><span class="hl-1">AIRarityCalculator</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/nft'</span><span class="hl-0">;</span><br/><br/><span class="hl-5">// Basic NFT operations</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">nft</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">NFTEngine</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">metadata</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">nft</span><span class="hl-0">.</span><span class="hl-3">getNFTMetadata</span><span class="hl-0">(</span><span class="hl-4">'mintAddress'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'NFT Name:'</span><span class="hl-0">, </span><span class="hl-1">metadata</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Attributes:'</span><span class="hl-0">, </span><span class="hl-1">metadata</span><span class="hl-0">.</span><span class="hl-1">attributes</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Collection analytics</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">analytics</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">CollectionAnalytics</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">stats</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">analytics</span><span class="hl-0">.</span><span class="hl-3">getCollectionStats</span><span class="hl-0">(</span><span class="hl-4">'collectionMint'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Floor price:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">floorPrice</span><span class="hl-0">, </span><span class="hl-4">'SOL'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'24h volume:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">volume24h</span><span class="hl-0">, </span><span class="hl-4">'SOL'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Unique holders:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">uniqueHolders</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// AI rarity calculation</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">rarityCalc</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">AIRarityCalculator</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">rarity</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rarityCalc</span><span class="hl-0">.</span><span class="hl-3">calculateRarity</span><span class="hl-0">(</span><span class="hl-1">metadata</span><span class="hl-0">, </span><span class="hl-4">'collectionMint'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Rarity score:'</span><span class="hl-0">, </span><span class="hl-1">rarity</span><span class="hl-0">.</span><span class="hl-1">score</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Rarity rank:'</span><span class="hl-0">, </span><span class="hl-4">`</span><span class="hl-7">${</span><span class="hl-1">rarity</span><span class="hl-10">.</span><span class="hl-1">rank</span><span class="hl-7">}</span><span class="hl-4">/</span><span class="hl-7">${</span><span class="hl-1">rarity</span><span class="hl-10">.</span><span class="hl-1">totalSupply</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Rarity tier:'</span><span class="hl-0">, </span><span class="hl-1">rarity</span><span class="hl-0">.</span><span class="hl-1">tier</span><span class="hl-0">); </span><span class="hl-5">// 'common', 'rare', 'legendary', etc.</span>
|
|
330
|
+
</code><button type="button">Copy</button></pre>
|
|
331
|
+
|
|
332
|
+
<p><strong><a href="media/README-3.md">Read Full Documentation →</a></strong></p>
|
|
333
|
+
<hr>
|
|
334
|
+
<a id="md:5-ai-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">5. AI Module<a href="#md:5-ai-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-4.md"><code>src/ai/</code></a></p>
|
|
335
|
+
<p>OOBE Protocol implementation with Zero-Combine and PDA management.</p>
|
|
336
|
+
<a id="md:components-1" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Components<a href="#md:components-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
337
|
+
<thead>
|
|
338
|
+
<tr>
|
|
339
|
+
<th>Component</th>
|
|
340
|
+
<th>Purpose</th>
|
|
341
|
+
<th>Complexity</th>
|
|
342
|
+
</tr>
|
|
343
|
+
</thead>
|
|
344
|
+
<tbody>
|
|
345
|
+
<tr>
|
|
346
|
+
<td><strong>PDA Manager</strong></td>
|
|
347
|
+
<td>Deterministic Program Derived Address generation</td>
|
|
348
|
+
<td>Low</td>
|
|
349
|
+
</tr>
|
|
350
|
+
<tr>
|
|
351
|
+
<td><strong>Zero-Combine Fetcher</strong></td>
|
|
352
|
+
<td>Merkle proof reconstruction from on-chain data</td>
|
|
353
|
+
<td>High</td>
|
|
354
|
+
</tr>
|
|
355
|
+
<tr>
|
|
356
|
+
<td><strong>Merkle Operations</strong></td>
|
|
357
|
+
<td>Proof generation, validation, and verification</td>
|
|
358
|
+
<td>Medium</td>
|
|
359
|
+
</tr>
|
|
360
|
+
<tr>
|
|
361
|
+
<td><strong>OOBE Protocol</strong></td>
|
|
362
|
+
<td>AI agent integration for autonomous trading</td>
|
|
363
|
+
<td>High</td>
|
|
364
|
+
</tr>
|
|
365
|
+
</tbody>
|
|
366
|
+
</table>
|
|
367
|
+
<a id="md:quick-example-4" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-4" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">PDAManager</span><span class="hl-0">, </span><span class="hl-1">ZeroCombineFetcher</span><span class="hl-0">, </span><span class="hl-1">MerkleOperation</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/ai'</span><span class="hl-0">;</span><br/><br/><span class="hl-5">// PDA derivation</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">pdaManager</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">PDAManager</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">, </span><span class="hl-1">walletAddress</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">pdas</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">pdaManager</span><span class="hl-0">.</span><span class="hl-3">deriveAllPDAs</span><span class="hl-0">();</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'User PDAs:'</span><span class="hl-0">, </span><span class="hl-1">pdas</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Zero-Combine data fetching</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">fetcher</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">ZeroCombineFetcher</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">, </span><span class="hl-1">walletAddress</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">result</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">fetcher</span><span class="hl-0">.</span><span class="hl-3">fetchAndReconstruct</span><span class="hl-0">();</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Proof records:'</span><span class="hl-0">, </span><span class="hl-1">result</span><span class="hl-0">.</span><span class="hl-1">tools</span><span class="hl-0">.</span><span class="hl-1">length</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Merkle roots:'</span><span class="hl-0">, </span><span class="hl-1">result</span><span class="hl-0">.</span><span class="hl-1">roots</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Merkle proof operations</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">merkle</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">MerkleOperation</span><span class="hl-0">();</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">leaves</span><span class="hl-0"> = [</span><br/><span class="hl-0"> { </span><span class="hl-1">data:</span><span class="hl-0"> </span><span class="hl-1">Buffer</span><span class="hl-0">.</span><span class="hl-3">from</span><span class="hl-0">(</span><span class="hl-4">'data1'</span><span class="hl-0">), </span><span class="hl-1">index:</span><span class="hl-0"> </span><span class="hl-8">0</span><span class="hl-0"> },</span><br/><span class="hl-0"> { </span><span class="hl-1">data:</span><span class="hl-0"> </span><span class="hl-1">Buffer</span><span class="hl-0">.</span><span class="hl-3">from</span><span class="hl-0">(</span><span class="hl-4">'data2'</span><span class="hl-0">), </span><span class="hl-1">index:</span><span class="hl-0"> </span><span class="hl-8">1</span><span class="hl-0"> },</span><br/><span class="hl-0">];</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">root</span><span class="hl-0"> = </span><span class="hl-1">merkle</span><span class="hl-0">.</span><span class="hl-3">generateMerkleRoot</span><span class="hl-0">(</span><span class="hl-1">leaves</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">proof</span><span class="hl-0"> = </span><span class="hl-1">merkle</span><span class="hl-0">.</span><span class="hl-3">generateProof</span><span class="hl-0">(</span><span class="hl-1">leaves</span><span class="hl-0">, </span><span class="hl-8">0</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">isValid</span><span class="hl-0"> = </span><span class="hl-1">merkle</span><span class="hl-0">.</span><span class="hl-3">verifyProof</span><span class="hl-0">(</span><span class="hl-1">proof</span><span class="hl-0">, </span><span class="hl-1">leaves</span><span class="hl-0">[</span><span class="hl-8">0</span><span class="hl-0">].</span><span class="hl-1">data</span><span class="hl-0">, </span><span class="hl-1">root</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Proof valid:'</span><span class="hl-0">, </span><span class="hl-1">isValid</span><span class="hl-0">);</span>
|
|
368
|
+
</code><button type="button">Copy</button></pre>
|
|
369
|
+
|
|
370
|
+
<p><strong><a href="media/README-4.md">Read Full Documentation →</a></strong></p>
|
|
371
|
+
<hr>
|
|
372
|
+
<a id="md:6-analytics-engine-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">6. Analytics Engine Module<a href="#md:6-analytics-engine-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="./src/analytics/README.md"><code>src/analytics/</code></a></p>
|
|
373
|
+
<p>Real-time metrics collection with AI-powered predictions.</p>
|
|
374
|
+
<a id="md:capabilities" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Capabilities<a href="#md:capabilities" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
375
|
+
<thead>
|
|
376
|
+
<tr>
|
|
377
|
+
<th>Category</th>
|
|
378
|
+
<th>Metrics</th>
|
|
379
|
+
<th>Analysis</th>
|
|
380
|
+
</tr>
|
|
381
|
+
</thead>
|
|
382
|
+
<tbody>
|
|
383
|
+
<tr>
|
|
384
|
+
<td><strong>Performance</strong></td>
|
|
385
|
+
<td>Requests/s, latency, throughput, error rate</td>
|
|
386
|
+
<td>Trend analysis, outlier detection</td>
|
|
387
|
+
</tr>
|
|
388
|
+
<tr>
|
|
389
|
+
<td><strong>Predictions</strong></td>
|
|
390
|
+
<td>Latency forecast, load prediction, error probability</td>
|
|
391
|
+
<td>ML-based time series</td>
|
|
392
|
+
</tr>
|
|
393
|
+
<tr>
|
|
394
|
+
<td><strong>Anomalies</strong></td>
|
|
395
|
+
<td>Spike detection, degradation alerts, pattern changes</td>
|
|
396
|
+
<td>Statistical anomaly detection</td>
|
|
397
|
+
</tr>
|
|
398
|
+
<tr>
|
|
399
|
+
<td><strong>Optimization</strong></td>
|
|
400
|
+
<td>Bottleneck identification, resource recommendations</td>
|
|
401
|
+
<td>Rule-based + ML insights</td>
|
|
402
|
+
</tr>
|
|
403
|
+
</tbody>
|
|
404
|
+
</table>
|
|
405
|
+
<a id="md:quick-example-5" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-5" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">AnalyticsEngine</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/analytics'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">analytics</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">AnalyticsEngine</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">enablePredictions:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableAnomalyDetection:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableTrendAnalysis:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">sampleRate:</span><span class="hl-0"> </span><span class="hl-8">0.1</span><span class="hl-0">, </span><span class="hl-5">// 10% sampling</span><br/><span class="hl-0"> </span><span class="hl-1">retentionDays:</span><span class="hl-0"> </span><span class="hl-8">7</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">alertThresholds:</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">errorRate:</span><span class="hl-0"> </span><span class="hl-8">0.05</span><span class="hl-0">, </span><span class="hl-5">// 5%</span><br/><span class="hl-0"> </span><span class="hl-1">latency:</span><span class="hl-0"> </span><span class="hl-8">1000</span><span class="hl-0">, </span><span class="hl-5">// 1s</span><br/><span class="hl-0"> </span><span class="hl-1">volumeSpike:</span><span class="hl-0"> </span><span class="hl-8">5</span><span class="hl-0">, </span><span class="hl-5">// 5x normal</span><br/><span class="hl-0"> },</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Record metrics</span><br/><span class="hl-1">analytics</span><span class="hl-0">.</span><span class="hl-3">recordMetrics</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">timestamp:</span><span class="hl-0"> </span><span class="hl-1">Date</span><span class="hl-0">.</span><span class="hl-3">now</span><span class="hl-0">(),</span><br/><span class="hl-0"> </span><span class="hl-1">requests:</span><span class="hl-0"> </span><span class="hl-8">1000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">errors:</span><span class="hl-0"> </span><span class="hl-8">10</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">latency:</span><span class="hl-0"> </span><span class="hl-8">150</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">throughput:</span><span class="hl-0"> </span><span class="hl-8">200</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">activeUsers:</span><span class="hl-0"> </span><span class="hl-8">50</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">gasUsed:</span><span class="hl-0"> </span><span class="hl-8">1_000_000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">blockHeight:</span><span class="hl-0"> </span><span class="hl-8">250_000_000</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Get predictions</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">predictions</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">analytics</span><span class="hl-0">.</span><span class="hl-3">generatePredictions</span><span class="hl-0">();</span><br/><span class="hl-1">predictions</span><span class="hl-0">.</span><span class="hl-3">forEach</span><span class="hl-0">(</span><span class="hl-1">pred</span><span class="hl-0"> </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`</span><span class="hl-7">${</span><span class="hl-1">pred</span><span class="hl-10">.</span><span class="hl-1">metric</span><span class="hl-7">}</span><span class="hl-4"> prediction:`</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">current:</span><span class="hl-0"> </span><span class="hl-1">pred</span><span class="hl-0">.</span><span class="hl-1">currentValue</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">predicted:</span><span class="hl-0"> </span><span class="hl-1">pred</span><span class="hl-0">.</span><span class="hl-1">predictedValue</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">confidence:</span><span class="hl-0"> (</span><span class="hl-1">pred</span><span class="hl-0">.</span><span class="hl-1">confidence</span><span class="hl-0"> * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">1</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">trend:</span><span class="hl-0"> </span><span class="hl-1">pred</span><span class="hl-0">.</span><span class="hl-1">trend</span><span class="hl-0">,</span><br/><span class="hl-0"> });</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Detect anomalies</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">anomalies</span><span class="hl-0"> = </span><span class="hl-1">analytics</span><span class="hl-0">.</span><span class="hl-3">detectAnomalies</span><span class="hl-0">();</span><br/><span class="hl-1">anomalies</span><span class="hl-0">.</span><span class="hl-3">forEach</span><span class="hl-0">(</span><span class="hl-1">anomaly</span><span class="hl-0"> </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Anomaly detected: </span><span class="hl-7">${</span><span class="hl-1">anomaly</span><span class="hl-10">.</span><span class="hl-1">metric</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">value:</span><span class="hl-0"> </span><span class="hl-1">anomaly</span><span class="hl-0">.</span><span class="hl-1">value</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">severity:</span><span class="hl-0"> </span><span class="hl-1">anomaly</span><span class="hl-0">.</span><span class="hl-1">severity</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">description:</span><span class="hl-0"> </span><span class="hl-1">anomaly</span><span class="hl-0">.</span><span class="hl-1">description</span><span class="hl-0">,</span><br/><span class="hl-0"> });</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Get optimization suggestions</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">suggestions</span><span class="hl-0"> = </span><span class="hl-1">analytics</span><span class="hl-0">.</span><span class="hl-3">getOptimizationSuggestions</span><span class="hl-0">();</span><br/><span class="hl-1">suggestions</span><span class="hl-0">.</span><span class="hl-3">forEach</span><span class="hl-0">(</span><span class="hl-1">suggestion</span><span class="hl-0"> </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`</span><span class="hl-7">${</span><span class="hl-1">suggestion</span><span class="hl-10">.</span><span class="hl-1">category</span><span class="hl-7">}</span><span class="hl-4">: </span><span class="hl-7">${</span><span class="hl-1">suggestion</span><span class="hl-10">.</span><span class="hl-1">suggestion</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Expected impact: </span><span class="hl-7">${</span><span class="hl-1">suggestion</span><span class="hl-10">.</span><span class="hl-1">impact</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span>
|
|
406
|
+
</code><button type="button">Copy</button></pre>
|
|
407
|
+
|
|
408
|
+
<p><strong><a href="./src/analytics/README.md">Read Full Documentation →</a></strong></p>
|
|
409
|
+
<hr>
|
|
410
|
+
<a id="md:7-rpc-methods-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">7. RPC Methods Module<a href="#md:7-rpc-methods-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-5.md"><code>src/methods/</code></a></p>
|
|
411
|
+
<p>Type-safe wrapper for 70+ Solana RPC methods.</p>
|
|
412
|
+
<a id="md:method-categories" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Method Categories<a href="#md:method-categories" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><table>
|
|
413
|
+
<thead>
|
|
414
|
+
<tr>
|
|
415
|
+
<th>Category</th>
|
|
416
|
+
<th>Methods</th>
|
|
417
|
+
<th>Description</th>
|
|
418
|
+
</tr>
|
|
419
|
+
</thead>
|
|
420
|
+
<tbody>
|
|
421
|
+
<tr>
|
|
422
|
+
<td><strong>Account</strong></td>
|
|
423
|
+
<td>getAccountInfo, getBalance, getMultipleAccounts, getProgramAccounts</td>
|
|
424
|
+
<td>Account data retrieval</td>
|
|
425
|
+
</tr>
|
|
426
|
+
<tr>
|
|
427
|
+
<td><strong>Block</strong></td>
|
|
428
|
+
<td>getBlock, getBlockHeight, getBlockTime, getBlocks, getBlockCommitment</td>
|
|
429
|
+
<td>Block information</td>
|
|
430
|
+
</tr>
|
|
431
|
+
<tr>
|
|
432
|
+
<td><strong>Transaction</strong></td>
|
|
433
|
+
<td>getTransaction, getSignatureStatuses, sendTransaction, simulateTransaction</td>
|
|
434
|
+
<td>Transaction operations</td>
|
|
435
|
+
</tr>
|
|
436
|
+
<tr>
|
|
437
|
+
<td><strong>Network</strong></td>
|
|
438
|
+
<td>getClusterNodes, getEpochInfo, getVersion, getHealth</td>
|
|
439
|
+
<td>Network status</td>
|
|
440
|
+
</tr>
|
|
441
|
+
<tr>
|
|
442
|
+
<td><strong>Token</strong></td>
|
|
443
|
+
<td>getTokenAccountBalance, getTokenSupply, getTokenAccountsByOwner, getTokenLargestAccounts</td>
|
|
444
|
+
<td>SPL Token operations</td>
|
|
445
|
+
</tr>
|
|
446
|
+
</tbody>
|
|
447
|
+
</table>
|
|
448
|
+
<a id="md:quick-example-6" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Quick Example<a href="#md:quick-example-6" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SolanaRpcMethods</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/methods'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">rpc</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SolanaRpcMethods</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Account methods</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">accountInfo</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getAccountInfo</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">commitment:</span><span class="hl-0"> </span><span class="hl-4">'confirmed'</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getBalance</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">, </span><span class="hl-4">'confirmed'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Balance:'</span><span class="hl-0">, </span><span class="hl-1">balance</span><span class="hl-0"> / </span><span class="hl-8">1e9</span><span class="hl-0">, </span><span class="hl-4">'SOL'</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Block methods</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">blockHeight</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getBlockHeight</span><span class="hl-0">(</span><span class="hl-4">'finalized'</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">block</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getBlock</span><span class="hl-0">(</span><span class="hl-1">blockHeight</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">transactionDetails:</span><span class="hl-0"> </span><span class="hl-4">'full'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">rewards:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">maxSupportedTransactionVersion:</span><span class="hl-0"> </span><span class="hl-8">0</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Transaction methods</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">signature</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">sendTransaction</span><span class="hl-0">(</span><span class="hl-1">signedTxBase64</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">skipPreflight:</span><span class="hl-0"> </span><span class="hl-7">false</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">preflightCommitment:</span><span class="hl-0"> </span><span class="hl-4">'confirmed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">maxRetries:</span><span class="hl-0"> </span><span class="hl-8">3</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">statuses</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getSignatureStatuses</span><span class="hl-0">([</span><span class="hl-1">signature</span><span class="hl-0">]);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Transaction status:'</span><span class="hl-0">, </span><span class="hl-1">statuses</span><span class="hl-0">[</span><span class="hl-8">0</span><span class="hl-0">]);</span><br/><br/><span class="hl-5">// Token methods</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">tokenAccounts</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getTokenAccountsByOwner</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-4">'ownerAddress'</span><span class="hl-0">,</span><br/><span class="hl-0"> { </span><span class="hl-1">programId:</span><span class="hl-0"> </span><span class="hl-4">'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'</span><span class="hl-0"> },</span><br/><span class="hl-0"> { </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0"> }</span><br/><span class="hl-0">);</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">tokenSupply</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getTokenSupply</span><span class="hl-0">(</span><span class="hl-4">'mintAddress'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Total supply:'</span><span class="hl-0">, </span><span class="hl-1">tokenSupply</span><span class="hl-0">.</span><span class="hl-1">value</span><span class="hl-0">.</span><span class="hl-1">uiAmount</span><span class="hl-0">);</span>
|
|
449
|
+
</code><button type="button">Copy</button></pre>
|
|
450
|
+
|
|
451
|
+
<p><strong><a href="media/README-5.md">Read Full Documentation →</a></strong></p>
|
|
452
|
+
<hr>
|
|
453
|
+
<a id="md:8-utils-module" class="tsd-anchor"></a><h3 class="tsd-anchor-link">8. Utils Module<a href="#md:8-utils-module" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Location:</strong> <a href="media/README-6.md"><code>src/utils/</code></a></p>
|
|
454
|
+
<p>Utility functions and constants for common operations.</p>
|
|
455
|
+
<a id="md:components-2" class="tsd-anchor"></a><h4 class="tsd-anchor-link">Components<a href="#md:components-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">// Constants</span><br/><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SynapseConstants</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/utils'</span><span class="hl-0">;</span><br/><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Base URL:'</span><span class="hl-0">, </span><span class="hl-1">SynapseConstants</span><span class="hl-0">.</span><span class="hl-2">BASE_URL</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'WebSocket URL:'</span><span class="hl-0">, </span><span class="hl-1">SynapseConstants</span><span class="hl-0">.</span><span class="hl-2">WEBSOCKET_URL</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Default timeout:'</span><span class="hl-0">, </span><span class="hl-1">SynapseConstants</span><span class="hl-0">.</span><span class="hl-2">DEFAULT_TIMEOUT</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// Helpers</span><br/><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SynapseUtils</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/utils'</span><span class="hl-0">;</span><br/><br/><span class="hl-5">// Format lamports to SOL</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">sol</span><span class="hl-0"> = </span><span class="hl-1">SynapseUtils</span><span class="hl-0">.</span><span class="hl-3">lamportsToSol</span><span class="hl-0">(</span><span class="hl-8">1_000_000_000</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Amount:'</span><span class="hl-0">, </span><span class="hl-1">sol</span><span class="hl-0">, </span><span class="hl-4">'SOL'</span><span class="hl-0">); </span><span class="hl-5">// 1 SOL</span><br/><br/><span class="hl-5">// Parse SOL to lamports</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">lamports</span><span class="hl-0"> = </span><span class="hl-1">SynapseUtils</span><span class="hl-0">.</span><span class="hl-3">solToLamports</span><span class="hl-0">(</span><span class="hl-8">1.5</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Lamports:'</span><span class="hl-0">, </span><span class="hl-1">lamports</span><span class="hl-0">); </span><span class="hl-5">// 1500000000</span><br/><br/><span class="hl-5">// Validate Solana address</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">isValid</span><span class="hl-0"> = </span><span class="hl-1">SynapseUtils</span><span class="hl-0">.</span><span class="hl-3">isValidAddress</span><span class="hl-0">(</span><span class="hl-4">'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Valid address:'</span><span class="hl-0">, </span><span class="hl-1">isValid</span><span class="hl-0">); </span><span class="hl-5">// true</span><br/><br/><span class="hl-5">// Format transaction signature</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">shortSig</span><span class="hl-0"> = </span><span class="hl-1">SynapseUtils</span><span class="hl-0">.</span><span class="hl-3">shortenSignature</span><span class="hl-0">(</span><span class="hl-4">'5j7s6N...'</span><span class="hl-0">, </span><span class="hl-8">8</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Short signature:'</span><span class="hl-0">, </span><span class="hl-1">shortSig</span><span class="hl-0">); </span><span class="hl-5">// 5j7s6N...(shortened)</span>
|
|
456
|
+
</code><button type="button">Copy</button></pre>
|
|
457
|
+
|
|
458
|
+
<p><strong><a href="media/README-6.md">Read Full Documentation →</a></strong></p>
|
|
459
|
+
<hr>
|
|
460
|
+
<a id="md:performance-benchmarks" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Performance Benchmarks<a href="#md:performance-benchmarks" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:latency-metrics" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Latency Metrics<a href="#md:latency-metrics" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
461
|
+
<thead>
|
|
462
|
+
<tr>
|
|
463
|
+
<th>Operation</th>
|
|
464
|
+
<th>P50</th>
|
|
465
|
+
<th>P95</th>
|
|
466
|
+
<th>P99</th>
|
|
467
|
+
<th>Throughput</th>
|
|
468
|
+
</tr>
|
|
469
|
+
</thead>
|
|
470
|
+
<tbody>
|
|
471
|
+
<tr>
|
|
472
|
+
<td>Single RPC call (cached)</td>
|
|
473
|
+
<td><1ms</td>
|
|
474
|
+
<td><2ms</td>
|
|
475
|
+
<td><5ms</td>
|
|
476
|
+
<td>1M req/s</td>
|
|
477
|
+
</tr>
|
|
478
|
+
<tr>
|
|
479
|
+
<td>Single RPC call (uncached)</td>
|
|
480
|
+
<td>8ms</td>
|
|
481
|
+
<td>15ms</td>
|
|
482
|
+
<td>25ms</td>
|
|
483
|
+
<td>10k req/s</td>
|
|
484
|
+
</tr>
|
|
485
|
+
<tr>
|
|
486
|
+
<td>Batch RPC call (10 calls)</td>
|
|
487
|
+
<td>25ms</td>
|
|
488
|
+
<td>45ms</td>
|
|
489
|
+
<td>80ms</td>
|
|
490
|
+
<td>5k batch/s</td>
|
|
491
|
+
</tr>
|
|
492
|
+
<tr>
|
|
493
|
+
<td>WebSocket message delivery</td>
|
|
494
|
+
<td><1ms</td>
|
|
495
|
+
<td><3ms</td>
|
|
496
|
+
<td><10ms</td>
|
|
497
|
+
<td>100k msg/s</td>
|
|
498
|
+
</tr>
|
|
499
|
+
<tr>
|
|
500
|
+
<td>Cache hit (L1)</td>
|
|
501
|
+
<td><0.5ms</td>
|
|
502
|
+
<td><1ms</td>
|
|
503
|
+
<td><2ms</td>
|
|
504
|
+
<td>1M ops/s</td>
|
|
505
|
+
</tr>
|
|
506
|
+
<tr>
|
|
507
|
+
<td>Cache hit (L2)</td>
|
|
508
|
+
<td><1ms</td>
|
|
509
|
+
<td><2ms</td>
|
|
510
|
+
<td><5ms</td>
|
|
511
|
+
<td>500k ops/s</td>
|
|
512
|
+
</tr>
|
|
513
|
+
<tr>
|
|
514
|
+
<td>Cache hit (L3 Redis)</td>
|
|
515
|
+
<td>2ms</td>
|
|
516
|
+
<td>8ms</td>
|
|
517
|
+
<td>15ms</td>
|
|
518
|
+
<td>50k ops/s</td>
|
|
519
|
+
</tr>
|
|
520
|
+
<tr>
|
|
521
|
+
<td>Jupiter swap quote</td>
|
|
522
|
+
<td>150ms</td>
|
|
523
|
+
<td>250ms</td>
|
|
524
|
+
<td>400ms</td>
|
|
525
|
+
<td>500 req/s</td>
|
|
526
|
+
</tr>
|
|
527
|
+
<tr>
|
|
528
|
+
<td>NFT metadata fetch (cached)</td>
|
|
529
|
+
<td>5ms</td>
|
|
530
|
+
<td>15ms</td>
|
|
531
|
+
<td>30ms</td>
|
|
532
|
+
<td>10k req/s</td>
|
|
533
|
+
</tr>
|
|
534
|
+
<tr>
|
|
535
|
+
<td>Circuit breaker overhead</td>
|
|
536
|
+
<td><0.1ms</td>
|
|
537
|
+
<td><0.5ms</td>
|
|
538
|
+
<td><1ms</td>
|
|
539
|
+
<td>1M ops/s</td>
|
|
540
|
+
</tr>
|
|
541
|
+
</tbody>
|
|
542
|
+
</table>
|
|
543
|
+
<a id="md:load-testing-results" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Load Testing Results<a href="#md:load-testing-results" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code><span class="hl-1">Test</span><span class="hl-0"> </span><span class="hl-11">Configuration</span><span class="hl-0">:</span><br/><span class="hl-0">- </span><span class="hl-11">Duration</span><span class="hl-0">: </span><span class="hl-8">5</span><span class="hl-0"> </span><span class="hl-1">minutes</span><br/><span class="hl-0">- </span><span class="hl-1">Concurrent</span><span class="hl-0"> </span><span class="hl-11">users</span><span class="hl-0">: </span><span class="hl-8">1000</span><br/><span class="hl-0">- </span><span class="hl-2">RPC</span><span class="hl-0"> </span><span class="hl-11">endpoints</span><span class="hl-0">: </span><span class="hl-8">3</span><span class="hl-0"> (</span><span class="hl-1">load</span><span class="hl-0"> </span><span class="hl-1">balanced</span><span class="hl-0">)</span><br/><span class="hl-0">- </span><span class="hl-11">Operations</span><span class="hl-0">: </span><span class="hl-3">Mixed</span><span class="hl-0"> (</span><span class="hl-8">50</span><span class="hl-0">% </span><span class="hl-1">reads</span><span class="hl-0">, </span><span class="hl-8">30</span><span class="hl-0">% </span><span class="hl-1">writes</span><span class="hl-0">, </span><span class="hl-8">20</span><span class="hl-0">% </span><span class="hl-1">batch</span><span class="hl-0">)</span><br/><br/><span class="hl-11">Results</span><span class="hl-0">:</span><br/><span class="hl-0">✓ </span><span class="hl-1">Total</span><span class="hl-0"> </span><span class="hl-11">requests</span><span class="hl-0">: </span><span class="hl-8">3</span><span class="hl-0">,</span><span class="hl-8">315</span><span class="hl-0">,</span><span class="hl-8">000</span><br/><span class="hl-0">✓ </span><span class="hl-11">Successful</span><span class="hl-0">: </span><span class="hl-8">3</span><span class="hl-0">,</span><span class="hl-8">312</span><span class="hl-0">,</span><span class="hl-8">450</span><span class="hl-0"> (</span><span class="hl-8">99.92</span><span class="hl-0">%)</span><br/><span class="hl-0">✓ </span><span class="hl-11">Failed</span><span class="hl-0">: </span><span class="hl-8">2</span><span class="hl-0">,</span><span class="hl-8">550</span><span class="hl-0"> (</span><span class="hl-8">0.08</span><span class="hl-0">%)</span><br/><span class="hl-0">✓ </span><span class="hl-1">Average</span><span class="hl-0"> </span><span class="hl-11">RPS</span><span class="hl-0">: </span><span class="hl-8">11</span><span class="hl-0">,</span><span class="hl-8">050</span><br/><span class="hl-0">✓ </span><span class="hl-1">Peak</span><span class="hl-0"> </span><span class="hl-11">RPS</span><span class="hl-0">: </span><span class="hl-8">15</span><span class="hl-0">,</span><span class="hl-8">230</span><br/><span class="hl-0">✓ </span><span class="hl-1">Average</span><span class="hl-0"> </span><span class="hl-11">latency</span><span class="hl-0">: 12.5</span><span class="hl-1">ms</span><br/><span class="hl-0">✓ </span><span class="hl-2">P95</span><span class="hl-0"> </span><span class="hl-11">latency</span><span class="hl-0">: 28</span><span class="hl-1">ms</span><br/><span class="hl-0">✓ </span><span class="hl-2">P99</span><span class="hl-0"> </span><span class="hl-11">latency</span><span class="hl-0">: 45</span><span class="hl-1">ms</span><br/><span class="hl-0">✓ </span><span class="hl-1">Cache</span><span class="hl-0"> </span><span class="hl-1">hit</span><span class="hl-0"> </span><span class="hl-11">rate</span><span class="hl-0">: </span><span class="hl-8">94.3</span><span class="hl-0">%</span><br/><span class="hl-0">✓ </span><span class="hl-1">Circuit</span><span class="hl-0"> </span><span class="hl-1">breaker</span><span class="hl-0"> </span><span class="hl-11">trips</span><span class="hl-0">: </span><span class="hl-8">3</span><br/><span class="hl-0">✓ </span><span class="hl-1">Endpoint</span><span class="hl-0"> </span><span class="hl-11">failovers</span><span class="hl-0">: </span><span class="hl-8">12</span>
|
|
544
|
+
</code><button>Copy</button></pre>
|
|
545
|
+
|
|
546
|
+
<hr>
|
|
547
|
+
<a id="md:type-system" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Type System<a href="#md:type-system" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:core-types" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Core Types<a href="#md:core-types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-5">// Client configuration</span><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">SynapseConfig</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0"> | </span><span class="hl-9">string</span><span class="hl-0">[];</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey</span><span class="hl-0">?: </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">timeout</span><span class="hl-0">?: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">debug</span><span class="hl-0">?: </span><span class="hl-9">boolean</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// RPC request/response</span><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">RpcRequest</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">jsonrpc</span><span class="hl-0">: </span><span class="hl-4">'2.0'</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">id</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0"> | </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">method</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">params</span><span class="hl-0">?: </span><span class="hl-9">any</span><span class="hl-0">[];</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">RpcResponse</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0"> = </span><span class="hl-9">any</span><span class="hl-0">> {</span><br/><span class="hl-0"> </span><span class="hl-1">jsonrpc</span><span class="hl-0">: </span><span class="hl-4">'2.0'</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">id</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0"> | </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">result</span><span class="hl-0">?: </span><span class="hl-9">T</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">?: </span><span class="hl-9">RpcError</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">RpcError</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">code</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">data</span><span class="hl-0">?: </span><span class="hl-9">any</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// Request options</span><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">RequestOptions</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">commitment</span><span class="hl-0">?: </span><span class="hl-4">'processed'</span><span class="hl-0"> | </span><span class="hl-4">'confirmed'</span><span class="hl-0"> | </span><span class="hl-4">'finalized'</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">encoding</span><span class="hl-0">?: </span><span class="hl-4">'base58'</span><span class="hl-0"> | </span><span class="hl-4">'base64'</span><span class="hl-0"> | </span><span class="hl-4">'base64+zstd'</span><span class="hl-0"> | </span><span class="hl-4">'jsonParsed'</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">maxSupportedTransactionVersion</span><span class="hl-0">?: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">skipPreflight</span><span class="hl-0">?: </span><span class="hl-9">boolean</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">preflightCommitment</span><span class="hl-0">?: </span><span class="hl-4">'processed'</span><span class="hl-0"> | </span><span class="hl-4">'confirmed'</span><span class="hl-0"> | </span><span class="hl-4">'finalized'</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// Client statistics</span><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">ClientStats</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">requestCount</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">errorCount</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">averageLatency</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">cacheHitRate</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">uptime</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">activeConnections</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">pendingRequests</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// Account info</span><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">interface</span><span class="hl-0"> </span><span class="hl-9">AccountInfo</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">lamports</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">owner</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">data</span><span class="hl-0">: </span><span class="hl-9">Buffer</span><span class="hl-0"> | </span><span class="hl-9">string</span><span class="hl-0"> | </span><span class="hl-9">any</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">executable</span><span class="hl-0">: </span><span class="hl-9">boolean</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-1">rentEpoch</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0">;</span><br/><span class="hl-0">}</span>
|
|
548
|
+
</code><button type="button">Copy</button></pre>
|
|
549
|
+
|
|
550
|
+
<a id="md:error-types" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Error Types<a href="#md:error-types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0"> </span><span class="hl-7">extends</span><span class="hl-0"> </span><span class="hl-9">Error</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">constructor</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-7">public</span><span class="hl-0"> </span><span class="hl-1">code</span><span class="hl-0">?: </span><span class="hl-9">number</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-7">public</span><span class="hl-0"> </span><span class="hl-1">data</span><span class="hl-0">?: </span><span class="hl-9">any</span><br/><span class="hl-0"> ) {</span><br/><span class="hl-0"> </span><span class="hl-7">super</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0"> = </span><span class="hl-4">'SynapseError'</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">NetworkError</span><span class="hl-0"> </span><span class="hl-7">extends</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">constructor</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-7">public</span><span class="hl-0"> </span><span class="hl-1">statusCode</span><span class="hl-0">?: </span><span class="hl-9">number</span><br/><span class="hl-0"> ) {</span><br/><span class="hl-0"> </span><span class="hl-7">super</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">, -</span><span class="hl-8">32000</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0"> = </span><span class="hl-4">'NetworkError'</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">TimeoutError</span><span class="hl-0"> </span><span class="hl-7">extends</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">constructor</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-7">super</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">, -</span><span class="hl-8">32001</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0"> = </span><span class="hl-4">'TimeoutError'</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">ValidationError</span><span class="hl-0"> </span><span class="hl-7">extends</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">constructor</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-7">public</span><span class="hl-0"> </span><span class="hl-1">field</span><span class="hl-0">?: </span><span class="hl-9">string</span><br/><span class="hl-0"> ) {</span><br/><span class="hl-0"> </span><span class="hl-7">super</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">, -</span><span class="hl-8">32602</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0"> = </span><span class="hl-4">'ValidationError'</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-6">export</span><span class="hl-0"> </span><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">CircuitBreakerError</span><span class="hl-0"> </span><span class="hl-7">extends</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">constructor</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-7">super</span><span class="hl-0">(</span><span class="hl-1">message</span><span class="hl-0">, -</span><span class="hl-8">32003</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">name</span><span class="hl-0"> = </span><span class="hl-4">'CircuitBreakerError'</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span>
|
|
551
|
+
</code><button type="button">Copy</button></pre>
|
|
552
|
+
|
|
553
|
+
<hr>
|
|
554
|
+
<a id="md:best-practices" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Best Practices<a href="#md:best-practices" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:1-connection-management" class="tsd-anchor"></a><h3 class="tsd-anchor-link">1. Connection Management<a href="#md:1-connection-management" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-5">// ✅ Recommended: Singleton pattern</span><br/><span class="hl-7">class</span><span class="hl-0"> </span><span class="hl-9">SynapseService</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">private</span><span class="hl-0"> </span><span class="hl-7">static</span><span class="hl-0"> </span><span class="hl-1">instance</span><span class="hl-0">: </span><span class="hl-9">SynapseClient</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-7">static</span><span class="hl-0"> </span><span class="hl-3">getInstance</span><span class="hl-0">(): </span><span class="hl-9">SynapseClient</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (!</span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">instance</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">instance</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_ENDPOINT</span><span class="hl-0">!,</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_API_KEY</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timeout:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0"> });</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-7">this</span><span class="hl-0">.</span><span class="hl-1">instance</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// Usage</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-1">SynapseService</span><span class="hl-0">.</span><span class="hl-3">getInstance</span><span class="hl-0">();</span><br/><br/><span class="hl-5">// ❌ Not recommended: New client per request</span><br/><span class="hl-7">function</span><span class="hl-0"> </span><span class="hl-3">getBalance</span><span class="hl-0">(</span><span class="hl-1">address</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({ </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-4">'...'</span><span class="hl-0"> }); </span><span class="hl-5">// Avoid this</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-1">address</span><span class="hl-0">]);</span><br/><span class="hl-0">}</span>
|
|
555
|
+
</code><button type="button">Copy</button></pre>
|
|
556
|
+
|
|
557
|
+
<a id="md:2-error-handling" class="tsd-anchor"></a><h3 class="tsd-anchor-link">2. Error Handling<a href="#md:2-error-handling" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SynapseError</span><span class="hl-0">, </span><span class="hl-1">NetworkError</span><span class="hl-0">, </span><span class="hl-1">TimeoutError</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">async</span><span class="hl-0"> </span><span class="hl-7">function</span><span class="hl-0"> </span><span class="hl-3">robustRpcCall</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">>(</span><br/><span class="hl-0"> </span><span class="hl-1">method</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">params</span><span class="hl-0">: </span><span class="hl-9">any</span><span class="hl-0">[],</span><br/><span class="hl-0"> </span><span class="hl-1">maxRetries</span><span class="hl-0">: </span><span class="hl-9">number</span><span class="hl-0"> = </span><span class="hl-8">3</span><br/><span class="hl-0">): </span><span class="hl-9">Promise</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">> {</span><br/><span class="hl-0"> </span><span class="hl-6">for</span><span class="hl-0"> (</span><span class="hl-7">let</span><span class="hl-0"> </span><span class="hl-1">attempt</span><span class="hl-0"> = </span><span class="hl-8">1</span><span class="hl-0">; </span><span class="hl-1">attempt</span><span class="hl-0"> <= </span><span class="hl-1">maxRetries</span><span class="hl-0">; </span><span class="hl-1">attempt</span><span class="hl-0">++) {</span><br/><span class="hl-0"> </span><span class="hl-6">try</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">>(</span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">params</span><span class="hl-0">);</span><br/><span class="hl-0"> } </span><span class="hl-6">catch</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">TimeoutError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">warn</span><span class="hl-0">(</span><span class="hl-4">`Timeout on attempt </span><span class="hl-7">${</span><span class="hl-1">attempt</span><span class="hl-7">}</span><span class="hl-4">/</span><span class="hl-7">${</span><span class="hl-1">maxRetries</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">attempt</span><span class="hl-0"> === </span><span class="hl-1">maxRetries</span><span class="hl-0">) </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-3">sleep</span><span class="hl-0">(</span><span class="hl-8">1000</span><span class="hl-0"> * </span><span class="hl-1">attempt</span><span class="hl-0">); </span><span class="hl-5">// Exponential backoff</span><br/><span class="hl-0"> } </span><span class="hl-6">else</span><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">NetworkError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Network error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">statusCode</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">attempt</span><span class="hl-0"> === </span><span class="hl-1">maxRetries</span><span class="hl-0">) </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-3">sleep</span><span class="hl-0">(</span><span class="hl-8">2000</span><span class="hl-0"> * </span><span class="hl-1">attempt</span><span class="hl-0">);</span><br/><span class="hl-0"> } </span><span class="hl-6">else</span><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'RPC error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">code</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">; </span><span class="hl-5">// Don't retry RPC errors</span><br/><span class="hl-0"> } </span><span class="hl-6">else</span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">; </span><span class="hl-5">// Unknown error</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">Error</span><span class="hl-0">(</span><span class="hl-4">'Max retries exceeded'</span><span class="hl-0">);</span><br/><span class="hl-0">}</span>
|
|
558
|
+
</code><button type="button">Copy</button></pre>
|
|
559
|
+
|
|
560
|
+
<a id="md:3-batch-operations" class="tsd-anchor"></a><h3 class="tsd-anchor-link">3. Batch Operations<a href="#md:3-batch-operations" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-5">// ✅ Efficient: Batch related calls</span><br/><span class="hl-7">const</span><span class="hl-0"> [</span><span class="hl-2">balance1</span><span class="hl-0">, </span><span class="hl-2">balance2</span><span class="hl-0">, </span><span class="hl-2">balance3</span><span class="hl-0">, </span><span class="hl-2">accountInfo</span><span class="hl-0">] = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-9">Promise</span><span class="hl-0">.</span><span class="hl-3">all</span><span class="hl-0">([</span><br/><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address1'</span><span class="hl-0">]),</span><br/><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address2'</span><span class="hl-0">]),</span><br/><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address3'</span><span class="hl-0">]),</span><br/><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getAccountInfo'</span><span class="hl-0">, [</span><span class="hl-4">'address4'</span><span class="hl-0">]),</span><br/><span class="hl-0">]);</span><br/><br/><span class="hl-5">// Or use batch method</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">results</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">batch</span><span class="hl-0">([</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getBalance'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address1'</span><span class="hl-0">] },</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getBalance'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address2'</span><span class="hl-0">] },</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getBalance'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address3'</span><span class="hl-0">] },</span><br/><span class="hl-0"> { </span><span class="hl-1">method:</span><span class="hl-0"> </span><span class="hl-4">'getAccountInfo'</span><span class="hl-0">, </span><span class="hl-1">params:</span><span class="hl-0"> [</span><span class="hl-4">'address4'</span><span class="hl-0">] },</span><br/><span class="hl-0">]);</span><br/><br/><span class="hl-5">// ❌ Inefficient: Sequential calls</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance1</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address1'</span><span class="hl-0">]);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance2</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address2'</span><span class="hl-0">]);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance3</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address3'</span><span class="hl-0">]);</span>
|
|
561
|
+
</code><button type="button">Copy</button></pre>
|
|
562
|
+
|
|
563
|
+
<a id="md:4-caching-strategy" class="tsd-anchor"></a><h3 class="tsd-anchor-link">4. Caching Strategy<a href="#md:4-caching-strategy" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SmartCaching</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/advanced'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cache</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SmartCaching</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">maxSize:</span><span class="hl-0"> </span><span class="hl-8">10000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableL2:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enablePredictive:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-7">async</span><span class="hl-0"> </span><span class="hl-7">function</span><span class="hl-0"> </span><span class="hl-3">getAccountInfoCached</span><span class="hl-0">(</span><span class="hl-1">address</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">): </span><span class="hl-9">Promise</span><span class="hl-0"><</span><span class="hl-9">AccountInfo</span><span class="hl-0">> {</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cacheKey</span><span class="hl-0"> = </span><span class="hl-4">`account:</span><span class="hl-7">${</span><span class="hl-1">address</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-5">// Check cache first</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cached</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">get</span><span class="hl-0"><</span><span class="hl-9">AccountInfo</span><span class="hl-0">>(</span><span class="hl-1">cacheKey</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">cached</span><span class="hl-0">) </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">cached</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-5">// Fetch from RPC</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">accountInfo</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0"><</span><span class="hl-9">AccountInfo</span><span class="hl-0">>(</span><span class="hl-4">'getAccountInfo'</span><span class="hl-0">, [</span><span class="hl-1">address</span><span class="hl-0">]);</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-5">// Store in cache with appropriate TTL</span><br/><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">set</span><span class="hl-0">(</span><span class="hl-1">cacheKey</span><span class="hl-0">, </span><span class="hl-1">accountInfo</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">ttl:</span><span class="hl-0"> </span><span class="hl-8">60000</span><span class="hl-0">, </span><span class="hl-5">// 1 minute for account data</span><br/><span class="hl-0"> </span><span class="hl-1">compress:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">tags:</span><span class="hl-0"> [</span><span class="hl-4">`user:</span><span class="hl-7">${</span><span class="hl-1">address</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">],</span><br/><span class="hl-0"> });</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">accountInfo</span><span class="hl-0">;</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// Different TTL strategies</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">TTL_STRATEGIES</span><span class="hl-0"> = {</span><br/><span class="hl-0"> </span><span class="hl-1">static:</span><span class="hl-0"> </span><span class="hl-8">3600000</span><span class="hl-0">, </span><span class="hl-5">// 1 hour (e.g., token metadata)</span><br/><span class="hl-0"> </span><span class="hl-1">semi_dynamic:</span><span class="hl-0"> </span><span class="hl-8">300000</span><span class="hl-0">, </span><span class="hl-5">// 5 minutes (e.g., token prices)</span><br/><span class="hl-0"> </span><span class="hl-1">dynamic:</span><span class="hl-0"> </span><span class="hl-8">60000</span><span class="hl-0">, </span><span class="hl-5">// 1 minute (e.g., account balances)</span><br/><span class="hl-0"> </span><span class="hl-1">realtime:</span><span class="hl-0"> </span><span class="hl-8">5000</span><span class="hl-0">, </span><span class="hl-5">// 5 seconds (e.g., slot info)</span><br/><span class="hl-0">};</span>
|
|
564
|
+
</code><button type="button">Copy</button></pre>
|
|
565
|
+
|
|
566
|
+
<a id="md:5-circuit-breaker-integration" class="tsd-anchor"></a><h3 class="tsd-anchor-link">5. Circuit Breaker Integration<a href="#md:5-circuit-breaker-integration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">CircuitBreaker</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/advanced'</span><span class="hl-0">;</span><br/><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">breaker</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">CircuitBreaker</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">failureThreshold:</span><span class="hl-0"> </span><span class="hl-8">5</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timeout:</span><span class="hl-0"> </span><span class="hl-8">60000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">retryInterval:</span><span class="hl-0"> </span><span class="hl-8">30000</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">enableFallback:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">,</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-7">async</span><span class="hl-0"> </span><span class="hl-7">function</span><span class="hl-0"> </span><span class="hl-3">protectedRpcCall</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">>(</span><br/><span class="hl-0"> </span><span class="hl-1">method</span><span class="hl-0">: </span><span class="hl-9">string</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">params</span><span class="hl-0">: </span><span class="hl-9">any</span><span class="hl-0">[]</span><br/><span class="hl-0">): </span><span class="hl-9">Promise</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">> {</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">breaker</span><span class="hl-0">.</span><span class="hl-3">execute</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-5">// Primary operation</span><br/><span class="hl-0"> </span><span class="hl-7">async</span><span class="hl-0"> () </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">>(</span><span class="hl-1">method</span><span class="hl-0">, </span><span class="hl-1">params</span><span class="hl-0">);</span><br/><span class="hl-0"> },</span><br/><span class="hl-0"> </span><span class="hl-5">// Fallback operation</span><br/><span class="hl-0"> </span><span class="hl-7">async</span><span class="hl-0"> () </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">// Try cache</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cacheKey</span><span class="hl-0"> = </span><span class="hl-4">`</span><span class="hl-7">${</span><span class="hl-1">method</span><span class="hl-7">}</span><span class="hl-4">:</span><span class="hl-7">${</span><span class="hl-2">JSON</span><span class="hl-10">.</span><span class="hl-3">stringify</span><span class="hl-10">(</span><span class="hl-1">params</span><span class="hl-10">)</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">;</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">cached</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">cache</span><span class="hl-0">.</span><span class="hl-3">get</span><span class="hl-0"><</span><span class="hl-9">T</span><span class="hl-0">>(</span><span class="hl-1">cacheKey</span><span class="hl-0">, { </span><span class="hl-1">allowStale:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0"> });</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">cached</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">warn</span><span class="hl-0">(</span><span class="hl-4">'Using stale cache due to circuit breaker open'</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-6">return</span><span class="hl-0"> </span><span class="hl-1">cached</span><span class="hl-0">;</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-6">throw</span><span class="hl-0"> </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">CircuitBreakerError</span><span class="hl-0">(</span><span class="hl-4">'Circuit breaker open and no fallback available'</span><span class="hl-0">);</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> );</span><br/><span class="hl-0">}</span>
|
|
567
|
+
</code><button type="button">Copy</button></pre>
|
|
568
|
+
|
|
569
|
+
<a id="md:6-monitoring-and-observability" class="tsd-anchor"></a><h3 class="tsd-anchor-link">6. Monitoring and Observability<a href="#md:6-monitoring-and-observability" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-5">// Metrics collection</span><br/><span class="hl-3">setInterval</span><span class="hl-0">(() </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">stats</span><span class="hl-0"> = </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">getStats</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-5">// Log metrics</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Client Metrics:'</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">rps:</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0"> / ((</span><span class="hl-1">Date</span><span class="hl-0">.</span><span class="hl-3">now</span><span class="hl-0">() - </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">uptime</span><span class="hl-0">) / </span><span class="hl-8">1000</span><span class="hl-0">)).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">),</span><br/><span class="hl-0"> </span><span class="hl-1">errorRate:</span><span class="hl-0"> ((</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">errorCount</span><span class="hl-0"> / </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0">) * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">avgLatency:</span><span class="hl-0"> </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0">.</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'ms'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">cacheHitRate:</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">cacheHitRate</span><span class="hl-0"> * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">,</span><br/><span class="hl-0"> });</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-5">// Alert on anomalies</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0"> > </span><span class="hl-8">1000</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">warn</span><span class="hl-0">(</span><span class="hl-4">'High latency detected:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0">);</span><br/><span class="hl-0"> }</span><br/><span class="hl-0"> </span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">errorCount</span><span class="hl-0"> / </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0"> > </span><span class="hl-8">0.05</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'High error rate:'</span><span class="hl-0">, ((</span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">errorCount</span><span class="hl-0"> / </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">requestCount</span><span class="hl-0">) * </span><span class="hl-8">100</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">'%'</span><span class="hl-0">);</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}, </span><span class="hl-8">60000</span><span class="hl-0">); </span><span class="hl-5">// Every minute</span><br/><br/><span class="hl-5">// Event-based monitoring</span><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'error'</span><span class="hl-0">, (</span><span class="hl-1">error</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">// Send to monitoring service</span><br/><span class="hl-0"> </span><span class="hl-3">sendToMonitoring</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">type:</span><span class="hl-0"> </span><span class="hl-4">'rpc_error'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">error:</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">code:</span><span class="hl-0"> </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">code</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">timestamp:</span><span class="hl-0"> </span><span class="hl-1">Date</span><span class="hl-0">.</span><span class="hl-3">now</span><span class="hl-0">(),</span><br/><span class="hl-0"> });</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'endpoint-rotate'</span><span class="hl-0">, ({ </span><span class="hl-1">reason</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-5">// Track endpoint health</span><br/><span class="hl-0"> </span><span class="hl-1">metrics</span><span class="hl-0">.</span><span class="hl-3">increment</span><span class="hl-0">(</span><span class="hl-4">'endpoint.rotation'</span><span class="hl-0">, { </span><span class="hl-1">reason</span><span class="hl-0"> });</span><br/><span class="hl-0">});</span>
|
|
570
|
+
</code><button type="button">Copy</button></pre>
|
|
571
|
+
|
|
572
|
+
<hr>
|
|
573
|
+
<a id="md:environment-variables" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Environment Variables<a href="#md:environment-variables" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code class="bash"><span class="hl-5"># Required</span><br/><span class="hl-1">SYNAPSE_ENDPOINT</span><span class="hl-0">=</span><span class="hl-4">https://your-synapse-gateway.com</span><br/><span class="hl-1">SYNAPSE_WS_ENDPOINT</span><span class="hl-0">=</span><span class="hl-4">wss://your-synapse-gateway.com</span><br/><span class="hl-1">SYNAPSE_API_KEY</span><span class="hl-0">=</span><span class="hl-4">your_api_key_here</span><br/><br/><span class="hl-5"># Optional - Client Configuration</span><br/><span class="hl-1">SYNAPSE_TIMEOUT</span><span class="hl-0">=</span><span class="hl-4">30000</span><br/><span class="hl-1">SYNAPSE_DEBUG</span><span class="hl-0">=</span><span class="hl-4">false</span><br/><span class="hl-1">SYNAPSE_MAX_RETRIES</span><span class="hl-0">=</span><span class="hl-4">3</span><br/><span class="hl-1">SYNAPSE_RETRY_DELAY</span><span class="hl-0">=</span><span class="hl-4">1000</span><br/><br/><span class="hl-5"># Optional - Advanced Features</span><br/><span class="hl-1">SYNAPSE_ENABLE_CACHE</span><span class="hl-0">=</span><span class="hl-4">true</span><br/><span class="hl-1">SYNAPSE_CACHE_SIZE</span><span class="hl-0">=</span><span class="hl-4">10000</span><br/><span class="hl-1">SYNAPSE_ENABLE_CIRCUIT_BREAKER</span><span class="hl-0">=</span><span class="hl-4">true</span><br/><span class="hl-1">SYNAPSE_CIRCUIT_BREAKER_THRESHOLD</span><span class="hl-0">=</span><span class="hl-4">5</span><br/><br/><span class="hl-5"># Optional - WebSocket Configuration</span><br/><span class="hl-1">SYNAPSE_WS_AUTO_RECONNECT</span><span class="hl-0">=</span><span class="hl-4">true</span><br/><span class="hl-1">SYNAPSE_WS_MAX_RECONNECT_ATTEMPTS</span><span class="hl-0">=</span><span class="hl-4">10</span><br/><span class="hl-1">SYNAPSE_WS_RECONNECT_DELAY</span><span class="hl-0">=</span><span class="hl-4">5000</span><br/><span class="hl-1">SYNAPSE_WS_HEARTBEAT_INTERVAL</span><span class="hl-0">=</span><span class="hl-4">30000</span><br/><br/><span class="hl-5"># Optional - Redis (for L3 cache)</span><br/><span class="hl-1">SYNAPSE_REDIS_URL</span><span class="hl-0">=</span><span class="hl-4">redis://localhost:6379</span><br/><span class="hl-1">SYNAPSE_REDIS_PASSWORD</span><span class="hl-0">=</span><span class="hl-4">your_redis_password</span><br/><br/><span class="hl-5"># Optional - Analytics</span><br/><span class="hl-1">SYNAPSE_ENABLE_ANALYTICS</span><span class="hl-0">=</span><span class="hl-4">true</span><br/><span class="hl-1">SYNAPSE_ANALYTICS_SAMPLE_RATE</span><span class="hl-0">=</span><span class="hl-4">0.1</span><br/><span class="hl-1">SYNAPSE_ANALYTICS_RETENTION_DAYS</span><span class="hl-0">=</span><span class="hl-4">7</span>
|
|
574
|
+
</code><button type="button">Copy</button></pre>
|
|
575
|
+
|
|
576
|
+
<hr>
|
|
577
|
+
<a id="md:system-requirements" class="tsd-anchor"></a><h2 class="tsd-anchor-link">System Requirements<a href="#md:system-requirements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:runtime-requirements" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Runtime Requirements<a href="#md:runtime-requirements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
578
|
+
<thead>
|
|
579
|
+
<tr>
|
|
580
|
+
<th>Component</th>
|
|
581
|
+
<th>Minimum</th>
|
|
582
|
+
<th>Recommended</th>
|
|
583
|
+
<th>Notes</th>
|
|
584
|
+
</tr>
|
|
585
|
+
</thead>
|
|
586
|
+
<tbody>
|
|
587
|
+
<tr>
|
|
588
|
+
<td><strong>Node.js</strong></td>
|
|
589
|
+
<td>18.0.0</td>
|
|
590
|
+
<td>20.x LTS</td>
|
|
591
|
+
<td>ESM support required</td>
|
|
592
|
+
</tr>
|
|
593
|
+
<tr>
|
|
594
|
+
<td><strong>TypeScript</strong></td>
|
|
595
|
+
<td>5.0.0</td>
|
|
596
|
+
<td>5.3.x</td>
|
|
597
|
+
<td>For development only</td>
|
|
598
|
+
</tr>
|
|
599
|
+
<tr>
|
|
600
|
+
<td><strong>Memory</strong></td>
|
|
601
|
+
<td>512MB</td>
|
|
602
|
+
<td>2GB</td>
|
|
603
|
+
<td>Per instance</td>
|
|
604
|
+
</tr>
|
|
605
|
+
<tr>
|
|
606
|
+
<td><strong>CPU</strong></td>
|
|
607
|
+
<td>2 cores</td>
|
|
608
|
+
<td>4+ cores</td>
|
|
609
|
+
<td>For optimal throughput</td>
|
|
610
|
+
</tr>
|
|
611
|
+
<tr>
|
|
612
|
+
<td><strong>Network</strong></td>
|
|
613
|
+
<td>10 Mbps</td>
|
|
614
|
+
<td>100 Mbps</td>
|
|
615
|
+
<td>Stable connection</td>
|
|
616
|
+
</tr>
|
|
617
|
+
</tbody>
|
|
618
|
+
</table>
|
|
619
|
+
<a id="md:dependencies" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Dependencies<a href="#md:dependencies" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="json"><span class="hl-0">{</span><br/><span class="hl-0"> </span><span class="hl-12">"dependencies"</span><span class="hl-0">: {</span><br/><span class="hl-0"> </span><span class="hl-12">"@solana/web3.js"</span><span class="hl-0">: </span><span class="hl-4">"^1.87.0"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-12">"eventemitter3"</span><span class="hl-0">: </span><span class="hl-4">"^5.0.1"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-12">"lru-cache"</span><span class="hl-0">: </span><span class="hl-4">"^10.0.0"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-12">"ws"</span><span class="hl-0">: </span><span class="hl-4">"^8.14.0"</span><br/><span class="hl-0"> },</span><br/><span class="hl-0"> </span><span class="hl-12">"devDependencies"</span><span class="hl-0">: {</span><br/><span class="hl-0"> </span><span class="hl-12">"typescript"</span><span class="hl-0">: </span><span class="hl-4">"^5.3.0"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-12">"@types/node"</span><span class="hl-0">: </span><span class="hl-4">"^20.0.0"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-12">"@types/ws"</span><span class="hl-0">: </span><span class="hl-4">"^8.5.0"</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span>
|
|
620
|
+
</code><button type="button">Copy</button></pre>
|
|
621
|
+
|
|
622
|
+
<a id="md:browser-support" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Browser Support<a href="#md:browser-support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
623
|
+
<thead>
|
|
624
|
+
<tr>
|
|
625
|
+
<th>Browser</th>
|
|
626
|
+
<th>Minimum Version</th>
|
|
627
|
+
<th>Notes</th>
|
|
628
|
+
</tr>
|
|
629
|
+
</thead>
|
|
630
|
+
<tbody>
|
|
631
|
+
<tr>
|
|
632
|
+
<td>Chrome</td>
|
|
633
|
+
<td>90+</td>
|
|
634
|
+
<td>Full support</td>
|
|
635
|
+
</tr>
|
|
636
|
+
<tr>
|
|
637
|
+
<td>Firefox</td>
|
|
638
|
+
<td>88+</td>
|
|
639
|
+
<td>Full support</td>
|
|
640
|
+
</tr>
|
|
641
|
+
<tr>
|
|
642
|
+
<td>Safari</td>
|
|
643
|
+
<td>14+</td>
|
|
644
|
+
<td>WebSocket compression may be limited</td>
|
|
645
|
+
</tr>
|
|
646
|
+
<tr>
|
|
647
|
+
<td>Edge</td>
|
|
648
|
+
<td>90+</td>
|
|
649
|
+
<td>Full support</td>
|
|
650
|
+
</tr>
|
|
651
|
+
</tbody>
|
|
652
|
+
</table>
|
|
653
|
+
<hr>
|
|
654
|
+
<a id="md:migration-guide" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Migration Guide<a href="#md:migration-guide" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:from-v1x-to-v2x" class="tsd-anchor"></a><h3 class="tsd-anchor-link">From v1.x to v2.x<a href="#md:from-v1x-to-v2x" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Version 2.0 introduces breaking changes for improved performance and type safety.</p>
|
|
655
|
+
<a id="md:1-client-initialization" class="tsd-anchor"></a><h4 class="tsd-anchor-link">1. Client Initialization<a href="#md:1-client-initialization" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">// v1.x</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">(</span><span class="hl-4">'https://endpoint.com'</span><span class="hl-0">, </span><span class="hl-4">'api-key'</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// v2.x</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-4">'https://endpoint.com'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-4">'api-key'</span><span class="hl-0">,</span><br/><span class="hl-0">});</span>
|
|
656
|
+
</code><button type="button">Copy</button></pre>
|
|
657
|
+
|
|
658
|
+
<a id="md:2-rpc-method-calls" class="tsd-anchor"></a><h4 class="tsd-anchor-link">2. RPC Method Calls<a href="#md:2-rpc-method-calls" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">// v1.x</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">getBalance</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">accountInfo</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">getAccountInfo</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">);</span><br/><br/><span class="hl-5">// v2.x</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getBalance'</span><span class="hl-0">, [</span><span class="hl-4">'address'</span><span class="hl-0">]);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">accountInfo</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">call</span><span class="hl-0">(</span><span class="hl-4">'getAccountInfo'</span><span class="hl-0">, [</span><span class="hl-4">'address'</span><span class="hl-0">, { </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0"> }]);</span><br/><br/><span class="hl-5">// Or use SolanaRpcMethods wrapper</span><br/><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SolanaRpcMethods</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk/methods'</span><span class="hl-0">;</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">rpc</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SolanaRpcMethods</span><span class="hl-0">(</span><span class="hl-1">client</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">balance</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getBalance</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">);</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">accountInfo</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">rpc</span><span class="hl-0">.</span><span class="hl-3">getAccountInfo</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">, { </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0"> });</span>
|
|
659
|
+
</code><button type="button">Copy</button></pre>
|
|
660
|
+
|
|
661
|
+
<a id="md:3-error-handling" class="tsd-anchor"></a><h4 class="tsd-anchor-link">3. Error Handling<a href="#md:3-error-handling" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">// v1.x</span><br/><span class="hl-6">catch</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">code</span><span class="hl-0"> === -</span><span class="hl-8">32602</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-5">// Handle validation error</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span><br/><br/><span class="hl-5">// v2.x</span><br/><span class="hl-6">import</span><span class="hl-0"> { </span><span class="hl-1">SynapseError</span><span class="hl-0">, </span><span class="hl-1">ValidationError</span><span class="hl-0">, </span><span class="hl-1">NetworkError</span><span class="hl-0"> } </span><span class="hl-6">from</span><span class="hl-0"> </span><span class="hl-4">'@synapse/client-sdk'</span><span class="hl-0">;</span><br/><br/><span class="hl-6">catch</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">ValidationError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Validation error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">field</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> } </span><span class="hl-6">else</span><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">NetworkError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Network error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">statusCode</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> } </span><span class="hl-6">else</span><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0"> </span><span class="hl-7">instanceof</span><span class="hl-0"> </span><span class="hl-9">SynapseError</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Synapse error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">code</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">message</span><span class="hl-0">);</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">}</span>
|
|
662
|
+
</code><button type="button">Copy</button></pre>
|
|
663
|
+
|
|
664
|
+
<a id="md:4-websocket-subscriptions" class="tsd-anchor"></a><h4 class="tsd-anchor-link">4. WebSocket Subscriptions<a href="#md:4-websocket-subscriptions" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="typescript"><span class="hl-5">// v1.x</span><br/><span class="hl-1">ws</span><span class="hl-0">.</span><span class="hl-3">accountSubscribe</span><span class="hl-0">(</span><span class="hl-4">'address'</span><span class="hl-0">, (</span><span class="hl-1">data</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-1">data</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// v2.x</span><br/><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">subId</span><span class="hl-0"> = </span><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">ws</span><span class="hl-0">.</span><span class="hl-3">accountSubscribe</span><span class="hl-0">(</span><br/><span class="hl-0"> </span><span class="hl-4">'address'</span><span class="hl-0">,</span><br/><span class="hl-0"> (</span><span class="hl-1">data</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-1">data</span><span class="hl-0">);</span><br/><span class="hl-0"> },</span><br/><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">commitment:</span><span class="hl-0"> </span><span class="hl-4">'confirmed'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">encoding:</span><span class="hl-0"> </span><span class="hl-4">'jsonParsed'</span><span class="hl-0">,</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">);</span><br/><br/><span class="hl-5">// Remember to unsubscribe</span><br/><span class="hl-6">await</span><span class="hl-0"> </span><span class="hl-1">ws</span><span class="hl-0">.</span><span class="hl-3">accountUnsubscribe</span><span class="hl-0">(</span><span class="hl-1">subId</span><span class="hl-0">);</span>
|
|
665
|
+
</code><button type="button">Copy</button></pre>
|
|
666
|
+
|
|
667
|
+
<hr>
|
|
668
|
+
<a id="md:troubleshooting" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Troubleshooting<a href="#md:troubleshooting" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><a id="md:common-issues" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Common Issues<a href="#md:common-issues" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><a id="md:1-high-latency" class="tsd-anchor"></a><h4 class="tsd-anchor-link">1. High Latency<a href="#md:1-high-latency" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Symptoms:</strong> Requests taking >1s to complete</p>
|
|
669
|
+
<p><strong>Diagnosis:</strong></p>
|
|
670
|
+
<pre><code class="typescript"><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">stats</span><span class="hl-0"> = </span><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">getStats</span><span class="hl-0">();</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Average latency:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">averageLatency</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Cache hit rate:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">cacheHitRate</span><span class="hl-0">);</span><br/><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Pending requests:'</span><span class="hl-0">, </span><span class="hl-1">stats</span><span class="hl-0">.</span><span class="hl-1">pendingRequests</span><span class="hl-0">);</span>
|
|
671
|
+
</code><button type="button">Copy</button></pre>
|
|
672
|
+
|
|
673
|
+
<p><strong>Solutions:</strong></p>
|
|
674
|
+
<ul>
|
|
675
|
+
<li>Enable caching for read operations</li>
|
|
676
|
+
<li>Use batch operations instead of sequential calls</li>
|
|
677
|
+
<li>Check network connectivity to RPC endpoint</li>
|
|
678
|
+
<li>Use multiple endpoints with load balancing</li>
|
|
679
|
+
<li>Verify endpoint proximity (use regional endpoints)</li>
|
|
680
|
+
</ul>
|
|
681
|
+
<a id="md:2-connection-errors" class="tsd-anchor"></a><h4 class="tsd-anchor-link">2. Connection Errors<a href="#md:2-connection-errors" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Symptoms:</strong> <code>NetworkError</code> or connection timeouts</p>
|
|
682
|
+
<p><strong>Diagnosis:</strong></p>
|
|
683
|
+
<pre><code class="typescript"><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'error'</span><span class="hl-0">, (</span><span class="hl-1">error</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Connection error:'</span><span class="hl-0">, </span><span class="hl-1">error</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'endpoint-rotate'</span><span class="hl-0">, ({ </span><span class="hl-1">reason</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Endpoint rotation reason:'</span><span class="hl-0">, </span><span class="hl-1">reason</span><span class="hl-0">);</span><br/><span class="hl-0">});</span>
|
|
684
|
+
</code><button type="button">Copy</button></pre>
|
|
685
|
+
|
|
686
|
+
<p><strong>Solutions:</strong></p>
|
|
687
|
+
<ul>
|
|
688
|
+
<li>Verify endpoint URL and API key</li>
|
|
689
|
+
<li>Check firewall/proxy settings</li>
|
|
690
|
+
<li>Implement retry logic with exponential backoff</li>
|
|
691
|
+
<li>Use circuit breaker for automatic fallback</li>
|
|
692
|
+
<li>Test endpoint health manually</li>
|
|
693
|
+
</ul>
|
|
694
|
+
<a id="md:3-memory-leaks" class="tsd-anchor"></a><h4 class="tsd-anchor-link">3. Memory Leaks<a href="#md:3-memory-leaks" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Symptoms:</strong> Increasing memory usage over time</p>
|
|
695
|
+
<p><strong>Diagnosis:</strong></p>
|
|
696
|
+
<pre><code class="typescript"><span class="hl-3">setInterval</span><span class="hl-0">(() </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">used</span><span class="hl-0"> = </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-3">memoryUsage</span><span class="hl-0">();</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Memory usage:'</span><span class="hl-0">, {</span><br/><span class="hl-0"> </span><span class="hl-1">rss:</span><span class="hl-0"> (</span><span class="hl-1">used</span><span class="hl-0">.</span><span class="hl-1">rss</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">' MB'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">heapTotal:</span><span class="hl-0"> (</span><span class="hl-1">used</span><span class="hl-0">.</span><span class="hl-1">heapTotal</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">' MB'</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">heapUsed:</span><span class="hl-0"> (</span><span class="hl-1">used</span><span class="hl-0">.</span><span class="hl-1">heapUsed</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0"> / </span><span class="hl-8">1024</span><span class="hl-0">).</span><span class="hl-3">toFixed</span><span class="hl-0">(</span><span class="hl-8">2</span><span class="hl-0">) + </span><span class="hl-4">' MB'</span><span class="hl-0">,</span><br/><span class="hl-0"> });</span><br/><span class="hl-0">}, </span><span class="hl-8">30000</span><span class="hl-0">);</span>
|
|
697
|
+
</code><button type="button">Copy</button></pre>
|
|
698
|
+
|
|
699
|
+
<p><strong>Solutions:</strong></p>
|
|
700
|
+
<ul>
|
|
701
|
+
<li>Call <code>client.destroy()</code> when done</li>
|
|
702
|
+
<li>Unsubscribe from WebSocket subscriptions</li>
|
|
703
|
+
<li>Clear caches periodically: <code>client.clearCache()</code></li>
|
|
704
|
+
<li>Remove event listeners when not needed</li>
|
|
705
|
+
<li>Use <code>--max-old-space-size</code> flag to increase heap limit</li>
|
|
706
|
+
</ul>
|
|
707
|
+
<a id="md:4-websocket-disconnections" class="tsd-anchor"></a><h4 class="tsd-anchor-link">4. WebSocket Disconnections<a href="#md:4-websocket-disconnections" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Symptoms:</strong> Frequent WebSocket disconnects</p>
|
|
708
|
+
<p><strong>Diagnosis:</strong></p>
|
|
709
|
+
<pre><code class="typescript"><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'disconnected'</span><span class="hl-0">, ({ </span><span class="hl-1">code</span><span class="hl-0">, </span><span class="hl-1">reason</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Disconnect code:'</span><span class="hl-0">, </span><span class="hl-1">code</span><span class="hl-0">);</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">'Disconnect reason:'</span><span class="hl-0">, </span><span class="hl-1">reason</span><span class="hl-0">);</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-1">wsClient</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'reconnecting'</span><span class="hl-0">, ({ </span><span class="hl-1">attempt</span><span class="hl-0">, </span><span class="hl-1">maxAttempts</span><span class="hl-0"> }) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">log</span><span class="hl-0">(</span><span class="hl-4">`Reconnect attempt </span><span class="hl-7">${</span><span class="hl-1">attempt</span><span class="hl-7">}</span><span class="hl-4">/</span><span class="hl-7">${</span><span class="hl-1">maxAttempts</span><span class="hl-7">}</span><span class="hl-4">`</span><span class="hl-0">);</span><br/><span class="hl-0">});</span>
|
|
710
|
+
</code><button type="button">Copy</button></pre>
|
|
711
|
+
|
|
712
|
+
<p><strong>Solutions:</strong></p>
|
|
713
|
+
<ul>
|
|
714
|
+
<li>Reduce heartbeat interval for faster detection</li>
|
|
715
|
+
<li>Increase <code>maxReconnectAttempts</code></li>
|
|
716
|
+
<li>Check network stability</li>
|
|
717
|
+
<li>Use resilient subscriptions</li>
|
|
718
|
+
<li>Implement fallback to HTTP polling</li>
|
|
719
|
+
</ul>
|
|
720
|
+
<a id="md:5-rate-limiting" class="tsd-anchor"></a><h4 class="tsd-anchor-link">5. Rate Limiting<a href="#md:5-rate-limiting" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Symptoms:</strong> 429 Too Many Requests errors</p>
|
|
721
|
+
<p><strong>Diagnosis:</strong></p>
|
|
722
|
+
<pre><code class="typescript"><span class="hl-1">client</span><span class="hl-0">.</span><span class="hl-3">on</span><span class="hl-0">(</span><span class="hl-4">'error'</span><span class="hl-0">, (</span><span class="hl-1">error</span><span class="hl-0">) </span><span class="hl-7">=></span><span class="hl-0"> {</span><br/><span class="hl-0"> </span><span class="hl-6">if</span><span class="hl-0"> (</span><span class="hl-1">error</span><span class="hl-0">.</span><span class="hl-1">code</span><span class="hl-0"> === </span><span class="hl-8">429</span><span class="hl-0">) {</span><br/><span class="hl-0"> </span><span class="hl-1">console</span><span class="hl-0">.</span><span class="hl-3">error</span><span class="hl-0">(</span><span class="hl-4">'Rate limit exceeded'</span><span class="hl-0">);</span><br/><span class="hl-0"> }</span><br/><span class="hl-0">});</span>
|
|
723
|
+
</code><button type="button">Copy</button></pre>
|
|
724
|
+
|
|
725
|
+
<p><strong>Solutions:</strong></p>
|
|
726
|
+
<ul>
|
|
727
|
+
<li>Implement request throttling</li>
|
|
728
|
+
<li>Use caching to reduce API calls</li>
|
|
729
|
+
<li>Batch operations when possible</li>
|
|
730
|
+
<li>Upgrade API plan for higher limits</li>
|
|
731
|
+
<li>Implement exponential backoff on rate limit errors</li>
|
|
732
|
+
</ul>
|
|
733
|
+
<a id="md:debug-mode" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Debug Mode<a href="#md:debug-mode" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Enable debug logging for detailed insights:</p>
|
|
734
|
+
<pre><code class="typescript"><span class="hl-7">const</span><span class="hl-0"> </span><span class="hl-2">client</span><span class="hl-0"> = </span><span class="hl-7">new</span><span class="hl-0"> </span><span class="hl-3">SynapseClient</span><span class="hl-0">({</span><br/><span class="hl-0"> </span><span class="hl-1">endpoint:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_ENDPOINT</span><span class="hl-0">!,</span><br/><span class="hl-0"> </span><span class="hl-1">apiKey:</span><span class="hl-0"> </span><span class="hl-1">process</span><span class="hl-0">.</span><span class="hl-1">env</span><span class="hl-0">.</span><span class="hl-2">SYNAPSE_API_KEY</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">debug:</span><span class="hl-0"> </span><span class="hl-7">true</span><span class="hl-0">, </span><span class="hl-5">// Enable debug logs</span><br/><span class="hl-0">});</span><br/><br/><span class="hl-5">// Console output:</span><br/><span class="hl-5">// 🚀 Synapse Client initialized: https://...</span><br/><span class="hl-5">// 📤 [1] getBalance ["addr..."]</span><br/><span class="hl-5">// 📥 [1] ✅ 45ms</span><br/><span class="hl-5">// 📤 [2] getAccountInfo ["addr...", {...}]</span><br/><span class="hl-5">// 📥 [2] ✅ 82ms</span>
|
|
735
|
+
</code><button type="button">Copy</button></pre>
|
|
736
|
+
|
|
737
|
+
<hr>
|
|
738
|
+
<a id="md:contributing" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Contributing<a href="#md:contributing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Contributions are welcome! Please follow these guidelines:</p>
|
|
739
|
+
<a id="md:development-setup" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Development Setup<a href="#md:development-setup" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="bash"><span class="hl-5"># Clone repository</span><br/><span class="hl-3">git</span><span class="hl-0"> </span><span class="hl-4">clone</span><span class="hl-0"> </span><span class="hl-4">https://github.com/CryptoFamilyNFT/synapse.git</span><br/><span class="hl-3">cd</span><span class="hl-0"> </span><span class="hl-4">synapse/packages/synapse-client-sdk</span><br/><br/><span class="hl-5"># Install dependencies</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">install</span><br/><br/><span class="hl-5"># Build project</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">build</span><br/><br/><span class="hl-5"># Run tests</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">test</span><br/><br/><span class="hl-5"># Run linter</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">lint</span><br/><br/><span class="hl-5"># Type check</span><br/><span class="hl-3">pnpm</span><span class="hl-0"> </span><span class="hl-4">type-check</span>
|
|
740
|
+
</code><button type="button">Copy</button></pre>
|
|
741
|
+
|
|
742
|
+
<a id="md:guidelines" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Guidelines<a href="#md:guidelines" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
|
|
743
|
+
<li><strong>Code Style:</strong> Follow TypeScript best practices and existing code style</li>
|
|
744
|
+
<li><strong>Testing:</strong> Add tests for new features (<code>pnpm test</code>)</li>
|
|
745
|
+
<li><strong>Documentation:</strong> Update relevant README files</li>
|
|
746
|
+
<li><strong>Type Safety:</strong> Ensure full TypeScript coverage</li>
|
|
747
|
+
<li><strong>Performance:</strong> Benchmark changes if applicable (<code>pnpm benchmark</code>)</li>
|
|
748
|
+
<li><strong>Commit Messages:</strong> Use conventional commits format</li>
|
|
749
|
+
</ol>
|
|
750
|
+
<a id="md:pull-request-process" class="tsd-anchor"></a><h3 class="tsd-anchor-link">Pull Request Process<a href="#md:pull-request-process" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
|
|
751
|
+
<li>Fork the repository</li>
|
|
752
|
+
<li>Create a feature branch (<code>git checkout -b feature/amazing-feature</code>)</li>
|
|
753
|
+
<li>Make your changes</li>
|
|
754
|
+
<li>Add tests and documentation</li>
|
|
755
|
+
<li>Run tests and linter (<code>pnpm test && pnpm lint</code>)</li>
|
|
756
|
+
<li>Commit your changes (<code>git commit -m 'feat: add amazing feature'</code>)</li>
|
|
757
|
+
<li>Push to branch (<code>git push origin feature/amazing-feature</code>)</li>
|
|
758
|
+
<li>Open a Pull Request</li>
|
|
759
|
+
</ol>
|
|
760
|
+
<hr>
|
|
761
|
+
<a id="md:license" class="tsd-anchor"></a><h2 class="tsd-anchor-link">License<a href="#md:license" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>MIT License - See <a href="media/LICENSE">LICENSE</a> for complete terms.</p>
|
|
762
|
+
<p>Copyright (c) 2024 CryptoFamilyNFT</p>
|
|
763
|
+
<p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</p>
|
|
764
|
+
<p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
|
|
765
|
+
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
|
|
766
|
+
<hr>
|
|
767
|
+
<a id="md:support" class="tsd-anchor"></a><h2 class="tsd-anchor-link">Support<a href="#md:support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
|
|
768
|
+
<li><strong>Documentation:</strong> <a href="https://docs.synapse.com" target="_blank" class="external">https://docs.synapse.com</a></li>
|
|
769
|
+
<li><strong>GitHub Issues:</strong> <a href="https://github.com/CryptoFamilyNFT/synapse/issues" target="_blank" class="external">https://github.com/CryptoFamilyNFT/synapse/issues</a></li>
|
|
770
|
+
<li><strong>Discord:</strong> <a href="https://discord.gg/synapse" target="_blank" class="external">https://discord.gg/synapse</a></li>
|
|
771
|
+
<li><strong>Email:</strong> <a href="mailto:support@synapse.com">support@synapse.com</a></li>
|
|
772
|
+
</ul>
|
|
773
|
+
<hr>
|
|
774
|
+
<p><strong>Synapse Client SDK</strong> - Enterprise-grade Solana development toolkit</p>
|
|
775
|
+
<p>Built with precision by the Synapse Team</p>
|
|
776
|
+
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="assets/icons.svg#icon-chevronDown"></use></svg>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#md:synapse-client-sdk"><span>Synapse <wbr/>Client SDK</span></a><ul><li><a href="#md:architecture-overview"><span>Architecture <wbr/>Overview</span></a></li><li><a href="#md:features-matrix"><span>Features <wbr/>Matrix</span></a></li><li><a href="#md:installation"><span>Installation</span></a></li><li><a href="#md:quick-start"><span>Quick <wbr/>Start</span></a></li><li><ul><li><a href="#md:basic-client-initialization"><span>Basic <wbr/>Client <wbr/>Initialization</span></a></li><li><a href="#md:client-statistics"><span>Client <wbr/>Statistics</span></a></li><li><a href="#md:endpoint-rotation"><span>Endpoint <wbr/>Rotation</span></a></li></ul></li><li><a href="#md:core-client"><span>Core <wbr/>Client</span></a></li><li><ul><li><a href="#md:configuration"><span>Configuration</span></a></li><li><a href="#md:core-methods"><span>Core <wbr/>Methods</span></a></li><li><a href="#md:event-system"><span>Event <wbr/>System</span></a></li></ul></li><li><a href="#md:module-documentation"><span>Module <wbr/>Documentation</span></a></li><li><ul><li><a href="#md:1-advanced-features-module"><span>1. <wbr/>Advanced <wbr/>Features <wbr/>Module</span></a></li><li><ul><li><a href="#md:components"><span>Components</span></a></li><li><a href="#md:quick-example"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:2-websocket-client-module"><span>2. <wbr/>Web<wbr/>Socket <wbr/>Client <wbr/>Module</span></a></li><li><ul><li><a href="#md:subscription-types"><span>Subscription <wbr/>Types</span></a></li><li><a href="#md:quick-example-1"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:3-defi-module"><span>3. <wbr/>De<wbr/>Fi <wbr/>Module</span></a></li><li><ul><li><a href="#md:integrations-matrix"><span>Integrations <wbr/>Matrix</span></a></li><li><a href="#md:advanced-features"><span>Advanced <wbr/>Features</span></a></li><li><a href="#md:quick-example-2"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:4-nft-module"><span>4. NFT <wbr/>Module</span></a></li><li><ul><li><a href="#md:features-matrix-1"><span>Features <wbr/>Matrix</span></a></li><li><a href="#md:quick-example-3"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:5-ai-module"><span>5. AI <wbr/>Module</span></a></li><li><ul><li><a href="#md:components-1"><span>Components</span></a></li><li><a href="#md:quick-example-4"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:6-analytics-engine-module"><span>6. <wbr/>Analytics <wbr/>Engine <wbr/>Module</span></a></li><li><ul><li><a href="#md:capabilities"><span>Capabilities</span></a></li><li><a href="#md:quick-example-5"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:7-rpc-methods-module"><span>7. RPC <wbr/>Methods <wbr/>Module</span></a></li><li><ul><li><a href="#md:method-categories"><span>Method <wbr/>Categories</span></a></li><li><a href="#md:quick-example-6"><span>Quick <wbr/>Example</span></a></li></ul></li><li><a href="#md:8-utils-module"><span>8. <wbr/>Utils <wbr/>Module</span></a></li><li><ul><li><a href="#md:components-2"><span>Components</span></a></li></ul></li></ul></li><li><a href="#md:performance-benchmarks"><span>Performance <wbr/>Benchmarks</span></a></li><li><ul><li><a href="#md:latency-metrics"><span>Latency <wbr/>Metrics</span></a></li><li><a href="#md:load-testing-results"><span>Load <wbr/>Testing <wbr/>Results</span></a></li></ul></li><li><a href="#md:type-system"><span>Type <wbr/>System</span></a></li><li><ul><li><a href="#md:core-types"><span>Core <wbr/>Types</span></a></li><li><a href="#md:error-types"><span>Error <wbr/>Types</span></a></li></ul></li><li><a href="#md:best-practices"><span>Best <wbr/>Practices</span></a></li><li><ul><li><a href="#md:1-connection-management"><span>1. <wbr/>Connection <wbr/>Management</span></a></li><li><a href="#md:2-error-handling"><span>2. <wbr/>Error <wbr/>Handling</span></a></li><li><a href="#md:3-batch-operations"><span>3. <wbr/>Batch <wbr/>Operations</span></a></li><li><a href="#md:4-caching-strategy"><span>4. <wbr/>Caching <wbr/>Strategy</span></a></li><li><a href="#md:5-circuit-breaker-integration"><span>5. <wbr/>Circuit <wbr/>Breaker <wbr/>Integration</span></a></li><li><a href="#md:6-monitoring-and-observability"><span>6. <wbr/>Monitoring and <wbr/>Observability</span></a></li></ul></li><li><a href="#md:environment-variables"><span>Environment <wbr/>Variables</span></a></li><li><a href="#md:system-requirements"><span>System <wbr/>Requirements</span></a></li><li><ul><li><a href="#md:runtime-requirements"><span>Runtime <wbr/>Requirements</span></a></li><li><a href="#md:dependencies"><span>Dependencies</span></a></li><li><a href="#md:browser-support"><span>Browser <wbr/>Support</span></a></li></ul></li><li><a href="#md:migration-guide"><span>Migration <wbr/>Guide</span></a></li><li><ul><li><a href="#md:from-v1x-to-v2x"><span>From v1.x to v2.x</span></a></li><li><ul><li><a href="#md:1-client-initialization"><span>1. <wbr/>Client <wbr/>Initialization</span></a></li><li><a href="#md:2-rpc-method-calls"><span>2. RPC <wbr/>Method <wbr/>Calls</span></a></li><li><a href="#md:3-error-handling"><span>3. <wbr/>Error <wbr/>Handling</span></a></li><li><a href="#md:4-websocket-subscriptions"><span>4. <wbr/>Web<wbr/>Socket <wbr/>Subscriptions</span></a></li></ul></li></ul></li><li><a href="#md:troubleshooting"><span>Troubleshooting</span></a></li><li><ul><li><a href="#md:common-issues"><span>Common <wbr/>Issues</span></a></li><li><ul><li><a href="#md:1-high-latency"><span>1. <wbr/>High <wbr/>Latency</span></a></li><li><a href="#md:2-connection-errors"><span>2. <wbr/>Connection <wbr/>Errors</span></a></li><li><a href="#md:3-memory-leaks"><span>3. <wbr/>Memory <wbr/>Leaks</span></a></li><li><a href="#md:4-websocket-disconnections"><span>4. <wbr/>Web<wbr/>Socket <wbr/>Disconnections</span></a></li><li><a href="#md:5-rate-limiting"><span>5. <wbr/>Rate <wbr/>Limiting</span></a></li></ul></li><li><a href="#md:debug-mode"><span>Debug <wbr/>Mode</span></a></li></ul></li><li><a href="#md:contributing"><span>Contributing</span></a></li><li><ul><li><a href="#md:development-setup"><span>Development <wbr/>Setup</span></a></li><li><a href="#md:guidelines"><span>Guidelines</span></a></li><li><a href="#md:pull-request-process"><span>Pull <wbr/>Request <wbr/>Process</span></a></li></ul></li><li><a href="#md:license"><span>License</span></a></li><li><a href="#md:support"><span>Support</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html" class="current"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="assets/icons.svg#icon-1"></use></svg><span>@oobe-protocol-labs/synapse-client-sdk</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base="."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|