diff --git a/src.ts/providers/abstract-provider.ts b/src.ts/providers/abstract-provider.ts index 913e85a21f..36aaffe0a0 100644 --- a/src.ts/providers/abstract-provider.ts +++ b/src.ts/providers/abstract-provider.ts @@ -115,7 +115,7 @@ export type DebugEventAbstractProvider = { // Only sub-classes overriding the _getSubscription method will care about this export type Subscription = { - type: "block" | "close" | "debug" | "network" | "pending", + type: "block" | "close" | "debug" | "error" | "network" | "pending", tag: string } | { type: "transaction", @@ -186,7 +186,7 @@ async function getSubscription(_event: ProviderEvent, provider: AbstractProvider if (typeof(_event) === "string") { switch (_event) { - case "block": case "pending": case "debug": case "network": { + case "block": case "pending": case "debug": case "error": case "network": { return { type: _event, tag: _event }; } } @@ -997,6 +997,7 @@ export class AbstractProvider implements Provider { if (check !== address) { return null; } return name; + } catch (error) { // No data was returned from the resolver if (isError(error, "BAD_DATA") && error.value === "0x") { @@ -1094,6 +1095,7 @@ export class AbstractProvider implements Provider { _getSubscriber(sub: Subscription): Subscriber { switch (sub.type) { case "debug": + case "error": case "network": return new UnmanagedSubscriber(sub.type); case "block": diff --git a/src.ts/providers/provider-socket.ts b/src.ts/providers/provider-socket.ts index 7f6e5cab89..95091b5901 100644 --- a/src.ts/providers/provider-socket.ts +++ b/src.ts/providers/provider-socket.ts @@ -10,7 +10,7 @@ */ import { UnmanagedSubscriber } from "./abstract-provider.js"; -import { assert, assertArgument } from "../utils/index.js"; +import { assert, assertArgument, makeError } from "../utils/index.js"; import { JsonRpcApiProvider } from "./provider-jsonrpc.js"; import type { Subscriber, Subscription } from "./abstract-provider.js"; @@ -234,25 +234,16 @@ export class SocketProvider extends JsonRpcApiProvider { if ("id" in result) { const callback = this.#callbacks.get(result.id); if (callback == null) { - console.log("Weird... Response for not a thing we sent"); + this.emit("error", makeError("received result for unknown id", "UNKNOWN_ERROR", { + reasonCode: "UNKNOWN_ID", + result + })); return; } this.#callbacks.delete(result.id); callback.resolve(result); -/* - if ("error" in result) { - const { message, code, data } = result.error; - const error = makeError(message || "unkonwn error", "SERVER_ERROR", { - request: `ws:${ JSON.stringify(callback.payload) }`, - info: { code, data } - }); - callback.reject(error); - } else { - callback.resolve(result.result); - } -*/ } else if (result.method === "eth_subscription") { const filterId = result.params.subscription; const subscriber = this.#subs.get(filterId);