@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,766 @@
|
|
|
1
|
+
# Advanced Features Module
|
|
2
|
+
|
|
3
|
+
Enterprise-grade resilience, performance optimization, and intelligent caching for production Solana applications.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌────────────────────────────────────────────────────────────┐
|
|
9
|
+
│ Advanced Features Layer │
|
|
10
|
+
├────────────────────────────────────────────────────────────┤
|
|
11
|
+
│ │
|
|
12
|
+
│ ┌──────────────────┐ ┌──────────────────┐ │
|
|
13
|
+
│ │ Circuit Breaker │ │ Smart Caching │ │
|
|
14
|
+
│ │ • Failure Track │ │ • L1 Memory │ │
|
|
15
|
+
│ │ • State Machine │ │ • L2 Extended │ │
|
|
16
|
+
│ │ • Auto Recovery │ │ • L3 Redis │ │
|
|
17
|
+
│ │ • Fallback │ │ • ML Prediction │ │
|
|
18
|
+
│ └──────────────────┘ └──────────────────┘ │
|
|
19
|
+
│ │
|
|
20
|
+
│ ┌──────────────────┐ ┌──────────────────┐ │
|
|
21
|
+
│ │ Load Balancer │ │ Metrics │ │
|
|
22
|
+
│ │ • Round Robin │ │ • Latency │ │
|
|
23
|
+
│ │ • Weighted │ │ • Hit Rate │ │
|
|
24
|
+
│ │ • Least Conn │ │ • Throughput │ │
|
|
25
|
+
│ │ • IP Hash │ │ • Errors │ │
|
|
26
|
+
│ └──────────────────┘ └──────────────────┘ │
|
|
27
|
+
│ │
|
|
28
|
+
└────────────────────────────────────────────────────────────┘
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Components
|
|
32
|
+
|
|
33
|
+
| Component | Purpose | Complexity | Production Ready |
|
|
34
|
+
|-----------|---------|------------|------------------|
|
|
35
|
+
| **CircuitBreaker** | Prevent cascade failures | High | Yes |
|
|
36
|
+
| **SmartCaching** | Multi-layer ML caching | High | Yes |
|
|
37
|
+
| **LoadBalancer** | Distribute requests | Medium | Yes |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Circuit Breaker
|
|
42
|
+
|
|
43
|
+
Automatically detect and prevent cascading failures with intelligent recovery.
|
|
44
|
+
|
|
45
|
+
### State Machine
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
┌──────────┐ failure_threshold ┌──────────┐
|
|
49
|
+
│ CLOSED │ ───────────────────> │ OPEN │
|
|
50
|
+
│ (normal) │ │ (failing)│
|
|
51
|
+
└──────────┘ └──────────┘
|
|
52
|
+
^ │
|
|
53
|
+
│ │ retry_interval
|
|
54
|
+
│ │
|
|
55
|
+
│ v
|
|
56
|
+
│ ┌──────────┐
|
|
57
|
+
│ success_count > N │ HALF │
|
|
58
|
+
└─────────────────────────── │ OPEN │
|
|
59
|
+
│ (testing)│
|
|
60
|
+
└──────────┘
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### States
|
|
64
|
+
|
|
65
|
+
| State | Description | Behavior |
|
|
66
|
+
|-------|-------------|----------|
|
|
67
|
+
| **CLOSED** | Normal operation | All requests pass through |
|
|
68
|
+
| **OPEN** | Failure threshold exceeded | Requests fail fast or use fallback |
|
|
69
|
+
| **HALF-OPEN** | Testing recovery | Limited requests allowed |
|
|
70
|
+
|
|
71
|
+
### Configuration
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
interface CircuitBreakerConfig {
|
|
75
|
+
failureThreshold: number; // Failed requests before opening
|
|
76
|
+
timeout: number; // Circuit stays open (ms)
|
|
77
|
+
retryInterval: number; // Time before half-open (ms)
|
|
78
|
+
monitorWindow: number; // Sliding window for failures (ms)
|
|
79
|
+
enableFallback: boolean; // Use fallback on open
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Implementation
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { CircuitBreaker } from '@synapse/client-sdk/advanced';
|
|
87
|
+
|
|
88
|
+
const breaker = new CircuitBreaker({
|
|
89
|
+
failureThreshold: 5, // Open after 5 failures
|
|
90
|
+
timeout: 60000, // Stay open for 60s
|
|
91
|
+
retryInterval: 30000, // Test recovery after 30s
|
|
92
|
+
monitorWindow: 60000, // Track failures in 60s window
|
|
93
|
+
enableFallback: true, // Use fallback when open
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Execute operation with circuit breaker protection
|
|
97
|
+
const result = await breaker.execute(
|
|
98
|
+
// Primary operation
|
|
99
|
+
async () => {
|
|
100
|
+
return await client.call('getAccountInfo', [address]);
|
|
101
|
+
},
|
|
102
|
+
// Fallback (optional)
|
|
103
|
+
async () => {
|
|
104
|
+
return await getCachedAccountInfo(address);
|
|
105
|
+
}
|
|
106
|
+
);
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Event Monitoring
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
breaker.on('circuit-opened', ({ reason }) => {
|
|
113
|
+
console.log('Circuit opened:', reason);
|
|
114
|
+
// Alert monitoring system
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
breaker.on('circuit-closed', () => {
|
|
118
|
+
console.log('Circuit closed - recovered');
|
|
119
|
+
// Log recovery
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
breaker.on('circuit-half-opened', () => {
|
|
123
|
+
console.log('Circuit testing recovery...');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
breaker.on('fallback-used', () => {
|
|
127
|
+
console.log('Using fallback operation');
|
|
128
|
+
// Track fallback usage
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Statistics
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
const state = breaker.getState();
|
|
136
|
+
|
|
137
|
+
console.log('Circuit Breaker State:', {
|
|
138
|
+
state: state.state, // 'closed' | 'open' | 'half-open'
|
|
139
|
+
failures: state.failures, // Current failure count
|
|
140
|
+
successCount: state.successCount, // Success count in current state
|
|
141
|
+
totalRequests: state.totalRequests, // Total requests processed
|
|
142
|
+
lastFailureTime: state.lastFailureTime,// Last failure timestamp
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Best Practices
|
|
147
|
+
|
|
148
|
+
1. **Set Appropriate Thresholds**
|
|
149
|
+
```typescript
|
|
150
|
+
// For critical services
|
|
151
|
+
const criticalBreaker = new CircuitBreaker({
|
|
152
|
+
failureThreshold: 3, // Fail fast
|
|
153
|
+
timeout: 120000, // Longer recovery
|
|
154
|
+
retryInterval: 60000, // Conservative retry
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// For non-critical services
|
|
158
|
+
const standardBreaker = new CircuitBreaker({
|
|
159
|
+
failureThreshold: 10, // More tolerant
|
|
160
|
+
timeout: 30000, // Shorter recovery
|
|
161
|
+
retryInterval: 15000, // Faster retry
|
|
162
|
+
});
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
2. **Always Provide Fallbacks**
|
|
166
|
+
```typescript
|
|
167
|
+
await breaker.execute(
|
|
168
|
+
() => fetchFromPrimary(),
|
|
169
|
+
() => fetchFromCache() // Always provide fallback
|
|
170
|
+
);
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
3. **Monitor Circuit State**
|
|
174
|
+
```typescript
|
|
175
|
+
setInterval(() => {
|
|
176
|
+
const state = breaker.getState();
|
|
177
|
+
if (state.state === 'open') {
|
|
178
|
+
metrics.increment('circuit_breaker.open');
|
|
179
|
+
}
|
|
180
|
+
}, 30000);
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Smart Caching
|
|
186
|
+
|
|
187
|
+
Multi-layer intelligent caching with ML-driven optimization and predictive loading.
|
|
188
|
+
|
|
189
|
+
### Cache Architecture
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
┌─────────────────────────────────────────────────────────┐
|
|
193
|
+
│ Cache Hierarchy │
|
|
194
|
+
├─────────────────────────────────────────────────────────┤
|
|
195
|
+
│ │
|
|
196
|
+
│ L1 Cache (Memory - LRU) │
|
|
197
|
+
│ ├─ Max Size: 10,000 entries │
|
|
198
|
+
│ ├─ TTL: 60s (default) │
|
|
199
|
+
│ ├─ Hit Ratio: ~95% │
|
|
200
|
+
│ └─ Latency: <1ms │
|
|
201
|
+
│ │ │
|
|
202
|
+
│ │ miss │
|
|
203
|
+
│ ▼ │
|
|
204
|
+
│ L2 Cache (Extended Memory) │
|
|
205
|
+
│ ├─ Max Size: 50,000 entries │
|
|
206
|
+
│ ├─ TTL: 300s (default) │
|
|
207
|
+
│ ├─ Hit Ratio: ~80% │
|
|
208
|
+
│ └─ Latency: <2ms │
|
|
209
|
+
│ │ │
|
|
210
|
+
│ │ miss │
|
|
211
|
+
│ ▼ │
|
|
212
|
+
│ L3 Cache (Distributed - Redis) │
|
|
213
|
+
│ ├─ Size: Unlimited │
|
|
214
|
+
│ ├─ TTL: Configurable │
|
|
215
|
+
│ ├─ Hit Ratio: ~60% │
|
|
216
|
+
│ └─ Latency: <10ms │
|
|
217
|
+
│ │
|
|
218
|
+
└─────────────────────────────────────────────────────────┘
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Configuration
|
|
222
|
+
|
|
223
|
+
```typescript
|
|
224
|
+
interface SmartCacheConfig {
|
|
225
|
+
maxSize?: number; // L1 cache size (default: 10000)
|
|
226
|
+
enableL2?: boolean; // Enable L2 cache (default: true)
|
|
227
|
+
enableDistributed?: boolean; // Enable Redis L3 (default: false)
|
|
228
|
+
redisUrl?: string; // Redis connection URL
|
|
229
|
+
ttl?: number; // Default TTL in ms (default: 60000)
|
|
230
|
+
enableCompression?: boolean; // Compress values (default: true)
|
|
231
|
+
enablePredictive?: boolean; // ML predictive loading (default: true)
|
|
232
|
+
compressionThreshold?: number; // Compress if >N bytes (default: 1024)
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Implementation
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
import { SmartCaching } from '@synapse/client-sdk/advanced';
|
|
240
|
+
|
|
241
|
+
const cache = new SmartCaching({
|
|
242
|
+
maxSize: 10000,
|
|
243
|
+
enableL2: true,
|
|
244
|
+
enableDistributed: true,
|
|
245
|
+
redisUrl: 'redis://localhost:6379',
|
|
246
|
+
ttl: 60000,
|
|
247
|
+
enableCompression: true,
|
|
248
|
+
enablePredictive: true,
|
|
249
|
+
compressionThreshold: 1024,
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// Get from cache with automatic layer traversal
|
|
253
|
+
const accountInfo = await cache.get<AccountInfo>(
|
|
254
|
+
`account:${address}`,
|
|
255
|
+
true // Enable predictive loading
|
|
256
|
+
);
|
|
257
|
+
|
|
258
|
+
if (accountInfo) {
|
|
259
|
+
console.log('Cache hit:', accountInfo);
|
|
260
|
+
} else {
|
|
261
|
+
// Fetch from RPC
|
|
262
|
+
const fresh = await client.call('getAccountInfo', [address]);
|
|
263
|
+
|
|
264
|
+
// Store in cache with custom TTL
|
|
265
|
+
await cache.set(
|
|
266
|
+
`account:${address}`,
|
|
267
|
+
fresh,
|
|
268
|
+
{ ttl: 120000, compress: true }
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Cache Patterns
|
|
274
|
+
|
|
275
|
+
#### 1. Read-Through Pattern
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
async function getAccountInfo(address: string): Promise<AccountInfo> {
|
|
279
|
+
const cacheKey = `account:${address}`;
|
|
280
|
+
|
|
281
|
+
// Try cache first
|
|
282
|
+
let data = await cache.get<AccountInfo>(cacheKey);
|
|
283
|
+
|
|
284
|
+
if (!data) {
|
|
285
|
+
// Cache miss - fetch from source
|
|
286
|
+
data = await client.call('getAccountInfo', [address]);
|
|
287
|
+
|
|
288
|
+
// Store in cache
|
|
289
|
+
await cache.set(cacheKey, data, { ttl: 60000 });
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return data;
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
#### 2. Write-Through Pattern
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
async function updateAccount(address: string, data: AccountInfo): Promise<void> {
|
|
300
|
+
const cacheKey = `account:${address}`;
|
|
301
|
+
|
|
302
|
+
// Update source
|
|
303
|
+
await updateAccountInDB(address, data);
|
|
304
|
+
|
|
305
|
+
// Update cache immediately
|
|
306
|
+
await cache.set(cacheKey, data, { ttl: 60000 });
|
|
307
|
+
}
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
#### 3. Cache-Aside Pattern
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
async function getTokenPrice(mint: string): Promise<number> {
|
|
314
|
+
const cacheKey = `price:${mint}`;
|
|
315
|
+
|
|
316
|
+
// Check cache
|
|
317
|
+
const cached = await cache.get<number>(cacheKey);
|
|
318
|
+
if (cached !== null) return cached;
|
|
319
|
+
|
|
320
|
+
// Fetch from API
|
|
321
|
+
const price = await fetchPriceFromAPI(mint);
|
|
322
|
+
|
|
323
|
+
// Store in cache (don't await - fire and forget)
|
|
324
|
+
cache.set(cacheKey, price, { ttl: 30000 }).catch(console.error);
|
|
325
|
+
|
|
326
|
+
return price;
|
|
327
|
+
}
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Predictive Loading
|
|
331
|
+
|
|
332
|
+
The cache uses ML to predict which keys will be accessed next:
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
// Automatic predictive loading
|
|
336
|
+
const account1 = await cache.get('account:1', true);
|
|
337
|
+
|
|
338
|
+
// Cache automatically loads:
|
|
339
|
+
// - account:2 (sequential access pattern)
|
|
340
|
+
// - account:1:tokens (related data pattern)
|
|
341
|
+
// - account:1:transactions (related data pattern)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Cache Statistics
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
const stats = cache.getAdvancedStats();
|
|
348
|
+
|
|
349
|
+
console.log('Cache Performance:', {
|
|
350
|
+
hitRate: stats.hitRate, // 95.5%
|
|
351
|
+
missRate: stats.missRate, // 4.5%
|
|
352
|
+
totalHits: stats.totalHits, // 10,000
|
|
353
|
+
totalMisses: stats.totalMisses, // 500
|
|
354
|
+
averageLatency: stats.averageLatency, // 0.8ms
|
|
355
|
+
memoryUsage: {
|
|
356
|
+
raw: stats.memoryUsage.raw, // 150MB
|
|
357
|
+
compressed: stats.memoryUsage.compressed, // 45MB
|
|
358
|
+
},
|
|
359
|
+
compressionRatio: stats.compressionRatio, // 0.3 (70% savings)
|
|
360
|
+
});
|
|
361
|
+
|
|
362
|
+
// Layer-specific stats
|
|
363
|
+
console.log('L1 Stats:', {
|
|
364
|
+
size: stats.l1.size,
|
|
365
|
+
hits: stats.l1.hits,
|
|
366
|
+
hitRate: stats.l1.hitRate,
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
console.log('L2 Stats:', {
|
|
370
|
+
size: stats.l2.size,
|
|
371
|
+
hits: stats.l2.hits,
|
|
372
|
+
hitRate: stats.l2.hitRate,
|
|
373
|
+
});
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
### Cache Invalidation
|
|
377
|
+
|
|
378
|
+
```typescript
|
|
379
|
+
// Invalidate single key
|
|
380
|
+
await cache.delete('account:address1');
|
|
381
|
+
|
|
382
|
+
// Invalidate by pattern
|
|
383
|
+
await cache.deleteByPattern('account:*');
|
|
384
|
+
|
|
385
|
+
// Invalidate by tag
|
|
386
|
+
await cache.deleteByTag('user:123');
|
|
387
|
+
|
|
388
|
+
// Clear entire cache
|
|
389
|
+
await cache.clear();
|
|
390
|
+
|
|
391
|
+
// Invalidate with event
|
|
392
|
+
cache.on('invalidation', ({ key, reason }) => {
|
|
393
|
+
console.log(`Cache invalidated: ${key} (${reason})`);
|
|
394
|
+
});
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Best Practices
|
|
398
|
+
|
|
399
|
+
1. **Use Appropriate TTLs**
|
|
400
|
+
```typescript
|
|
401
|
+
// Static data - long TTL
|
|
402
|
+
cache.set('token:metadata', metadata, { ttl: 3600000 }); // 1 hour
|
|
403
|
+
|
|
404
|
+
// Dynamic data - short TTL
|
|
405
|
+
cache.set('token:price', price, { ttl: 30000 }); // 30 seconds
|
|
406
|
+
|
|
407
|
+
// Real-time data - very short TTL
|
|
408
|
+
cache.set('account:balance', balance, { ttl: 5000 }); // 5 seconds
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
2. **Enable Compression for Large Data**
|
|
412
|
+
```typescript
|
|
413
|
+
// Compress large objects
|
|
414
|
+
await cache.set(key, largeObject, {
|
|
415
|
+
ttl: 60000,
|
|
416
|
+
compress: true,
|
|
417
|
+
compressionThreshold: 1024, // Compress if >1KB
|
|
418
|
+
});
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
3. **Use Cache Tags for Bulk Invalidation**
|
|
422
|
+
```typescript
|
|
423
|
+
// Set with tags
|
|
424
|
+
await cache.set(key, value, {
|
|
425
|
+
ttl: 60000,
|
|
426
|
+
tags: ['user:123', 'collection:abc'],
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
// Invalidate all user data at once
|
|
430
|
+
await cache.deleteByTag('user:123');
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
4. **Monitor Cache Performance**
|
|
434
|
+
```typescript
|
|
435
|
+
setInterval(() => {
|
|
436
|
+
const stats = cache.getAdvancedStats();
|
|
437
|
+
|
|
438
|
+
if (stats.hitRate < 0.8) {
|
|
439
|
+
console.warn('Cache hit rate below 80%');
|
|
440
|
+
// Adjust TTLs or cache size
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
if (stats.memoryUsage.raw > 500 * 1024 * 1024) {
|
|
444
|
+
console.warn('Cache memory usage above 500MB');
|
|
445
|
+
// Increase compression or reduce maxSize
|
|
446
|
+
}
|
|
447
|
+
}, 60000);
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Load Balancer
|
|
453
|
+
|
|
454
|
+
Distribute requests across multiple RPC endpoints using various strategies.
|
|
455
|
+
|
|
456
|
+
### Load Balancing Strategies
|
|
457
|
+
|
|
458
|
+
| Strategy | Algorithm | Use Case | Complexity |
|
|
459
|
+
|----------|-----------|----------|------------|
|
|
460
|
+
| **Round Robin** | Sequential rotation | Equal servers | Low |
|
|
461
|
+
| **Weighted** | Capacity-based | Unequal servers | Medium |
|
|
462
|
+
| **Least Connections** | Minimum active | Dynamic load | Medium |
|
|
463
|
+
| **IP Hash** | Client affinity | Session persistence | Low |
|
|
464
|
+
| **EWMA** | Exponential weighted | Latency-aware | High |
|
|
465
|
+
|
|
466
|
+
### Configuration
|
|
467
|
+
|
|
468
|
+
```typescript
|
|
469
|
+
interface LoadBalancerConfig {
|
|
470
|
+
endpoints: string[]; // RPC endpoints
|
|
471
|
+
strategy: 'round-robin' | 'weighted' | 'least-connections' | 'ip-hash' | 'ewma';
|
|
472
|
+
weights?: Record<string, number>; // Endpoint weights
|
|
473
|
+
healthCheckInterval?: number; // Health check frequency (ms)
|
|
474
|
+
timeout?: number; // Request timeout (ms)
|
|
475
|
+
maxRetriesPerEndpoint?: number; // Retries per endpoint
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### Implementation
|
|
480
|
+
|
|
481
|
+
```typescript
|
|
482
|
+
import { LoadBalancer } from '@synapse/client-sdk/advanced';
|
|
483
|
+
|
|
484
|
+
const balancer = new LoadBalancer({
|
|
485
|
+
endpoints: [
|
|
486
|
+
'https://rpc1.synapse.com',
|
|
487
|
+
'https://rpc2.synapse.com',
|
|
488
|
+
'https://rpc3.synapse.com',
|
|
489
|
+
],
|
|
490
|
+
strategy: 'ewma', // Latency-aware
|
|
491
|
+
healthCheckInterval: 30000, // Check every 30s
|
|
492
|
+
timeout: 10000, // 10s timeout
|
|
493
|
+
maxRetriesPerEndpoint: 2, // Retry twice per endpoint
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
// Get next endpoint
|
|
497
|
+
const endpoint = balancer.getNextEndpoint();
|
|
498
|
+
console.log('Using endpoint:', endpoint);
|
|
499
|
+
|
|
500
|
+
// Execute with automatic failover
|
|
501
|
+
const result = await balancer.execute(async (endpoint) => {
|
|
502
|
+
return await fetch(`${endpoint}/rpc`, {
|
|
503
|
+
method: 'POST',
|
|
504
|
+
body: JSON.stringify(rpcRequest),
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### Strategy Examples
|
|
510
|
+
|
|
511
|
+
#### Round Robin
|
|
512
|
+
|
|
513
|
+
```typescript
|
|
514
|
+
const roundRobin = new LoadBalancer({
|
|
515
|
+
endpoints: ['rpc1', 'rpc2', 'rpc3'],
|
|
516
|
+
strategy: 'round-robin',
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
// Distributes evenly:
|
|
520
|
+
// Request 1 → rpc1
|
|
521
|
+
// Request 2 → rpc2
|
|
522
|
+
// Request 3 → rpc3
|
|
523
|
+
// Request 4 → rpc1 (cycle repeats)
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
#### Weighted
|
|
527
|
+
|
|
528
|
+
```typescript
|
|
529
|
+
const weighted = new LoadBalancer({
|
|
530
|
+
endpoints: ['rpc1', 'rpc2', 'rpc3'],
|
|
531
|
+
strategy: 'weighted',
|
|
532
|
+
weights: {
|
|
533
|
+
'rpc1': 50, // 50% of traffic
|
|
534
|
+
'rpc2': 30, // 30% of traffic
|
|
535
|
+
'rpc3': 20, // 20% of traffic
|
|
536
|
+
},
|
|
537
|
+
});
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
#### Least Connections
|
|
541
|
+
|
|
542
|
+
```typescript
|
|
543
|
+
const leastConn = new LoadBalancer({
|
|
544
|
+
endpoints: ['rpc1', 'rpc2', 'rpc3'],
|
|
545
|
+
strategy: 'least-connections',
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
// Automatically routes to endpoint with fewest active connections
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
#### EWMA (Recommended)
|
|
552
|
+
|
|
553
|
+
```typescript
|
|
554
|
+
const ewma = new LoadBalancer({
|
|
555
|
+
endpoints: ['rpc1', 'rpc2', 'rpc3'],
|
|
556
|
+
strategy: 'ewma',
|
|
557
|
+
});
|
|
558
|
+
|
|
559
|
+
// Routes based on exponential weighted moving average of latency
|
|
560
|
+
// Automatically avoids slow endpoints
|
|
561
|
+
```
|
|
562
|
+
|
|
563
|
+
### Health Checks
|
|
564
|
+
|
|
565
|
+
```typescript
|
|
566
|
+
balancer.on('health-check', ({ endpoint, healthy, latency }) => {
|
|
567
|
+
console.log(`Health check: ${endpoint}`, {
|
|
568
|
+
healthy,
|
|
569
|
+
latency,
|
|
570
|
+
});
|
|
571
|
+
});
|
|
572
|
+
|
|
573
|
+
balancer.on('endpoint-down', ({ endpoint }) => {
|
|
574
|
+
console.log(`Endpoint down: ${endpoint}`);
|
|
575
|
+
// Alert monitoring system
|
|
576
|
+
});
|
|
577
|
+
|
|
578
|
+
balancer.on('endpoint-recovered', ({ endpoint }) => {
|
|
579
|
+
console.log(`Endpoint recovered: ${endpoint}`);
|
|
580
|
+
// Log recovery
|
|
581
|
+
});
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Statistics
|
|
585
|
+
|
|
586
|
+
```typescript
|
|
587
|
+
const stats = balancer.getStats();
|
|
588
|
+
|
|
589
|
+
console.log('Load Balancer Stats:', {
|
|
590
|
+
totalRequests: stats.totalRequests,
|
|
591
|
+
endpointStats: stats.endpoints.map(e => ({
|
|
592
|
+
url: e.url,
|
|
593
|
+
requests: e.requests,
|
|
594
|
+
errors: e.errors,
|
|
595
|
+
averageLatency: e.averageLatency,
|
|
596
|
+
healthy: e.healthy,
|
|
597
|
+
})),
|
|
598
|
+
});
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
---
|
|
602
|
+
|
|
603
|
+
## Complete Integration Example
|
|
604
|
+
|
|
605
|
+
```typescript
|
|
606
|
+
import {
|
|
607
|
+
SmartCaching,
|
|
608
|
+
CircuitBreaker,
|
|
609
|
+
LoadBalancer,
|
|
610
|
+
} from '@synapse/client-sdk/advanced';
|
|
611
|
+
|
|
612
|
+
// Initialize components
|
|
613
|
+
const cache = new SmartCaching({
|
|
614
|
+
maxSize: 10000,
|
|
615
|
+
enableL2: true,
|
|
616
|
+
enablePredictive: true,
|
|
617
|
+
});
|
|
618
|
+
|
|
619
|
+
const breaker = new CircuitBreaker({
|
|
620
|
+
failureThreshold: 5,
|
|
621
|
+
timeout: 60000,
|
|
622
|
+
retryInterval: 30000,
|
|
623
|
+
enableFallback: true,
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
const balancer = new LoadBalancer({
|
|
627
|
+
endpoints: [
|
|
628
|
+
'https://rpc1.synapse.com',
|
|
629
|
+
'https://rpc2.synapse.com',
|
|
630
|
+
'https://rpc3.synapse.com',
|
|
631
|
+
],
|
|
632
|
+
strategy: 'ewma',
|
|
633
|
+
healthCheckInterval: 30000,
|
|
634
|
+
});
|
|
635
|
+
|
|
636
|
+
// Execute request with all features
|
|
637
|
+
async function getAccountInfo(address: string): Promise<AccountInfo> {
|
|
638
|
+
const cacheKey = `account:${address}`;
|
|
639
|
+
|
|
640
|
+
// 1. Check cache first
|
|
641
|
+
const cached = await cache.get<AccountInfo>(cacheKey);
|
|
642
|
+
if (cached) return cached;
|
|
643
|
+
|
|
644
|
+
// 2. Execute with circuit breaker
|
|
645
|
+
const result = await breaker.execute(
|
|
646
|
+
// Primary: Use load balancer
|
|
647
|
+
async () => {
|
|
648
|
+
const endpoint = balancer.getNextEndpoint();
|
|
649
|
+
const response = await fetch(`${endpoint}/rpc`, {
|
|
650
|
+
method: 'POST',
|
|
651
|
+
body: JSON.stringify({
|
|
652
|
+
jsonrpc: '2.0',
|
|
653
|
+
id: 1,
|
|
654
|
+
method: 'getAccountInfo',
|
|
655
|
+
params: [address],
|
|
656
|
+
}),
|
|
657
|
+
});
|
|
658
|
+
return await response.json();
|
|
659
|
+
},
|
|
660
|
+
// Fallback: Try cache or throw
|
|
661
|
+
async () => {
|
|
662
|
+
const stale = await cache.get<AccountInfo>(cacheKey, false);
|
|
663
|
+
if (stale) return stale;
|
|
664
|
+
throw new Error('No fallback available');
|
|
665
|
+
}
|
|
666
|
+
);
|
|
667
|
+
|
|
668
|
+
// 3. Store in cache
|
|
669
|
+
await cache.set(cacheKey, result, { ttl: 60000 });
|
|
670
|
+
|
|
671
|
+
return result;
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
677
|
+
## Performance Metrics
|
|
678
|
+
|
|
679
|
+
| Component | Operation | Latency | Throughput |
|
|
680
|
+
|-----------|-----------|---------|------------|
|
|
681
|
+
| **Circuit Breaker** | Execute | <1ms | 100k ops/s |
|
|
682
|
+
| **Smart Caching** | L1 Get | <1ms | 1M ops/s |
|
|
683
|
+
| **Smart Caching** | L2 Get | <2ms | 500k ops/s |
|
|
684
|
+
| **Smart Caching** | L3 Get | <10ms | 50k ops/s |
|
|
685
|
+
| **Load Balancer** | Get Next | <0.1ms | 10M ops/s |
|
|
686
|
+
| **Load Balancer** | Health Check | <50ms | N/A |
|
|
687
|
+
|
|
688
|
+
---
|
|
689
|
+
|
|
690
|
+
## Best Practices Summary
|
|
691
|
+
|
|
692
|
+
1. **Always use Circuit Breaker for external calls**
|
|
693
|
+
2. **Implement multi-layer caching for frequently accessed data**
|
|
694
|
+
3. **Use EWMA load balancing for optimal latency**
|
|
695
|
+
4. **Monitor metrics and adjust thresholds**
|
|
696
|
+
5. **Provide fallbacks for critical operations**
|
|
697
|
+
6. **Enable compression for large cached objects**
|
|
698
|
+
7. **Set appropriate TTLs based on data volatility**
|
|
699
|
+
8. **Use cache tags for efficient bulk invalidation**
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
703
|
+
## Troubleshooting
|
|
704
|
+
|
|
705
|
+
### Circuit Breaker Stuck Open
|
|
706
|
+
|
|
707
|
+
**Problem:** Circuit remains open despite healthy service
|
|
708
|
+
|
|
709
|
+
**Solution:**
|
|
710
|
+
```typescript
|
|
711
|
+
// Reduce failure threshold
|
|
712
|
+
breaker.config.failureThreshold = 3;
|
|
713
|
+
|
|
714
|
+
// Reduce retry interval
|
|
715
|
+
breaker.config.retryInterval = 15000;
|
|
716
|
+
|
|
717
|
+
// Manually reset
|
|
718
|
+
breaker.reset();
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
### Low Cache Hit Rate
|
|
722
|
+
|
|
723
|
+
**Problem:** Cache hit rate below 80%
|
|
724
|
+
|
|
725
|
+
**Solution:**
|
|
726
|
+
```typescript
|
|
727
|
+
// Increase cache size
|
|
728
|
+
cache.config.maxSize = 20000;
|
|
729
|
+
|
|
730
|
+
// Enable L2 cache
|
|
731
|
+
cache.config.enableL2 = true;
|
|
732
|
+
|
|
733
|
+
// Increase TTL for stable data
|
|
734
|
+
cache.set(key, value, { ttl: 300000 });
|
|
735
|
+
|
|
736
|
+
// Enable predictive loading
|
|
737
|
+
cache.config.enablePredictive = true;
|
|
738
|
+
```
|
|
739
|
+
|
|
740
|
+
### Load Balancer Uneven Distribution
|
|
741
|
+
|
|
742
|
+
**Problem:** One endpoint receiving most traffic
|
|
743
|
+
|
|
744
|
+
**Solution:**
|
|
745
|
+
```typescript
|
|
746
|
+
// Use weighted strategy
|
|
747
|
+
balancer.config.strategy = 'weighted';
|
|
748
|
+
balancer.config.weights = {
|
|
749
|
+
'rpc1': 33,
|
|
750
|
+
'rpc2': 33,
|
|
751
|
+
'rpc3': 34,
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
// Or use EWMA for automatic optimization
|
|
755
|
+
balancer.config.strategy = 'ewma';
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
---
|
|
759
|
+
|
|
760
|
+
## License
|
|
761
|
+
|
|
762
|
+
MIT License - See [LICENSE](../../LICENSE) for details.
|
|
763
|
+
|
|
764
|
+
---
|
|
765
|
+
|
|
766
|
+
**Advanced Features Module** - Enterprise-grade resilience and performance
|