33 lines
1014 B
TypeScript
33 lines
1014 B
TypeScript
// Copyright 2019-2023 @polkadot/extension-base authors & contributors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
/* global chrome */
|
|
|
|
import type { MessageTypesWithSubscriptions, SubscriptionMessageTypes } from '../types.js';
|
|
|
|
type Subscriptions = Record<string, chrome.runtime.Port>;
|
|
|
|
const subscriptions: Subscriptions = {};
|
|
|
|
// return a subscription callback, that will send the data to the caller via the port
|
|
export function createSubscription<TMessageType extends MessageTypesWithSubscriptions> (id: string, port: chrome.runtime.Port): (data: SubscriptionMessageTypes[TMessageType]) => void {
|
|
subscriptions[id] = port;
|
|
|
|
return (subscription: unknown): void => {
|
|
if (subscriptions[id]) {
|
|
port.postMessage({ id, subscription });
|
|
}
|
|
};
|
|
}
|
|
|
|
// clear a previous subscriber
|
|
export function unsubscribe (id: string): void {
|
|
if (subscriptions[id]) {
|
|
console.log(`Unsubscribing from ${id}`);
|
|
|
|
delete subscriptions[id];
|
|
} else {
|
|
console.error(`Unable to unsubscribe from ${id}`);
|
|
}
|
|
}
|