@railgun-community/shared-models 7.4.4 → 7.5.1
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.
|
@@ -36,9 +36,17 @@ const getAvailableProviderJSONs = async (chainId, providerJsons, logError) => {
|
|
|
36
36
|
exports.getAvailableProviderJSONs = getAvailableProviderJSONs;
|
|
37
37
|
const getBlockNumber = async (chainId, provider, logError) => {
|
|
38
38
|
const network = ethers_1.Network.from(chainId);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
// Conditionally handle what type of provider is being passed
|
|
40
|
+
let rpcProvider;
|
|
41
|
+
// If URL starts with wss, use WebSocketProvider
|
|
42
|
+
if (provider.startsWith('wss')) {
|
|
43
|
+
rpcProvider = new ethers_1.WebSocketProvider(provider, network);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
rpcProvider = new ethers_1.JsonRpcProvider(provider, network, {
|
|
47
|
+
staticNetwork: network,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
42
50
|
try {
|
|
43
51
|
const block = await (0, promises_1.promiseTimeout)(rpcProvider.getBlock('latest'), BLOCK_NUMBER_TIMEOUT_MS);
|
|
44
52
|
if (block == null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"available-rpc.js","sourceRoot":"","sources":["../../src/utils/available-rpc.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"available-rpc.js","sourceRoot":"","sources":["../../src/utils/available-rpc.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"../types/global\" />\nimport { JsonRpcProvider, Network, type Provider, WebSocketProvider } from 'ethers';\nimport { ProviderJson } from './fallback-provider';\nimport { getUpperBoundMedian } from './median';\nimport { promiseTimeout } from './promises';\n\ntype LogError = (err: string) => void;\n\nconst BLOCK_NUMBER_TIMEOUT_MS = 5000;\n\n/**\n * Health checks ProviderJson inputs, and returns an array of available RPC providers.\n * Available means that they respond to getBlockNumber(), and they are +/- 100 blocks from the median.\n */\nexport const getAvailableProviderJSONs = async (\n chainId: number,\n providerJsons: ProviderJson[],\n logError: LogError,\n): Promise<ProviderJson[]> => {\n const blockNumbers: Optional<number>[] = await Promise.all(\n providerJsons.map(\n async providerJson =>\n await getBlockNumber(chainId, providerJson.provider, logError),\n ),\n );\n\n const nonZeroBlockNumbers = blockNumbers.filter(\n blockNumber => blockNumber != null && blockNumber > 0,\n ) as number[];\n const medianBlockNumber = getUpperBoundMedian(nonZeroBlockNumbers);\n const lowerBoundRange = medianBlockNumber - 100;\n const upperBoundRange = medianBlockNumber + 100;\n\n return providerJsons.filter((providerJson, index) => {\n const blockNumber = blockNumbers[index];\n if (blockNumber == null) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: No Block Number`,\n );\n return false;\n }\n if (blockNumber < lowerBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number -${\n medianBlockNumber - blockNumber\n } from median`,\n );\n return false;\n }\n if (blockNumber > upperBoundRange) {\n logError(\n `RPC Health Check failed for ${providerJson.provider}: Block Number +${\n blockNumber - medianBlockNumber\n } from median`,\n );\n return false;\n }\n return true;\n });\n};\n\nconst getBlockNumber = async (\n chainId: number,\n provider: string,\n logError: LogError,\n): Promise<Optional<number>> => {\n const network = Network.from(chainId);\n\n // Conditionally handle what type of provider is being passed\n let rpcProvider: Provider;\n\n // If URL starts with wss, use WebSocketProvider\n if(provider.startsWith('wss')) {\n rpcProvider = new WebSocketProvider(provider, network);\n } else {\n rpcProvider = new JsonRpcProvider(provider, network, {\n staticNetwork: network,\n });\n }\n\n try {\n const block = await promiseTimeout(\n rpcProvider.getBlock('latest'),\n BLOCK_NUMBER_TIMEOUT_MS,\n );\n if (block == null) {\n throw new Error('Block is null');\n }\n return block.number;\n } catch (cause) {\n if (!(cause instanceof Error)) {\n throw new Error('Non-error thrown from getBlockNumber', { cause });\n }\n rpcProvider.destroy();\n logError(cause.message);\n return undefined;\n }\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@railgun-community/shared-models",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"files": [
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"test": "npm run compile-test && mocha 'src/**/__tests__/*.test.ts'"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
|
-
"ethers": "
|
|
25
|
+
"ethers": "6.13.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@types/chai": "4.3.5",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"eslint-config-prettier": "^8.5.0",
|
|
38
38
|
"eslint-plugin-flowtype": "^8.0.3",
|
|
39
39
|
"eslint-plugin-import": "^2.26.0",
|
|
40
|
-
"ethers": "
|
|
40
|
+
"ethers": "6.13.1",
|
|
41
41
|
"madge": "6.1.0",
|
|
42
42
|
"mocha": "^10.2.0",
|
|
43
43
|
"ts-node": "^10.9.1",
|