Skip to content

Commit f0b31fd

Browse files
committed
refactor: Add context generic to PollingBlockTracker
1 parent 6b75585 commit f0b31fd

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

packages/eth-block-tracker/src/PollingBlockTracker.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
2+
import type {
3+
ContextConstraint,
4+
MiddlewareContext,
5+
} from '@metamask/json-rpc-engine/v2';
26
import SafeEventEmitter from '@metamask/safe-event-emitter';
37
import {
48
createDeferredPromise,
@@ -17,8 +21,10 @@ const sec = 1000;
1721

1822
const blockTrackerEvents: (string | symbol)[] = ['sync', 'latest'];
1923

20-
export type PollingBlockTrackerOptions = {
21-
provider?: InternalProvider;
24+
export type PollingBlockTrackerOptions<
25+
Context extends ContextConstraint = MiddlewareContext,
26+
> = {
27+
provider?: InternalProvider<Context>;
2228
pollingInterval?: number;
2329
retryTimeout?: number;
2430
keepEventLoopActive?: boolean;
@@ -33,7 +39,9 @@ type ExtendedJsonRpcRequest = {
3339

3440
type InternalListener = (value: string) => void;
3541

36-
export class PollingBlockTracker
42+
export class PollingBlockTracker<
43+
Context extends ContextConstraint = MiddlewareContext,
44+
>
3745
extends SafeEventEmitter
3846
implements BlockTracker
3947
{
@@ -49,7 +57,7 @@ export class PollingBlockTracker
4957

5058
private _pollingTimeout?: ReturnType<typeof setTimeout>;
5159

52-
private readonly _provider: InternalProvider;
60+
private readonly _provider: InternalProvider<Context>;
5361

5462
private readonly _pollingInterval: number;
5563

@@ -65,7 +73,7 @@ export class PollingBlockTracker
6573

6674
#pendingFetch?: Omit<DeferredPromise<string>, 'resolve'>;
6775

68-
constructor(opts: PollingBlockTrackerOptions = {}) {
76+
constructor(opts: PollingBlockTrackerOptions<Context> = {}) {
6977
// parse + validate args
7078
if (!opts.provider) {
7179
throw new Error('PollingBlockTracker - no provider specified.');

packages/network-controller/tests/NetworkController.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
NetworkType,
1414
toHex,
1515
} from '@metamask/controller-utils';
16-
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
1716
import { rpcErrors } from '@metamask/rpc-errors';
1817
import type { Hex } from '@metamask/utils';
1918
import assert from 'assert';
@@ -16641,7 +16640,7 @@ function buildFakeClient(
1664116640
},
1664216641
provider,
1664316642
blockTracker: new FakeBlockTracker({
16644-
provider: provider as unknown as InternalProvider,
16643+
provider,
1664516644
}),
1664616645
destroy: () => {
1664716646
// do nothing

tests/fake-block-tracker.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import { PollingBlockTracker } from '@metamask/eth-block-tracker';
22
import type { InternalProvider } from '@metamask/eth-json-rpc-provider';
3+
import type {
4+
ContextConstraint,
5+
MiddlewareContext,
6+
} from '@metamask/json-rpc-engine/v2';
37

48
/**
59
* Acts like a PollingBlockTracker, but doesn't start the polling loop or
610
* make any requests.
711
*/
8-
export class FakeBlockTracker extends PollingBlockTracker {
12+
export class FakeBlockTracker<
13+
Context extends ContextConstraint = MiddlewareContext,
14+
> extends PollingBlockTracker<Context> {
915
#latestBlockNumber = '0x0';
1016

11-
constructor({ provider }: { provider: InternalProvider }) {
17+
constructor({ provider }: { provider: InternalProvider<Context> }) {
1218
super({
1319
provider,
1420
});

0 commit comments

Comments
 (0)