import EventEmitter from 'events'; import StrictEventEmitter from 'strict-event-emitter-types'; import { DriftCompetitionsProgramAccountBaseEvents, DriftCompetitionsProgramAccountSubscriber, } from '../types/types'; export abstract class ProgramAccountBase< Account, AccountEvents extends DriftCompetitionsProgramAccountBaseEvents > { accountSubscriber: DriftCompetitionsProgramAccountSubscriber< Account, AccountEvents >; get isSubscribed(): boolean { return this.accountSubscriber.isSubscribed; } get eventEmitter(): StrictEventEmitter { return this.accountSubscriber.eventEmitter; } subscribe(): Promise { return this.accountSubscriber.subscribe(); } unsubscribe(): Promise { return this.accountSubscriber.unsubscribe(); } getData(): Account { return this.accountSubscriber.getAccountAndSlot()?.data; } async updateData(newData: Account, slot: number): Promise { return await this.accountSubscriber.updateData(newData, slot); } fetch() { return this.accountSubscriber.fetch(); } }