import { remote } from '../utils/db.js' /** * Base notifier class * @param {number} profileId needed to listen for events for this profile */ class Toaster { constructor(profileId) { this.url = `${remote}/notification/${profileId}/subscribe` this.source = null this.source = new EventSource(this.url) this.listenFor('end', message => this.source.close) } listenFor(event, callback) { this.source.addEventListener(event, callback) } stop() { this.source.close() } } /** * Example extension that listens for 'stonk' events */ class StonkAlert extends Toaster { constructor(profileId, waveCb) { super(profileId) this.event = 'stonk' this.stonks = {} this.listenFor(`${profileId}.${this.event}`, message => { const parsed = JSON.parse(message.data) this.stonks[parsed.name] = parsed waveCb(this._formatToast(parsed), parsed.type) }) } _formatToast(parsed) { return `${parsed.name}: ${parsed.profile_id} ${parsed.order} at ${parsed.price}` } } export { Toaster, StonkAlert }