@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,48 @@
1
+ import { Network, Networkish } from "@ethersproject/networks";
2
+ import { Event } from "./base-provider";
3
+ import { JsonRpcProvider } from "./json-rpc-provider";
4
+ export declare type InflightRequest = {
5
+ callback: (error: Error, result: any) => void;
6
+ payload: string;
7
+ };
8
+ export declare type Subscription = {
9
+ tag: string;
10
+ processFunc: (payload: any) => void;
11
+ };
12
+ export interface WebSocketLike {
13
+ onopen: ((...args: Array<any>) => any) | null;
14
+ onmessage: ((...args: Array<any>) => any) | null;
15
+ onerror: ((...args: Array<any>) => any) | null;
16
+ readyState: number;
17
+ send(payload: any): void;
18
+ close(code?: number, reason?: string): void;
19
+ }
20
+ export declare class WebSocketProvider extends JsonRpcProvider {
21
+ readonly _websocket: any;
22
+ readonly _requests: {
23
+ [name: string]: InflightRequest;
24
+ };
25
+ readonly _detectNetwork: Promise<Network>;
26
+ readonly _subIds: {
27
+ [tag: string]: Promise<string>;
28
+ };
29
+ readonly _subs: {
30
+ [name: string]: Subscription;
31
+ };
32
+ _wsReady: boolean;
33
+ constructor(url: string | WebSocketLike, network?: Networkish);
34
+ get websocket(): WebSocketLike;
35
+ detectNetwork(): Promise<Network>;
36
+ get pollingInterval(): number;
37
+ resetEventsBlock(blockNumber: number): void;
38
+ set pollingInterval(value: number);
39
+ poll(): Promise<void>;
40
+ set polling(value: boolean);
41
+ send(method: string, params?: Array<any>): Promise<any>;
42
+ static defaultUrl(): string;
43
+ _subscribe(tag: string, param: Array<any>, processFunc: (result: any) => void): Promise<void>;
44
+ _startEvent(event: Event): void;
45
+ _stopEvent(event: Event): void;
46
+ destroy(): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=websocket-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-provider.d.ts","sourceRoot":"","sources":["../src.ts/websocket-provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG9D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAwBtD,oBAAY,eAAe,GAAG;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,oBAAY,YAAY,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAC9C,SAAS,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;IAE/C,UAAU,EAAE,MAAM,CAAC;IAEnB,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAKD,qBAAa,iBAAkB,SAAQ,eAAe;IAClD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE;QAAE,CAAE,IAAI,EAAE,MAAM,GAAI,eAAe,CAAA;KAAE,CAAC;IAC1D,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAG1C,QAAQ,CAAC,OAAO,EAAE;QAAE,CAAE,GAAG,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAGvD,QAAQ,CAAC,KAAK,EAAE;QAAE,CAAE,IAAI,EAAE,MAAM,GAAI,YAAY,CAAA;KAAE,CAAC;IAEnD,QAAQ,EAAE,OAAO,CAAC;gBAEN,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,UAAU;IAqG7D,IAAI,SAAS,IAAI,aAAa,CAA4B;IAE1D,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAM3C,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAIhC;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAMzB;IAED,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IA4BvD,MAAM,CAAC,UAAU,IAAI,MAAM;IAIrB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnG,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IA2D/B,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAyBxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAkBjC"}
@@ -0,0 +1,384 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.WebSocketProvider = void 0;
55
+ var bignumber_1 = require("@ethersproject/bignumber");
56
+ var properties_1 = require("@ethersproject/properties");
57
+ var json_rpc_provider_1 = require("./json-rpc-provider");
58
+ var ws_1 = require("./ws");
59
+ var logger_1 = require("@ethersproject/logger");
60
+ var _version_1 = require("./_version");
61
+ var logger = new logger_1.Logger(_version_1.version);
62
+ /**
63
+ * Notes:
64
+ *
65
+ * This provider differs a bit from the polling providers. One main
66
+ * difference is how it handles consistency. The polling providers
67
+ * will stall responses to ensure a consistent state, while this
68
+ * WebSocket provider assumes the connected backend will manage this.
69
+ *
70
+ * For example, if a polling provider emits an event which indicates
71
+ * the event occurred in blockhash XXX, a call to fetch that block by
72
+ * its hash XXX, if not present will retry until it is present. This
73
+ * can occur when querying a pool of nodes that are mildly out of sync
74
+ * with each other.
75
+ */
76
+ var NextId = 1;
77
+ // For more info about the Real-time Event API see:
78
+ // https://geth.ethereum.org/docs/rpc/pubsub
79
+ var WebSocketProvider = /** @class */ (function (_super) {
80
+ __extends(WebSocketProvider, _super);
81
+ function WebSocketProvider(url, network) {
82
+ var _this = this;
83
+ // This will be added in the future; please open an issue to expedite
84
+ if (network === "any") {
85
+ logger.throwError("WebSocketProvider does not support 'any' network yet", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
86
+ operation: "network:any"
87
+ });
88
+ }
89
+ if (typeof (url) === "string") {
90
+ _this = _super.call(this, url, network) || this;
91
+ }
92
+ else {
93
+ _this = _super.call(this, "_websocket", network) || this;
94
+ }
95
+ _this._pollingInterval = -1;
96
+ _this._wsReady = false;
97
+ if (typeof (url) === "string") {
98
+ (0, properties_1.defineReadOnly)(_this, "_websocket", new ws_1.WebSocket(_this.connection.url));
99
+ }
100
+ else {
101
+ (0, properties_1.defineReadOnly)(_this, "_websocket", url);
102
+ }
103
+ (0, properties_1.defineReadOnly)(_this, "_requests", {});
104
+ (0, properties_1.defineReadOnly)(_this, "_subs", {});
105
+ (0, properties_1.defineReadOnly)(_this, "_subIds", {});
106
+ (0, properties_1.defineReadOnly)(_this, "_detectNetwork", _super.prototype.detectNetwork.call(_this));
107
+ // Stall sending requests until the socket is open...
108
+ _this.websocket.onopen = function () {
109
+ _this._wsReady = true;
110
+ Object.keys(_this._requests).forEach(function (id) {
111
+ _this.websocket.send(_this._requests[id].payload);
112
+ });
113
+ };
114
+ _this.websocket.onmessage = function (messageEvent) {
115
+ var data = messageEvent.data;
116
+ var result = JSON.parse(data);
117
+ if (result.id != null) {
118
+ var id = String(result.id);
119
+ var request = _this._requests[id];
120
+ delete _this._requests[id];
121
+ if (result.result !== undefined) {
122
+ request.callback(null, result.result);
123
+ _this.emit("debug", {
124
+ action: "response",
125
+ request: JSON.parse(request.payload),
126
+ response: result.result,
127
+ provider: _this
128
+ });
129
+ }
130
+ else {
131
+ var error = null;
132
+ if (result.error) {
133
+ error = new Error(result.error.message || "unknown error");
134
+ (0, properties_1.defineReadOnly)(error, "code", result.error.code || null);
135
+ (0, properties_1.defineReadOnly)(error, "response", data);
136
+ }
137
+ else {
138
+ error = new Error("unknown error");
139
+ }
140
+ request.callback(error, undefined);
141
+ _this.emit("debug", {
142
+ action: "response",
143
+ error: error,
144
+ request: JSON.parse(request.payload),
145
+ provider: _this
146
+ });
147
+ }
148
+ }
149
+ else if (result.method === "eth_subscription") {
150
+ // Subscription...
151
+ var sub = _this._subs[result.params.subscription];
152
+ if (sub) {
153
+ //this.emit.apply(this, );
154
+ sub.processFunc(result.params.result);
155
+ }
156
+ }
157
+ else {
158
+ console.warn("this should not happen");
159
+ }
160
+ };
161
+ // This Provider does not actually poll, but we want to trigger
162
+ // poll events for things that depend on them (like stalling for
163
+ // block and transaction lookups)
164
+ var fauxPoll = setInterval(function () {
165
+ _this.emit("poll");
166
+ }, 1000);
167
+ if (fauxPoll.unref) {
168
+ fauxPoll.unref();
169
+ }
170
+ return _this;
171
+ }
172
+ Object.defineProperty(WebSocketProvider.prototype, "websocket", {
173
+ // Cannot narrow the type of _websocket, as that is not backwards compatible
174
+ // so we add a getter and let the WebSocket be a public API.
175
+ get: function () { return this._websocket; },
176
+ enumerable: false,
177
+ configurable: true
178
+ });
179
+ WebSocketProvider.prototype.detectNetwork = function () {
180
+ return this._detectNetwork;
181
+ };
182
+ Object.defineProperty(WebSocketProvider.prototype, "pollingInterval", {
183
+ get: function () {
184
+ return 0;
185
+ },
186
+ set: function (value) {
187
+ logger.throwError("cannot set polling interval on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
188
+ operation: "setPollingInterval"
189
+ });
190
+ },
191
+ enumerable: false,
192
+ configurable: true
193
+ });
194
+ WebSocketProvider.prototype.resetEventsBlock = function (blockNumber) {
195
+ logger.throwError("cannot reset events block on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
196
+ operation: "resetEventBlock"
197
+ });
198
+ };
199
+ WebSocketProvider.prototype.poll = function () {
200
+ return __awaiter(this, void 0, void 0, function () {
201
+ return __generator(this, function (_a) {
202
+ return [2 /*return*/, null];
203
+ });
204
+ });
205
+ };
206
+ Object.defineProperty(WebSocketProvider.prototype, "polling", {
207
+ set: function (value) {
208
+ if (!value) {
209
+ return;
210
+ }
211
+ logger.throwError("cannot set polling on WebSocketProvider", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {
212
+ operation: "setPolling"
213
+ });
214
+ },
215
+ enumerable: false,
216
+ configurable: true
217
+ });
218
+ WebSocketProvider.prototype.send = function (method, params) {
219
+ var _this = this;
220
+ var rid = NextId++;
221
+ return new Promise(function (resolve, reject) {
222
+ function callback(error, result) {
223
+ if (error) {
224
+ return reject(error);
225
+ }
226
+ return resolve(result);
227
+ }
228
+ var payload = JSON.stringify({
229
+ method: method,
230
+ params: params,
231
+ id: rid,
232
+ jsonrpc: "2.0"
233
+ });
234
+ _this.emit("debug", {
235
+ action: "request",
236
+ request: JSON.parse(payload),
237
+ provider: _this
238
+ });
239
+ _this._requests[String(rid)] = { callback: callback, payload: payload };
240
+ if (_this._wsReady) {
241
+ _this.websocket.send(payload);
242
+ }
243
+ });
244
+ };
245
+ WebSocketProvider.defaultUrl = function () {
246
+ return "ws:/\/localhost:8546";
247
+ };
248
+ WebSocketProvider.prototype._subscribe = function (tag, param, processFunc) {
249
+ return __awaiter(this, void 0, void 0, function () {
250
+ var subIdPromise, subId;
251
+ var _this = this;
252
+ return __generator(this, function (_a) {
253
+ switch (_a.label) {
254
+ case 0:
255
+ subIdPromise = this._subIds[tag];
256
+ if (subIdPromise == null) {
257
+ subIdPromise = Promise.all(param).then(function (param) {
258
+ return _this.send("eth_subscribe", param);
259
+ });
260
+ this._subIds[tag] = subIdPromise;
261
+ }
262
+ return [4 /*yield*/, subIdPromise];
263
+ case 1:
264
+ subId = _a.sent();
265
+ this._subs[subId] = { tag: tag, processFunc: processFunc };
266
+ return [2 /*return*/];
267
+ }
268
+ });
269
+ });
270
+ };
271
+ WebSocketProvider.prototype._startEvent = function (event) {
272
+ var _this = this;
273
+ switch (event.type) {
274
+ case "block":
275
+ this._subscribe("block", ["newHeads"], function (result) {
276
+ var blockNumber = bignumber_1.BigNumber.from(result.number).toNumber();
277
+ _this._emitted.block = blockNumber;
278
+ _this.emit("block", blockNumber);
279
+ });
280
+ break;
281
+ case "pending":
282
+ this._subscribe("pending", ["newPendingTransactions"], function (result) {
283
+ _this.emit("pending", result);
284
+ });
285
+ break;
286
+ case "filter":
287
+ this._subscribe(event.tag, ["logs", this._getFilter(event.filter)], function (result) {
288
+ if (result.removed == null) {
289
+ result.removed = false;
290
+ }
291
+ _this.emit(event.filter, _this.formatter.filterLog(result));
292
+ });
293
+ break;
294
+ case "tx": {
295
+ var emitReceipt_1 = function (event) {
296
+ var hash = event.hash;
297
+ _this.getTransactionReceipt(hash).then(function (receipt) {
298
+ if (!receipt) {
299
+ return;
300
+ }
301
+ _this.emit(hash, receipt);
302
+ });
303
+ };
304
+ // In case it is already mined
305
+ emitReceipt_1(event);
306
+ // To keep things simple, we start up a single newHeads subscription
307
+ // to keep an eye out for transactions we are watching for.
308
+ // Starting a subscription for an event (i.e. "tx") that is already
309
+ // running is (basically) a nop.
310
+ this._subscribe("tx", ["newHeads"], function (result) {
311
+ _this._events.filter(function (e) { return (e.type === "tx"); }).forEach(emitReceipt_1);
312
+ });
313
+ break;
314
+ }
315
+ // Nothing is needed
316
+ case "debug":
317
+ case "poll":
318
+ case "willPoll":
319
+ case "didPoll":
320
+ case "error":
321
+ break;
322
+ default:
323
+ console.log("unhandled:", event);
324
+ break;
325
+ }
326
+ };
327
+ WebSocketProvider.prototype._stopEvent = function (event) {
328
+ var _this = this;
329
+ var tag = event.tag;
330
+ if (event.type === "tx") {
331
+ // There are remaining transaction event listeners
332
+ if (this._events.filter(function (e) { return (e.type === "tx"); }).length) {
333
+ return;
334
+ }
335
+ tag = "tx";
336
+ }
337
+ else if (this.listenerCount(event.event)) {
338
+ // There are remaining event listeners
339
+ return;
340
+ }
341
+ var subId = this._subIds[tag];
342
+ if (!subId) {
343
+ return;
344
+ }
345
+ delete this._subIds[tag];
346
+ subId.then(function (subId) {
347
+ if (!_this._subs[subId]) {
348
+ return;
349
+ }
350
+ delete _this._subs[subId];
351
+ _this.send("eth_unsubscribe", [subId]);
352
+ });
353
+ };
354
+ WebSocketProvider.prototype.destroy = function () {
355
+ return __awaiter(this, void 0, void 0, function () {
356
+ var _this = this;
357
+ return __generator(this, function (_a) {
358
+ switch (_a.label) {
359
+ case 0:
360
+ if (!(this.websocket.readyState === ws_1.WebSocket.CONNECTING)) return [3 /*break*/, 2];
361
+ return [4 /*yield*/, (new Promise(function (resolve) {
362
+ _this.websocket.onopen = function () {
363
+ resolve(true);
364
+ };
365
+ _this.websocket.onerror = function () {
366
+ resolve(false);
367
+ };
368
+ }))];
369
+ case 1:
370
+ _a.sent();
371
+ _a.label = 2;
372
+ case 2:
373
+ // Hangup
374
+ // See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes
375
+ this.websocket.close(1000);
376
+ return [2 /*return*/];
377
+ }
378
+ });
379
+ });
380
+ };
381
+ return WebSocketProvider;
382
+ }(json_rpc_provider_1.JsonRpcProvider));
383
+ exports.WebSocketProvider = WebSocketProvider;
384
+ //# sourceMappingURL=websocket-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-provider.js","sourceRoot":"","sources":["../src.ts/websocket-provider.ts"],"names":[],"mappings":"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"}
package/lib/ws.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import WebSocket from "ws";
2
+ export { WebSocket };
3
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../src.ts/ws.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,SAAS,EAAE,CAAA"}
package/lib/ws.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WebSocket = void 0;
7
+ var ws_1 = __importDefault(require("ws"));
8
+ exports.WebSocket = ws_1.default;
9
+ //# sourceMappingURL=ws.js.map
package/lib/ws.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../src.ts/ws.ts"],"names":[],"mappings":";;;;;;AAAA,0CAA2B;AAElB,oBAFF,YAAS,CAEE"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "_ethers.alias": {
3
+ "browser-net.d.ts": "",
4
+ "browser-net.d.ts.map": "",
5
+ "browser-net.js": "",
6
+ "browser-net.js.map": "",
7
+ "ipc-provider.js": "browser-ipc-provider.js",
8
+ "ws.js": "browser-ws.js"
9
+ },
10
+ "author": "Eugene Kuleshov",
11
+ "browser": {
12
+ "./lib/ipc-provider": "./lib/browser-ipc-provider.js",
13
+ "./lib/ws": "./lib/browser-ws.js",
14
+ "net": "./lib/browser-net.js"
15
+ },
16
+ "dependencies": {
17
+ "@qevm/abstract-provider": "^5.7.0",
18
+ "@qevm/abstract-signer": "^5.7.1",
19
+ "@qevm/address": "^5.7.0",
20
+ "@ethersproject/base64": "^5.7.0",
21
+ "@ethersproject/basex": "^5.7.0",
22
+ "@ethersproject/bignumber": "^5.7.0",
23
+ "@qevm/bytes": "5.7.1",
24
+ "@ethersproject/constants": "^5.7.0",
25
+ "@qevm/hash": "^5.7.1",
26
+ "@ethersproject/logger": "^5.7.0",
27
+ "@ethersproject/networks": "^5.7.0",
28
+ "@ethersproject/properties": "^5.7.0",
29
+ "@ethersproject/random": "^5.7.0",
30
+ "@ethersproject/rlp": "^5.7.0",
31
+ "@ethersproject/sha2": "^5.7.0",
32
+ "@ethersproject/strings": "^5.7.0",
33
+ "@qevm/transactions": "5.7.1",
34
+ "@ethersproject/web": "^5.7.0",
35
+ "bech32": "1.1.4",
36
+ "ws": "7.4.6"
37
+ },
38
+ "description": "quantum Ethereum Providers for qethers.",
39
+ "keywords": [
40
+ "qevm",
41
+ "qethers"
42
+ ],
43
+ "license": "MIT",
44
+ "main": "./lib/index.js",
45
+ "module": "./lib.esm/index.js",
46
+ "name": "@qevm/providers",
47
+ "publishConfig": {
48
+ "access": "public"
49
+ },
50
+ "scripts": {
51
+ "test": "echo \"Error: no test specified\" && exit 1"
52
+ },
53
+ "sideEffects": false,
54
+ "tarballHash": "0x7cd2809b100a1f50c6855245bf6ee7e848535447206f8fb83837445400204372",
55
+ "types": "./lib/index.d.ts",
56
+ "version": "1.0.1"
57
+ }
@@ -0,0 +1 @@
1
+ export const version = "providers/5.7.2";
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ import { Network, Networkish } from "@ethersproject/networks";
4
+ import { defineReadOnly } from "@ethersproject/properties";
5
+ import { ConnectionInfo } from "@ethersproject/web";
6
+
7
+ import { CommunityResourcable, showThrottleMessage } from "./formatter";
8
+ import { WebSocketProvider } from "./websocket-provider";
9
+
10
+ import { Logger } from "@ethersproject/logger";
11
+ import { version } from "./_version";
12
+ const logger = new Logger(version);
13
+
14
+ import { UrlJsonRpcProvider } from "./url-json-rpc-provider";
15
+
16
+ // This key was provided to ethers.js by Alchemy to be used by the
17
+ // default provider, but it is recommended that for your own
18
+ // production environments, that you acquire your own API key at:
19
+ // https://dashboard.alchemyapi.io
20
+
21
+ const defaultApiKey = "_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC"
22
+
23
+ export class AlchemyWebSocketProvider extends WebSocketProvider implements CommunityResourcable {
24
+ readonly apiKey: string;
25
+
26
+ constructor(network?: Networkish, apiKey?: any) {
27
+ const provider = new AlchemyProvider(network, apiKey);
28
+
29
+ const url = provider.connection.url.replace(/^http/i, "ws")
30
+ .replace(".alchemyapi.", ".ws.alchemyapi.");
31
+
32
+ super(url, provider.network);
33
+ defineReadOnly(this, "apiKey", provider.apiKey);
34
+ }
35
+
36
+ isCommunityResource(): boolean {
37
+ return (this.apiKey === defaultApiKey);
38
+ }
39
+ }
40
+
41
+ export class AlchemyProvider extends UrlJsonRpcProvider {
42
+
43
+ static getWebSocketProvider(network?: Networkish, apiKey?: any): AlchemyWebSocketProvider {
44
+ return new AlchemyWebSocketProvider(network, apiKey);
45
+ }
46
+
47
+ static getApiKey(apiKey: any): any {
48
+ if (apiKey == null) { return defaultApiKey; }
49
+ if (apiKey && typeof(apiKey) !== "string") {
50
+ logger.throwArgumentError("invalid apiKey", "apiKey", apiKey);
51
+ }
52
+ return apiKey;
53
+ }
54
+
55
+ static getUrl(network: Network, apiKey: string): ConnectionInfo {
56
+ let host = null;
57
+ switch (network.name) {
58
+ case "homestead":
59
+ host = "eth-mainnet.alchemyapi.io/v2/";
60
+ break;
61
+ case "goerli":
62
+ host = "eth-goerli.g.alchemy.com/v2/";
63
+ break;
64
+ case "matic":
65
+ host = "polygon-mainnet.g.alchemy.com/v2/";
66
+ break;
67
+ case "maticmum":
68
+ host = "polygon-mumbai.g.alchemy.com/v2/";
69
+ break;
70
+ case "arbitrum":
71
+ host = "arb-mainnet.g.alchemy.com/v2/";
72
+ break;
73
+ case "arbitrum-goerli":
74
+ host = "arb-goerli.g.alchemy.com/v2/";
75
+ break;
76
+ case "optimism":
77
+ host = "opt-mainnet.g.alchemy.com/v2/";
78
+ break;
79
+ case "optimism-goerli":
80
+ host = "opt-goerli.g.alchemy.com/v2/"
81
+ break;
82
+ default:
83
+ logger.throwArgumentError("unsupported network", "network", arguments[0]);
84
+ }
85
+
86
+ return {
87
+ allowGzip: true,
88
+ url: ("https:/" + "/" + host + apiKey),
89
+ throttleCallback: (attempt: number, url: string) => {
90
+ if (apiKey === defaultApiKey) {
91
+ showThrottleMessage();
92
+ }
93
+ return Promise.resolve(true);
94
+ }
95
+ };
96
+ }
97
+
98
+ isCommunityResource(): boolean {
99
+ return (this.apiKey === defaultApiKey);
100
+ }
101
+ }