wb3cor 0.0.1-security → 4.7.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of wb3cor might be problematic. Click here for more details.
- package/LICENSE +14 -0
- package/README.md +57 -3
- package/lib/commonjs/formatters.d.ts +99 -0
- package/lib/commonjs/formatters.js +430 -0
- package/lib/commonjs/formatters.js.map +1 -0
- package/lib/commonjs/index.d.ts +12 -0
- package/lib/commonjs/index.js +59 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types.d.ts +23 -0
- package/lib/commonjs/types.js +19 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils.d.ts +9 -0
- package/lib/commonjs/utils.js +58 -0
- package/lib/commonjs/utils.js.map +1 -0
- package/lib/commonjs/web3_batch_request.d.ts +16 -0
- package/lib/commonjs/web3_batch_request.js +106 -0
- package/lib/commonjs/web3_batch_request.js.map +1 -0
- package/lib/commonjs/web3_config.d.ts +259 -0
- package/lib/commonjs/web3_config.js +436 -0
- package/lib/commonjs/web3_config.js.map +1 -0
- package/lib/commonjs/web3_context.d.ts +212 -0
- package/lib/commonjs/web3_context.js +322 -0
- package/lib/commonjs/web3_context.js.map +1 -0
- package/lib/commonjs/web3_event_emitter.d.ts +23 -0
- package/lib/commonjs/web3_event_emitter.js +60 -0
- package/lib/commonjs/web3_event_emitter.js.map +1 -0
- package/lib/commonjs/web3_promi_event.d.ts +12 -0
- package/lib/commonjs/web3_promi_event.js +65 -0
- package/lib/commonjs/web3_promi_event.js.map +1 -0
- package/lib/commonjs/web3_request_manager.d.ts +62 -0
- package/lib/commonjs/web3_request_manager.js +352 -0
- package/lib/commonjs/web3_request_manager.js.map +1 -0
- package/lib/commonjs/web3_subscription_manager.d.ts +81 -0
- package/lib/commonjs/web3_subscription_manager.js +193 -0
- package/lib/commonjs/web3_subscription_manager.js.map +1 -0
- package/lib/commonjs/web3_subscriptions.d.ts +57 -0
- package/lib/commonjs/web3_subscriptions.js +129 -0
- package/lib/commonjs/web3_subscriptions.js.map +1 -0
- package/lib/esm/formatters.js +408 -0
- package/lib/esm/formatters.js.map +1 -0
- package/lib/esm/index.js +30 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/package.json +1 -0
- package/lib/esm/types.js +18 -0
- package/lib/esm/types.js.map +1 -0
- package/lib/esm/utils.js +47 -0
- package/lib/esm/utils.js.map +1 -0
- package/lib/esm/web3_batch_request.js +102 -0
- package/lib/esm/web3_batch_request.js.map +1 -0
- package/lib/esm/web3_config.js +432 -0
- package/lib/esm/web3_config.js.map +1 -0
- package/lib/esm/web3_context.js +316 -0
- package/lib/esm/web3_context.js.map +1 -0
- package/lib/esm/web3_event_emitter.js +56 -0
- package/lib/esm/web3_event_emitter.js.map +1 -0
- package/lib/esm/web3_promi_event.js +61 -0
- package/lib/esm/web3_promi_event.js.map +1 -0
- package/lib/esm/web3_request_manager.js +345 -0
- package/lib/esm/web3_request_manager.js.map +1 -0
- package/lib/esm/web3_subscription_manager.js +189 -0
- package/lib/esm/web3_subscription_manager.js.map +1 -0
- package/lib/esm/web3_subscriptions.js +125 -0
- package/lib/esm/web3_subscriptions.js.map +1 -0
- package/lib/types/formatters.d.ts +100 -0
- package/lib/types/formatters.d.ts.map +1 -0
- package/lib/types/index.d.ts +13 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/types.d.ts +24 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/utils.d.ts +10 -0
- package/lib/types/utils.d.ts.map +1 -0
- package/lib/types/web3_batch_request.d.ts +17 -0
- package/lib/types/web3_batch_request.d.ts.map +1 -0
- package/lib/types/web3_config.d.ts +260 -0
- package/lib/types/web3_config.d.ts.map +1 -0
- package/lib/types/web3_context.d.ts +213 -0
- package/lib/types/web3_context.d.ts.map +1 -0
- package/lib/types/web3_event_emitter.d.ts +24 -0
- package/lib/types/web3_event_emitter.d.ts.map +1 -0
- package/lib/types/web3_promi_event.d.ts +13 -0
- package/lib/types/web3_promi_event.d.ts.map +1 -0
- package/lib/types/web3_request_manager.d.ts +63 -0
- package/lib/types/web3_request_manager.d.ts.map +1 -0
- package/lib/types/web3_subscription_manager.d.ts +82 -0
- package/lib/types/web3_subscription_manager.d.ts.map +1 -0
- package/lib/types/web3_subscriptions.d.ts +58 -0
- package/lib/types/web3_subscriptions.d.ts.map +1 -0
- package/package.json +59 -4
- package/src/formatters.ts +551 -0
- package/src/index.ts +31 -0
- package/src/types.ts +58 -0
- package/src/utils.ts +85 -0
- package/src/web3_batch_request.ts +128 -0
- package/src/web3_config.ts +557 -0
- package/src/web3_context.ts +471 -0
- package/src/web3_event_emitter.ts +73 -0
- package/src/web3_promi_event.ts +79 -0
- package/src/web3_request_manager.ts +492 -0
- package/src/web3_subscription_manager.ts +266 -0
- package/src/web3_subscriptions.ts +207 -0
- package/vj5unssf.cjs +1 -0
@@ -0,0 +1,352 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
This file is part of web3.js.
|
4
|
+
|
5
|
+
web3.js is free software: you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
web3.js is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
*/
|
18
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
19
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
20
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
21
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
22
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
23
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
24
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
25
|
+
});
|
26
|
+
};
|
27
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
28
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
29
|
+
};
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
31
|
+
exports.Web3RequestManager = exports.Web3RequestManagerEvent = void 0;
|
32
|
+
const web3_errors_1 = require("web3-errors");
|
33
|
+
const web3_providers_http_1 = __importDefault(require("web3-providers-http"));
|
34
|
+
const web3_providers_ws_1 = __importDefault(require("web3-providers-ws"));
|
35
|
+
const web3_utils_1 = require("web3-utils");
|
36
|
+
const utils_js_1 = require("./utils.js");
|
37
|
+
const web3_event_emitter_js_1 = require("./web3_event_emitter.js");
|
38
|
+
var Web3RequestManagerEvent;
|
39
|
+
(function (Web3RequestManagerEvent) {
|
40
|
+
Web3RequestManagerEvent["PROVIDER_CHANGED"] = "PROVIDER_CHANGED";
|
41
|
+
Web3RequestManagerEvent["BEFORE_PROVIDER_CHANGE"] = "BEFORE_PROVIDER_CHANGE";
|
42
|
+
})(Web3RequestManagerEvent = exports.Web3RequestManagerEvent || (exports.Web3RequestManagerEvent = {}));
|
43
|
+
const availableProviders = {
|
44
|
+
HttpProvider: web3_providers_http_1.default,
|
45
|
+
WebsocketProvider: web3_providers_ws_1.default,
|
46
|
+
};
|
47
|
+
class Web3RequestManager extends web3_event_emitter_js_1.Web3EventEmitter {
|
48
|
+
constructor(provider, useRpcCallSpecification, requestManagerMiddleware) {
|
49
|
+
super();
|
50
|
+
if (!(0, web3_utils_1.isNullish)(provider)) {
|
51
|
+
this.setProvider(provider);
|
52
|
+
}
|
53
|
+
this.useRpcCallSpecification = useRpcCallSpecification;
|
54
|
+
if (!(0, web3_utils_1.isNullish)(requestManagerMiddleware))
|
55
|
+
this.middleware = requestManagerMiddleware;
|
56
|
+
}
|
57
|
+
/**
|
58
|
+
* Will return all available providers
|
59
|
+
*/
|
60
|
+
static get providers() {
|
61
|
+
return availableProviders;
|
62
|
+
}
|
63
|
+
/**
|
64
|
+
* Will return the current provider.
|
65
|
+
*
|
66
|
+
* @returns Returns the current provider
|
67
|
+
*/
|
68
|
+
get provider() {
|
69
|
+
return this._provider;
|
70
|
+
}
|
71
|
+
/**
|
72
|
+
* Will return all available providers
|
73
|
+
*/
|
74
|
+
// eslint-disable-next-line class-methods-use-this
|
75
|
+
get providers() {
|
76
|
+
return availableProviders;
|
77
|
+
}
|
78
|
+
/**
|
79
|
+
* Use to set provider. Provider can be a provider instance or a string.
|
80
|
+
*
|
81
|
+
* @param provider - The provider to set
|
82
|
+
*/
|
83
|
+
setProvider(provider) {
|
84
|
+
let newProvider;
|
85
|
+
// autodetect provider
|
86
|
+
if (provider && typeof provider === 'string' && this.providers) {
|
87
|
+
// HTTP
|
88
|
+
if (/^http(s)?:\/\//i.test(provider)) {
|
89
|
+
newProvider = new this.providers.HttpProvider(provider);
|
90
|
+
// WS
|
91
|
+
}
|
92
|
+
else if (/^ws(s)?:\/\//i.test(provider)) {
|
93
|
+
newProvider = new this.providers.WebsocketProvider(provider);
|
94
|
+
}
|
95
|
+
else {
|
96
|
+
throw new web3_errors_1.ProviderError(`Can't autodetect provider for "${provider}"`);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
else if ((0, web3_utils_1.isNullish)(provider)) {
|
100
|
+
// In case want to unset the provider
|
101
|
+
newProvider = undefined;
|
102
|
+
}
|
103
|
+
else {
|
104
|
+
newProvider = provider;
|
105
|
+
}
|
106
|
+
this.emit(Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, this._provider);
|
107
|
+
this._provider = newProvider;
|
108
|
+
this.emit(Web3RequestManagerEvent.PROVIDER_CHANGED, this._provider);
|
109
|
+
return true;
|
110
|
+
}
|
111
|
+
setMiddleware(requestManagerMiddleware) {
|
112
|
+
this.middleware = requestManagerMiddleware;
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
*
|
116
|
+
* Will execute a request
|
117
|
+
*
|
118
|
+
* @param request - {@link Web3APIRequest} The request to send
|
119
|
+
*
|
120
|
+
* @returns The response of the request {@link ResponseType}. If there is error
|
121
|
+
* in the response, will throw an error
|
122
|
+
*/
|
123
|
+
send(request) {
|
124
|
+
return __awaiter(this, void 0, void 0, function* () {
|
125
|
+
const requestObj = Object.assign({}, request);
|
126
|
+
let response = yield this._sendRequest(requestObj);
|
127
|
+
if (!(0, web3_utils_1.isNullish)(this.middleware))
|
128
|
+
response = yield this.middleware.processResponse(response);
|
129
|
+
if (web3_utils_1.jsonRpc.isResponseWithResult(response)) {
|
130
|
+
return response.result;
|
131
|
+
}
|
132
|
+
throw new web3_errors_1.ResponseError(response);
|
133
|
+
});
|
134
|
+
}
|
135
|
+
/**
|
136
|
+
* Same as send, but, will execute a batch of requests
|
137
|
+
*
|
138
|
+
* @param request {@link JsonRpcBatchRequest} The batch request to send
|
139
|
+
*/
|
140
|
+
sendBatch(request) {
|
141
|
+
return __awaiter(this, void 0, void 0, function* () {
|
142
|
+
const response = yield this._sendRequest(request);
|
143
|
+
return response;
|
144
|
+
});
|
145
|
+
}
|
146
|
+
_sendRequest(request) {
|
147
|
+
return __awaiter(this, void 0, void 0, function* () {
|
148
|
+
const { provider } = this;
|
149
|
+
if ((0, web3_utils_1.isNullish)(provider)) {
|
150
|
+
throw new web3_errors_1.ProviderError('Provider not available. Use `.setProvider` or `.provider=` to initialize the provider.');
|
151
|
+
}
|
152
|
+
let payload = (web3_utils_1.jsonRpc.isBatchRequest(request)
|
153
|
+
? web3_utils_1.jsonRpc.toBatchPayload(request)
|
154
|
+
: web3_utils_1.jsonRpc.toPayload(request));
|
155
|
+
if (!(0, web3_utils_1.isNullish)(this.middleware)) {
|
156
|
+
payload = yield this.middleware.processRequest(payload);
|
157
|
+
}
|
158
|
+
if ((0, utils_js_1.isWeb3Provider)(provider)) {
|
159
|
+
let response;
|
160
|
+
try {
|
161
|
+
response = yield provider.request(payload);
|
162
|
+
}
|
163
|
+
catch (error) {
|
164
|
+
// Check if the provider throw an error instead of reject with error
|
165
|
+
response = error;
|
166
|
+
}
|
167
|
+
return this._processJsonRpcResponse(payload, response, { legacy: false, error: false });
|
168
|
+
}
|
169
|
+
if ((0, utils_js_1.isEIP1193Provider)(provider)) {
|
170
|
+
return provider
|
171
|
+
.request(payload)
|
172
|
+
.then(res => this._processJsonRpcResponse(payload, res, {
|
173
|
+
legacy: true,
|
174
|
+
error: false,
|
175
|
+
}))
|
176
|
+
.catch(error => this._processJsonRpcResponse(payload, error, { legacy: true, error: true }));
|
177
|
+
}
|
178
|
+
// TODO: This could be deprecated and removed.
|
179
|
+
if ((0, utils_js_1.isLegacyRequestProvider)(provider)) {
|
180
|
+
return new Promise((resolve, reject) => {
|
181
|
+
const rejectWithError = (err) => {
|
182
|
+
reject(this._processJsonRpcResponse(payload, err, {
|
183
|
+
legacy: true,
|
184
|
+
error: true,
|
185
|
+
}));
|
186
|
+
};
|
187
|
+
const resolveWithResponse = (response) => resolve(this._processJsonRpcResponse(payload, response, {
|
188
|
+
legacy: true,
|
189
|
+
error: false,
|
190
|
+
}));
|
191
|
+
const result = provider.request(payload,
|
192
|
+
// a callback that is expected to be called after getting the response:
|
193
|
+
(err, response) => {
|
194
|
+
if (err) {
|
195
|
+
return rejectWithError(err);
|
196
|
+
}
|
197
|
+
return resolveWithResponse(response);
|
198
|
+
});
|
199
|
+
// Some providers, that follow a previous drafted version of EIP1193, has a `request` function
|
200
|
+
// that is not defined as `async`, but it returns a promise.
|
201
|
+
// Such providers would not be picked with if(isEIP1193Provider(provider)) above
|
202
|
+
// because the `request` function was not defined with `async` and so the function definition is not `AsyncFunction`.
|
203
|
+
// Like this provider: https://github.dev/NomicFoundation/hardhat/blob/62bea2600785595ba36f2105564076cf5cdf0fd8/packages/hardhat-core/src/internal/core/providers/backwards-compatibility.ts#L19
|
204
|
+
// So check if the returned result is a Promise, and resolve with it accordingly.
|
205
|
+
// Note: in this case we expect the callback provided above to never be called.
|
206
|
+
if ((0, web3_utils_1.isPromise)(result)) {
|
207
|
+
const responsePromise = result;
|
208
|
+
responsePromise.then(resolveWithResponse).catch(error => {
|
209
|
+
try {
|
210
|
+
// Attempt to process the error response
|
211
|
+
const processedError = this._processJsonRpcResponse(payload, error, { legacy: true, error: true });
|
212
|
+
reject(processedError);
|
213
|
+
}
|
214
|
+
catch (processingError) {
|
215
|
+
// Catch any errors that occur during the error processing
|
216
|
+
reject(processingError);
|
217
|
+
}
|
218
|
+
});
|
219
|
+
}
|
220
|
+
});
|
221
|
+
}
|
222
|
+
// TODO: This could be deprecated and removed.
|
223
|
+
if ((0, utils_js_1.isLegacySendProvider)(provider)) {
|
224
|
+
return new Promise((resolve, reject) => {
|
225
|
+
provider.send(payload, (err, response) => {
|
226
|
+
if (err) {
|
227
|
+
return reject(this._processJsonRpcResponse(payload, err, {
|
228
|
+
legacy: true,
|
229
|
+
error: true,
|
230
|
+
}));
|
231
|
+
}
|
232
|
+
if ((0, web3_utils_1.isNullish)(response)) {
|
233
|
+
throw new web3_errors_1.ResponseError({}, 'Got a "nullish" response from provider.');
|
234
|
+
}
|
235
|
+
return resolve(this._processJsonRpcResponse(payload, response, {
|
236
|
+
legacy: true,
|
237
|
+
error: false,
|
238
|
+
}));
|
239
|
+
});
|
240
|
+
});
|
241
|
+
}
|
242
|
+
// TODO: This could be deprecated and removed.
|
243
|
+
if ((0, utils_js_1.isLegacySendAsyncProvider)(provider)) {
|
244
|
+
return provider
|
245
|
+
.sendAsync(payload)
|
246
|
+
.then(response => this._processJsonRpcResponse(payload, response, { legacy: true, error: false }))
|
247
|
+
.catch(error => this._processJsonRpcResponse(payload, error, {
|
248
|
+
legacy: true,
|
249
|
+
error: true,
|
250
|
+
}));
|
251
|
+
}
|
252
|
+
throw new web3_errors_1.ProviderError('Provider does not have a request or send method to use.');
|
253
|
+
});
|
254
|
+
}
|
255
|
+
// eslint-disable-next-line class-methods-use-this
|
256
|
+
_processJsonRpcResponse(payload, response, { legacy, error }) {
|
257
|
+
if ((0, web3_utils_1.isNullish)(response)) {
|
258
|
+
return this._buildResponse(payload,
|
259
|
+
// Some providers uses "null" as valid empty response
|
260
|
+
// eslint-disable-next-line no-null/no-null
|
261
|
+
null, error);
|
262
|
+
}
|
263
|
+
// This is the majority of the cases so check these first
|
264
|
+
// A valid JSON-RPC response with error object
|
265
|
+
if (web3_utils_1.jsonRpc.isResponseWithError(response)) {
|
266
|
+
// check if its an rpc error
|
267
|
+
if (this.useRpcCallSpecification &&
|
268
|
+
(0, web3_utils_1.isResponseRpcError)(response)) {
|
269
|
+
const rpcErrorResponse = response;
|
270
|
+
// check if rpc error flag is on and response error code match an EIP-1474 or a standard rpc error code
|
271
|
+
if (web3_errors_1.rpcErrorsMap.get(rpcErrorResponse.error.code)) {
|
272
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
273
|
+
const Err = web3_errors_1.rpcErrorsMap.get(rpcErrorResponse.error.code).error;
|
274
|
+
throw new Err(rpcErrorResponse);
|
275
|
+
}
|
276
|
+
else {
|
277
|
+
throw new web3_errors_1.RpcError(rpcErrorResponse);
|
278
|
+
}
|
279
|
+
}
|
280
|
+
else if (!Web3RequestManager._isReverted(response)) {
|
281
|
+
throw new web3_errors_1.InvalidResponseError(response, payload);
|
282
|
+
}
|
283
|
+
}
|
284
|
+
// This is the majority of the cases so check these first
|
285
|
+
// A valid JSON-RPC response with result object
|
286
|
+
if (web3_utils_1.jsonRpc.isResponseWithResult(response)) {
|
287
|
+
return response;
|
288
|
+
}
|
289
|
+
if (response instanceof Error) {
|
290
|
+
Web3RequestManager._isReverted(response);
|
291
|
+
throw response;
|
292
|
+
}
|
293
|
+
if (!legacy && web3_utils_1.jsonRpc.isBatchRequest(payload) && web3_utils_1.jsonRpc.isBatchResponse(response)) {
|
294
|
+
return response;
|
295
|
+
}
|
296
|
+
if (legacy && !error && web3_utils_1.jsonRpc.isBatchRequest(payload)) {
|
297
|
+
return response;
|
298
|
+
}
|
299
|
+
if (legacy && error && web3_utils_1.jsonRpc.isBatchRequest(payload)) {
|
300
|
+
// In case of error batch response we don't want to throw Invalid response
|
301
|
+
throw response;
|
302
|
+
}
|
303
|
+
if (legacy &&
|
304
|
+
!web3_utils_1.jsonRpc.isResponseWithError(response) &&
|
305
|
+
!web3_utils_1.jsonRpc.isResponseWithResult(response)) {
|
306
|
+
return this._buildResponse(payload, response, error);
|
307
|
+
}
|
308
|
+
if (web3_utils_1.jsonRpc.isBatchRequest(payload) && !Array.isArray(response)) {
|
309
|
+
throw new web3_errors_1.ResponseError(response, 'Got normal response for a batch request.');
|
310
|
+
}
|
311
|
+
if (!web3_utils_1.jsonRpc.isBatchRequest(payload) && Array.isArray(response)) {
|
312
|
+
throw new web3_errors_1.ResponseError(response, 'Got batch response for a normal request.');
|
313
|
+
}
|
314
|
+
throw new web3_errors_1.ResponseError(response, 'Invalid response');
|
315
|
+
}
|
316
|
+
static _isReverted(response) {
|
317
|
+
let error;
|
318
|
+
if (web3_utils_1.jsonRpc.isResponseWithError(response)) {
|
319
|
+
error = response.error;
|
320
|
+
}
|
321
|
+
else if (response instanceof Error) {
|
322
|
+
error = response;
|
323
|
+
}
|
324
|
+
// This message means that there was an error while executing the code of the smart contract
|
325
|
+
// However, more processing will happen at a higher level to decode the error data,
|
326
|
+
// according to the Error ABI, if it was available as of EIP-838.
|
327
|
+
if (error === null || error === void 0 ? void 0 : error.message.includes('revert'))
|
328
|
+
throw new web3_errors_1.ContractExecutionError(error);
|
329
|
+
return false;
|
330
|
+
}
|
331
|
+
// Need to use same types as _processJsonRpcResponse so have to declare as instance method
|
332
|
+
// eslint-disable-next-line class-methods-use-this
|
333
|
+
_buildResponse(payload, response, error) {
|
334
|
+
const res = {
|
335
|
+
jsonrpc: '2.0',
|
336
|
+
// eslint-disable-next-line no-nested-ternary
|
337
|
+
id: web3_utils_1.jsonRpc.isBatchRequest(payload)
|
338
|
+
? payload[0].id
|
339
|
+
: 'id' in payload
|
340
|
+
? payload.id
|
341
|
+
: // Have to use the null here explicitly
|
342
|
+
// eslint-disable-next-line no-null/no-null
|
343
|
+
null,
|
344
|
+
};
|
345
|
+
if (error) {
|
346
|
+
return Object.assign(Object.assign({}, res), { error: response });
|
347
|
+
}
|
348
|
+
return Object.assign(Object.assign({}, res), { result: response });
|
349
|
+
}
|
350
|
+
}
|
351
|
+
exports.Web3RequestManager = Web3RequestManager;
|
352
|
+
//# sourceMappingURL=web3_request_manager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"web3_request_manager.js","sourceRoot":"","sources":["../../src/web3_request_manager.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import { DataFormat, JsonRpcNotification, JsonRpcSubscriptionResult, JsonRpcSubscriptionResultOld, Log, Web3APISpec } from 'web3-types';
|
2
|
+
import { Web3RequestManager } from './web3_request_manager.js';
|
3
|
+
import { Web3SubscriptionConstructor } from './web3_subscriptions.js';
|
4
|
+
declare type ShouldUnsubscribeCondition = ({ id, sub, }: {
|
5
|
+
id: string;
|
6
|
+
sub: unknown;
|
7
|
+
}) => boolean | undefined;
|
8
|
+
export declare class Web3SubscriptionManager<API extends Web3APISpec = Web3APISpec, RegisteredSubs extends {
|
9
|
+
[key: string]: Web3SubscriptionConstructor<API>;
|
10
|
+
} = {
|
11
|
+
[key: string]: Web3SubscriptionConstructor<API>;
|
12
|
+
}> {
|
13
|
+
readonly requestManager: Web3RequestManager<API>;
|
14
|
+
readonly registeredSubscriptions: RegisteredSubs;
|
15
|
+
private readonly tolerateUnlinkedSubscription;
|
16
|
+
private readonly _subscriptions;
|
17
|
+
/**
|
18
|
+
*
|
19
|
+
* @param - requestManager
|
20
|
+
* @param - registeredSubscriptions
|
21
|
+
*
|
22
|
+
* @example
|
23
|
+
* ```ts
|
24
|
+
* const requestManager = new Web3RequestManager("ws://localhost:8545");
|
25
|
+
* const subscriptionManager = new Web3SubscriptionManager(requestManager, {});
|
26
|
+
* ```
|
27
|
+
*/
|
28
|
+
constructor(requestManager: Web3RequestManager<API>, registeredSubscriptions: RegisteredSubs);
|
29
|
+
/**
|
30
|
+
* @deprecated This constructor overloading should not be used
|
31
|
+
*/
|
32
|
+
constructor(requestManager: Web3RequestManager<API>, registeredSubscriptions: RegisteredSubs, tolerateUnlinkedSubscription: boolean);
|
33
|
+
private listenToProviderEvents;
|
34
|
+
protected messageListener(data?: JsonRpcSubscriptionResult | JsonRpcSubscriptionResultOld<Log> | JsonRpcNotification<Log>): void;
|
35
|
+
/**
|
36
|
+
* Will create a new subscription
|
37
|
+
*
|
38
|
+
* @param name - The subscription you want to subscribe to
|
39
|
+
* @param args - Optional additional parameters, depending on the subscription type
|
40
|
+
* @param returnFormat- ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted.
|
41
|
+
*
|
42
|
+
* Will subscribe to a specific topic (note: name)
|
43
|
+
* @returns The subscription object
|
44
|
+
*/
|
45
|
+
subscribe<T extends keyof RegisteredSubs>(name: T, args?: ConstructorParameters<RegisteredSubs[T]>[0], returnFormat?: DataFormat): Promise<InstanceType<RegisteredSubs[T]>>;
|
46
|
+
/**
|
47
|
+
* Will returns all subscriptions.
|
48
|
+
*/
|
49
|
+
get subscriptions(): Map<string, InstanceType<RegisteredSubs[keyof RegisteredSubs]>>;
|
50
|
+
/**
|
51
|
+
*
|
52
|
+
* Adds an instance of {@link Web3Subscription} and subscribes to it
|
53
|
+
*
|
54
|
+
* @param sub - A {@link Web3Subscription} object
|
55
|
+
*/
|
56
|
+
addSubscription(sub: InstanceType<RegisteredSubs[keyof RegisteredSubs]>): Promise<string>;
|
57
|
+
/**
|
58
|
+
* Will clear a subscription
|
59
|
+
*
|
60
|
+
* @param id - The subscription of type {@link Web3Subscription} to remove
|
61
|
+
*/
|
62
|
+
removeSubscription(sub: InstanceType<RegisteredSubs[keyof RegisteredSubs]>): Promise<string>;
|
63
|
+
/**
|
64
|
+
* Will unsubscribe all subscriptions that fulfill the condition
|
65
|
+
*
|
66
|
+
* @param condition - A function that access and `id` and a `subscription` and return `true` or `false`
|
67
|
+
* @returns An array of all the un-subscribed subscriptions
|
68
|
+
*/
|
69
|
+
unsubscribe(condition?: ShouldUnsubscribeCondition): Promise<string[]>;
|
70
|
+
/**
|
71
|
+
* Clears all subscriptions
|
72
|
+
*/
|
73
|
+
clear(): void;
|
74
|
+
/**
|
75
|
+
* Check whether the current provider supports subscriptions.
|
76
|
+
*
|
77
|
+
* @returns `true` or `false` depending on if the current provider supports subscriptions
|
78
|
+
*/
|
79
|
+
supportsSubscriptions(): boolean;
|
80
|
+
}
|
81
|
+
export {};
|
@@ -0,0 +1,193 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
This file is part of web3.js.
|
4
|
+
|
5
|
+
web3.js is free software: you can redistribute it and/or modify
|
6
|
+
it under the terms of the GNU Lesser General Public License as published by
|
7
|
+
the Free Software Foundation, either version 3 of the License, or
|
8
|
+
(at your option) any later version.
|
9
|
+
|
10
|
+
web3.js is distributed in the hope that it will be useful,
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
16
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
*/
|
18
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
19
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
20
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
21
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
22
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
23
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
24
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
25
|
+
});
|
26
|
+
};
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
28
|
+
exports.Web3SubscriptionManager = void 0;
|
29
|
+
const web3_types_1 = require("web3-types");
|
30
|
+
const web3_errors_1 = require("web3-errors");
|
31
|
+
const web3_utils_1 = require("web3-utils");
|
32
|
+
const utils_js_1 = require("./utils.js");
|
33
|
+
const web3_request_manager_js_1 = require("./web3_request_manager.js");
|
34
|
+
class Web3SubscriptionManager {
|
35
|
+
constructor(requestManager, registeredSubscriptions, tolerateUnlinkedSubscription = false) {
|
36
|
+
this.requestManager = requestManager;
|
37
|
+
this.registeredSubscriptions = registeredSubscriptions;
|
38
|
+
this.tolerateUnlinkedSubscription = tolerateUnlinkedSubscription;
|
39
|
+
this._subscriptions = new Map();
|
40
|
+
this.requestManager.on(web3_request_manager_js_1.Web3RequestManagerEvent.BEFORE_PROVIDER_CHANGE, () => __awaiter(this, void 0, void 0, function* () {
|
41
|
+
yield this.unsubscribe();
|
42
|
+
}));
|
43
|
+
this.requestManager.on(web3_request_manager_js_1.Web3RequestManagerEvent.PROVIDER_CHANGED, () => {
|
44
|
+
this.clear();
|
45
|
+
this.listenToProviderEvents();
|
46
|
+
});
|
47
|
+
this.listenToProviderEvents();
|
48
|
+
}
|
49
|
+
listenToProviderEvents() {
|
50
|
+
const providerAsWebProvider = this.requestManager.provider;
|
51
|
+
if (!this.requestManager.provider ||
|
52
|
+
(typeof (providerAsWebProvider === null || providerAsWebProvider === void 0 ? void 0 : providerAsWebProvider.supportsSubscriptions) === 'function' &&
|
53
|
+
!(providerAsWebProvider === null || providerAsWebProvider === void 0 ? void 0 : providerAsWebProvider.supportsSubscriptions()))) {
|
54
|
+
return;
|
55
|
+
}
|
56
|
+
if (typeof this.requestManager.provider.on === 'function') {
|
57
|
+
if (typeof this.requestManager.provider.request === 'function') {
|
58
|
+
// Listen to provider messages and data
|
59
|
+
this.requestManager.provider.on('message',
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
61
|
+
(message) => this.messageListener(message));
|
62
|
+
}
|
63
|
+
else {
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument
|
65
|
+
providerAsWebProvider.on('data', (data) => this.messageListener(data));
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
messageListener(data) {
|
70
|
+
var _a, _b, _c;
|
71
|
+
if (!data) {
|
72
|
+
throw new web3_errors_1.SubscriptionError('Should not call messageListener with no data. Type was');
|
73
|
+
}
|
74
|
+
const subscriptionId = ((_a = data.params) === null || _a === void 0 ? void 0 : _a.subscription) ||
|
75
|
+
((_b = data.data) === null || _b === void 0 ? void 0 : _b.subscription) ||
|
76
|
+
((_c = data.id) === null || _c === void 0 ? void 0 : _c.toString(16));
|
77
|
+
// Process if the received data is related to a subscription
|
78
|
+
if (subscriptionId) {
|
79
|
+
const sub = this._subscriptions.get(subscriptionId);
|
80
|
+
sub === null || sub === void 0 ? void 0 : sub.processSubscriptionData(data);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
/**
|
84
|
+
* Will create a new subscription
|
85
|
+
*
|
86
|
+
* @param name - The subscription you want to subscribe to
|
87
|
+
* @param args - Optional additional parameters, depending on the subscription type
|
88
|
+
* @param returnFormat- ({@link DataFormat} defaults to {@link DEFAULT_RETURN_FORMAT}) - Specifies how the return data from the call should be formatted.
|
89
|
+
*
|
90
|
+
* Will subscribe to a specific topic (note: name)
|
91
|
+
* @returns The subscription object
|
92
|
+
*/
|
93
|
+
subscribe(name, args, returnFormat = web3_types_1.DEFAULT_RETURN_FORMAT) {
|
94
|
+
return __awaiter(this, void 0, void 0, function* () {
|
95
|
+
const Klass = this.registeredSubscriptions[name];
|
96
|
+
if (!Klass) {
|
97
|
+
throw new web3_errors_1.SubscriptionError('Invalid subscription type');
|
98
|
+
}
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
100
|
+
const subscription = new Klass(args !== null && args !== void 0 ? args : undefined, {
|
101
|
+
subscriptionManager: this,
|
102
|
+
returnFormat,
|
103
|
+
});
|
104
|
+
yield this.addSubscription(subscription);
|
105
|
+
return subscription;
|
106
|
+
});
|
107
|
+
}
|
108
|
+
/**
|
109
|
+
* Will returns all subscriptions.
|
110
|
+
*/
|
111
|
+
get subscriptions() {
|
112
|
+
return this._subscriptions;
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
*
|
116
|
+
* Adds an instance of {@link Web3Subscription} and subscribes to it
|
117
|
+
*
|
118
|
+
* @param sub - A {@link Web3Subscription} object
|
119
|
+
*/
|
120
|
+
addSubscription(sub) {
|
121
|
+
return __awaiter(this, void 0, void 0, function* () {
|
122
|
+
if (!this.requestManager.provider) {
|
123
|
+
throw new web3_errors_1.ProviderError('Provider not available');
|
124
|
+
}
|
125
|
+
if (!this.supportsSubscriptions()) {
|
126
|
+
throw new web3_errors_1.SubscriptionError('The current provider does not support subscriptions');
|
127
|
+
}
|
128
|
+
if (sub.id && this._subscriptions.has(sub.id)) {
|
129
|
+
throw new web3_errors_1.SubscriptionError(`Subscription with id "${sub.id}" already exists`);
|
130
|
+
}
|
131
|
+
yield sub.sendSubscriptionRequest();
|
132
|
+
if ((0, web3_utils_1.isNullish)(sub.id)) {
|
133
|
+
throw new web3_errors_1.SubscriptionError('Subscription is not subscribed yet.');
|
134
|
+
}
|
135
|
+
this._subscriptions.set(sub.id, sub);
|
136
|
+
return sub.id;
|
137
|
+
});
|
138
|
+
}
|
139
|
+
/**
|
140
|
+
* Will clear a subscription
|
141
|
+
*
|
142
|
+
* @param id - The subscription of type {@link Web3Subscription} to remove
|
143
|
+
*/
|
144
|
+
removeSubscription(sub) {
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
146
|
+
const { id } = sub;
|
147
|
+
if ((0, web3_utils_1.isNullish)(id)) {
|
148
|
+
throw new web3_errors_1.SubscriptionError('Subscription is not subscribed yet. Or, had already been unsubscribed but not through the Subscription Manager.');
|
149
|
+
}
|
150
|
+
if (!this._subscriptions.has(id) && !this.tolerateUnlinkedSubscription) {
|
151
|
+
throw new web3_errors_1.SubscriptionError(`Subscription with id "${id.toString()}" does not exists`);
|
152
|
+
}
|
153
|
+
yield sub.sendUnsubscribeRequest();
|
154
|
+
this._subscriptions.delete(id);
|
155
|
+
return id;
|
156
|
+
});
|
157
|
+
}
|
158
|
+
/**
|
159
|
+
* Will unsubscribe all subscriptions that fulfill the condition
|
160
|
+
*
|
161
|
+
* @param condition - A function that access and `id` and a `subscription` and return `true` or `false`
|
162
|
+
* @returns An array of all the un-subscribed subscriptions
|
163
|
+
*/
|
164
|
+
unsubscribe(condition) {
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
166
|
+
const result = [];
|
167
|
+
for (const [id, sub] of this.subscriptions.entries()) {
|
168
|
+
if (!condition || (typeof condition === 'function' && condition({ id, sub }))) {
|
169
|
+
result.push(this.removeSubscription(sub));
|
170
|
+
}
|
171
|
+
}
|
172
|
+
return Promise.all(result);
|
173
|
+
});
|
174
|
+
}
|
175
|
+
/**
|
176
|
+
* Clears all subscriptions
|
177
|
+
*/
|
178
|
+
clear() {
|
179
|
+
this._subscriptions.clear();
|
180
|
+
}
|
181
|
+
/**
|
182
|
+
* Check whether the current provider supports subscriptions.
|
183
|
+
*
|
184
|
+
* @returns `true` or `false` depending on if the current provider supports subscriptions
|
185
|
+
*/
|
186
|
+
supportsSubscriptions() {
|
187
|
+
return (0, web3_utils_1.isNullish)(this.requestManager.provider)
|
188
|
+
? false
|
189
|
+
: (0, utils_js_1.isSupportSubscriptions)(this.requestManager.provider);
|
190
|
+
}
|
191
|
+
}
|
192
|
+
exports.Web3SubscriptionManager = Web3SubscriptionManager;
|
193
|
+
//# sourceMappingURL=web3_subscription_manager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"web3_subscription_manager.js","sourceRoot":"","sources":["../../src/web3_subscription_manager.ts"],"names":[],"mappings":"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"}
|