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.cjs +280 -44
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +161 -85
- package/dist/index.d.ts +161 -85
- package/dist/index.js +279 -45
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
- package/rpc.json +7 -22
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:
|
|
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:
|
|
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 };
|