| 246 | } |
| 247 | |
| 248 | public async handshake(): Promise<void> { |
| 249 | const handshakePromise = new DeferredPromise<void>(); |
| 250 | |
| 251 | await this.receiverReadyPromise; |
| 252 | |
| 253 | debug('[message-sender]: sending handshake'); |
| 254 | this.target.postMessage( |
| 255 | { |
| 256 | type: 'internal/handshake', |
| 257 | }, |
| 258 | '*', |
| 259 | [this.channel.port2] |
| 260 | ); |
| 261 | |
| 262 | this.on('internal/handshake/done', () => { |
| 263 | handshakePromise.resolve(); |
| 264 | clearTimeout(rejectionTimeout); |
| 265 | }); |
| 266 | |
| 267 | const rejectionTimeout = setTimeout(() => { |
| 268 | handshakePromise.reject(new Error('MessageSender: Handshake timeout')); |
| 269 | }, 5000); |
| 270 | |
| 271 | return handshakePromise; |
| 272 | } |
| 273 | |
| 274 | public on<Event extends keyof WorkerEvents & string>( |
| 275 | event: Event, |