@metamask-previews/eth-json-rpc-middleware 24.0.2-preview-8bfa290fb → 25.0.0-preview-0a30e47
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.
- package/CHANGELOG.md +13 -1
- package/dist/{block-cache.d.mts → block-cache.d.ts} +4 -4
- package/dist/block-cache.d.ts.map +1 -0
- package/dist/{block-cache.mjs → block-cache.js} +9 -22
- package/dist/block-cache.js.map +1 -0
- package/dist/{block-ref-rewrite.d.cts → block-ref-rewrite.d.ts} +4 -4
- package/dist/block-ref-rewrite.d.ts.map +1 -0
- package/dist/{block-ref-rewrite.mjs → block-ref-rewrite.js} +2 -2
- package/dist/block-ref-rewrite.js.map +1 -0
- package/dist/{block-ref.d.cts → block-ref.d.ts} +5 -5
- package/dist/block-ref.d.ts.map +1 -0
- package/dist/{block-ref.mjs → block-ref.js} +4 -4
- package/dist/block-ref.js.map +1 -0
- package/dist/{block-tracker-inspector.d.cts → block-tracker-inspector.d.ts} +4 -4
- package/dist/block-tracker-inspector.d.ts.map +1 -0
- package/dist/{block-tracker-inspector.mjs → block-tracker-inspector.js} +3 -3
- package/dist/block-tracker-inspector.js.map +1 -0
- package/dist/{fetch.d.mts → fetch.d.ts} +4 -4
- package/dist/fetch.d.ts.map +1 -0
- package/dist/{fetch.mjs → fetch.js} +2 -2
- package/dist/fetch.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/{inflight-cache.d.cts → inflight-cache.d.ts} +3 -3
- package/dist/inflight-cache.d.ts.map +1 -0
- package/dist/{inflight-cache.mjs → inflight-cache.js} +4 -4
- package/dist/inflight-cache.js.map +1 -0
- package/dist/logging-utils.d.ts +4 -0
- package/dist/logging-utils.d.ts.map +1 -0
- package/dist/logging-utils.js +4 -0
- package/dist/logging-utils.js.map +1 -0
- package/dist/methods/{wallet-get-granted-execution-permissions.d.mts → wallet-get-granted-execution-permissions.d.ts} +14 -14
- package/dist/methods/wallet-get-granted-execution-permissions.d.ts.map +1 -0
- package/dist/methods/{wallet-get-granted-execution-permissions.mjs → wallet-get-granted-execution-permissions.js} +6 -6
- package/dist/methods/wallet-get-granted-execution-permissions.js.map +1 -0
- package/dist/methods/{wallet-get-supported-execution-permissions.d.cts → wallet-get-supported-execution-permissions.d.ts} +6 -6
- package/dist/methods/wallet-get-supported-execution-permissions.d.ts.map +1 -0
- package/dist/methods/{wallet-get-supported-execution-permissions.mjs → wallet-get-supported-execution-permissions.js} +6 -6
- package/dist/methods/wallet-get-supported-execution-permissions.js.map +1 -0
- package/dist/methods/{wallet-request-execution-permissions.d.mts → wallet-request-execution-permissions.d.ts} +18 -18
- package/dist/methods/wallet-request-execution-permissions.d.ts.map +1 -0
- package/dist/methods/{wallet-request-execution-permissions.mjs → wallet-request-execution-permissions.js} +5 -5
- package/dist/methods/wallet-request-execution-permissions.js.map +1 -0
- package/dist/methods/{wallet-revoke-execution-permission.d.mts → wallet-revoke-execution-permission.d.ts} +5 -5
- package/dist/methods/wallet-revoke-execution-permission.d.ts.map +1 -0
- package/dist/methods/{wallet-revoke-execution-permission.mjs → wallet-revoke-execution-permission.js} +5 -5
- package/dist/methods/wallet-revoke-execution-permission.js.map +1 -0
- package/dist/{providerAsMiddleware.d.cts → providerAsMiddleware.d.ts} +5 -5
- package/dist/providerAsMiddleware.d.ts.map +1 -0
- package/dist/{providerAsMiddleware.mjs → providerAsMiddleware.js} +2 -2
- package/dist/providerAsMiddleware.js.map +1 -0
- package/dist/{retryOnEmpty.d.cts → retryOnEmpty.d.ts} +5 -5
- package/dist/retryOnEmpty.d.ts.map +1 -0
- package/dist/{retryOnEmpty.mjs → retryOnEmpty.js} +7 -7
- package/dist/retryOnEmpty.js.map +1 -0
- package/dist/{types.d.cts → types.d.ts} +2 -2
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/{cache.d.cts → cache.d.ts} +2 -2
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/{cache.mjs → cache.js} +2 -2
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/{common.d.mts → common.d.ts} +1 -1
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/{common.mjs → common.js} +1 -1
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/{error.d.mts → error.d.ts} +2 -2
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/{error.mjs → error.js} +3 -3
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/{normalize.d.cts → normalize.d.ts} +2 -2
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/{normalize.mjs → normalize.js} +1 -1
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/{structs.d.cts → structs.d.ts} +2 -2
- package/dist/utils/structs.d.ts.map +1 -0
- package/dist/utils/{structs.mjs → structs.js} +2 -2
- package/dist/utils/structs.js.map +1 -0
- package/dist/utils/{timeout.d.mts → timeout.d.ts} +1 -1
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/{timeout.mjs → timeout.js} +1 -1
- package/dist/utils/timeout.js.map +1 -0
- package/dist/utils/{validation.d.cts → validation.d.ts} +12 -12
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/{validation.mjs → validation.js} +5 -5
- package/dist/utils/validation.js.map +1 -0
- package/dist/{wallet.d.cts → wallet.d.ts} +8 -8
- package/dist/wallet.d.ts.map +1 -0
- package/dist/{wallet.mjs → wallet.js} +12 -12
- package/dist/wallet.js.map +1 -0
- package/package.json +17 -21
- package/dist/block-cache.cjs +0 -174
- package/dist/block-cache.cjs.map +0 -1
- package/dist/block-cache.d.cts +0 -18
- package/dist/block-cache.d.cts.map +0 -1
- package/dist/block-cache.d.mts.map +0 -1
- package/dist/block-cache.mjs.map +0 -1
- package/dist/block-ref-rewrite.cjs +0 -43
- package/dist/block-ref-rewrite.cjs.map +0 -1
- package/dist/block-ref-rewrite.d.cts.map +0 -1
- package/dist/block-ref-rewrite.d.mts +0 -17
- package/dist/block-ref-rewrite.d.mts.map +0 -1
- package/dist/block-ref-rewrite.mjs.map +0 -1
- package/dist/block-ref.cjs +0 -53
- package/dist/block-ref.cjs.map +0 -1
- package/dist/block-ref.d.cts.map +0 -1
- package/dist/block-ref.d.mts +0 -20
- package/dist/block-ref.d.mts.map +0 -1
- package/dist/block-ref.mjs.map +0 -1
- package/dist/block-tracker-inspector.cjs +0 -59
- package/dist/block-tracker-inspector.cjs.map +0 -1
- package/dist/block-tracker-inspector.d.cts.map +0 -1
- package/dist/block-tracker-inspector.d.mts +0 -15
- package/dist/block-tracker-inspector.d.mts.map +0 -1
- package/dist/block-tracker-inspector.mjs.map +0 -1
- package/dist/fetch.cjs +0 -39
- package/dist/fetch.cjs.map +0 -1
- package/dist/fetch.d.cts +0 -24
- package/dist/fetch.d.cts.map +0 -1
- package/dist/fetch.d.mts.map +0 -1
- package/dist/fetch.mjs.map +0 -1
- package/dist/index.cjs +0 -36
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -17
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.mts +0 -17
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs +0 -13
- package/dist/index.mjs.map +0 -1
- package/dist/inflight-cache.cjs +0 -90
- package/dist/inflight-cache.cjs.map +0 -1
- package/dist/inflight-cache.d.cts.map +0 -1
- package/dist/inflight-cache.d.mts +0 -13
- package/dist/inflight-cache.d.mts.map +0 -1
- package/dist/inflight-cache.mjs.map +0 -1
- package/dist/logging-utils.cjs +0 -7
- package/dist/logging-utils.cjs.map +0 -1
- package/dist/logging-utils.d.cts +0 -5
- package/dist/logging-utils.d.cts.map +0 -1
- package/dist/logging-utils.d.mts +0 -5
- package/dist/logging-utils.d.mts.map +0 -1
- package/dist/logging-utils.mjs +0 -4
- package/dist/logging-utils.mjs.map +0 -1
- package/dist/methods/wallet-get-granted-execution-permissions.cjs +0 -61
- package/dist/methods/wallet-get-granted-execution-permissions.cjs.map +0 -1
- package/dist/methods/wallet-get-granted-execution-permissions.d.cts +0 -140
- package/dist/methods/wallet-get-granted-execution-permissions.d.cts.map +0 -1
- package/dist/methods/wallet-get-granted-execution-permissions.d.mts.map +0 -1
- package/dist/methods/wallet-get-granted-execution-permissions.mjs.map +0 -1
- package/dist/methods/wallet-get-supported-execution-permissions.cjs +0 -47
- package/dist/methods/wallet-get-supported-execution-permissions.cjs.map +0 -1
- package/dist/methods/wallet-get-supported-execution-permissions.d.cts.map +0 -1
- package/dist/methods/wallet-get-supported-execution-permissions.d.mts +0 -54
- package/dist/methods/wallet-get-supported-execution-permissions.d.mts.map +0 -1
- package/dist/methods/wallet-get-supported-execution-permissions.mjs.map +0 -1
- package/dist/methods/wallet-request-execution-permissions.cjs +0 -45
- package/dist/methods/wallet-request-execution-permissions.cjs.map +0 -1
- package/dist/methods/wallet-request-execution-permissions.d.cts +0 -104
- package/dist/methods/wallet-request-execution-permissions.d.cts.map +0 -1
- package/dist/methods/wallet-request-execution-permissions.d.mts.map +0 -1
- package/dist/methods/wallet-request-execution-permissions.mjs.map +0 -1
- package/dist/methods/wallet-revoke-execution-permission.cjs +0 -32
- package/dist/methods/wallet-revoke-execution-permission.cjs.map +0 -1
- package/dist/methods/wallet-revoke-execution-permission.d.cts +0 -26
- package/dist/methods/wallet-revoke-execution-permission.d.cts.map +0 -1
- package/dist/methods/wallet-revoke-execution-permission.d.mts.map +0 -1
- package/dist/methods/wallet-revoke-execution-permission.mjs.map +0 -1
- package/dist/providerAsMiddleware.cjs +0 -28
- package/dist/providerAsMiddleware.cjs.map +0 -1
- package/dist/providerAsMiddleware.d.cts.map +0 -1
- package/dist/providerAsMiddleware.d.mts +0 -20
- package/dist/providerAsMiddleware.d.mts.map +0 -1
- package/dist/providerAsMiddleware.mjs.map +0 -1
- package/dist/retryOnEmpty.cjs +0 -106
- package/dist/retryOnEmpty.cjs.map +0 -1
- package/dist/retryOnEmpty.d.cts.map +0 -1
- package/dist/retryOnEmpty.d.mts +0 -17
- package/dist/retryOnEmpty.d.mts.map +0 -1
- package/dist/retryOnEmpty.mjs.map +0 -1
- package/dist/types.cjs +0 -3
- package/dist/types.cjs.map +0 -1
- package/dist/types.d.cts.map +0 -1
- package/dist/types.d.mts +0 -20
- package/dist/types.d.mts.map +0 -1
- package/dist/types.mjs +0 -2
- package/dist/types.mjs.map +0 -1
- package/dist/utils/cache.cjs +0 -186
- package/dist/utils/cache.cjs.map +0 -1
- package/dist/utils/cache.d.cts.map +0 -1
- package/dist/utils/cache.d.mts +0 -68
- package/dist/utils/cache.d.mts.map +0 -1
- package/dist/utils/cache.mjs.map +0 -1
- package/dist/utils/common.cjs +0 -17
- package/dist/utils/common.cjs.map +0 -1
- package/dist/utils/common.d.cts +0 -8
- package/dist/utils/common.d.cts.map +0 -1
- package/dist/utils/common.d.mts.map +0 -1
- package/dist/utils/common.mjs.map +0 -1
- package/dist/utils/error.cjs +0 -19
- package/dist/utils/error.cjs.map +0 -1
- package/dist/utils/error.d.cts +0 -10
- package/dist/utils/error.d.cts.map +0 -1
- package/dist/utils/error.d.mts.map +0 -1
- package/dist/utils/error.mjs.map +0 -1
- package/dist/utils/normalize.cjs +0 -57
- package/dist/utils/normalize.cjs.map +0 -1
- package/dist/utils/normalize.d.cts.map +0 -1
- package/dist/utils/normalize.d.mts +0 -26
- package/dist/utils/normalize.d.mts.map +0 -1
- package/dist/utils/normalize.mjs.map +0 -1
- package/dist/utils/structs.cjs +0 -21
- package/dist/utils/structs.cjs.map +0 -1
- package/dist/utils/structs.d.cts.map +0 -1
- package/dist/utils/structs.d.mts +0 -17
- package/dist/utils/structs.d.mts.map +0 -1
- package/dist/utils/structs.mjs.map +0 -1
- package/dist/utils/timeout.cjs +0 -14
- package/dist/utils/timeout.cjs.map +0 -1
- package/dist/utils/timeout.d.cts +0 -8
- package/dist/utils/timeout.d.cts.map +0 -1
- package/dist/utils/timeout.d.mts.map +0 -1
- package/dist/utils/timeout.mjs.map +0 -1
- package/dist/utils/validation.cjs +0 -255
- package/dist/utils/validation.cjs.map +0 -1
- package/dist/utils/validation.d.cts.map +0 -1
- package/dist/utils/validation.d.mts +0 -156
- package/dist/utils/validation.d.mts.map +0 -1
- package/dist/utils/validation.mjs.map +0 -1
- package/dist/wallet.cjs +0 -460
- package/dist/wallet.cjs.map +0 -1
- package/dist/wallet.d.cts.map +0 -1
- package/dist/wallet.d.mts +0 -66
- package/dist/wallet.d.mts.map +0 -1
- package/dist/wallet.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,9 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [25.0.0]
|
|
11
|
+
|
|
10
12
|
### Changed
|
|
11
13
|
|
|
14
|
+
- **BREAKING:** Drop CommonJS support ([#9536](https://github.com/MetaMask/core/pull/9536))
|
|
15
|
+
- This package is now ESM-only, but can still be used in CommonJS projects via `require(esm)` in modern Node.js versions (22+), or dynamic imports in older Node.js versions.
|
|
16
|
+
- **BREAKING:** Bump minimum Node.js version to 22 ([#9976](https://github.com/MetaMask/core/pull/9976))
|
|
17
|
+
- **BREAKING:** Bump TypeScript target to ES2022 ([#10019](https://github.com/MetaMask/core/pull/10019))
|
|
18
|
+
- This package now ships ES2022 code, requiring a compatible modern environment or bundler configuration to consume.
|
|
12
19
|
- Bump `@metamask/utils` from `^11.11.0` to `^11.12.0` ([#10076](https://github.com/MetaMask/core/pull/10076))
|
|
20
|
+
- Bump `@metamask/eth-block-tracker` from `^15.0.1` to `^16.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
|
|
21
|
+
- Bump `@metamask/eth-json-rpc-provider` from `^6.0.1` to `^7.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
|
|
22
|
+
- Bump `@metamask/json-rpc-engine` from `^10.5.0` to `^11.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
|
|
23
|
+
- Bump `@metamask/message-manager` from `^14.1.2` to `^15.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
|
|
13
24
|
|
|
14
25
|
## [24.0.2]
|
|
15
26
|
|
|
@@ -133,7 +144,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
133
144
|
- See [`MetaMask/eth-json-rpc-middleware`](https://github.com/MetaMask/eth-json-rpc-middleware/blob/main/CHANGELOG.md)
|
|
134
145
|
for the original changelog.
|
|
135
146
|
|
|
136
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@
|
|
147
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@25.0.0...HEAD
|
|
148
|
+
[25.0.0]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@24.0.2...@metamask/eth-json-rpc-middleware@25.0.0
|
|
137
149
|
[24.0.2]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@24.0.1...@metamask/eth-json-rpc-middleware@24.0.2
|
|
138
150
|
[24.0.1]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@24.0.0...@metamask/eth-json-rpc-middleware@24.0.1
|
|
139
151
|
[24.0.0]: https://github.com/MetaMask/core/compare/@metamask/eth-json-rpc-middleware@23.1.3...@metamask/eth-json-rpc-middleware@24.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { PollingBlockTracker } from
|
|
2
|
-
import type { JsonRpcMiddleware, MiddlewareContext } from
|
|
3
|
-
import type { Json, JsonRpcRequest } from
|
|
1
|
+
import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
|
|
2
|
+
import type { JsonRpcMiddleware, MiddlewareContext } from '@metamask/json-rpc-engine/v2';
|
|
3
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
4
4
|
type BlockCacheMiddlewareOptions = {
|
|
5
5
|
blockTracker?: PollingBlockTracker;
|
|
6
6
|
};
|
|
@@ -15,4 +15,4 @@ export declare function createBlockCacheMiddleware({ blockTracker, }?: BlockCach
|
|
|
15
15
|
skipCache?: boolean;
|
|
16
16
|
}>>;
|
|
17
17
|
export {};
|
|
18
|
-
//# sourceMappingURL=block-cache.d.
|
|
18
|
+
//# sourceMappingURL=block-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-cache.d.ts","sourceRoot":"","sources":["../src/block-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAqB5D,KAAK,2BAA2B,GAAG;IACjC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AA2GF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,YAAY,GACb,GAAE,2BAAgC,GAAG,iBAAiB,CACrD,cAAc,EACd,IAAI,EACJ,iBAAiB,CAAC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAC3C,CAmFA"}
|
|
@@ -1,17 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _BlockCacheStrategy_cache;
|
|
13
|
-
import { projectLogger, createModuleLogger } from "./logging-utils.mjs";
|
|
14
|
-
import { cacheIdentifierForRequest, blockTagForRequest, cacheTypeForMethod, canCache, CacheStrategy } from "./utils/cache.mjs";
|
|
1
|
+
import { projectLogger, createModuleLogger } from './logging-utils.js';
|
|
2
|
+
import { cacheIdentifierForRequest, blockTagForRequest, cacheTypeForMethod, canCache, CacheStrategy, } from './utils/cache.js';
|
|
15
3
|
const log = createModuleLogger(projectLogger, 'block-cache');
|
|
16
4
|
// `<nil>` comes from https://github.com/ethereum/go-ethereum/issues/16925
|
|
17
5
|
const emptyValues = [undefined, null, '\u003cnil\u003e'];
|
|
@@ -19,17 +7,17 @@ const emptyValues = [undefined, null, '\u003cnil\u003e'];
|
|
|
19
7
|
// Cache Strategies
|
|
20
8
|
//
|
|
21
9
|
class BlockCacheStrategy {
|
|
10
|
+
#cache;
|
|
22
11
|
constructor() {
|
|
23
|
-
|
|
24
|
-
__classPrivateFieldSet(this, _BlockCacheStrategy_cache, {}, "f");
|
|
12
|
+
this.#cache = {};
|
|
25
13
|
}
|
|
26
14
|
getBlockCache(blockNumberHex) {
|
|
27
15
|
const blockNumber = Number.parseInt(blockNumberHex, 16);
|
|
28
|
-
let blockCache =
|
|
16
|
+
let blockCache = this.#cache[blockNumber];
|
|
29
17
|
// create new cache if necesary
|
|
30
18
|
if (!blockCache) {
|
|
31
19
|
const newCache = {};
|
|
32
|
-
|
|
20
|
+
this.#cache[blockNumber] = newCache;
|
|
33
21
|
blockCache = newCache;
|
|
34
22
|
}
|
|
35
23
|
return blockCache;
|
|
@@ -89,13 +77,12 @@ class BlockCacheStrategy {
|
|
|
89
77
|
clearBefore(oldBlockHex) {
|
|
90
78
|
const oldBlockNumber = Number.parseInt(oldBlockHex, 16);
|
|
91
79
|
// clear old caches
|
|
92
|
-
Object.keys(
|
|
80
|
+
Object.keys(this.#cache)
|
|
93
81
|
.map(Number)
|
|
94
82
|
.filter((value) => value < oldBlockNumber)
|
|
95
|
-
.forEach((value) => delete
|
|
83
|
+
.forEach((value) => delete this.#cache[value]);
|
|
96
84
|
}
|
|
97
85
|
}
|
|
98
|
-
_BlockCacheStrategy_cache = new WeakMap();
|
|
99
86
|
/**
|
|
100
87
|
* Creates a middleware that caches block-related requests.
|
|
101
88
|
*
|
|
@@ -167,4 +154,4 @@ export function createBlockCacheMiddleware({ blockTracker, } = {}) {
|
|
|
167
154
|
return cacheResult;
|
|
168
155
|
};
|
|
169
156
|
}
|
|
170
|
-
//# sourceMappingURL=block-cache.
|
|
157
|
+
//# sourceMappingURL=block-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-cache.js","sourceRoot":"","sources":["../src/block-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport type {\n JsonRpcMiddleware,\n MiddlewareContext,\n} from '@metamask/json-rpc-engine/v2';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { projectLogger, createModuleLogger } from './logging-utils.js';\nimport type {\n Block,\n BlockCache,\n // eslint-disable-next-line @typescript-eslint/no-shadow\n Cache,\n} from './types.js';\nimport {\n cacheIdentifierForRequest,\n blockTagForRequest,\n cacheTypeForMethod,\n canCache,\n CacheStrategy,\n} from './utils/cache.js';\n\nconst log = createModuleLogger(projectLogger, 'block-cache');\n// `<nil>` comes from https://github.com/ethereum/go-ethereum/issues/16925\nconst emptyValues: unknown[] = [undefined, null, '\\u003cnil\\u003e'];\n\ntype BlockCacheMiddlewareOptions = {\n blockTracker?: PollingBlockTracker;\n};\n\n//\n// Cache Strategies\n//\n\nclass BlockCacheStrategy {\n #cache: Cache;\n\n constructor() {\n this.#cache = {};\n }\n\n getBlockCache(blockNumberHex: string): BlockCache {\n const blockNumber: number = Number.parseInt(blockNumberHex, 16);\n let blockCache: BlockCache = this.#cache[blockNumber];\n // create new cache if necesary\n if (!blockCache) {\n const newCache: BlockCache = {};\n this.#cache[blockNumber] = newCache;\n blockCache = newCache;\n }\n return blockCache;\n }\n\n async get(\n request: JsonRpcRequest,\n requestedBlockNumber: string,\n ): Promise<Block | undefined> {\n // lookup block cache\n const blockCache: BlockCache = this.getBlockCache(requestedBlockNumber);\n // lookup payload in block cache\n const identifier: string | null = cacheIdentifierForRequest(request, true);\n return identifier ? blockCache[identifier] : undefined;\n }\n\n async set(\n request: JsonRpcRequest,\n requestedBlockNumber: string,\n result: Block,\n ): Promise<void> {\n // check if we can cached this result\n const canCacheResult: boolean = this.canCacheResult(request, result);\n if (!canCacheResult) {\n return;\n }\n\n // set the value in the cache\n const identifier: string | null = cacheIdentifierForRequest(request, true);\n if (!identifier) {\n return;\n }\n const blockCache: BlockCache = this.getBlockCache(requestedBlockNumber);\n blockCache[identifier] = result;\n }\n\n canCacheRequest(request: JsonRpcRequest): boolean {\n // check request method\n if (!canCache(request.method)) {\n return false;\n }\n // check blockTag\n const blockTag = blockTagForRequest(request);\n\n if (blockTag === 'pending') {\n return false;\n }\n // can be cached\n return true;\n }\n\n canCacheResult(request: JsonRpcRequest, result: Block): boolean {\n // never cache empty values (e.g. undefined)\n if (emptyValues.includes(result)) {\n return false;\n }\n\n // check if transactions have block reference before caching\n if (\n request.method &&\n ['eth_getTransactionByHash', 'eth_getTransactionReceipt'].includes(\n request.method,\n )\n ) {\n if (\n !result?.blockHash ||\n result.blockHash ===\n '0x0000000000000000000000000000000000000000000000000000000000000000'\n ) {\n return false;\n }\n }\n // otherwise true\n return true;\n }\n\n // removes all block caches with block number lower than `oldBlockHex`\n clearBefore(oldBlockHex: string): void {\n const oldBlockNumber: number = Number.parseInt(oldBlockHex, 16);\n // clear old caches\n Object.keys(this.#cache)\n .map(Number)\n .filter((value) => value < oldBlockNumber)\n .forEach((value) => delete this.#cache[value]);\n }\n}\n\n/**\n * Creates a middleware that caches block-related requests.\n *\n * @param options - The options for the middleware.\n * @param options.blockTracker - The block tracker to use.\n * @returns The block cache middleware.\n */\nexport function createBlockCacheMiddleware({\n blockTracker,\n}: BlockCacheMiddlewareOptions = {}): JsonRpcMiddleware<\n JsonRpcRequest,\n Json,\n MiddlewareContext<{ skipCache?: boolean }>\n> {\n if (!blockTracker) {\n throw new Error(\n 'createBlockCacheMiddleware - No PollingBlockTracker specified',\n );\n }\n\n const blockCache: BlockCacheStrategy = new BlockCacheStrategy();\n const strategies: Record<CacheStrategy, BlockCacheStrategy | undefined> = {\n [CacheStrategy.Permanent]: blockCache,\n [CacheStrategy.Block]: blockCache,\n [CacheStrategy.Fork]: blockCache,\n [CacheStrategy.Never]: undefined,\n };\n\n return async ({ request, next, context }) => {\n if (context.get('skipCache')) {\n return next();\n }\n\n const type = cacheTypeForMethod(request.method);\n const strategy = strategies[type];\n if (!strategy) {\n return next();\n }\n\n if (!strategy.canCacheRequest(request)) {\n return next();\n }\n\n const requestBlockTag = blockTagForRequest(request);\n const blockTag =\n requestBlockTag && typeof requestBlockTag === 'string'\n ? requestBlockTag\n : 'latest';\n\n log('blockTag = %o, req = %o', blockTag, request);\n\n // get exact block number\n let requestedBlockNumber: string;\n if (blockTag === 'earliest') {\n // this just exists for symmetry with \"latest\"\n requestedBlockNumber = '0x00';\n } else if (blockTag === 'latest') {\n log('Fetching latest block number to determine cache key');\n const latestBlockNumber = await blockTracker.getLatestBlock();\n\n // clear all cache before latest block\n log(\n 'Clearing values stored under block numbers before %o',\n latestBlockNumber,\n );\n blockCache.clearBefore(latestBlockNumber);\n requestedBlockNumber = latestBlockNumber;\n } else {\n // we have a hex number\n requestedBlockNumber = blockTag;\n }\n\n // end on a hit, continue on a miss\n const cacheResult = await strategy.get(request, requestedBlockNumber);\n if (cacheResult === undefined) {\n // cache miss\n // wait for other middleware to handle request\n log(\n 'No cache stored under block number %o, carrying request forward',\n requestedBlockNumber,\n );\n const result = await next();\n\n // add result to cache\n // it's safe to cast res.result as Block, due to runtime type checks\n // performed when strategy.set is called\n log('Populating cache with', result);\n await strategy.set(request, requestedBlockNumber, result as Block);\n return result;\n }\n log(\n 'Cache hit, reusing cache result stored under block number %o',\n requestedBlockNumber,\n );\n return cacheResult;\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { PollingBlockTracker } from
|
|
2
|
-
import type { JsonRpcMiddleware } from
|
|
3
|
-
import type { Json, JsonRpcRequest } from
|
|
1
|
+
import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
|
|
2
|
+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
|
|
3
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
4
4
|
type BlockRefRewriteMiddlewareOptions = {
|
|
5
5
|
blockTracker?: PollingBlockTracker;
|
|
6
6
|
};
|
|
@@ -14,4 +14,4 @@ type BlockRefRewriteMiddlewareOptions = {
|
|
|
14
14
|
*/
|
|
15
15
|
export declare function createBlockRefRewriteMiddleware({ blockTracker, }?: BlockRefRewriteMiddlewareOptions): JsonRpcMiddleware<JsonRpcRequest, Json>;
|
|
16
16
|
export {};
|
|
17
|
-
//# sourceMappingURL=block-ref-rewrite.d.
|
|
17
|
+
//# sourceMappingURL=block-ref-rewrite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-ref-rewrite.d.ts","sourceRoot":"","sources":["../src/block-ref-rewrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,gCAAgC,GAAG;IACtC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,EAC9C,YAAY,GACb,GAAE,gCAAqC,GAAG,iBAAiB,CAC1D,cAAc,EACd,IAAI,CACL,CAqCA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { blockTagParamIndex } from
|
|
1
|
+
import { blockTagParamIndex } from './utils/cache.js';
|
|
2
2
|
/**
|
|
3
3
|
* Creates a middleware that rewrites "latest" block references to the known
|
|
4
4
|
* latest block number from a block tracker.
|
|
@@ -36,4 +36,4 @@ export function createBlockRefRewriteMiddleware({ blockTracker, } = {}) {
|
|
|
36
36
|
return next();
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
//# sourceMappingURL=block-ref-rewrite.
|
|
39
|
+
//# sourceMappingURL=block-ref-rewrite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-ref-rewrite.js","sourceRoot":"","sources":["../src/block-ref-rewrite.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD;;;;;;;GAOG;AACH,MAAM,UAAU,+BAA+B,CAAC,EAC9C,YAAY,GACb,GAAqC,EAAE;IAItC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,KAAK,CACT,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,aAAa,GAAuB,kBAAkB,CAC1D,OAAO,CAAC,MAAM,CACf,CAAC;QACF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GACZ,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC5D,CAAC,CAAE,OAAO,CAAC,MAAM,CAAC,aAAa,CAAY;YAC3C,CAAC,CAAC,oCAAoC;gBACpC,QAAQ,CAAC;QAEf,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtC,MAAM,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;YAC1C,OAAO,IAAI,CAAC;gBACV,GAAG,OAAO;gBACV,MAAM;aACP,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { blockTagParamIndex } from './utils/cache.js';\n\ntype BlockRefRewriteMiddlewareOptions = {\n blockTracker?: PollingBlockTracker;\n};\n\n/**\n * Creates a middleware that rewrites \"latest\" block references to the known\n * latest block number from a block tracker.\n *\n * @param options - The options for the middleware.\n * @param options.blockTracker - The block tracker to use.\n * @returns The middleware.\n */\nexport function createBlockRefRewriteMiddleware({\n blockTracker,\n}: BlockRefRewriteMiddlewareOptions = {}): JsonRpcMiddleware<\n JsonRpcRequest,\n Json\n> {\n if (!blockTracker) {\n throw Error(\n 'BlockRefRewriteMiddleware - mandatory \"blockTracker\" option is missing.',\n );\n }\n\n return async ({ request, next }) => {\n const blockRefIndex: number | undefined = blockTagParamIndex(\n request.method,\n );\n if (blockRefIndex === undefined) {\n return next();\n }\n\n const blockRef: string | undefined =\n Array.isArray(request.params) && request.params[blockRefIndex]\n ? (request.params[blockRefIndex] as string)\n : // omitted blockRef implies \"latest\"\n 'latest';\n\n if (blockRef !== 'latest') {\n return next();\n }\n\n // rewrite blockRef to block-tracker's block number\n const latestBlockNumber = await blockTracker.getLatestBlock();\n if (Array.isArray(request.params)) {\n const params = request.params.slice();\n params[blockRefIndex] = latestBlockNumber;\n return next({\n ...request,\n params,\n });\n }\n return next();\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { PollingBlockTracker } from
|
|
2
|
-
import type { InternalProvider } from
|
|
3
|
-
import type { JsonRpcMiddleware } from
|
|
4
|
-
import type { Json, JsonRpcRequest } from
|
|
1
|
+
import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
|
|
2
|
+
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
|
|
3
|
+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
|
|
4
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
5
5
|
type BlockRefMiddlewareOptions = {
|
|
6
6
|
blockTracker?: PollingBlockTracker;
|
|
7
7
|
provider?: InternalProvider;
|
|
@@ -17,4 +17,4 @@ type BlockRefMiddlewareOptions = {
|
|
|
17
17
|
*/
|
|
18
18
|
export declare function createBlockRefMiddleware({ provider, blockTracker, }?: BlockRefMiddlewareOptions): JsonRpcMiddleware<JsonRpcRequest, Json>;
|
|
19
19
|
export {};
|
|
20
|
-
//# sourceMappingURL=block-ref.d.
|
|
20
|
+
//# sourceMappingURL=block-ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-ref.d.ts","sourceRoot":"","sources":["../src/block-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAiB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAO3E,KAAK,yBAAyB,GAAG;IAC/B,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAIF;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,QAAQ,EACR,YAAY,GACb,GAAE,yBAA8B,GAAG,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CA+C1E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { klona } from
|
|
2
|
-
import { projectLogger, createModuleLogger } from
|
|
3
|
-
import { blockTagParamIndex } from
|
|
1
|
+
import { klona } from 'klona';
|
|
2
|
+
import { projectLogger, createModuleLogger } from './logging-utils.js';
|
|
3
|
+
import { blockTagParamIndex } from './utils/cache.js';
|
|
4
4
|
const log = createModuleLogger(projectLogger, 'block-ref');
|
|
5
5
|
/**
|
|
6
6
|
* Creates a middleware that rewrites "latest" block references to the known
|
|
@@ -46,4 +46,4 @@ export function createBlockRefMiddleware({ provider, blockTracker, } = {}) {
|
|
|
46
46
|
return await provider.request(childRequest);
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=block-ref.
|
|
49
|
+
//# sourceMappingURL=block-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-ref.js","sourceRoot":"","sources":["../src/block-ref.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAOtD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAE3D;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,EACvC,QAAQ,EACR,YAAY,GACb,GAA8B,EAAE;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,KAAK,CACT,kEAAkE,CACnE,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,MAAM,aAAa,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEzD,2CAA2C;QAC3C,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC;YAC7C,CAAC,CAAC,QAAQ,CAAC;QAEb,uBAAuB;QACvB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAC1D,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,sBAAsB;QACtB,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,cAAc,EAAE,CAAC;QAC9D,GAAG,CACD,uCAAuC,aAAa,oBAAoB,iBAAiB,EAAE,CAC5F,CAAC;QAEF,+CAA+C;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QAEpC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC;QACzD,CAAC;QAED,wBAAwB;QACxB,GAAG,CAAC,+BAA+B,EAAE,YAAY,CAAC,CAAC;QACnD,2CAA2C;QAC3C,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAuB,YAAY,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport type { InternalProvider } from '@metamask/eth-json-rpc-provider';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';\nimport type { Json, JsonRpcParams, JsonRpcRequest } from '@metamask/utils';\nimport { klona } from 'klona';\n\nimport { projectLogger, createModuleLogger } from './logging-utils.js';\nimport type { Block } from './types.js';\nimport { blockTagParamIndex } from './utils/cache.js';\n\ntype BlockRefMiddlewareOptions = {\n blockTracker?: PollingBlockTracker;\n provider?: InternalProvider;\n};\n\nconst log = createModuleLogger(projectLogger, 'block-ref');\n\n/**\n * Creates a middleware that rewrites \"latest\" block references to the known\n * latest block number from a block tracker.\n *\n * @param options - The options for the middleware.\n * @param options.provider - The provider to use.\n * @param options.blockTracker - The block tracker to use.\n * @returns The middleware.\n */\nexport function createBlockRefMiddleware({\n provider,\n blockTracker,\n}: BlockRefMiddlewareOptions = {}): JsonRpcMiddleware<JsonRpcRequest, Json> {\n if (!provider) {\n throw Error('BlockRefMiddleware - mandatory \"provider\" option is missing.');\n }\n\n if (!blockTracker) {\n throw Error(\n 'BlockRefMiddleware - mandatory \"blockTracker\" option is missing.',\n );\n }\n\n return async ({ request, next }) => {\n const blockRefIndex = blockTagParamIndex(request.method);\n\n // skip if method does not include blockRef\n if (blockRefIndex === undefined) {\n return next();\n }\n\n const blockRef = Array.isArray(request.params)\n ? (request.params[blockRefIndex] ?? 'latest')\n : 'latest';\n\n // skip if not \"latest\"\n if (blockRef !== 'latest') {\n log('blockRef is not \"latest\", carrying request forward');\n return next();\n }\n\n // lookup latest block\n const latestBlockNumber = await blockTracker.getLatestBlock();\n log(\n `blockRef is \"latest\", setting param ${blockRefIndex} to latest block ${latestBlockNumber}`,\n );\n\n // create child request with specific block-ref\n const childRequest = klona(request);\n\n if (Array.isArray(childRequest.params)) {\n childRequest.params[blockRefIndex] = latestBlockNumber;\n }\n\n // perform child request\n log('Performing another request %o', childRequest);\n // copy child result onto original response\n return await provider.request<JsonRpcParams, Block>(childRequest);\n };\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { PollingBlockTracker } from
|
|
2
|
-
import type { JsonRpcMiddleware } from
|
|
3
|
-
import type { Json, JsonRpcRequest } from
|
|
1
|
+
import type { PollingBlockTracker } from '@metamask/eth-block-tracker';
|
|
2
|
+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
|
|
3
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
4
4
|
/**
|
|
5
5
|
* Creates a middleware that checks whether response block references are higher than the current block.
|
|
6
6
|
* If the block reference is higher, the middleware will make the block tracker check for a new block.
|
|
@@ -12,4 +12,4 @@ import type { Json, JsonRpcRequest } from "@metamask/utils";
|
|
|
12
12
|
export declare function createBlockTrackerInspectorMiddleware({ blockTracker, }: {
|
|
13
13
|
blockTracker: PollingBlockTracker;
|
|
14
14
|
}): JsonRpcMiddleware<JsonRpcRequest, Json>;
|
|
15
|
-
//# sourceMappingURL=block-tracker-inspector.d.
|
|
15
|
+
//# sourceMappingURL=block-tracker-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-tracker-inspector.d.ts","sourceRoot":"","sources":["../src/block-tracker-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAU5D;;;;;;;GAOG;AACH,wBAAgB,qCAAqC,CAAC,EACpD,YAAY,GACb,EAAE;IACD,YAAY,EAAE,mBAAmB,CAAC;CACnC,GAAG,iBAAiB,CAAC,cAAc,EAAE,IAAI,CAAC,CA4B1C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { hasProperty } from
|
|
2
|
-
import { projectLogger, createModuleLogger } from
|
|
1
|
+
import { hasProperty } from '@metamask/utils';
|
|
2
|
+
import { projectLogger, createModuleLogger } from './logging-utils.js';
|
|
3
3
|
const log = createModuleLogger(projectLogger, 'block-tracker-inspector');
|
|
4
4
|
const futureBlockRefRequests = [
|
|
5
5
|
'eth_getTransactionByHash',
|
|
@@ -52,4 +52,4 @@ function getResultBlockNumber(result) {
|
|
|
52
52
|
? result.blockNumber
|
|
53
53
|
: undefined;
|
|
54
54
|
}
|
|
55
|
-
//# sourceMappingURL=block-tracker-inspector.
|
|
55
|
+
//# sourceMappingURL=block-tracker-inspector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-tracker-inspector.js","sourceRoot":"","sources":["../src/block-tracker-inspector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;AACzE,MAAM,sBAAsB,GAAsB;IAChD,0BAA0B;IAC1B,2BAA2B;CAC5B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,qCAAqC,CAAC,EACpD,YAAY,GAGb;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;QAE5B,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,mBAAmB,EAAE,CAAC;YACxB,GAAG,CAAC,qDAAqD,EAAE,MAAM,CAAC,CAAC;YAEnE,mEAAmE;YACnE,MAAM,WAAW,GAAW,MAAM,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,kBAAkB,GAAW,MAAM,CAAC,QAAQ;YAChD,4FAA4F;YAC5F,YAAY,CAAC,eAAe,EAAY,EACxC,EAAE,CACH,CAAC;YAEF,IAAI,WAAW,GAAG,kBAAkB,EAAE,CAAC;gBACrC,GAAG,CACD,iGAAiG,CAClG,CAAC;gBACF,MAAM,YAAY,CAAC,mBAAmB,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAC3B,MAAkC;IAElC,IACE,CAAC,MAAM;QACP,OAAO,MAAM,KAAK,QAAQ;QAC1B,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EACnC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QAC3C,CAAC,CAAC,MAAM,CAAC,WAAW;QACpB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC","sourcesContent":["import type { PollingBlockTracker } from '@metamask/eth-block-tracker';\nimport type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';\nimport { hasProperty } from '@metamask/utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { projectLogger, createModuleLogger } from './logging-utils.js';\n\nconst log = createModuleLogger(projectLogger, 'block-tracker-inspector');\nconst futureBlockRefRequests: readonly string[] = [\n 'eth_getTransactionByHash',\n 'eth_getTransactionReceipt',\n];\n\n/**\n * Creates a middleware that checks whether response block references are higher than the current block.\n * If the block reference is higher, the middleware will make the block tracker check for a new block.\n *\n * @param options - The options for the middleware.\n * @param options.blockTracker - The block tracker to use.\n * @returns The middleware.\n */\nexport function createBlockTrackerInspectorMiddleware({\n blockTracker,\n}: {\n blockTracker: PollingBlockTracker;\n}): JsonRpcMiddleware<JsonRpcRequest, Json> {\n return async ({ request, next }) => {\n if (!futureBlockRefRequests.includes(request.method)) {\n return next();\n }\n const result = await next();\n\n const responseBlockNumber = getResultBlockNumber(result);\n if (responseBlockNumber) {\n log('res.result.blockNumber exists, proceeding. res = %o', result);\n\n // If number is higher, suggest block-tracker check for a new block\n const blockNumber: number = Number.parseInt(responseBlockNumber, 16);\n const currentBlockNumber: number = Number.parseInt(\n // Typecast: If getCurrentBlock returns null, currentBlockNumber will be NaN, which is fine.\n blockTracker.getCurrentBlock() as string,\n 16,\n );\n\n if (blockNumber > currentBlockNumber) {\n log(\n 'blockNumber from response is greater than current block number, refreshing current block number',\n );\n await blockTracker.checkForLatestBlock();\n }\n }\n return result;\n };\n}\n\n/**\n * Extracts the block number from the result.\n *\n * @param result - The result to extract the block number from.\n * @returns The block number, or undefined if the result is not an object with a\n * `blockNumber` property.\n */\nfunction getResultBlockNumber(\n result: Readonly<Json> | undefined,\n): string | undefined {\n if (\n !result ||\n typeof result !== 'object' ||\n !hasProperty(result, 'blockNumber')\n ) {\n return undefined;\n }\n\n return typeof result.blockNumber === 'string'\n ? result.blockNumber\n : undefined;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware, MiddlewareContext } from
|
|
2
|
-
import type { Json, JsonRpcRequest } from
|
|
3
|
-
import type { AbstractRpcServiceLike } from
|
|
1
|
+
import type { JsonRpcMiddleware, MiddlewareContext } from '@metamask/json-rpc-engine/v2';
|
|
2
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
3
|
+
import type { AbstractRpcServiceLike } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Creates middleware for sending a JSON-RPC request through the given RPC
|
|
6
6
|
* service.
|
|
@@ -21,4 +21,4 @@ export declare function createFetchMiddleware({ rpcService, options, }: {
|
|
|
21
21
|
}): JsonRpcMiddleware<JsonRpcRequest, Json, MiddlewareContext<{
|
|
22
22
|
origin: string;
|
|
23
23
|
}>>;
|
|
24
|
-
//# sourceMappingURL=fetch.d.
|
|
24
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EACV,OAAY,GACb,EAAE;IACD,UAAU,EAAE,sBAAsB,CAAC;IACnC,OAAO,CAAC,EAAE;QACR,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH,GAAG,iBAAiB,CACnB,cAAc,EACd,IAAI,EACJ,iBAAiB,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CACtC,CAuBA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { rpcErrors } from
|
|
1
|
+
import { rpcErrors } from '@metamask/rpc-errors';
|
|
2
2
|
/**
|
|
3
3
|
* Creates middleware for sending a JSON-RPC request through the given RPC
|
|
4
4
|
* service.
|
|
@@ -32,4 +32,4 @@ export function createFetchMiddleware({ rpcService, options = {}, }) {
|
|
|
32
32
|
return jsonRpcResponse.result;
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
|
-
//# sourceMappingURL=fetch.
|
|
35
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,UAAU,EACV,OAAO,GAAG,EAAE,GAMb;IAKC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,OAAO,GACX,OAAO,CAAC,mBAAmB,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAC/D,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE;YAC3C,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE;YACxD,OAAO;SACR,CAAC,CAAC;QAEH,0EAA0E;QAC1E,4CAA4C;QAC5C,sEAAsE;QACtE,uEAAuE;QACvE,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;YAC/B,MAAM,SAAS,CAAC,QAAQ,CAAC;gBACvB,IAAI,EAAE,eAAe,CAAC,KAAK;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,CAAC;IAChC,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type {\n JsonRpcMiddleware,\n MiddlewareContext,\n} from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport type { AbstractRpcServiceLike } from './types.js';\n\n/**\n * Creates middleware for sending a JSON-RPC request through the given RPC\n * service.\n *\n * @param args - The arguments to this function.\n * @param args.rpcService - The RPC service to use.\n * @param args.options - Options.\n * @param args.options.originHttpHeaderKey - If provided, the origin field for\n * each JSON-RPC request will be attached to each outgoing fetch request under\n * this header.\n * @returns The fetch middleware.\n */\nexport function createFetchMiddleware({\n rpcService,\n options = {},\n}: {\n rpcService: AbstractRpcServiceLike;\n options?: {\n originHttpHeaderKey?: string;\n };\n}): JsonRpcMiddleware<\n JsonRpcRequest,\n Json,\n MiddlewareContext<{ origin: string }>\n> {\n return async ({ request, context }) => {\n const origin = context.get('origin');\n const headers =\n options.originHttpHeaderKey !== undefined && origin !== undefined\n ? { [options.originHttpHeaderKey]: origin }\n : {};\n\n const jsonRpcResponse = await rpcService.request(request, {\n headers,\n });\n\n // NOTE: We intentionally do not test to see if `jsonRpcResponse.error` is\n // strictly a JSON-RPC error response as per\n // <https://www.jsonrpc.org/specification#error_object> to account for\n // Ganache returning error objects with extra properties such as `name`\n if ('error' in jsonRpcResponse) {\n throw rpcErrors.internal({\n data: jsonRpcResponse.error,\n });\n }\n return jsonRpcResponse.result;\n };\n}\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './block-cache.js';
|
|
2
|
+
export * from './block-ref-rewrite.js';
|
|
3
|
+
export * from './block-ref.js';
|
|
4
|
+
export * from './block-tracker-inspector.js';
|
|
5
|
+
export { createFetchMiddleware } from './fetch.js';
|
|
6
|
+
export * from './inflight-cache.js';
|
|
7
|
+
export type { PermissionDependency, RequestExecutionPermissionsRequestParams, RequestExecutionPermissionsResult, ProcessRequestExecutionPermissionsHook, } from './methods/wallet-request-execution-permissions.js';
|
|
8
|
+
export type { ProcessRevokeExecutionPermissionHook, RevokeExecutionPermissionRequestParams, RevokeExecutionPermissionResult, } from './methods/wallet-revoke-execution-permission.js';
|
|
9
|
+
export type { GrantedExecutionPermission, GetGrantedExecutionPermissionsResult, ProcessGetGrantedExecutionPermissionsHook, } from './methods/wallet-get-granted-execution-permissions.js';
|
|
10
|
+
export { GrantedExecutionPermissionStruct, GetGrantedExecutionPermissionsResultStruct, } from './methods/wallet-get-granted-execution-permissions.js';
|
|
11
|
+
export type { SupportedExecutionPermissionConfig, GetSupportedExecutionPermissionsResult, ProcessGetSupportedExecutionPermissionsHook, } from './methods/wallet-get-supported-execution-permissions.js';
|
|
12
|
+
export { SupportedExecutionPermissionConfigStruct, GetSupportedExecutionPermissionsResultStruct, } from './methods/wallet-get-supported-execution-permissions.js';
|
|
13
|
+
export * from './providerAsMiddleware.js';
|
|
14
|
+
export { validateTransactionParams } from './utils/validation.js';
|
|
15
|
+
export * from './retryOnEmpty.js';
|
|
16
|
+
export * from './wallet.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,cAAc,qBAAqB,CAAC;AACpC,YAAY,EACV,oBAAoB,EACpB,wCAAwC,EACxC,iCAAiC,EACjC,sCAAsC,GACvC,MAAM,mDAAmD,CAAC;AAC3D,YAAY,EACV,oCAAoC,EACpC,sCAAsC,EACtC,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;AACzD,YAAY,EACV,0BAA0B,EAC1B,oCAAoC,EACpC,yCAAyC,GAC1C,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EACL,gCAAgC,EAChC,0CAA0C,GAC3C,MAAM,uDAAuD,CAAC;AAC/D,YAAY,EACV,kCAAkC,EAClC,sCAAsC,EACtC,2CAA2C,GAC5C,MAAM,yDAAyD,CAAC;AACjE,OAAO,EACL,wCAAwC,EACxC,4CAA4C,GAC7C,MAAM,yDAAyD,CAAC;AACjE,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './block-cache.js';
|
|
2
|
+
export * from './block-ref-rewrite.js';
|
|
3
|
+
export * from './block-ref.js';
|
|
4
|
+
export * from './block-tracker-inspector.js';
|
|
5
|
+
export { createFetchMiddleware } from './fetch.js';
|
|
6
|
+
export * from './inflight-cache.js';
|
|
7
|
+
export { GrantedExecutionPermissionStruct, GetGrantedExecutionPermissionsResultStruct, } from './methods/wallet-get-granted-execution-permissions.js';
|
|
8
|
+
export { SupportedExecutionPermissionConfigStruct, GetSupportedExecutionPermissionsResultStruct, } from './methods/wallet-get-supported-execution-permissions.js';
|
|
9
|
+
export * from './providerAsMiddleware.js';
|
|
10
|
+
export { validateTransactionParams } from './utils/validation.js';
|
|
11
|
+
export * from './retryOnEmpty.js';
|
|
12
|
+
export * from './wallet.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,cAAc,qBAAqB,CAAC;AAiBpC,OAAO,EACL,gCAAgC,EAChC,0CAA0C,GAC3C,MAAM,uDAAuD,CAAC;AAM/D,OAAO,EACL,wCAAwC,EACxC,4CAA4C,GAC7C,MAAM,yDAAyD,CAAC;AACjE,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAClE,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC","sourcesContent":["export * from './block-cache.js';\nexport * from './block-ref-rewrite.js';\nexport * from './block-ref.js';\nexport * from './block-tracker-inspector.js';\nexport { createFetchMiddleware } from './fetch.js';\nexport * from './inflight-cache.js';\nexport type {\n PermissionDependency,\n RequestExecutionPermissionsRequestParams,\n RequestExecutionPermissionsResult,\n ProcessRequestExecutionPermissionsHook,\n} from './methods/wallet-request-execution-permissions.js';\nexport type {\n ProcessRevokeExecutionPermissionHook,\n RevokeExecutionPermissionRequestParams,\n RevokeExecutionPermissionResult,\n} from './methods/wallet-revoke-execution-permission.js';\nexport type {\n GrantedExecutionPermission,\n GetGrantedExecutionPermissionsResult,\n ProcessGetGrantedExecutionPermissionsHook,\n} from './methods/wallet-get-granted-execution-permissions.js';\nexport {\n GrantedExecutionPermissionStruct,\n GetGrantedExecutionPermissionsResultStruct,\n} from './methods/wallet-get-granted-execution-permissions.js';\nexport type {\n SupportedExecutionPermissionConfig,\n GetSupportedExecutionPermissionsResult,\n ProcessGetSupportedExecutionPermissionsHook,\n} from './methods/wallet-get-supported-execution-permissions.js';\nexport {\n SupportedExecutionPermissionConfigStruct,\n GetSupportedExecutionPermissionsResultStruct,\n} from './methods/wallet-get-supported-execution-permissions.js';\nexport * from './providerAsMiddleware.js';\nexport { validateTransactionParams } from './utils/validation.js';\nexport * from './retryOnEmpty.js';\nexport * from './wallet.js';\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware, MiddlewareContext } from
|
|
2
|
-
import type { Json, JsonRpcRequest } from
|
|
1
|
+
import type { JsonRpcMiddleware, MiddlewareContext } from '@metamask/json-rpc-engine/v2';
|
|
2
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a middleware that caches inflight requests.
|
|
5
5
|
* If a request is already in flight, the middleware will wait for the request to complete
|
|
@@ -10,4 +10,4 @@ import type { Json, JsonRpcRequest } from "@metamask/utils";
|
|
|
10
10
|
export declare function createInflightCacheMiddleware(): JsonRpcMiddleware<JsonRpcRequest, Json, MiddlewareContext<{
|
|
11
11
|
skipCache: boolean;
|
|
12
12
|
}>>;
|
|
13
|
-
//# sourceMappingURL=inflight-cache.d.
|
|
13
|
+
//# sourceMappingURL=inflight-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inflight-cache.d.ts","sourceRoot":"","sources":["../src/inflight-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgB5D;;;;;;GAMG;AACH,wBAAgB,6BAA6B,IAAI,iBAAiB,CAChE,cAAc,EACd,IAAI,EACJ,iBAAiB,CAAC;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAC1C,CAsDA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createDeferredPromise } from
|
|
2
|
-
import { projectLogger, createModuleLogger } from
|
|
3
|
-
import { cacheIdentifierForRequest } from
|
|
1
|
+
import { createDeferredPromise } from '@metamask/utils';
|
|
2
|
+
import { projectLogger, createModuleLogger } from './logging-utils.js';
|
|
3
|
+
import { cacheIdentifierForRequest } from './utils/cache.js';
|
|
4
4
|
const log = createModuleLogger(projectLogger, 'inflight-cache');
|
|
5
5
|
/**
|
|
6
6
|
* Creates a middleware that caches inflight requests.
|
|
@@ -83,4 +83,4 @@ function runRequestHandlers(resultOrError, activeRequestHandlers) {
|
|
|
83
83
|
});
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
|
-
//# sourceMappingURL=inflight-cache.
|
|
86
|
+
//# sourceMappingURL=inflight-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inflight-cache.js","sourceRoot":"","sources":["../src/inflight-cache.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n JsonRpcMiddleware,\n MiddlewareContext,\n} from '@metamask/json-rpc-engine/v2';\nimport { createDeferredPromise } from '@metamask/utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { projectLogger, createModuleLogger } from './logging-utils.js';\nimport { cacheIdentifierForRequest } from './utils/cache.js';\n\ntype RequestHandler = [\n (result: Readonly<Json>) => void,\n (error: unknown) => void,\n];\n\ntype InflightRequest = {\n [cacheId: string]: RequestHandler[];\n};\n\nconst log = createModuleLogger(projectLogger, 'inflight-cache');\n\n/**\n * Creates a middleware that caches inflight requests.\n * If a request is already in flight, the middleware will wait for the request to complete\n * and then return the result.\n *\n * @returns A middleware that caches inflight requests.\n */\nexport function createInflightCacheMiddleware(): JsonRpcMiddleware<\n JsonRpcRequest,\n Json,\n MiddlewareContext<{ skipCache: boolean }>\n> {\n const inflightRequests: InflightRequest = {};\n\n return async ({ request, context, next }) => {\n if (context.get('skipCache')) {\n return next();\n }\n\n const cacheId: string | null = cacheIdentifierForRequest(request);\n if (!cacheId) {\n log('Request is not cacheable, proceeding. req = %o', request);\n return next();\n }\n\n // check for matching requests\n let activeRequestHandlers: RequestHandler[] = inflightRequests[cacheId];\n // if found, wait for the active request to be handled\n if (activeRequestHandlers) {\n // setup the response listener and wait for it to be called\n // it will handle copying the result and request fields\n log(\n 'Running %i handler(s) for request %o',\n activeRequestHandlers.length,\n request,\n );\n return await createActiveRequestHandler(activeRequestHandlers);\n }\n\n // setup response handler array for subsequent requests\n activeRequestHandlers = [];\n inflightRequests[cacheId] = activeRequestHandlers;\n // allow request to be handled normally\n log('Carrying original request forward %o', request);\n try {\n const result = (await next()) as Readonly<Json>;\n log(\n 'Running %i collected handler(s) for successful request %o',\n activeRequestHandlers.length,\n request,\n );\n runRequestHandlers({ result }, activeRequestHandlers);\n return result;\n } catch (error) {\n log(\n 'Running %i collected handler(s) for failed request %o',\n activeRequestHandlers.length,\n request,\n );\n runRequestHandlers({ error }, activeRequestHandlers);\n throw error;\n } finally {\n delete inflightRequests[cacheId];\n }\n };\n}\n\n/**\n * Creates a new request handler for the active request.\n *\n * @param activeRequestHandlers - The active request handlers.\n * @returns A promise that resolves to the result of the request.\n */\nfunction createActiveRequestHandler(\n activeRequestHandlers: RequestHandler[],\n): Promise<Readonly<Json>> {\n const { resolve, promise, reject } = createDeferredPromise<Readonly<Json>>();\n activeRequestHandlers.push([\n (result: Readonly<Json>): void => resolve(result),\n (error: unknown): void => reject(error),\n ]);\n return promise;\n}\n\n/**\n * Runs the request handlers for the given result or error.\n *\n * @param resultOrError - The result or error of the request.\n * @param activeRequestHandlers - The active request handlers.\n */\nfunction runRequestHandlers(\n resultOrError: { result: Readonly<Json> } | { error: unknown },\n activeRequestHandlers: RequestHandler[],\n): void {\n // use setTimeout so we can handle the original request first\n setTimeout(() => {\n activeRequestHandlers.forEach(([onSuccess, onError]) => {\n if ('result' in resultOrError) {\n onSuccess(resultOrError.result);\n } else {\n onError(resultOrError.error);\n }\n });\n });\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-utils.d.ts","sourceRoot":"","sources":["../src/logging-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,eAAO,MAAM,aAAa,0BAAiD,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-utils.js","sourceRoot":"","sources":["../src/logging-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,mBAAmB,CAAC,yBAAyB,CAAC,CAAC;AAE5E,OAAO,EAAE,kBAAkB,EAAE,CAAC","sourcesContent":["import { createProjectLogger, createModuleLogger } from '@metamask/utils';\n\nexport const projectLogger = createProjectLogger('eth-json-rpc-middleware');\n\nexport { createModuleLogger };\n"]}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import type { JsonRpcMiddleware } from
|
|
2
|
-
import type { Infer } from
|
|
3
|
-
import type { Json, JsonRpcRequest } from
|
|
4
|
-
import type { WalletMiddlewareContext } from
|
|
1
|
+
import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';
|
|
2
|
+
import type { Infer } from '@metamask/superstruct';
|
|
3
|
+
import type { Json, JsonRpcRequest } from '@metamask/utils';
|
|
4
|
+
import type { WalletMiddlewareContext } from '../wallet.js';
|
|
5
5
|
/**
|
|
6
6
|
* Superstruct schema for the `wallet_getGrantedExecutionPermissions` request params.
|
|
7
7
|
*
|
|
8
8
|
* This method expects no parameters. Different JSON-RPC clients may send "no params"
|
|
9
9
|
* in different ways (omitted, empty array, or empty object), so we accept all three.
|
|
10
10
|
*/
|
|
11
|
-
export declare const GetGrantedExecutionPermissionsParamsStruct: import("@metamask/superstruct").Struct<
|
|
11
|
+
export declare const GetGrantedExecutionPermissionsParamsStruct: import("@metamask/superstruct").Struct<{} | [] | undefined, null>;
|
|
12
12
|
/**
|
|
13
13
|
* Superstruct schema for a single granted execution permission.
|
|
14
14
|
*/
|
|
15
15
|
export declare const GrantedExecutionPermissionStruct: import("@metamask/superstruct").Struct<{
|
|
16
|
-
context: `0x${string}`;
|
|
17
16
|
chainId: `0x${string}`;
|
|
18
17
|
from: `0x${string}`;
|
|
19
18
|
to: `0x${string}`;
|
|
20
19
|
permission: {
|
|
21
|
-
data: Record<string, unknown>;
|
|
22
20
|
type: string;
|
|
23
21
|
isAdjustmentAllowed: boolean;
|
|
22
|
+
data: Record<string, unknown>;
|
|
24
23
|
};
|
|
24
|
+
context: `0x${string}`;
|
|
25
25
|
dependencies: {
|
|
26
26
|
factory: `0x${string}`;
|
|
27
27
|
factoryData: `0x${string}`;
|
|
@@ -32,9 +32,9 @@ export declare const GrantedExecutionPermissionStruct: import("@metamask/superst
|
|
|
32
32
|
from: import("@metamask/superstruct").Struct<`0x${string}`, null>;
|
|
33
33
|
to: import("@metamask/superstruct").Struct<`0x${string}`, null>;
|
|
34
34
|
permission: import("@metamask/superstruct").Struct<{
|
|
35
|
-
data: Record<string, unknown>;
|
|
36
35
|
type: string;
|
|
37
36
|
isAdjustmentAllowed: boolean;
|
|
37
|
+
data: Record<string, unknown>;
|
|
38
38
|
}, {
|
|
39
39
|
type: import("@metamask/superstruct").Struct<string, null>;
|
|
40
40
|
isAdjustmentAllowed: import("@metamask/superstruct").Struct<boolean, null>;
|
|
@@ -61,30 +61,30 @@ export type GrantedExecutionPermission = Infer<typeof GrantedExecutionPermission
|
|
|
61
61
|
* Superstruct schema for the `wallet_getGrantedExecutionPermissions` result.
|
|
62
62
|
*/
|
|
63
63
|
export declare const GetGrantedExecutionPermissionsResultStruct: import("@metamask/superstruct").Struct<{
|
|
64
|
-
context: `0x${string}`;
|
|
65
64
|
chainId: `0x${string}`;
|
|
66
65
|
from: `0x${string}`;
|
|
67
66
|
to: `0x${string}`;
|
|
68
67
|
permission: {
|
|
69
|
-
data: Record<string, unknown>;
|
|
70
68
|
type: string;
|
|
71
69
|
isAdjustmentAllowed: boolean;
|
|
70
|
+
data: Record<string, unknown>;
|
|
72
71
|
};
|
|
72
|
+
context: `0x${string}`;
|
|
73
73
|
dependencies: {
|
|
74
74
|
factory: `0x${string}`;
|
|
75
75
|
factoryData: `0x${string}`;
|
|
76
76
|
}[];
|
|
77
77
|
delegationManager: `0x${string}`;
|
|
78
78
|
}[], import("@metamask/superstruct").Struct<{
|
|
79
|
-
context: `0x${string}`;
|
|
80
79
|
chainId: `0x${string}`;
|
|
81
80
|
from: `0x${string}`;
|
|
82
81
|
to: `0x${string}`;
|
|
83
82
|
permission: {
|
|
84
|
-
data: Record<string, unknown>;
|
|
85
83
|
type: string;
|
|
86
84
|
isAdjustmentAllowed: boolean;
|
|
85
|
+
data: Record<string, unknown>;
|
|
87
86
|
};
|
|
87
|
+
context: `0x${string}`;
|
|
88
88
|
dependencies: {
|
|
89
89
|
factory: `0x${string}`;
|
|
90
90
|
factoryData: `0x${string}`;
|
|
@@ -95,9 +95,9 @@ export declare const GetGrantedExecutionPermissionsResultStruct: import("@metama
|
|
|
95
95
|
from: import("@metamask/superstruct").Struct<`0x${string}`, null>;
|
|
96
96
|
to: import("@metamask/superstruct").Struct<`0x${string}`, null>;
|
|
97
97
|
permission: import("@metamask/superstruct").Struct<{
|
|
98
|
-
data: Record<string, unknown>;
|
|
99
98
|
type: string;
|
|
100
99
|
isAdjustmentAllowed: boolean;
|
|
100
|
+
data: Record<string, unknown>;
|
|
101
101
|
}, {
|
|
102
102
|
type: import("@metamask/superstruct").Struct<string, null>;
|
|
103
103
|
isAdjustmentAllowed: import("@metamask/superstruct").Struct<boolean, null>;
|
|
@@ -137,4 +137,4 @@ export type ProcessGetGrantedExecutionPermissionsHook = (req: JsonRpcRequest, co
|
|
|
137
137
|
export declare function createWalletGetGrantedExecutionPermissionsHandler({ processGetGrantedExecutionPermissions, }: {
|
|
138
138
|
processGetGrantedExecutionPermissions?: ProcessGetGrantedExecutionPermissionsHook;
|
|
139
139
|
}): JsonRpcMiddleware<JsonRpcRequest, Json, WalletMiddlewareContext>;
|
|
140
|
-
//# sourceMappingURL=wallet-get-granted-execution-permissions.d.
|
|
140
|
+
//# sourceMappingURL=wallet-get-granted-execution-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-get-granted-execution-permissions.d.ts","sourceRoot":"","sources":["../../src/methods/wallet-get-granted-execution-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAUnD,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAI5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,0CAA0C,mEAAiB,CAAC;AAazE;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ3C,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,KAAK,CAC5C,OAAO,gCAAgC,CACxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAEtD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oCAAoC,GAAG,IAAI,GACrD,KAAK,CAAC,OAAO,0CAA0C,CAAC,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,yCAAyC,GAAG,CACtD,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,oCAAoC,CAAC,CAAC;AAEnD;;;;;;;;GAQG;AACH,wBAAgB,iDAAiD,CAAC,EAChE,qCAAqC,GACtC,EAAE;IACD,qCAAqC,CAAC,EAAE,yCAAyC,CAAC;CACnF,GAAG,iBAAiB,CAAC,cAAc,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAcnE"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { rpcErrors } from
|
|
2
|
-
import { array, boolean, object, record, string, unknown } from
|
|
3
|
-
import { HexChecksumAddressStruct, StrictHexStruct } from
|
|
4
|
-
import { NoParamsStruct } from
|
|
5
|
-
import { validateParams } from
|
|
1
|
+
import { rpcErrors } from '@metamask/rpc-errors';
|
|
2
|
+
import { array, boolean, object, record, string, unknown, } from '@metamask/superstruct';
|
|
3
|
+
import { HexChecksumAddressStruct, StrictHexStruct } from '@metamask/utils';
|
|
4
|
+
import { NoParamsStruct } from '../utils/structs.js';
|
|
5
|
+
import { validateParams } from '../utils/validation.js';
|
|
6
6
|
/**
|
|
7
7
|
* Superstruct schema for the `wallet_getGrantedExecutionPermissions` request params.
|
|
8
8
|
*
|
|
@@ -54,4 +54,4 @@ export function createWalletGetGrantedExecutionPermissionsHandler({ processGetGr
|
|
|
54
54
|
return await processGetGrantedExecutionPermissions(request, context);
|
|
55
55
|
};
|
|
56
56
|
}
|
|
57
|
-
//# sourceMappingURL=wallet-get-granted-execution-permissions.
|
|
57
|
+
//# sourceMappingURL=wallet-get-granted-execution-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-get-granted-execution-permissions.js","sourceRoot":"","sources":["../../src/methods/wallet-get-granted-execution-permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EACL,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAG5E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,cAAc,CAAC;AAEzE,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAC9B,OAAO,EAAE,eAAe;IACxB,WAAW,EAAE,eAAe;CAC7B,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,EAAE;IACd,mBAAmB,EAAE,OAAO,EAAE;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;IACrD,OAAO,EAAE,eAAe;IACxB,IAAI,EAAE,wBAAwB;IAC9B,EAAE,EAAE,wBAAwB;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,eAAe;IACxB,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC;IACrC,iBAAiB,EAAE,wBAAwB;CAC5C,CAAC,CAAC;AASH;;GAEG;AACH,MAAM,CAAC,MAAM,0CAA0C,GAAG,KAAK,CAC7D,gCAAgC,CACjC,CAAC;AAiBF;;;;;;;;GAQG;AACH,MAAM,UAAU,iDAAiD,CAAC,EAChE,qCAAqC,GAGtC;IACC,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,IAAI,CAAC,qCAAqC,EAAE,CAAC;YAC3C,MAAM,SAAS,CAAC,kBAAkB,CAChC,kEAAkE,CACnE,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAE3B,cAAc,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC;QAEnE,OAAO,MAAM,qCAAqC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { JsonRpcMiddleware } from '@metamask/json-rpc-engine/v2';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { Infer } from '@metamask/superstruct';\nimport {\n array,\n boolean,\n object,\n record,\n string,\n unknown,\n} from '@metamask/superstruct';\nimport { HexChecksumAddressStruct, StrictHexStruct } from '@metamask/utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { NoParamsStruct } from '../utils/structs.js';\nimport { validateParams } from '../utils/validation.js';\nimport type { WalletMiddlewareContext } from '../wallet.js';\n\n/**\n * Superstruct schema for the `wallet_getGrantedExecutionPermissions` request params.\n *\n * This method expects no parameters. Different JSON-RPC clients may send \"no params\"\n * in different ways (omitted, empty array, or empty object), so we accept all three.\n */\nexport const GetGrantedExecutionPermissionsParamsStruct = NoParamsStruct;\n\nconst DependencyStruct = object({\n factory: StrictHexStruct,\n factoryData: StrictHexStruct,\n});\n\nconst PermissionStruct = object({\n type: string(),\n isAdjustmentAllowed: boolean(),\n data: record(string(), unknown()),\n});\n\n/**\n * Superstruct schema for a single granted execution permission.\n */\nexport const GrantedExecutionPermissionStruct = object({\n chainId: StrictHexStruct,\n from: HexChecksumAddressStruct,\n to: HexChecksumAddressStruct,\n permission: PermissionStruct,\n context: StrictHexStruct,\n dependencies: array(DependencyStruct),\n delegationManager: HexChecksumAddressStruct,\n});\n\n/**\n * Represents a single granted execution permission.\n */\nexport type GrantedExecutionPermission = Infer<\n typeof GrantedExecutionPermissionStruct\n>;\n\n/**\n * Superstruct schema for the `wallet_getGrantedExecutionPermissions` result.\n */\nexport const GetGrantedExecutionPermissionsResultStruct = array(\n GrantedExecutionPermissionStruct,\n);\n\n/**\n * Result type for the `wallet_getGrantedExecutionPermissions` JSON-RPC method.\n * Returns an array of all granted permissions that are not yet revoked.\n */\nexport type GetGrantedExecutionPermissionsResult = Json &\n Infer<typeof GetGrantedExecutionPermissionsResultStruct>;\n\n/**\n * Hook type for processing the `wallet_getGrantedExecutionPermissions` request.\n */\nexport type ProcessGetGrantedExecutionPermissionsHook = (\n req: JsonRpcRequest,\n context: WalletMiddlewareContext,\n) => Promise<GetGrantedExecutionPermissionsResult>;\n\n/**\n * Creates a handler for the `wallet_getGrantedExecutionPermissions` JSON-RPC method.\n *\n * @param options - The options for the handler.\n * @param options.processGetGrantedExecutionPermissions - The function to process the\n * get granted execution permissions request.\n * @returns A JSON-RPC middleware function that handles the\n * `wallet_getGrantedExecutionPermissions` JSON-RPC method.\n */\nexport function createWalletGetGrantedExecutionPermissionsHandler({\n processGetGrantedExecutionPermissions,\n}: {\n processGetGrantedExecutionPermissions?: ProcessGetGrantedExecutionPermissionsHook;\n}): JsonRpcMiddleware<JsonRpcRequest, Json, WalletMiddlewareContext> {\n return async ({ request, context }) => {\n if (!processGetGrantedExecutionPermissions) {\n throw rpcErrors.methodNotSupported(\n 'wallet_getGrantedExecutionPermissions - no middleware configured',\n );\n }\n\n const { params } = request;\n\n validateParams(params, GetGrantedExecutionPermissionsParamsStruct);\n\n return await processGetGrantedExecutionPermissions(request, context);\n };\n}\n"]}
|