From d244b62c7a4bca48ad7fde16566dbeb9378c7cad Mon Sep 17 00:00:00 2001 From: BilligsterUser <49797107+BilligsterUser@users.noreply.github.com> Date: Sat, 11 Mar 2023 19:24:52 +0100 Subject: [PATCH] type Relay EventHandler (#121) * type Relay EventHandler * Update relay.ts --- relay.ts | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/relay.ts b/relay.ts index 105b547..06c4820 100644 --- a/relay.ts +++ b/relay.ts @@ -4,7 +4,12 @@ import {Event, verifySignature, validateEvent} from './event' import {Filter, matchFilters} from './filter' import {getHex64, getSubscriptionId} from './fakejson' -type RelayEvent = 'connect' | 'disconnect' | 'error' | 'notice' +type RelayEvent = { + connect: () => void + disconnect: () => void + error: () => void + notice: (msg: string) => void +} export type Relay = { url: string @@ -15,8 +20,8 @@ export type Relay = { list: (filters: Filter[], opts?: SubscriptionOptions) => Promise get: (filter: Filter, opts?: SubscriptionOptions) => Promise publish: (event: Event) => Pub - on: (type: RelayEvent, cb: any) => void - off: (type: RelayEvent, cb: any) => void + off: (event: T, listener: U) => void + on: (event: T, listener: U) => void } export type Pub = { on: (type: 'ok' | 'failed', cb: any) => void @@ -46,12 +51,7 @@ export function relayInit( var ws: WebSocket var openSubs: {[id: string]: {filters: Filter[]} & SubscriptionOptions} = {} - var listeners: { - connect: Array<() => void> - disconnect: Array<() => void> - error: Array<() => void> - notice: Array<(msg: string) => void> - } = { + var listeners: { [TK in keyof RelayEvent]: RelayEvent[TK][]} = { connect: [], disconnect: [], error: [], @@ -242,14 +242,15 @@ export function relayInit( return { url, - sub, - on: (type: RelayEvent, cb: any): void => { - listeners[type].push(cb) - if (type === 'connect' && ws?.readyState === 1) { - cb() - } - }, - off: (type: RelayEvent, cb: any): void => { + sub, + on: (type: T, cb: U): void => { + listeners[type].push(cb) + if (type === 'connect' && ws?.readyState === 1) { + // i would love to know why we need this + (cb as ()=> void)() + } + }, + off: (type: T, cb: U): void => { let index = listeners[type].indexOf(cb) if (index !== -1) listeners[type].splice(index, 1) },