import { EventEmitter } from "eventemitter3" export type EventName = | "message" | "connect" | "disconnect" | "accountsChanged" | "chainChanged" type ProviderMessage = { readonly type: string readonly data: unknown } type ProviderConnectInfo = { readonly chainId: string } export type EventCallbackByEventName = { message: (message: ProviderMessage) => void connect: (connectInfo: ProviderConnectInfo) => void disconnect: () => void accountsChanged: (accounts: string[]) => void chainChanged: (chainId: string) => void } export const emitter = new EventEmitter() type EventMessage = { event: EventName data?: unknown } export const isEventMessage = (message: unknown): message is EventMessage => !!message && typeof message === "object" && "type" in message && message.type === "event" && "event" in message && typeof message.event === "string"