import { Listener } from 'xstream'; export interface DataSourceAction { success: boolean; reason?: string; } export abstract class DataSource { abstract createdAt: Date = new Date(); abstract hasMemory: boolean; abstract resume: () => DataSourceAction; abstract pause: () => DataSourceAction; abstract addListener: (listener: Listener) => DataSourceAction; abstract removeListener: (listener: Listener) => DataSourceAction; abstract removeAllListeners: () => DataSourceAction; }