@@ -200,6 +200,7 @@ export class AbstractRelay {
200
200
const reason : string = data [ 3 ]
201
201
const ep = this . openEventPublishes . get ( id ) as EventPublishResolver
202
202
if ( ep ) {
203
+ clearTimeout ( ep . timeout )
203
204
if ( ok ) ep . resolve ( reason )
204
205
else ep . reject ( new Error ( reason ) )
205
206
this . openEventPublishes . delete ( id )
@@ -240,24 +241,31 @@ export class AbstractRelay {
240
241
if ( ! this . challenge ) throw new Error ( "can't perform auth, no challenge was received" )
241
242
const evt = await signAuthEvent ( makeAuthEvent ( this . url , this . challenge ) )
242
243
const ret = new Promise < string > ( ( resolve , reject ) => {
243
- this . openEventPublishes . set ( evt . id , { resolve, reject } )
244
+ const timeout = setTimeout ( ( ) => {
245
+ const ep = this . openEventPublishes . get ( evt . id ) as EventPublishResolver
246
+ if ( ep ) {
247
+ ep . reject ( new Error ( 'auth timed out' ) )
248
+ this . openEventPublishes . delete ( evt . id )
249
+ }
250
+ } , this . publishTimeout )
251
+ this . openEventPublishes . set ( evt . id , { resolve, reject, timeout } )
244
252
} )
245
253
this . send ( '["AUTH",' + JSON . stringify ( evt ) + ']' )
246
254
return ret
247
255
}
248
256
249
257
public async publish ( event : Event ) : Promise < string > {
250
258
const ret = new Promise < string > ( ( resolve , reject ) => {
251
- this . openEventPublishes . set ( event . id , { resolve, reject } )
259
+ const timeout = setTimeout ( ( ) => {
260
+ const ep = this . openEventPublishes . get ( event . id ) as EventPublishResolver
261
+ if ( ep ) {
262
+ ep . reject ( new Error ( 'publish timed out' ) )
263
+ this . openEventPublishes . delete ( event . id )
264
+ }
265
+ } , this . publishTimeout )
266
+ this . openEventPublishes . set ( event . id , { resolve, reject, timeout } )
252
267
} )
253
268
this . send ( '["EVENT",' + JSON . stringify ( event ) + ']' )
254
- setTimeout ( ( ) => {
255
- const ep = this . openEventPublishes . get ( event . id ) as EventPublishResolver
256
- if ( ep ) {
257
- ep . reject ( new Error ( 'publish timed out' ) )
258
- this . openEventPublishes . delete ( event . id )
259
- }
260
- } , this . publishTimeout )
261
269
return ret
262
270
}
263
271
@@ -381,4 +389,5 @@ export type CountResolver = {
381
389
export type EventPublishResolver = {
382
390
resolve : ( reason : string ) => void
383
391
reject : ( err : Error ) => void
392
+ timeout : ReturnType < typeof setTimeout >
384
393
}
0 commit comments