Skip to content

Commit bf72bd8

Browse files
committed
Make HttpProvider constructor private
1 parent c577d7d commit bf72bd8

File tree

3 files changed

+70
-59
lines changed

3 files changed

+70
-59
lines changed

v-next/hardhat/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ export class EdrProvider extends EventEmitter implements EthereumProvider {
110110
#vmTracer?: VMTracerT;
111111
#nextRequestId = 1;
112112

113+
/**
114+
* Creates a new instance of `EdrProvider`.
115+
*/
113116
public static async create({
114117
networkConfig,
115118
loggerConfig = { enabled: false },
@@ -237,6 +240,13 @@ export class EdrProvider extends EventEmitter implements EthereumProvider {
237240
return edrProvider;
238241
}
239242

243+
/**
244+
* @private
245+
*
246+
* This constructor is intended for internal use only.
247+
* Use the static method {@link EdrProvider.create} to create an instance of
248+
* `EdrProvider`.
249+
*/
240250
private constructor(
241251
provider: Provider,
242252
vmTraceDecoder: VmTraceDecoder,

v-next/hardhat/src/internal/builtin-plugins/network-manager/http-provider.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ interface HttpProviderConfig {
4646
extraHeaders?: Record<string, string>;
4747
timeout: number;
4848
jsonRpcRequestWrapper?: JsonRpcRequestWrapperFunction;
49+
testDispatcher?: Dispatcher;
4950
}
5051

5152
export class HttpProvider extends EventEmitter implements EthereumProvider {
@@ -66,14 +67,16 @@ export class HttpProvider extends EventEmitter implements EthereumProvider {
6667
extraHeaders = {},
6768
timeout,
6869
jsonRpcRequestWrapper,
70+
testDispatcher,
6971
}: HttpProviderConfig): Promise<HttpProvider> {
7072
if (!isValidUrl(url)) {
7173
throw new HardhatError(HardhatError.ERRORS.NETWORK.INVALID_URL, {
7274
value: url,
7375
});
7476
}
7577

76-
const dispatcher = await getHttpDispatcher(url, timeout);
78+
const dispatcher =
79+
testDispatcher ?? (await getHttpDispatcher(url, timeout));
7780

7881
const httpProvider = new HttpProvider(
7982
url,
@@ -93,8 +96,7 @@ export class HttpProvider extends EventEmitter implements EthereumProvider {
9396
* Use the static method {@link HttpProvider.create} to create an instance of
9497
* `HttpProvider`.
9598
*/
96-
// TODO: make the constructor private, but we need to fix the tests first
97-
constructor(
99+
private constructor(
98100
url: string,
99101
networkName: string,
100102
extraHeaders: Record<string, string>,

v-next/hardhat/test/internal/builtin-plugins/network-manager/http-provider.ts

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ describe("http-provider", () => {
4848

4949
/**
5050
* To test the HttpProvider#request method, we need to use an interceptor to
51-
* mock the network requests. As the HttpProvider.create does not allow to
52-
* pass a custom dispatcher, we use the constructor directly.
51+
* mock the network requests.
5352
*/
5453
describe("HttpProvider#request", async () => {
5554
const interceptor = await initializeTestDispatcher();
@@ -78,12 +77,12 @@ describe("http-provider", () => {
7877
})
7978
.reply(200, jsonRpcResponse);
8079

81-
const provider = new HttpProvider(
82-
"http://localhost",
83-
"exampleNetwork",
84-
{},
85-
interceptor,
86-
);
80+
const provider = await HttpProvider.create({
81+
url: "http://localhost",
82+
networkName: "exampleNetwork",
83+
timeout: 20_000,
84+
testDispatcher: interceptor,
85+
});
8786

8887
const result = await provider.request({
8988
method: "eth_chainId",
@@ -94,12 +93,12 @@ describe("http-provider", () => {
9493
});
9594

9695
it("should throw if the params are an object", async () => {
97-
const provider = new HttpProvider(
98-
"http://localhost",
99-
"exampleNetwork",
100-
{},
101-
interceptor,
102-
);
96+
const provider = await HttpProvider.create({
97+
url: "http://localhost",
98+
networkName: "exampleNetwork",
99+
timeout: 20_000,
100+
testDispatcher: interceptor,
101+
});
103102

104103
await assertRejectsWithHardhatError(
105104
provider.request({
@@ -161,12 +160,12 @@ describe("http-provider", () => {
161160
})
162161
.reply(200, jsonRpcResponse);
163162

164-
const provider = new HttpProvider(
165-
"http://localhost",
166-
"exampleNetwork",
167-
{},
168-
interceptor,
169-
);
163+
const provider = await HttpProvider.create({
164+
url: "http://localhost",
165+
networkName: "exampleNetwork",
166+
timeout: 20_000,
167+
testDispatcher: interceptor,
168+
});
170169

171170
const result = await provider.request({
172171
method: "eth_chainId",
@@ -202,12 +201,12 @@ describe("http-provider", () => {
202201
})
203202
.reply(200, jsonRpcResponse);
204203

205-
const provider = new HttpProvider(
206-
"http://localhost",
207-
"exampleNetwork",
208-
{},
209-
interceptor,
210-
);
204+
const provider = await HttpProvider.create({
205+
url: "http://localhost",
206+
networkName: "exampleNetwork",
207+
timeout: 20_000,
208+
testDispatcher: interceptor,
209+
});
211210

212211
const result = await provider.request({
213212
method: "eth_chainId",
@@ -238,12 +237,12 @@ describe("http-provider", () => {
238237
.reply(429);
239238
}
240239

241-
const provider = new HttpProvider(
242-
"http://localhost",
243-
"exampleNetwork",
244-
{},
245-
interceptor,
246-
);
240+
const provider = await HttpProvider.create({
241+
url: "http://localhost",
242+
networkName: "exampleNetwork",
243+
timeout: 20_000,
244+
testDispatcher: interceptor,
245+
});
247246

248247
try {
249248
await provider.request({
@@ -276,12 +275,12 @@ describe("http-provider", () => {
276275
.defaultReplyHeaders({ "retry-after": "6" })
277276
.reply(429);
278277

279-
const provider = new HttpProvider(
280-
"http://localhost",
281-
"exampleNetwork",
282-
{},
283-
interceptor,
284-
);
278+
const provider = await HttpProvider.create({
279+
url: "http://localhost",
280+
networkName: "exampleNetwork",
281+
timeout: 20_000,
282+
testDispatcher: interceptor,
283+
});
285284

286285
try {
287286
await provider.request({
@@ -316,12 +315,12 @@ describe("http-provider", () => {
316315
})
317316
.reply(200, invalidResponse);
318317

319-
const provider = new HttpProvider(
320-
"http://localhost",
321-
"exampleNetwork",
322-
{},
323-
interceptor,
324-
);
318+
const provider = await HttpProvider.create({
319+
url: "http://localhost",
320+
networkName: "exampleNetwork",
321+
timeout: 20_000,
322+
testDispatcher: interceptor,
323+
});
325324

326325
await assertRejectsWithHardhatError(
327326
provider.request({
@@ -361,12 +360,12 @@ describe("http-provider", () => {
361360
})
362361
.reply(200, jsonRpcResponse);
363362

364-
const provider = new HttpProvider(
365-
"http://localhost",
366-
"exampleNetwork",
367-
{},
368-
interceptor,
369-
);
363+
const provider = await HttpProvider.create({
364+
url: "http://localhost",
365+
networkName: "exampleNetwork",
366+
timeout: 20_000,
367+
testDispatcher: interceptor,
368+
});
370369

371370
try {
372371
await provider.request({
@@ -434,13 +433,13 @@ describe("http-provider", () => {
434433
}
435434
};
436435

437-
const provider = new HttpProvider(
438-
"http://localhost",
439-
"exampleNetwork",
440-
{},
441-
interceptor,
436+
const provider = await HttpProvider.create({
437+
url: "http://localhost",
438+
networkName: "exampleNetwork",
439+
timeout: 20_000,
442440
jsonRpcRequestWrapper,
443-
);
441+
testDispatcher: interceptor,
442+
});
444443

445444
// eth_chainId is handled by the wrapper and returns the hardhat chain ID
446445
// instead of jsonRpcChainIdResponse.result

0 commit comments

Comments
 (0)