ton-provider-system 0.1.0 → 0.1.2

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/dist/index.d.cts CHANGED
@@ -797,89 +797,6 @@ declare function createDefaultRegistry(logger?: Logger): ProviderRegistry;
797
797
  */
798
798
  declare function createRegistryFromData(data: RpcConfig, logger?: Logger): ProviderRegistry;
799
799
 
800
- /**
801
- * Unified Provider System - Health Checker
802
- *
803
- * Tests provider connectivity, measures latency, and compares block heights.
804
- * Identifies stale, degraded, or offline providers.
805
- */
806
-
807
- interface HealthCheckConfig {
808
- /** Request timeout in milliseconds */
809
- timeoutMs: number;
810
- /** Maximum blocks behind before marking as stale */
811
- maxBlocksBehind: number;
812
- /** Latency threshold (ms) for degraded status */
813
- degradedLatencyMs: number;
814
- }
815
- /**
816
- * Health Checker
817
- *
818
- * Tests provider health by calling getMasterchainInfo and measuring
819
- * latency and block height.
820
- */
821
- declare class HealthChecker {
822
- private config;
823
- private logger;
824
- private results;
825
- private highestSeqno;
826
- constructor(config?: Partial<HealthCheckConfig>, logger?: Logger);
827
- /**
828
- * Test a single provider's health
829
- */
830
- testProvider(provider: ResolvedProvider): Promise<ProviderHealthResult>;
831
- /**
832
- * Test multiple providers in parallel with staggered batches
833
- */
834
- testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
835
- /**
836
- * Get the last health result for a provider
837
- */
838
- getResult(providerId: string, network: Network): ProviderHealthResult | undefined;
839
- /**
840
- * Get all results for a network
841
- */
842
- getResultsForNetwork(network: Network): ProviderHealthResult[];
843
- /**
844
- * Get available providers for a network (status = available or degraded)
845
- */
846
- getAvailableProviders(network: Network): ProviderHealthResult[];
847
- /**
848
- * Get the best provider for a network (lowest latency among available)
849
- */
850
- getBestProvider(network: Network): ProviderHealthResult | undefined;
851
- /**
852
- * Get highest known seqno for a network
853
- */
854
- getHighestSeqno(network: Network): number;
855
- /**
856
- * Clear all results
857
- */
858
- clearResults(): void;
859
- /**
860
- * Mark a provider as degraded (e.g., on 429 error)
861
- */
862
- markDegraded(providerId: string, network: Network, error?: string): void;
863
- /**
864
- * Mark a provider as offline
865
- */
866
- markOffline(providerId: string, network: Network, error?: string): void;
867
- private getResultKey;
868
- /**
869
- * Get endpoint URL for a provider (handles dynamic providers like Orbs)
870
- */
871
- private getEndpoint;
872
- /**
873
- * Call getMasterchainInfo API
874
- */
875
- private callGetMasterchainInfo;
876
- private sleep;
877
- }
878
- /**
879
- * Create a health checker with default configuration
880
- */
881
- declare function createHealthChecker(config?: Partial<HealthCheckConfig>, logger?: Logger): HealthChecker;
882
-
883
800
  /**
884
801
  * Unified Provider System - Rate Limiter
885
802
  *
@@ -1030,6 +947,104 @@ declare function createRateLimiter(rps: number, logger?: Logger): TokenBucketRat
1030
947
  */
1031
948
  declare function createRateLimiterManager(logger?: Logger): RateLimiterManager;
1032
949
 
950
+ /**
951
+ * Unified Provider System - Health Checker
952
+ *
953
+ * Tests provider connectivity, measures latency, and compares block heights.
954
+ * Identifies stale, degraded, or offline providers.
955
+ */
956
+
957
+ interface HealthCheckConfig {
958
+ /** Request timeout in milliseconds */
959
+ timeoutMs: number;
960
+ /** Maximum blocks behind before marking as stale */
961
+ maxBlocksBehind: number;
962
+ /** Latency threshold (ms) for degraded status */
963
+ degradedLatencyMs: number;
964
+ }
965
+ /**
966
+ * Health Checker
967
+ *
968
+ * Tests provider health by calling getMasterchainInfo and measuring
969
+ * latency and block height.
970
+ */
971
+ declare class HealthChecker {
972
+ private config;
973
+ private logger;
974
+ private results;
975
+ private highestSeqno;
976
+ private rateLimiter;
977
+ constructor(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager);
978
+ /**
979
+ * Set rate limiter (can be set after construction)
980
+ */
981
+ setRateLimiter(rateLimiter: RateLimiterManager | null): void;
982
+ /**
983
+ * Test a single provider's health
984
+ */
985
+ testProvider(provider: ResolvedProvider): Promise<ProviderHealthResult>;
986
+ /**
987
+ * Test multiple providers in parallel with staggered batches
988
+ *
989
+ * @param batchSize - Number of providers to test in parallel (default: 2)
990
+ * @param batchDelayMs - Delay between batches in milliseconds (default: 500 to avoid rate limits)
991
+ */
992
+ testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
993
+ /**
994
+ * Get the last health result for a provider
995
+ */
996
+ getResult(providerId: string, network: Network): ProviderHealthResult | undefined;
997
+ /**
998
+ * Get all results for a network
999
+ */
1000
+ getResultsForNetwork(network: Network): ProviderHealthResult[];
1001
+ /**
1002
+ * Get available providers for a network (status = available or degraded)
1003
+ */
1004
+ getAvailableProviders(network: Network): ProviderHealthResult[];
1005
+ /**
1006
+ * Get the best provider for a network (lowest latency among available)
1007
+ */
1008
+ getBestProvider(network: Network): ProviderHealthResult | undefined;
1009
+ /**
1010
+ * Get highest known seqno for a network
1011
+ */
1012
+ getHighestSeqno(network: Network): number;
1013
+ /**
1014
+ * Clear all results
1015
+ */
1016
+ clearResults(): void;
1017
+ /**
1018
+ * Mark a provider as degraded (e.g., on 429 error)
1019
+ */
1020
+ markDegraded(providerId: string, network: Network, error?: string): void;
1021
+ /**
1022
+ * Mark a provider as offline
1023
+ */
1024
+ markOffline(providerId: string, network: Network, error?: string): void;
1025
+ private getResultKey;
1026
+ /**
1027
+ * Get endpoint URL for a provider (handles dynamic providers like Orbs)
1028
+ */
1029
+ private getEndpoint;
1030
+ /**
1031
+ * Normalize endpoint for provider-specific requirements
1032
+ *
1033
+ * Note: normalizeV2Endpoint now handles all provider-specific cases correctly,
1034
+ * including Tatum (/jsonRPC), OnFinality (/public or /rpc), QuickNode, and GetBlock.
1035
+ */
1036
+ private normalizeEndpointForProvider;
1037
+ /**
1038
+ * Call getMasterchainInfo API with provider-specific handling
1039
+ */
1040
+ private callGetMasterchainInfo;
1041
+ private sleep;
1042
+ }
1043
+ /**
1044
+ * Create a health checker with default configuration
1045
+ */
1046
+ declare function createHealthChecker(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager): HealthChecker;
1047
+
1033
1048
  /**
1034
1049
  * Unified Provider System - Provider Selector
1035
1050
  *
@@ -1353,8 +1368,29 @@ declare class NodeAdapter {
1353
1368
  * Get TonClient instance
1354
1369
  *
1355
1370
  * Creates a new client if endpoint changed, otherwise returns cached.
1371
+ *
1372
+ * NOTE: Direct TonClient calls bypass rate limiting. For rate-limited operations,
1373
+ * use adapter methods (getAddressState, runGetMethod, etc.) or wrap your calls
1374
+ * with rate limit token acquisition.
1375
+ *
1376
+ * Example with rate limiting:
1377
+ * ```typescript
1378
+ * const endpoint = await adapter.manager.getEndpointWithRateLimit();
1379
+ * // Make your TonClient call
1380
+ * adapter.manager.reportSuccess(); // or reportError() on failure
1381
+ * ```
1356
1382
  */
1357
1383
  getClient(): Promise<TonClient>;
1384
+ /**
1385
+ * Get TonClient with rate limiting applied
1386
+ *
1387
+ * Acquires a rate limit token before returning the client.
1388
+ * Use this when you need to ensure rate limiting is respected.
1389
+ *
1390
+ * Note: This only acquires ONE token. For multiple operations,
1391
+ * you should acquire tokens before each operation or use adapter methods.
1392
+ */
1393
+ getClientWithRateLimit(timeoutMs?: number): Promise<TonClient>;
1358
1394
  /**
1359
1395
  * Reset client cache (forces new client creation)
1360
1396
  */
@@ -1401,8 +1437,45 @@ declare class NodeAdapter {
1401
1437
  declare function createNodeAdapter(manager: ProviderManager, logger?: Logger): NodeAdapter;
1402
1438
  /**
1403
1439
  * Get TonClient from ProviderManager (convenience function)
1440
+ *
1441
+ * WARNING: Direct TonClient API calls bypass rate limiting!
1442
+ * For rate-limited operations, use one of these approaches:
1443
+ *
1444
+ * 1. Use adapter methods (recommended):
1445
+ * ```typescript
1446
+ * const adapter = new NodeAdapter(manager);
1447
+ * const state = await adapter.getAddressState(address);
1448
+ * ```
1449
+ *
1450
+ * 2. Acquire rate limit tokens before operations:
1451
+ * ```typescript
1452
+ * await manager.getEndpointWithRateLimit(); // Acquire token
1453
+ * const result = await client.someMethod();
1454
+ * manager.reportSuccess(); // or reportError() on failure
1455
+ * ```
1456
+ *
1457
+ * 3. Use getTonClientWithRateLimit() for operations that need rate limiting
1404
1458
  */
1405
1459
  declare function getTonClient(manager: ProviderManager): Promise<TonClient>;
1460
+ /**
1461
+ * Get TonClient with rate limiting wrapper
1462
+ *
1463
+ * Returns a TonClient along with helper methods to ensure rate limiting.
1464
+ * Use this when you need to make multiple TonClient calls with rate limiting.
1465
+ *
1466
+ * Example:
1467
+ * ```typescript
1468
+ * const { client, withRateLimit } = await getTonClientWithRateLimit(manager);
1469
+ *
1470
+ * // Wrap your operations
1471
+ * const balance = await withRateLimit(() => client.getBalance(address));
1472
+ * const state = await withRateLimit(() => client.getContractState(address));
1473
+ * ```
1474
+ */
1475
+ declare function getTonClientWithRateLimit(manager: ProviderManager): Promise<{
1476
+ client: TonClient;
1477
+ withRateLimit: <T>(fn: () => Promise<T>) => Promise<T>;
1478
+ }>;
1406
1479
  /**
1407
1480
  * Get TonClient for network (one-shot convenience)
1408
1481
  */
@@ -1522,7 +1595,10 @@ declare function createBrowserAdapterForNetwork(network: Network, configPath?: s
1522
1595
  * - toncenter.com: POST to /api/v2/jsonRPC
1523
1596
  * - Chainstack: POST to /api/v2/jsonRPC (needs /jsonRPC suffix!)
1524
1597
  * - TON Access (orbs): Already returns correct JSON-RPC endpoint
1525
- * - QuickNode: Usually needs /jsonRPC appended
1598
+ * - QuickNode: Needs /jsonRPC appended to base URL
1599
+ * - GetBlock: Needs /jsonRPC appended to base URL
1600
+ * - Tatum: Gateway URLs need /jsonRPC appended (gateway.tatum.io/jsonRPC)
1601
+ * - OnFinality: Uses /public or /rpc path with query params - preserve query params
1526
1602
  */
1527
1603
  declare function normalizeV2Endpoint(endpoint: string): string;
1528
1604
  /**
@@ -1683,4 +1759,4 @@ declare function isTimeoutError(error: unknown): error is TimeoutError;
1683
1759
  */
1684
1760
  declare function isRateLimitError(error: unknown): boolean;
1685
1761
 
1686
- export { type ApiVersion, ApiVersionSchema, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, type ProviderConfig, ProviderConfigSchema, type ProviderEndpoints, ProviderError, type ProviderHealthResult, ProviderManager, type ProviderManagerOptions, type ProviderManagerState, ProviderRegistry, ProviderSelector, type ProviderState, type ProviderStatus, type ProviderType, ProviderTypeSchema, QUICKNODE_RATE_LIMIT, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProviderManager, createRateLimiter, createRateLimiterManager, createRegistry, createRegistryFromData, createRegistryFromFile, createSelector, createTimeoutController, detectNetworkFromEndpoint, fetchWithTimeout, getBaseUrl, getDefaultProvidersForNetwork, getEnvVar, getProviderManager, getProvidersForNetwork, getRateLimitForType, getTonClient, getTonClientForNetwork, isApiVersion, isChainstackUrl, isNetwork, isOrbsUrl, isProviderType, isQuickNodeUrl, isRateLimitError, isTimeoutError, isTonCenterUrl, isValidHttpUrl, isValidWsUrl, loadBuiltinConfig, loadConfig, loadConfigFromData, loadConfigFromUrl, mergeConfigs, mergeWithDefaults, normalizeV2Endpoint, parseProviderConfig, parseRpcConfig, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };
1762
+ export { type ApiVersion, ApiVersionSchema, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, type ProviderConfig, ProviderConfigSchema, type ProviderEndpoints, ProviderError, type ProviderHealthResult, ProviderManager, type ProviderManagerOptions, type ProviderManagerState, ProviderRegistry, ProviderSelector, type ProviderState, type ProviderStatus, type ProviderType, ProviderTypeSchema, QUICKNODE_RATE_LIMIT, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProviderManager, createRateLimiter, createRateLimiterManager, createRegistry, createRegistryFromData, createRegistryFromFile, createSelector, createTimeoutController, detectNetworkFromEndpoint, fetchWithTimeout, getBaseUrl, getDefaultProvidersForNetwork, getEnvVar, getProviderManager, getProvidersForNetwork, getRateLimitForType, getTonClient, getTonClientForNetwork, getTonClientWithRateLimit, isApiVersion, isChainstackUrl, isNetwork, isOrbsUrl, isProviderType, isQuickNodeUrl, isRateLimitError, isTimeoutError, isTonCenterUrl, isValidHttpUrl, isValidWsUrl, loadBuiltinConfig, loadConfig, loadConfigFromData, loadConfigFromUrl, mergeConfigs, mergeWithDefaults, normalizeV2Endpoint, parseProviderConfig, parseRpcConfig, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };
package/dist/index.d.ts CHANGED
@@ -797,89 +797,6 @@ declare function createDefaultRegistry(logger?: Logger): ProviderRegistry;
797
797
  */
798
798
  declare function createRegistryFromData(data: RpcConfig, logger?: Logger): ProviderRegistry;
799
799
 
800
- /**
801
- * Unified Provider System - Health Checker
802
- *
803
- * Tests provider connectivity, measures latency, and compares block heights.
804
- * Identifies stale, degraded, or offline providers.
805
- */
806
-
807
- interface HealthCheckConfig {
808
- /** Request timeout in milliseconds */
809
- timeoutMs: number;
810
- /** Maximum blocks behind before marking as stale */
811
- maxBlocksBehind: number;
812
- /** Latency threshold (ms) for degraded status */
813
- degradedLatencyMs: number;
814
- }
815
- /**
816
- * Health Checker
817
- *
818
- * Tests provider health by calling getMasterchainInfo and measuring
819
- * latency and block height.
820
- */
821
- declare class HealthChecker {
822
- private config;
823
- private logger;
824
- private results;
825
- private highestSeqno;
826
- constructor(config?: Partial<HealthCheckConfig>, logger?: Logger);
827
- /**
828
- * Test a single provider's health
829
- */
830
- testProvider(provider: ResolvedProvider): Promise<ProviderHealthResult>;
831
- /**
832
- * Test multiple providers in parallel with staggered batches
833
- */
834
- testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
835
- /**
836
- * Get the last health result for a provider
837
- */
838
- getResult(providerId: string, network: Network): ProviderHealthResult | undefined;
839
- /**
840
- * Get all results for a network
841
- */
842
- getResultsForNetwork(network: Network): ProviderHealthResult[];
843
- /**
844
- * Get available providers for a network (status = available or degraded)
845
- */
846
- getAvailableProviders(network: Network): ProviderHealthResult[];
847
- /**
848
- * Get the best provider for a network (lowest latency among available)
849
- */
850
- getBestProvider(network: Network): ProviderHealthResult | undefined;
851
- /**
852
- * Get highest known seqno for a network
853
- */
854
- getHighestSeqno(network: Network): number;
855
- /**
856
- * Clear all results
857
- */
858
- clearResults(): void;
859
- /**
860
- * Mark a provider as degraded (e.g., on 429 error)
861
- */
862
- markDegraded(providerId: string, network: Network, error?: string): void;
863
- /**
864
- * Mark a provider as offline
865
- */
866
- markOffline(providerId: string, network: Network, error?: string): void;
867
- private getResultKey;
868
- /**
869
- * Get endpoint URL for a provider (handles dynamic providers like Orbs)
870
- */
871
- private getEndpoint;
872
- /**
873
- * Call getMasterchainInfo API
874
- */
875
- private callGetMasterchainInfo;
876
- private sleep;
877
- }
878
- /**
879
- * Create a health checker with default configuration
880
- */
881
- declare function createHealthChecker(config?: Partial<HealthCheckConfig>, logger?: Logger): HealthChecker;
882
-
883
800
  /**
884
801
  * Unified Provider System - Rate Limiter
885
802
  *
@@ -1030,6 +947,104 @@ declare function createRateLimiter(rps: number, logger?: Logger): TokenBucketRat
1030
947
  */
1031
948
  declare function createRateLimiterManager(logger?: Logger): RateLimiterManager;
1032
949
 
950
+ /**
951
+ * Unified Provider System - Health Checker
952
+ *
953
+ * Tests provider connectivity, measures latency, and compares block heights.
954
+ * Identifies stale, degraded, or offline providers.
955
+ */
956
+
957
+ interface HealthCheckConfig {
958
+ /** Request timeout in milliseconds */
959
+ timeoutMs: number;
960
+ /** Maximum blocks behind before marking as stale */
961
+ maxBlocksBehind: number;
962
+ /** Latency threshold (ms) for degraded status */
963
+ degradedLatencyMs: number;
964
+ }
965
+ /**
966
+ * Health Checker
967
+ *
968
+ * Tests provider health by calling getMasterchainInfo and measuring
969
+ * latency and block height.
970
+ */
971
+ declare class HealthChecker {
972
+ private config;
973
+ private logger;
974
+ private results;
975
+ private highestSeqno;
976
+ private rateLimiter;
977
+ constructor(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager);
978
+ /**
979
+ * Set rate limiter (can be set after construction)
980
+ */
981
+ setRateLimiter(rateLimiter: RateLimiterManager | null): void;
982
+ /**
983
+ * Test a single provider's health
984
+ */
985
+ testProvider(provider: ResolvedProvider): Promise<ProviderHealthResult>;
986
+ /**
987
+ * Test multiple providers in parallel with staggered batches
988
+ *
989
+ * @param batchSize - Number of providers to test in parallel (default: 2)
990
+ * @param batchDelayMs - Delay between batches in milliseconds (default: 500 to avoid rate limits)
991
+ */
992
+ testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
993
+ /**
994
+ * Get the last health result for a provider
995
+ */
996
+ getResult(providerId: string, network: Network): ProviderHealthResult | undefined;
997
+ /**
998
+ * Get all results for a network
999
+ */
1000
+ getResultsForNetwork(network: Network): ProviderHealthResult[];
1001
+ /**
1002
+ * Get available providers for a network (status = available or degraded)
1003
+ */
1004
+ getAvailableProviders(network: Network): ProviderHealthResult[];
1005
+ /**
1006
+ * Get the best provider for a network (lowest latency among available)
1007
+ */
1008
+ getBestProvider(network: Network): ProviderHealthResult | undefined;
1009
+ /**
1010
+ * Get highest known seqno for a network
1011
+ */
1012
+ getHighestSeqno(network: Network): number;
1013
+ /**
1014
+ * Clear all results
1015
+ */
1016
+ clearResults(): void;
1017
+ /**
1018
+ * Mark a provider as degraded (e.g., on 429 error)
1019
+ */
1020
+ markDegraded(providerId: string, network: Network, error?: string): void;
1021
+ /**
1022
+ * Mark a provider as offline
1023
+ */
1024
+ markOffline(providerId: string, network: Network, error?: string): void;
1025
+ private getResultKey;
1026
+ /**
1027
+ * Get endpoint URL for a provider (handles dynamic providers like Orbs)
1028
+ */
1029
+ private getEndpoint;
1030
+ /**
1031
+ * Normalize endpoint for provider-specific requirements
1032
+ *
1033
+ * Note: normalizeV2Endpoint now handles all provider-specific cases correctly,
1034
+ * including Tatum (/jsonRPC), OnFinality (/public or /rpc), QuickNode, and GetBlock.
1035
+ */
1036
+ private normalizeEndpointForProvider;
1037
+ /**
1038
+ * Call getMasterchainInfo API with provider-specific handling
1039
+ */
1040
+ private callGetMasterchainInfo;
1041
+ private sleep;
1042
+ }
1043
+ /**
1044
+ * Create a health checker with default configuration
1045
+ */
1046
+ declare function createHealthChecker(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager): HealthChecker;
1047
+
1033
1048
  /**
1034
1049
  * Unified Provider System - Provider Selector
1035
1050
  *
@@ -1353,8 +1368,29 @@ declare class NodeAdapter {
1353
1368
  * Get TonClient instance
1354
1369
  *
1355
1370
  * Creates a new client if endpoint changed, otherwise returns cached.
1371
+ *
1372
+ * NOTE: Direct TonClient calls bypass rate limiting. For rate-limited operations,
1373
+ * use adapter methods (getAddressState, runGetMethod, etc.) or wrap your calls
1374
+ * with rate limit token acquisition.
1375
+ *
1376
+ * Example with rate limiting:
1377
+ * ```typescript
1378
+ * const endpoint = await adapter.manager.getEndpointWithRateLimit();
1379
+ * // Make your TonClient call
1380
+ * adapter.manager.reportSuccess(); // or reportError() on failure
1381
+ * ```
1356
1382
  */
1357
1383
  getClient(): Promise<TonClient>;
1384
+ /**
1385
+ * Get TonClient with rate limiting applied
1386
+ *
1387
+ * Acquires a rate limit token before returning the client.
1388
+ * Use this when you need to ensure rate limiting is respected.
1389
+ *
1390
+ * Note: This only acquires ONE token. For multiple operations,
1391
+ * you should acquire tokens before each operation or use adapter methods.
1392
+ */
1393
+ getClientWithRateLimit(timeoutMs?: number): Promise<TonClient>;
1358
1394
  /**
1359
1395
  * Reset client cache (forces new client creation)
1360
1396
  */
@@ -1401,8 +1437,45 @@ declare class NodeAdapter {
1401
1437
  declare function createNodeAdapter(manager: ProviderManager, logger?: Logger): NodeAdapter;
1402
1438
  /**
1403
1439
  * Get TonClient from ProviderManager (convenience function)
1440
+ *
1441
+ * WARNING: Direct TonClient API calls bypass rate limiting!
1442
+ * For rate-limited operations, use one of these approaches:
1443
+ *
1444
+ * 1. Use adapter methods (recommended):
1445
+ * ```typescript
1446
+ * const adapter = new NodeAdapter(manager);
1447
+ * const state = await adapter.getAddressState(address);
1448
+ * ```
1449
+ *
1450
+ * 2. Acquire rate limit tokens before operations:
1451
+ * ```typescript
1452
+ * await manager.getEndpointWithRateLimit(); // Acquire token
1453
+ * const result = await client.someMethod();
1454
+ * manager.reportSuccess(); // or reportError() on failure
1455
+ * ```
1456
+ *
1457
+ * 3. Use getTonClientWithRateLimit() for operations that need rate limiting
1404
1458
  */
1405
1459
  declare function getTonClient(manager: ProviderManager): Promise<TonClient>;
1460
+ /**
1461
+ * Get TonClient with rate limiting wrapper
1462
+ *
1463
+ * Returns a TonClient along with helper methods to ensure rate limiting.
1464
+ * Use this when you need to make multiple TonClient calls with rate limiting.
1465
+ *
1466
+ * Example:
1467
+ * ```typescript
1468
+ * const { client, withRateLimit } = await getTonClientWithRateLimit(manager);
1469
+ *
1470
+ * // Wrap your operations
1471
+ * const balance = await withRateLimit(() => client.getBalance(address));
1472
+ * const state = await withRateLimit(() => client.getContractState(address));
1473
+ * ```
1474
+ */
1475
+ declare function getTonClientWithRateLimit(manager: ProviderManager): Promise<{
1476
+ client: TonClient;
1477
+ withRateLimit: <T>(fn: () => Promise<T>) => Promise<T>;
1478
+ }>;
1406
1479
  /**
1407
1480
  * Get TonClient for network (one-shot convenience)
1408
1481
  */
@@ -1522,7 +1595,10 @@ declare function createBrowserAdapterForNetwork(network: Network, configPath?: s
1522
1595
  * - toncenter.com: POST to /api/v2/jsonRPC
1523
1596
  * - Chainstack: POST to /api/v2/jsonRPC (needs /jsonRPC suffix!)
1524
1597
  * - TON Access (orbs): Already returns correct JSON-RPC endpoint
1525
- * - QuickNode: Usually needs /jsonRPC appended
1598
+ * - QuickNode: Needs /jsonRPC appended to base URL
1599
+ * - GetBlock: Needs /jsonRPC appended to base URL
1600
+ * - Tatum: Gateway URLs need /jsonRPC appended (gateway.tatum.io/jsonRPC)
1601
+ * - OnFinality: Uses /public or /rpc path with query params - preserve query params
1526
1602
  */
1527
1603
  declare function normalizeV2Endpoint(endpoint: string): string;
1528
1604
  /**
@@ -1683,4 +1759,4 @@ declare function isTimeoutError(error: unknown): error is TimeoutError;
1683
1759
  */
1684
1760
  declare function isRateLimitError(error: unknown): boolean;
1685
1761
 
1686
- export { type ApiVersion, ApiVersionSchema, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, type ProviderConfig, ProviderConfigSchema, type ProviderEndpoints, ProviderError, type ProviderHealthResult, ProviderManager, type ProviderManagerOptions, type ProviderManagerState, ProviderRegistry, ProviderSelector, type ProviderState, type ProviderStatus, type ProviderType, ProviderTypeSchema, QUICKNODE_RATE_LIMIT, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProviderManager, createRateLimiter, createRateLimiterManager, createRegistry, createRegistryFromData, createRegistryFromFile, createSelector, createTimeoutController, detectNetworkFromEndpoint, fetchWithTimeout, getBaseUrl, getDefaultProvidersForNetwork, getEnvVar, getProviderManager, getProvidersForNetwork, getRateLimitForType, getTonClient, getTonClientForNetwork, isApiVersion, isChainstackUrl, isNetwork, isOrbsUrl, isProviderType, isQuickNodeUrl, isRateLimitError, isTimeoutError, isTonCenterUrl, isValidHttpUrl, isValidWsUrl, loadBuiltinConfig, loadConfig, loadConfigFromData, loadConfigFromUrl, mergeConfigs, mergeWithDefaults, normalizeV2Endpoint, parseProviderConfig, parseRpcConfig, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };
1762
+ export { type ApiVersion, ApiVersionSchema, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, type ProviderConfig, ProviderConfigSchema, type ProviderEndpoints, ProviderError, type ProviderHealthResult, ProviderManager, type ProviderManagerOptions, type ProviderManagerState, ProviderRegistry, ProviderSelector, type ProviderState, type ProviderStatus, type ProviderType, ProviderTypeSchema, QUICKNODE_RATE_LIMIT, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProviderManager, createRateLimiter, createRateLimiterManager, createRegistry, createRegistryFromData, createRegistryFromFile, createSelector, createTimeoutController, detectNetworkFromEndpoint, fetchWithTimeout, getBaseUrl, getDefaultProvidersForNetwork, getEnvVar, getProviderManager, getProvidersForNetwork, getRateLimitForType, getTonClient, getTonClientForNetwork, getTonClientWithRateLimit, isApiVersion, isChainstackUrl, isNetwork, isOrbsUrl, isProviderType, isQuickNodeUrl, isRateLimitError, isTimeoutError, isTonCenterUrl, isValidHttpUrl, isValidWsUrl, loadBuiltinConfig, loadConfig, loadConfigFromData, loadConfigFromUrl, mergeConfigs, mergeWithDefaults, normalizeV2Endpoint, parseProviderConfig, parseRpcConfig, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };