UNPKG

@zkp2p/reclaim-witness-sdk

Version:

<div> <div> <img src="https://raw.githubusercontent.com/reclaimprotocol/.github/main/assets/banners/Attestor-Core.png" /> </div> </div>

36 lines (35 loc) 1.37 kB
import type { RPCMessage, TunnelDisconnectEvent, TunnelMessage } from '../proto/api'; import type { AttestorError } from '../utils/error'; type ExtractPrefix<T, S extends string> = T extends `${infer _}${S}` ? _ : never; export type RPCType = ExtractPrefix<keyof RPCMessage, 'Request'>; type RPCRequestType<T extends RPCType> = `${T}Request`; type RPCResponseType<T extends RPCType> = `${T}Response`; export type RPCRequestData<T extends RPCType> = Exclude<RPCMessage[RPCRequestType<T>], undefined>; export type RPCResponseData<T extends RPCType> = Exclude<RPCMessage[RPCResponseType<T>], undefined>; export type RPCRequest<T extends RPCType> = { requestId: RPCMessage['id']; type: T; data: RPCRequestData<T>; respond(res: RPCResponseData<T> | AttestorError): void; }; export type RPCResponse<T extends RPCType> = { id: RPCMessage['id']; type: T; data: RPCResponseData<T>; } | { id: RPCMessage['id']; error: AttestorError; }; export type RPCEventMap = { 'connection-terminated': AttestorError; 'tunnel-message': TunnelMessage; 'tunnel-disconnect-event': TunnelDisconnectEvent; 'rpc-request': RPCRequest<RPCType>; 'rpc-response': RPCResponse<RPCType>; }; export type RPCEventType = keyof RPCEventMap; export interface RPCEvent<T extends RPCEventType> extends Event { type: T; data: RPCEventMap[T]; } export {};