| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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 }
|