@qevm/providers 1.0.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.
Files changed (114) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +78 -0
  3. package/lib/_version.d.ts +2 -0
  4. package/lib/_version.d.ts.map +1 -0
  5. package/lib/_version.js +5 -0
  6. package/lib/_version.js.map +1 -0
  7. package/lib/alchemy-provider.d.ts +17 -0
  8. package/lib/alchemy-provider.d.ts.map +1 -0
  9. package/lib/alchemy-provider.js +112 -0
  10. package/lib/alchemy-provider.js.map +1 -0
  11. package/lib/ankr-provider.d.ts +10 -0
  12. package/lib/ankr-provider.d.ts.map +1 -0
  13. package/lib/ankr-provider.js +79 -0
  14. package/lib/ankr-provider.js.map +1 -0
  15. package/lib/base-provider.d.ts +156 -0
  16. package/lib/base-provider.d.ts.map +1 -0
  17. package/lib/base-provider.js +2585 -0
  18. package/lib/base-provider.js.map +1 -0
  19. package/lib/browser-ipc-provider.d.ts +3 -0
  20. package/lib/browser-ipc-provider.d.ts.map +1 -0
  21. package/lib/browser-ipc-provider.js +6 -0
  22. package/lib/browser-ipc-provider.js.map +1 -0
  23. package/lib/browser-net.d.ts +2 -0
  24. package/lib/browser-net.d.ts.map +1 -0
  25. package/lib/browser-net.js +6 -0
  26. package/lib/browser-net.js.map +1 -0
  27. package/lib/browser-ws.d.ts +3 -0
  28. package/lib/browser-ws.d.ts.map +1 -0
  29. package/lib/browser-ws.js +22 -0
  30. package/lib/browser-ws.js.map +1 -0
  31. package/lib/cloudflare-provider.d.ts +8 -0
  32. package/lib/cloudflare-provider.d.ts.map +1 -0
  33. package/lib/cloudflare-provider.js +100 -0
  34. package/lib/cloudflare-provider.js.map +1 -0
  35. package/lib/etherscan-provider.d.ts +18 -0
  36. package/lib/etherscan-provider.d.ts.map +1 -0
  37. package/lib/etherscan-provider.js +528 -0
  38. package/lib/etherscan-provider.js.map +1 -0
  39. package/lib/fallback-provider.d.ts +20 -0
  40. package/lib/fallback-provider.d.ts.map +1 -0
  41. package/lib/fallback-provider.js +699 -0
  42. package/lib/fallback-provider.js.map +1 -0
  43. package/lib/formatter.d.ts +60 -0
  44. package/lib/formatter.d.ts.map +1 -0
  45. package/lib/formatter.js +452 -0
  46. package/lib/formatter.js.map +1 -0
  47. package/lib/index.d.ts +23 -0
  48. package/lib/index.d.ts.map +1 -0
  49. package/lib/index.js +97 -0
  50. package/lib/index.js.map +1 -0
  51. package/lib/infura-provider.d.ts +21 -0
  52. package/lib/infura-provider.d.ts.map +1 -0
  53. package/lib/infura-provider.js +141 -0
  54. package/lib/infura-provider.js.map +1 -0
  55. package/lib/ipc-provider.d.ts +8 -0
  56. package/lib/ipc-provider.d.ts.map +1 -0
  57. package/lib/ipc-provider.js +77 -0
  58. package/lib/ipc-provider.js.map +1 -0
  59. package/lib/json-rpc-batch-provider.d.ts +17 -0
  60. package/lib/json-rpc-batch-provider.d.ts.map +1 -0
  61. package/lib/json-rpc-batch-provider.js +99 -0
  62. package/lib/json-rpc-batch-provider.js.map +1 -0
  63. package/lib/json-rpc-provider.d.ts +54 -0
  64. package/lib/json-rpc-provider.d.ts.map +1 -0
  65. package/lib/json-rpc-provider.js +855 -0
  66. package/lib/json-rpc-provider.js.map +1 -0
  67. package/lib/nodesmith-provider.d.ts +7 -0
  68. package/lib/nodesmith-provider.d.ts.map +1 -0
  69. package/lib/nodesmith-provider.js +64 -0
  70. package/lib/nodesmith-provider.js.map +1 -0
  71. package/lib/pocket-provider.d.ts +12 -0
  72. package/lib/pocket-provider.d.ts.map +1 -0
  73. package/lib/pocket-provider.js +98 -0
  74. package/lib/pocket-provider.js.map +1 -0
  75. package/lib/url-json-rpc-provider.d.ts +18 -0
  76. package/lib/url-json-rpc-provider.d.ts.map +1 -0
  77. package/lib/url-json-rpc-provider.js +153 -0
  78. package/lib/url-json-rpc-provider.js.map +1 -0
  79. package/lib/web3-provider.d.ts +28 -0
  80. package/lib/web3-provider.d.ts.map +1 -0
  81. package/lib/web3-provider.js +155 -0
  82. package/lib/web3-provider.js.map +1 -0
  83. package/lib/websocket-provider.d.ts +48 -0
  84. package/lib/websocket-provider.d.ts.map +1 -0
  85. package/lib/websocket-provider.js +384 -0
  86. package/lib/websocket-provider.js.map +1 -0
  87. package/lib/ws.d.ts +3 -0
  88. package/lib/ws.d.ts.map +1 -0
  89. package/lib/ws.js +9 -0
  90. package/lib/ws.js.map +1 -0
  91. package/package.json +57 -0
  92. package/src.ts/_version.ts +1 -0
  93. package/src.ts/alchemy-provider.ts +101 -0
  94. package/src.ts/ankr-provider.ts +68 -0
  95. package/src.ts/base-provider.ts +2216 -0
  96. package/src.ts/browser-ipc-provider.ts +7 -0
  97. package/src.ts/browser-net.ts +3 -0
  98. package/src.ts/browser-ws.ts +21 -0
  99. package/src.ts/cloudflare-provider.ts +42 -0
  100. package/src.ts/etherscan-provider.ts +454 -0
  101. package/src.ts/fallback-provider.ts +654 -0
  102. package/src.ts/formatter.ts +522 -0
  103. package/src.ts/index.ts +178 -0
  104. package/src.ts/infura-provider.ts +143 -0
  105. package/src.ts/ipc-provider.ts +72 -0
  106. package/src.ts/json-rpc-batch-provider.ts +97 -0
  107. package/src.ts/json-rpc-provider.ts +742 -0
  108. package/src.ts/nodesmith-provider.ts +50 -0
  109. package/src.ts/pocket-provider.ts +93 -0
  110. package/src.ts/url-json-rpc-provider.ts +106 -0
  111. package/src.ts/web3-provider.ts +169 -0
  112. package/src.ts/websocket-provider.ts +350 -0
  113. package/src.ts/ws.ts +3 -0
  114. package/thirdparty.d.ts +10 -0
@@ -0,0 +1,50 @@
1
+ /* istanbul ignore file */
2
+
3
+ "use strict";
4
+
5
+ import { Network } from "@ethersproject/networks";
6
+ import { UrlJsonRpcProvider } from "./url-json-rpc-provider";
7
+
8
+ import { Logger } from "@ethersproject/logger";
9
+ import { version } from "./_version";
10
+ const logger = new Logger(version);
11
+
12
+ // Special API key provided by Nodesmith for ethers.js
13
+ const defaultApiKey = "ETHERS_JS_SHARED";
14
+
15
+ export class NodesmithProvider extends UrlJsonRpcProvider {
16
+
17
+ static getApiKey(apiKey: any): any {
18
+ if (apiKey && typeof(apiKey) !== "string") {
19
+ logger.throwArgumentError("invalid apiKey", "apiKey", apiKey);
20
+ }
21
+ return apiKey || defaultApiKey;
22
+ }
23
+
24
+ static getUrl(network: Network, apiKey?: any): string {
25
+ logger.warn("NodeSmith will be discontinued on 2019-12-20; please migrate to another platform.");
26
+
27
+ let host = null;
28
+ switch (network.name) {
29
+ case "homestead":
30
+ host = "https://ethereum.api.nodesmith.io/v1/mainnet/jsonrpc";
31
+ break;
32
+ case "ropsten":
33
+ host = "https://ethereum.api.nodesmith.io/v1/ropsten/jsonrpc";
34
+ break;
35
+ case "rinkeby":
36
+ host = "https://ethereum.api.nodesmith.io/v1/rinkeby/jsonrpc";
37
+ break;
38
+ case "goerli":
39
+ host = "https://ethereum.api.nodesmith.io/v1/goerli/jsonrpc";
40
+ break;
41
+ case "kovan":
42
+ host = "https://ethereum.api.nodesmith.io/v1/kovan/jsonrpc";
43
+ break;
44
+ default:
45
+ logger.throwArgumentError("unsupported network", "network", arguments[0]);
46
+ }
47
+
48
+ return (host + "?apiKey=" + apiKey);
49
+ }
50
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ import { Network } from "@ethersproject/networks";
4
+ import { ConnectionInfo } from "@ethersproject/web";
5
+
6
+ import { Logger } from "@ethersproject/logger";
7
+ import { version } from "./_version";
8
+ const logger = new Logger(version);
9
+
10
+ import { UrlJsonRpcProvider } from "./url-json-rpc-provider";
11
+
12
+ const defaultApplicationId = "62e1ad51b37b8e00394bda3b";
13
+
14
+
15
+ export class PocketProvider extends UrlJsonRpcProvider {
16
+ readonly applicationId: string;
17
+ readonly applicationSecretKey: string;
18
+ readonly loadBalancer: boolean;
19
+
20
+ static getApiKey(apiKey: any): any {
21
+ const apiKeyObj: { applicationId: string, applicationSecretKey: string, loadBalancer: boolean } = {
22
+ applicationId: null,
23
+ loadBalancer: true,
24
+ applicationSecretKey: null
25
+ };
26
+
27
+ // Parse applicationId and applicationSecretKey
28
+ if (apiKey == null) {
29
+ apiKeyObj.applicationId = defaultApplicationId;
30
+
31
+ } else if (typeof (apiKey) === "string") {
32
+ apiKeyObj.applicationId = apiKey;
33
+
34
+ } else if (apiKey.applicationSecretKey != null) {
35
+ apiKeyObj.applicationId = apiKey.applicationId;
36
+ apiKeyObj.applicationSecretKey = apiKey.applicationSecretKey;
37
+
38
+ } else if (apiKey.applicationId) {
39
+ apiKeyObj.applicationId = apiKey.applicationId;
40
+
41
+ } else {
42
+ logger.throwArgumentError("unsupported PocketProvider apiKey", "apiKey", apiKey);
43
+ }
44
+
45
+ return apiKeyObj;
46
+ }
47
+
48
+ static getUrl(network: Network, apiKey: any): ConnectionInfo {
49
+ let host: string = null;
50
+ switch (network ? network.name : "unknown") {
51
+ case "goerli":
52
+ host = "eth-goerli.gateway.pokt.network";
53
+ break;
54
+ case "homestead":
55
+ host = "eth-mainnet.gateway.pokt.network";
56
+ break;
57
+ case "kovan":
58
+ host = "poa-kovan.gateway.pokt.network";
59
+ break;
60
+ case "matic":
61
+ host = "poly-mainnet.gateway.pokt.network";
62
+ break;
63
+ case "maticmum":
64
+ host = "polygon-mumbai-rpc.gateway.pokt.network";
65
+ break;
66
+ case "rinkeby":
67
+ host = "eth-rinkeby.gateway.pokt.network";
68
+ break;
69
+ case "ropsten":
70
+ host = "eth-ropsten.gateway.pokt.network";
71
+ break;
72
+ default:
73
+ logger.throwError("unsupported network", Logger.errors.INVALID_ARGUMENT, {
74
+ argument: "network",
75
+ value: network
76
+ });
77
+ }
78
+
79
+ const url = `https:/\/${ host }/v1/lb/${ apiKey.applicationId }`
80
+
81
+ const connection: ConnectionInfo = { headers: { }, url };
82
+ if (apiKey.applicationSecretKey != null) {
83
+ connection.user = "";
84
+ connection.password = apiKey.applicationSecretKey
85
+ }
86
+
87
+ return connection;
88
+ }
89
+
90
+ isCommunityResource(): boolean {
91
+ return (this.applicationId === defaultApplicationId);
92
+ }
93
+ }
@@ -0,0 +1,106 @@
1
+
2
+ "use strict";
3
+
4
+ import { Network, Networkish } from "@ethersproject/networks";
5
+ import { defineReadOnly, getStatic } from "@ethersproject/properties";
6
+ import { ConnectionInfo } from "@ethersproject/web";
7
+
8
+ import { Logger } from "@ethersproject/logger";
9
+ import { version } from "./_version";
10
+ const logger = new Logger(version);
11
+
12
+ import { CommunityResourcable } from "./formatter";
13
+ import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider";
14
+
15
+ type getUrlFunc = (network: Network, apiKey: string) => string | ConnectionInfo;
16
+
17
+ // A StaticJsonRpcProvider is useful when you *know* for certain that
18
+ // the backend will never change, as it never calls eth_chainId to
19
+ // verify its backend. However, if the backend does change, the effects
20
+ // are undefined and may include:
21
+ // - inconsistent results
22
+ // - locking up the UI
23
+ // - block skew warnings
24
+ // - wrong results
25
+ // If the network is not explicit (i.e. auto-detection is expected), the
26
+ // node MUST be running and available to respond to requests BEFORE this
27
+ // is instantiated.
28
+ export class StaticJsonRpcProvider extends JsonRpcProvider {
29
+ async detectNetwork(): Promise<Network> {
30
+ let network = this.network;
31
+ if (network == null) {
32
+ network = await super.detectNetwork();
33
+
34
+ if (!network) {
35
+ logger.throwError("no network detected", Logger.errors.UNKNOWN_ERROR, { });
36
+ }
37
+
38
+ // If still not set, set it
39
+ if (this._network == null) {
40
+ // A static network does not support "any"
41
+ defineReadOnly(this, "_network", network);
42
+
43
+ this.emit("network", network, null);
44
+ }
45
+ }
46
+ return network;
47
+ }
48
+ }
49
+
50
+ export abstract class UrlJsonRpcProvider extends StaticJsonRpcProvider implements CommunityResourcable {
51
+ readonly apiKey: any;
52
+
53
+ constructor(network?: Networkish, apiKey?: any) {
54
+ logger.checkAbstract(new.target, UrlJsonRpcProvider);
55
+
56
+ // Normalize the Network and API Key
57
+ network = getStatic<(network: Networkish) => Network>(new.target, "getNetwork")(network);
58
+ apiKey = getStatic<(apiKey: string) => string>(new.target, "getApiKey")(apiKey);
59
+
60
+ const connection = getStatic<getUrlFunc>(new.target, "getUrl")(network, apiKey);
61
+
62
+ super(connection, network);
63
+
64
+ if (typeof(apiKey) === "string") {
65
+ defineReadOnly(this, "apiKey", apiKey);
66
+ } else if (apiKey != null) {
67
+ Object.keys(apiKey).forEach((key) => {
68
+ defineReadOnly<any, any>(this, key, apiKey[key]);
69
+ });
70
+ }
71
+ }
72
+
73
+ _startPending(): void {
74
+ logger.warn("WARNING: API provider does not support pending filters");
75
+ }
76
+
77
+ isCommunityResource(): boolean {
78
+ return false;
79
+ }
80
+
81
+ getSigner(address?: string): JsonRpcSigner {
82
+ return logger.throwError(
83
+ "API provider does not support signing",
84
+ Logger.errors.UNSUPPORTED_OPERATION,
85
+ { operation: "getSigner" }
86
+ );
87
+ }
88
+
89
+ listAccounts(): Promise<Array<string>> {
90
+ return Promise.resolve([]);
91
+ }
92
+
93
+ // Return a defaultApiKey if null, otherwise validate the API key
94
+ static getApiKey(apiKey: any): any {
95
+ return apiKey;
96
+ }
97
+
98
+ // Returns the url or connection for the given network and API key. The
99
+ // API key will have been sanitized by the getApiKey first, so any validation
100
+ // or transformations can be done there.
101
+ static getUrl(network: Network, apiKey: any): string | ConnectionInfo {
102
+ return logger.throwError("not implemented; sub-classes must override getUrl", Logger.errors.NOT_IMPLEMENTED, {
103
+ operation: "getUrl"
104
+ });
105
+ }
106
+ }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+
3
+ import { Networkish } from "@ethersproject/networks";
4
+ import { deepCopy, defineReadOnly } from "@ethersproject/properties";
5
+
6
+ import { Logger } from "@ethersproject/logger";
7
+ import { version } from "./_version";
8
+ const logger = new Logger(version);
9
+
10
+ import { JsonRpcProvider } from "./json-rpc-provider";
11
+
12
+ // Exported Types
13
+ export type ExternalProvider = {
14
+ isMetaMask?: boolean;
15
+ isStatus?: boolean;
16
+ host?: string;
17
+ path?: string;
18
+ sendAsync?: (request: { method: string, params?: Array<any> }, callback: (error: any, response: any) => void) => void
19
+ send?: (request: { method: string, params?: Array<any> }, callback: (error: any, response: any) => void) => void
20
+ request?: (request: { method: string, params?: Array<any> }) => Promise<any>
21
+ }
22
+
23
+ let _nextId = 1;
24
+
25
+ export type JsonRpcFetchFunc = (method: string, params?: Array<any>) => Promise<any>;
26
+
27
+ type Web3LegacySend = (request: any, callback: (error: Error, response: any) => void) => void;
28
+
29
+ function buildWeb3LegacyFetcher(provider: ExternalProvider, sendFunc: Web3LegacySend) : JsonRpcFetchFunc {
30
+ const fetcher = "Web3LegacyFetcher";
31
+
32
+ return function(method: string, params: Array<any>): Promise<any> {
33
+ const request = {
34
+ method: method,
35
+ params: params,
36
+ id: (_nextId++),
37
+ jsonrpc: "2.0"
38
+ };
39
+
40
+ return new Promise((resolve, reject) => {
41
+ this.emit("debug", {
42
+ action: "request",
43
+ fetcher,
44
+ request: deepCopy(request),
45
+ provider: this
46
+ });
47
+
48
+ sendFunc(request, (error, response) => {
49
+
50
+ if (error) {
51
+ this.emit("debug", {
52
+ action: "response",
53
+ fetcher,
54
+ error,
55
+ request,
56
+ provider: this
57
+ });
58
+
59
+ return reject(error);
60
+ }
61
+
62
+ this.emit("debug", {
63
+ action: "response",
64
+ fetcher,
65
+ request,
66
+ response,
67
+ provider: this
68
+ });
69
+
70
+ if (response.error) {
71
+ const error = new Error(response.error.message);
72
+ (<any>error).code = response.error.code;
73
+ (<any>error).data = response.error.data;
74
+ return reject(error);
75
+ }
76
+
77
+ resolve(response.result);
78
+ });
79
+ });
80
+ }
81
+ }
82
+
83
+ function buildEip1193Fetcher(provider: ExternalProvider): JsonRpcFetchFunc {
84
+ return function(method: string, params: Array<any>): Promise<any> {
85
+ if (params == null) { params = [ ]; }
86
+
87
+ const request = { method, params };
88
+
89
+ this.emit("debug", {
90
+ action: "request",
91
+ fetcher: "Eip1193Fetcher",
92
+ request: deepCopy(request),
93
+ provider: this
94
+ });
95
+
96
+ return provider.request(request).then((response) => {
97
+ this.emit("debug", {
98
+ action: "response",
99
+ fetcher: "Eip1193Fetcher",
100
+ request,
101
+ response,
102
+ provider: this
103
+ });
104
+
105
+ return response;
106
+
107
+ }, (error) => {
108
+ this.emit("debug", {
109
+ action: "response",
110
+ fetcher: "Eip1193Fetcher",
111
+ request,
112
+ error,
113
+ provider: this
114
+ });
115
+
116
+ throw error;
117
+ });
118
+ }
119
+ }
120
+
121
+ export class Web3Provider extends JsonRpcProvider {
122
+ readonly provider: ExternalProvider;
123
+ readonly jsonRpcFetchFunc: JsonRpcFetchFunc;
124
+
125
+ constructor(provider: ExternalProvider | JsonRpcFetchFunc, network?: Networkish) {
126
+ if (provider == null) {
127
+ logger.throwArgumentError("missing provider", "provider", provider);
128
+ }
129
+
130
+ let path: string = null;
131
+ let jsonRpcFetchFunc: JsonRpcFetchFunc = null;
132
+ let subprovider: ExternalProvider = null;
133
+
134
+ if (typeof(provider) === "function") {
135
+ path = "unknown:";
136
+ jsonRpcFetchFunc = provider;
137
+
138
+ } else {
139
+ path = provider.host || provider.path || "";
140
+ if (!path && provider.isMetaMask) {
141
+ path = "metamask";
142
+ }
143
+
144
+ subprovider = provider;
145
+
146
+ if (provider.request) {
147
+ if (path === "") { path = "eip-1193:"; }
148
+ jsonRpcFetchFunc = buildEip1193Fetcher(provider);
149
+ } else if (provider.sendAsync) {
150
+ jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider));
151
+ } else if (provider.send) {
152
+ jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider));
153
+ } else {
154
+ logger.throwArgumentError("unsupported provider", "provider", provider);
155
+ }
156
+
157
+ if (!path) { path = "unknown:"; }
158
+ }
159
+
160
+ super(path, network);
161
+
162
+ defineReadOnly(this, "jsonRpcFetchFunc", jsonRpcFetchFunc);
163
+ defineReadOnly(this, "provider", subprovider);
164
+ }
165
+
166
+ send(method: string, params: Array<any>): Promise<any> {
167
+ return this.jsonRpcFetchFunc(method, params);
168
+ }
169
+ }