type Relay EventHandler (#121)
* type Relay EventHandler * Update relay.ts
This commit is contained in:
parent
b00af9a30a
commit
d244b62c7a
35
relay.ts
35
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<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)
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue