// Copyright 2023 @soul-wallet/extension-base authors & contributors // SPDX-License-Identifier: Apache-2.0 import BaseStore from '@soul-wallet/extension-base/stores/Base'; import { Subject } from 'rxjs'; export default abstract class SubscribableStore extends BaseStore { private readonly subject: Subject = new Subject(); public getSubject (): Subject { return this.subject; } public override set (_key: string, value: T, update?: () => void): void { super.set(_key, value, () => { this.subject.next(value); update && update(); }); } public asyncGet = async (key: string): Promise => { return new Promise((resolve) => { this.get(key, resolve); }); }; public removeAll () { return this.all((key) => this.remove(key)); } }