| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { remote } from '../utils/db.js'
- import { currentProfile } from '../services/login.service.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)
- if (parsed.name === 'REVEALED_INFO') {
- this._appendTagsToGrouping(parsed)
- }
- this.stonks[parsed.name] = parsed
- waveCb(this._formatToast(parsed), parsed.type)
- })
- }
- _formatToast(parsed) {
- if (parsed.revealed_info) {
- return `${parsed.name}: ${parsed.revealed_info} at ${parsed.type}: ${parsed.url}`
- } else if (parsed.url) {
- return `${parsed.name}: ${parsed.profile_id}: visit: ${parsed.url}`
- } else {
- return `${parsed.name}: ${parsed.profile_id} ${parsed.order} at ${parsed.price}`
- }
- }
- _appendTagsToGrouping(parsed) {
- const foundGrouping = currentProfile.groupings.find(
- grouping => grouping.grouping_id === parsed.grouping_id,
- )
- if (foundGrouping) {
- const tagFromNotification = {
- is_active: 1,
- tag_category: 'reveal',
- profile_id: parsed.profile_id,
- tag_description: parsed.description,
- tag_id: parsed.tag,
- }
- const target_desc = parsed.description
- tagFromNotification[target_desc] = parsed.revealed_info
- foundGrouping.profile.reveal.push(tagFromNotification)
- foundGrouping.revealedFromNotification.value.push(
- tagFromNotification,
- )
- }
- }
- }
-
- export { Toaster, StonkAlert }
|