Skip to content

Commit

Permalink
fix(wallet): don't use Event.hasListeners that is not available in FF
Browse files Browse the repository at this point in the history
  • Loading branch information
davidyuk committed Jan 12, 2023
1 parent f02fefe commit 05c0424
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions src/aepp-wallet-communication/connection/BrowserRuntime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import { Runtime } from 'webextension-polyfill';
import BrowserConnection from './Browser';
import { UnexpectedTsError } from '../../utils/errors';

/**
* BrowserRuntimeConnection
Expand All @@ -26,6 +27,8 @@ import BrowserConnection from './Browser';
export default class BrowserRuntimeConnection extends BrowserConnection {
port: Runtime.Port;

#listeners?: [(message: any, port: Runtime.Port) => void, () => void];

constructor({ port, ...options }: { port: Runtime.Port; debug: boolean }) {
super(options);
this.port = port;
Expand All @@ -34,19 +37,27 @@ export default class BrowserRuntimeConnection extends BrowserConnection {
override disconnect(): void {
super.disconnect();
this.port.disconnect();
if (this.#listeners == null) throw new UnexpectedTsError();
this.port.onMessage.removeListener(this.#listeners[0]);
this.port.onDisconnect.removeListener(this.#listeners[1]);
this.#listeners = undefined;
}

override connect(
onMessage: (message: any, origin: string, source: Runtime.Port) => void,
onDisconnect: () => void,
): void {
super.connect(onMessage, onDisconnect);
this.port.onMessage.addListener((message, port) => {
this.receiveMessage(message);
// TODO: make `origin` optional because sender url is not available on aepp side
onMessage(message, port.sender?.url ?? '', port);
});
this.port.onDisconnect.addListener(onDisconnect);
this.#listeners = [
(message, port) => {
this.receiveMessage(message);
// TODO: make `origin` optional because sender url is not available on aepp side
onMessage(message, port.sender?.url ?? '', port);
},
onDisconnect,
];
this.port.onMessage.addListener(this.#listeners[0]);
this.port.onDisconnect.addListener(this.#listeners[1]);
}

override sendMessage(message: any): void {
Expand All @@ -55,6 +66,6 @@ export default class BrowserRuntimeConnection extends BrowserConnection {
}

isConnected(): boolean {
return this.port.onMessage.hasListeners();
return this.#listeners != null;
}
}

0 comments on commit 05c0424

Please sign in to comment.