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
package/src/utils.ts
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of web3.js.
|
3
|
+
|
4
|
+
web3.js is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU Lesser General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
web3.js is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public License
|
15
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
|
18
|
+
import {
|
19
|
+
EIP1193Provider,
|
20
|
+
LegacyRequestProvider,
|
21
|
+
LegacySendAsyncProvider,
|
22
|
+
LegacySendProvider,
|
23
|
+
SupportedProviders,
|
24
|
+
Web3APISpec,
|
25
|
+
Web3BaseProvider,
|
26
|
+
MetaMaskProvider,
|
27
|
+
} from 'web3-types';
|
28
|
+
|
29
|
+
export const isWeb3Provider = <API extends Web3APISpec>(
|
30
|
+
provider: SupportedProviders<API>,
|
31
|
+
): provider is Web3BaseProvider<API> => Web3BaseProvider.isWeb3Provider(provider);
|
32
|
+
|
33
|
+
export const isMetaMaskProvider = <API extends Web3APISpec>(
|
34
|
+
provider: SupportedProviders<API>,
|
35
|
+
): provider is MetaMaskProvider<API> =>
|
36
|
+
typeof provider !== 'string' &&
|
37
|
+
'request' in provider &&
|
38
|
+
provider.request.constructor.name === 'AsyncFunction' &&
|
39
|
+
'isMetaMask' in provider &&
|
40
|
+
provider.isMetaMask;
|
41
|
+
|
42
|
+
export const isLegacyRequestProvider = <API extends Web3APISpec>(
|
43
|
+
provider: SupportedProviders<API>,
|
44
|
+
): provider is LegacyRequestProvider =>
|
45
|
+
typeof provider !== 'string' &&
|
46
|
+
'request' in provider &&
|
47
|
+
provider.request.constructor.name === 'Function';
|
48
|
+
|
49
|
+
export const isEIP1193Provider = <API extends Web3APISpec>(
|
50
|
+
provider: SupportedProviders<API>,
|
51
|
+
): provider is EIP1193Provider<API> =>
|
52
|
+
typeof provider !== 'string' &&
|
53
|
+
'request' in provider &&
|
54
|
+
provider.request.constructor.name === 'AsyncFunction';
|
55
|
+
|
56
|
+
export const isLegacySendProvider = <API extends Web3APISpec>(
|
57
|
+
provider: SupportedProviders<API>,
|
58
|
+
): provider is LegacySendProvider => typeof provider !== 'string' && 'send' in provider;
|
59
|
+
|
60
|
+
export const isLegacySendAsyncProvider = <API extends Web3APISpec>(
|
61
|
+
provider: SupportedProviders<API>,
|
62
|
+
): provider is LegacySendAsyncProvider => typeof provider !== 'string' && 'sendAsync' in provider;
|
63
|
+
|
64
|
+
export const isSupportedProvider = <API extends Web3APISpec>(
|
65
|
+
provider: SupportedProviders<API>,
|
66
|
+
): provider is SupportedProviders<API> =>
|
67
|
+
provider &&
|
68
|
+
(isWeb3Provider(provider) ||
|
69
|
+
isEIP1193Provider(provider) ||
|
70
|
+
isLegacyRequestProvider(provider) ||
|
71
|
+
isLegacySendAsyncProvider(provider) ||
|
72
|
+
isLegacySendProvider(provider));
|
73
|
+
export const isSupportSubscriptions = <API extends Web3APISpec>(
|
74
|
+
provider: SupportedProviders<API>,
|
75
|
+
): boolean => {
|
76
|
+
if (provider && 'supportsSubscriptions' in provider) {
|
77
|
+
return provider.supportsSubscriptions();
|
78
|
+
}
|
79
|
+
|
80
|
+
if (provider && typeof provider !== 'string' && 'on' in provider) {
|
81
|
+
return true;
|
82
|
+
}
|
83
|
+
|
84
|
+
return false;
|
85
|
+
};
|
@@ -0,0 +1,128 @@
|
|
1
|
+
/*
|
2
|
+
This file is part of web3.js.
|
3
|
+
|
4
|
+
web3.js is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU Lesser General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
web3.js is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public License
|
15
|
+
along with web3.js. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
*/
|
17
|
+
|
18
|
+
import { JsonRpcBatchResponse, JsonRpcOptionalRequest, JsonRpcRequest } from 'web3-types';
|
19
|
+
import { jsonRpc, Web3DeferredPromise } from 'web3-utils';
|
20
|
+
import { OperationAbortError, OperationTimeoutError, ResponseError } from 'web3-errors';
|
21
|
+
import { Web3RequestManager } from './web3_request_manager.js';
|
22
|
+
|
23
|
+
export const DEFAULT_BATCH_REQUEST_TIMEOUT = 1000;
|
24
|
+
|
25
|
+
export class Web3BatchRequest {
|
26
|
+
private readonly _requestManager: Web3RequestManager;
|
27
|
+
private readonly _requests: Map<
|
28
|
+
number,
|
29
|
+
{ payload: JsonRpcRequest; promise: Web3DeferredPromise<unknown> }
|
30
|
+
>;
|
31
|
+
|
32
|
+
public constructor(requestManager: Web3RequestManager) {
|
33
|
+
this._requestManager = requestManager;
|
34
|
+
this._requests = new Map();
|
35
|
+
}
|
36
|
+
|
37
|
+
public get requests() {
|
38
|
+
return [...this._requests.values()].map(r => r.payload);
|
39
|
+
}
|
40
|
+
|
41
|
+
public add<ResponseType = unknown>(request: JsonRpcOptionalRequest<unknown>) {
|
42
|
+
const payload = jsonRpc.toPayload(request) as JsonRpcRequest;
|
43
|
+
const promise = new Web3DeferredPromise<ResponseType>();
|
44
|
+
|
45
|
+
this._requests.set(payload.id as number, { payload, promise });
|
46
|
+
|
47
|
+
return promise;
|
48
|
+
}
|
49
|
+
|
50
|
+
// eslint-disable-next-line class-methods-use-this
|
51
|
+
public async execute(options?: {
|
52
|
+
timeout?: number;
|
53
|
+
}): Promise<JsonRpcBatchResponse<unknown, unknown>> {
|
54
|
+
if (this.requests.length === 0) {
|
55
|
+
return Promise.resolve([]);
|
56
|
+
}
|
57
|
+
|
58
|
+
const request = new Web3DeferredPromise<JsonRpcBatchResponse<unknown, unknown>>({
|
59
|
+
timeout: options?.timeout ?? DEFAULT_BATCH_REQUEST_TIMEOUT,
|
60
|
+
eagerStart: true,
|
61
|
+
timeoutMessage: 'Batch request timeout',
|
62
|
+
});
|
63
|
+
|
64
|
+
this._processBatchRequest(request).catch(err => request.reject(err));
|
65
|
+
|
66
|
+
request.catch((err: Error) => {
|
67
|
+
if (err instanceof OperationTimeoutError) {
|
68
|
+
this._abortAllRequests('Batch request timeout');
|
69
|
+
}
|
70
|
+
|
71
|
+
request.reject(err);
|
72
|
+
});
|
73
|
+
|
74
|
+
return request;
|
75
|
+
}
|
76
|
+
|
77
|
+
private async _processBatchRequest(
|
78
|
+
promise: Web3DeferredPromise<JsonRpcBatchResponse<unknown, unknown>>,
|
79
|
+
) {
|
80
|
+
const response = await this._requestManager.sendBatch(
|
81
|
+
[...this._requests.values()].map(r => r.payload),
|
82
|
+
);
|
83
|
+
|
84
|
+
if (response.length !== this._requests.size) {
|
85
|
+
this._abortAllRequests('Invalid batch response');
|
86
|
+
|
87
|
+
throw new ResponseError(
|
88
|
+
response,
|
89
|
+
`Batch request size mismatch the results size. Requests: ${this._requests.size}, Responses: ${response.length}`,
|
90
|
+
);
|
91
|
+
}
|
92
|
+
|
93
|
+
const requestIds = this.requests
|
94
|
+
.map(r => r.id)
|
95
|
+
.map(Number)
|
96
|
+
.sort((a, b) => a - b);
|
97
|
+
|
98
|
+
const responseIds = response
|
99
|
+
.map(r => r.id)
|
100
|
+
.map(Number)
|
101
|
+
.sort((a, b) => a - b);
|
102
|
+
|
103
|
+
if (JSON.stringify(requestIds) !== JSON.stringify(responseIds)) {
|
104
|
+
this._abortAllRequests('Invalid batch response');
|
105
|
+
|
106
|
+
throw new ResponseError(
|
107
|
+
response,
|
108
|
+
`Batch request mismatch the results. Requests: [${requestIds.join()}], Responses: [${responseIds.join()}]`,
|
109
|
+
);
|
110
|
+
}
|
111
|
+
|
112
|
+
for (const res of response) {
|
113
|
+
if (jsonRpc.isResponseWithResult(res)) {
|
114
|
+
this._requests.get(res.id as number)?.promise.resolve(res.result);
|
115
|
+
} else if (jsonRpc.isResponseWithError(res)) {
|
116
|
+
this._requests.get(res.id as number)?.promise.reject(res.error);
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
120
|
+
promise.resolve(response);
|
121
|
+
}
|
122
|
+
|
123
|
+
private _abortAllRequests(msg: string) {
|
124
|
+
for (const { promise } of this._requests.values()) {
|
125
|
+
promise.reject(new OperationAbortError(msg));
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|