ton-provider-system 0.2.2 → 0.3.0

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
@@ -875,7 +875,10 @@ declare class TokenBucketRateLimiter {
875
875
  */
876
876
  release(): void;
877
877
  /**
878
- * Report a successful request (resets backoff)
878
+ * Report a successful request (gradually reduces backoff)
879
+ *
880
+ * Instead of immediately clearing backoff, we gradually reduce it to prevent
881
+ * immediately hitting the rate limit again after a single success.
879
882
  */
880
883
  reportSuccess(): void;
881
884
  /**
@@ -989,6 +992,8 @@ declare class HealthChecker {
989
992
  private logger;
990
993
  private results;
991
994
  private highestSeqno;
995
+ /** Rolling window of recent valid seqnos per network (for outlier-robust blocksBehind). */
996
+ private seqnoSamples;
992
997
  private rateLimiter;
993
998
  constructor(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager);
994
999
  /**
@@ -1004,6 +1009,7 @@ declare class HealthChecker {
1004
1009
  *
1005
1010
  * @param batchSize - Number of providers to test in parallel (default: 2)
1006
1011
  * @param batchDelayMs - Delay between batches in milliseconds (default: 500 to avoid rate limits)
1012
+ * If not provided, calculates delay based on lowest RPS in batch
1007
1013
  */
1008
1014
  testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
1009
1015
  /**
@@ -1042,6 +1048,18 @@ declare class HealthChecker {
1042
1048
  */
1043
1049
  markOffline(providerId: string, network: Network, error?: string): void;
1044
1050
  private getResultKey;
1051
+ /**
1052
+ * Record a valid seqno sample and return an outlier-robust freshness baseline
1053
+ * (median of recent samples for the network). Using the median instead of the
1054
+ * raw maximum prevents a single provider that reports an inflated seqno from
1055
+ * poisoning `blocksBehind` for every other (healthy) provider. See P2-2.
1056
+ */
1057
+ private recordSeqnoAndGetBaseline;
1058
+ /**
1059
+ * Detect a "non-JSON response" error (e.g. an HTML error page returned by a
1060
+ * misbehaving gateway), used to decide whether to re-discover an Orbs endpoint.
1061
+ */
1062
+ private isNonJsonResponseError;
1045
1063
  /**
1046
1064
  * Get endpoint URL for a provider (handles dynamic providers like Orbs)
1047
1065
  */
@@ -1084,6 +1102,8 @@ interface SelectionConfig {
1084
1102
  freshnessWeight: number;
1085
1103
  /** Minimum acceptable provider status */
1086
1104
  minStatus: ProviderStatus[];
1105
+ /** Cooldown period (ms) before retrying failed providers (default: 30000) */
1106
+ retryCooldownMs: number;
1087
1107
  }
1088
1108
  /**
1089
1109
  * Provider Selector
@@ -1196,6 +1216,22 @@ declare class ProviderSelector {
1196
1216
  * 2. Health check result browserCompatible flag (if health check was performed)
1197
1217
  */
1198
1218
  private filterBrowserCompatible;
1219
+ /**
1220
+ * Check if an error is retryable (temporary) or permanent
1221
+ *
1222
+ * Permanent errors (never retry):
1223
+ * - 404 (Not Found) - endpoint doesn't exist
1224
+ * - 401 (Unauthorized) - invalid API key
1225
+ * - Invalid API key errors
1226
+ *
1227
+ * Retryable errors (can retry after cooldown):
1228
+ * - 503 (Service Unavailable) - temporary server issue
1229
+ * - 502 (Bad Gateway) - temporary gateway issue
1230
+ * - Timeout errors - network issues
1231
+ * - Network errors - connection issues
1232
+ * - 429 (Rate Limit) - temporary rate limit (handled separately)
1233
+ */
1234
+ private isRetryableError;
1199
1235
  }
1200
1236
  /**
1201
1237
  * Create a provider selector
@@ -1554,18 +1590,26 @@ declare class BrowserAdapter {
1554
1590
  getEndpointWithRateLimit(timeoutMs?: number): Promise<string>;
1555
1591
  /**
1556
1592
  * Make a JSON-RPC call to the TON API
1593
+ *
1594
+ * Note: Uses rate limiting to prevent 429 errors.
1557
1595
  */
1558
1596
  jsonRpc<T = unknown>(method: string, params?: Record<string, unknown>, timeoutMs?: number): Promise<T>;
1559
1597
  /**
1560
1598
  * Get address state
1599
+ *
1600
+ * Note: Uses rate limiting to prevent 429 errors.
1561
1601
  */
1562
1602
  getAddressState(address: string, timeoutMs?: number): Promise<'uninit' | 'active' | 'frozen'>;
1563
1603
  /**
1564
1604
  * Get address balance
1605
+ *
1606
+ * Note: Uses rate limiting to prevent 429 errors.
1565
1607
  */
1566
1608
  getAddressBalance(address: string, timeoutMs?: number): Promise<bigint>;
1567
1609
  /**
1568
1610
  * Get address information
1611
+ *
1612
+ * Note: Uses rate limiting to prevent 429 errors.
1569
1613
  */
1570
1614
  getAddressInfo(address: string, timeoutMs?: number): Promise<{
1571
1615
  state: 'uninit' | 'active' | 'frozen';
@@ -1575,6 +1619,8 @@ declare class BrowserAdapter {
1575
1619
  }>;
1576
1620
  /**
1577
1621
  * Run get method
1622
+ *
1623
+ * Note: Uses rate limiting to prevent 429 errors.
1578
1624
  */
1579
1625
  runGetMethod(address: string, method: string, stack?: unknown[], timeoutMs?: number): Promise<{
1580
1626
  exit_code: number;
@@ -1692,6 +1738,17 @@ declare function isValidHttpUrl(str: string): boolean;
1692
1738
  * Validate that a string is a valid WebSocket URL.
1693
1739
  */
1694
1740
  declare function isValidWsUrl(str: string): boolean;
1741
+ /**
1742
+ * Redact credentials from an endpoint URL so it is safe to log.
1743
+ *
1744
+ * Masks (a) sensitive query-param values (`apikey`, `api_key`, `key`, `token`,
1745
+ * `secret`, `password`), (b) credential-like path segments while preserving
1746
+ * structural ones (`api`, `v2`, `v3`, `jsonRPC`, `rpc`, `public`, …), and
1747
+ * (c) a credential-like leading host label (e.g. a QuickNode subdomain key).
1748
+ *
1749
+ * For logging only — never use the result to make requests.
1750
+ */
1751
+ declare function redactUrl(url: string): string;
1695
1752
 
1696
1753
  /**
1697
1754
  * Unified Provider System - Timeout Utilities
@@ -2027,4 +2084,4 @@ declare class GenericProvider extends BaseProvider {
2027
2084
  */
2028
2085
  declare function createProvider(provider: ResolvedProvider): BaseProvider;
2029
2086
 
2030
- export { type ApiVersion, ApiVersionSchema, BaseProvider, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ChainstackProvider, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, GenericProvider, GetBlockProvider, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, OnFinalityProvider, OrbsProvider, 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, QuickNodeProvider, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TatumProvider, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, TonCenterProvider, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProvider, 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 };
2087
+ export { type ApiVersion, ApiVersionSchema, BaseProvider, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ChainstackProvider, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, GenericProvider, GetBlockProvider, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, OnFinalityProvider, OrbsProvider, 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, QuickNodeProvider, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TatumProvider, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, TonCenterProvider, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProvider, 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, redactUrl, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };
package/dist/index.d.ts CHANGED
@@ -875,7 +875,10 @@ declare class TokenBucketRateLimiter {
875
875
  */
876
876
  release(): void;
877
877
  /**
878
- * Report a successful request (resets backoff)
878
+ * Report a successful request (gradually reduces backoff)
879
+ *
880
+ * Instead of immediately clearing backoff, we gradually reduce it to prevent
881
+ * immediately hitting the rate limit again after a single success.
879
882
  */
880
883
  reportSuccess(): void;
881
884
  /**
@@ -989,6 +992,8 @@ declare class HealthChecker {
989
992
  private logger;
990
993
  private results;
991
994
  private highestSeqno;
995
+ /** Rolling window of recent valid seqnos per network (for outlier-robust blocksBehind). */
996
+ private seqnoSamples;
992
997
  private rateLimiter;
993
998
  constructor(config?: Partial<HealthCheckConfig>, logger?: Logger, rateLimiter?: RateLimiterManager);
994
999
  /**
@@ -1004,6 +1009,7 @@ declare class HealthChecker {
1004
1009
  *
1005
1010
  * @param batchSize - Number of providers to test in parallel (default: 2)
1006
1011
  * @param batchDelayMs - Delay between batches in milliseconds (default: 500 to avoid rate limits)
1012
+ * If not provided, calculates delay based on lowest RPS in batch
1007
1013
  */
1008
1014
  testProviders(providers: ResolvedProvider[], batchSize?: number, batchDelayMs?: number): Promise<ProviderHealthResult[]>;
1009
1015
  /**
@@ -1042,6 +1048,18 @@ declare class HealthChecker {
1042
1048
  */
1043
1049
  markOffline(providerId: string, network: Network, error?: string): void;
1044
1050
  private getResultKey;
1051
+ /**
1052
+ * Record a valid seqno sample and return an outlier-robust freshness baseline
1053
+ * (median of recent samples for the network). Using the median instead of the
1054
+ * raw maximum prevents a single provider that reports an inflated seqno from
1055
+ * poisoning `blocksBehind` for every other (healthy) provider. See P2-2.
1056
+ */
1057
+ private recordSeqnoAndGetBaseline;
1058
+ /**
1059
+ * Detect a "non-JSON response" error (e.g. an HTML error page returned by a
1060
+ * misbehaving gateway), used to decide whether to re-discover an Orbs endpoint.
1061
+ */
1062
+ private isNonJsonResponseError;
1045
1063
  /**
1046
1064
  * Get endpoint URL for a provider (handles dynamic providers like Orbs)
1047
1065
  */
@@ -1084,6 +1102,8 @@ interface SelectionConfig {
1084
1102
  freshnessWeight: number;
1085
1103
  /** Minimum acceptable provider status */
1086
1104
  minStatus: ProviderStatus[];
1105
+ /** Cooldown period (ms) before retrying failed providers (default: 30000) */
1106
+ retryCooldownMs: number;
1087
1107
  }
1088
1108
  /**
1089
1109
  * Provider Selector
@@ -1196,6 +1216,22 @@ declare class ProviderSelector {
1196
1216
  * 2. Health check result browserCompatible flag (if health check was performed)
1197
1217
  */
1198
1218
  private filterBrowserCompatible;
1219
+ /**
1220
+ * Check if an error is retryable (temporary) or permanent
1221
+ *
1222
+ * Permanent errors (never retry):
1223
+ * - 404 (Not Found) - endpoint doesn't exist
1224
+ * - 401 (Unauthorized) - invalid API key
1225
+ * - Invalid API key errors
1226
+ *
1227
+ * Retryable errors (can retry after cooldown):
1228
+ * - 503 (Service Unavailable) - temporary server issue
1229
+ * - 502 (Bad Gateway) - temporary gateway issue
1230
+ * - Timeout errors - network issues
1231
+ * - Network errors - connection issues
1232
+ * - 429 (Rate Limit) - temporary rate limit (handled separately)
1233
+ */
1234
+ private isRetryableError;
1199
1235
  }
1200
1236
  /**
1201
1237
  * Create a provider selector
@@ -1554,18 +1590,26 @@ declare class BrowserAdapter {
1554
1590
  getEndpointWithRateLimit(timeoutMs?: number): Promise<string>;
1555
1591
  /**
1556
1592
  * Make a JSON-RPC call to the TON API
1593
+ *
1594
+ * Note: Uses rate limiting to prevent 429 errors.
1557
1595
  */
1558
1596
  jsonRpc<T = unknown>(method: string, params?: Record<string, unknown>, timeoutMs?: number): Promise<T>;
1559
1597
  /**
1560
1598
  * Get address state
1599
+ *
1600
+ * Note: Uses rate limiting to prevent 429 errors.
1561
1601
  */
1562
1602
  getAddressState(address: string, timeoutMs?: number): Promise<'uninit' | 'active' | 'frozen'>;
1563
1603
  /**
1564
1604
  * Get address balance
1605
+ *
1606
+ * Note: Uses rate limiting to prevent 429 errors.
1565
1607
  */
1566
1608
  getAddressBalance(address: string, timeoutMs?: number): Promise<bigint>;
1567
1609
  /**
1568
1610
  * Get address information
1611
+ *
1612
+ * Note: Uses rate limiting to prevent 429 errors.
1569
1613
  */
1570
1614
  getAddressInfo(address: string, timeoutMs?: number): Promise<{
1571
1615
  state: 'uninit' | 'active' | 'frozen';
@@ -1575,6 +1619,8 @@ declare class BrowserAdapter {
1575
1619
  }>;
1576
1620
  /**
1577
1621
  * Run get method
1622
+ *
1623
+ * Note: Uses rate limiting to prevent 429 errors.
1578
1624
  */
1579
1625
  runGetMethod(address: string, method: string, stack?: unknown[], timeoutMs?: number): Promise<{
1580
1626
  exit_code: number;
@@ -1692,6 +1738,17 @@ declare function isValidHttpUrl(str: string): boolean;
1692
1738
  * Validate that a string is a valid WebSocket URL.
1693
1739
  */
1694
1740
  declare function isValidWsUrl(str: string): boolean;
1741
+ /**
1742
+ * Redact credentials from an endpoint URL so it is safe to log.
1743
+ *
1744
+ * Masks (a) sensitive query-param values (`apikey`, `api_key`, `key`, `token`,
1745
+ * `secret`, `password`), (b) credential-like path segments while preserving
1746
+ * structural ones (`api`, `v2`, `v3`, `jsonRPC`, `rpc`, `public`, …), and
1747
+ * (c) a credential-like leading host label (e.g. a QuickNode subdomain key).
1748
+ *
1749
+ * For logging only — never use the result to make requests.
1750
+ */
1751
+ declare function redactUrl(url: string): string;
1695
1752
 
1696
1753
  /**
1697
1754
  * Unified Provider System - Timeout Utilities
@@ -2027,4 +2084,4 @@ declare class GenericProvider extends BaseProvider {
2027
2084
  */
2028
2085
  declare function createProvider(provider: ResolvedProvider): BaseProvider;
2029
2086
 
2030
- export { type ApiVersion, ApiVersionSchema, BaseProvider, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ChainstackProvider, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, GenericProvider, GetBlockProvider, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, OnFinalityProvider, OrbsProvider, 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, QuickNodeProvider, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TatumProvider, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, TonCenterProvider, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProvider, 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 };
2087
+ export { type ApiVersion, ApiVersionSchema, BaseProvider, BrowserAdapter, CHAINSTACK_RATE_LIMIT, ChainstackProvider, ConfigError, DEFAULT_CONTRACT_TIMEOUT_MS, DEFAULT_HEALTH_CHECK_TIMEOUT_MS, DEFAULT_PROVIDERS, DEFAULT_PROVIDER_TIMEOUT_MS, DEFAULT_RATE_LIMIT, GenericProvider, GetBlockProvider, type HealthCheckConfig, HealthChecker, type Logger, type MasterchainInfo, type Network, type NetworkDefaults, NetworkSchema, NodeAdapter, ORBS_RATE_LIMIT, OnFinalityProvider, OrbsProvider, 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, QuickNodeProvider, type RateLimitConfig, RateLimitError, type RateLimitState, RateLimiterManager, type ResolvedProvider, type RetryOptions, type RpcConfig, RpcConfigSchema, type SelectionConfig, type StateListener, TatumProvider, TimeoutError, TokenBucketRateLimiter, type TonApiResponse, TonCenterProvider, buildGetAddressBalanceUrl, buildGetAddressInfoUrl, buildGetAddressStateUrl, buildRestUrl, createBrowserAdapter, createBrowserAdapterForNetwork, createDefaultConfig, createDefaultRegistry, createEmptyConfig, createHealthChecker, createNodeAdapter, createProvider, 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, redactUrl, resetNodeAdapter, resolveAllProviders, resolveEndpoints, resolveKeyPlaceholder, resolveProvider, sleep, toV2Base, toV3Base, withRetry, withTimeout, withTimeoutAndRetry, withTimeoutFn };