From 3b59694f344edbf0b665becd53ffda2fe8dcbf57 Mon Sep 17 00:00:00 2001 From: Jeremy Frank Date: Thu, 20 Nov 2025 09:56:18 -0700 Subject: [PATCH] refactor(rpc): improve callback structure by introducing RpcClientCallbacks type --- .../utility/rpc/src/rpc/api/definition.ts | 19 ++++++++++++++----- packages/utility/rpc/src/rpc/client.ts | 10 ++-------- packages/utility/rpc/src/rpc/types.ts | 10 ++++++++++ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/packages/utility/rpc/src/rpc/api/definition.ts b/packages/utility/rpc/src/rpc/api/definition.ts index 32c0eeaf..c9616ae1 100644 --- a/packages/utility/rpc/src/rpc/api/definition.ts +++ b/packages/utility/rpc/src/rpc/api/definition.ts @@ -3,7 +3,13 @@ import Websocket from 'websocket' import { randomId } from '../../utils' import { createRpcClient } from '../client' import { createRpcServer } from '../server' -import { Message, MessageQuery, RpcParams, TypedRpcNotificationHandler } from '../types' +import { + Message, + MessageQuery, + RpcClientCallbacks, + RpcParams, + TypedRpcNotificationHandler, +} from '../types' import { RpcError } from '../utils' import { ApiDefinition, @@ -20,9 +26,12 @@ import { } from './typing' export const createApiDefinition = (serverDefinition: S) => { - const createClient = >( - clientParams: Parameters[0], - ): ApiDefinitionClient => { + const createClient = >(clientParams: { + endpoint: string + callbacks: RpcClientCallbacks + reconnectInterval?: number | null + debug?: boolean + }): ApiDefinitionClient => { const client = createRpcClient(clientParams) // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -189,7 +198,7 @@ export const createApiDefinition = (serverDefinition: S callbacks, }: { handlers: ApiServerHandlers - callbacks: Parameters[0]['callbacks'] + callbacks: RpcClientCallbacks }): ApiMockServerClient => { const eventEmitter = new EventEmitter() diff --git a/packages/utility/rpc/src/rpc/client.ts b/packages/utility/rpc/src/rpc/client.ts index fd39b152..639ce270 100644 --- a/packages/utility/rpc/src/rpc/client.ts +++ b/packages/utility/rpc/src/rpc/client.ts @@ -9,6 +9,7 @@ import { MessageQuery, MessageResponse, MessageResponseQuery, + RpcClientCallbacks, } from './types' export const createRpcClient = ({ @@ -18,14 +19,7 @@ export const createRpcClient = ({ debug = false, }: { endpoint: string - callbacks: { - onEveryOpen?: () => void - onFirstOpen?: () => void - onReconnection?: () => void - onError?: (error: Error) => void - onClose?: (event: Websocket.ICloseEvent) => void - onWrongMessage?: (responder: (message: MessageResponseQuery) => void) => void - } + callbacks: RpcClientCallbacks reconnectInterval?: number | null debug?: boolean }): ClientRPC => { diff --git a/packages/utility/rpc/src/rpc/types.ts b/packages/utility/rpc/src/rpc/types.ts index 6e41eaaa..9ea03913 100644 --- a/packages/utility/rpc/src/rpc/types.ts +++ b/packages/utility/rpc/src/rpc/types.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ +import Websocket from 'websocket' import { connection } from 'websocket' import { z } from 'zod' import { PromiseOr } from '../utils/types' @@ -38,6 +39,15 @@ export type MessageResponseQuery = Omit & { jsonrpc?: string } +export type RpcClientCallbacks = { + onEveryOpen?: () => void + onFirstOpen?: () => void + onReconnection?: () => void + onError?: (error: Error) => void + onClose?: (event: Websocket.ICloseEvent) => void + onWrongMessage?: (responder: (message: MessageResponseQuery) => void) => void +} + type SuccessResponse = { jsonrpc: string id: number