type Relay EventHandler (#121)

* type Relay EventHandler

* Update relay.ts
This commit is contained in:
BilligsterUser 2023-03-11 19:24:52 +01:00 committed by GitHub
parent b00af9a30a
commit d244b62c7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 17 deletions

View File

@ -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<Event[]>
get: (filter: Filter, opts?: SubscriptionOptions) => Promise<Event | null>
publish: (event: Event) => Pub
on: (type: RelayEvent, cb: any) => void
off: (type: RelayEvent, cb: any) => void
off: <T extends keyof RelayEvent, U extends RelayEvent[T]>(event: T, listener: U) => void
on: <T extends keyof RelayEvent, U extends RelayEvent[T]>(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: <T extends keyof RelayEvent, U extends RelayEvent[T]>(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: <T extends keyof RelayEvent, U extends RelayEvent[T]>(type: T, cb: U): void => {
let index = listeners[type].indexOf(cb)
if (index !== -1) listeners[type].splice(index, 1)
},