From 09f5b862194bc1990442a79f8cbe6a19a193b305 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Fri, 24 Oct 2025 11:01:52 -0700 Subject: [PATCH 1/2] remove events constants for interface instead --- .../environment/TestEnvironmentHelpers.ts | 2 - __test__/unit/events/eventsUnique.test.ts | 7 - __test__/unit/push/registerForPush.test.ts | 2 +- src/onesignal/NotificationsNamespace.ts | 11 +- src/onesignal/OneSignal.test.ts | 2 +- src/onesignal/OneSignal.ts | 12 +- src/onesignal/OneSignalEvents.ts | 62 --------- src/onesignal/PushSubscriptionNamespace.ts | 29 ++-- src/onesignal/UserNamespace.ts | 6 +- src/page/bell/Bell.ts | 68 +++++----- src/page/bell/Button.ts | 12 +- src/page/bell/Dialog.ts | 6 +- src/page/bell/constants.ts | 10 -- src/page/managers/PromptsManager.ts | 14 +- .../slidedownManager/SlidedownManager.ts | 10 +- src/page/slidedown/ConfirmationToast.ts | 13 +- src/page/slidedown/Slidedown.ts | 27 ++-- src/shared/helpers/init.test.ts | 2 +- src/shared/helpers/init.ts | 8 +- src/shared/helpers/permission.test.ts | 2 +- src/shared/helpers/permissions.ts | 10 +- src/shared/libraries/Emitter.ts | 49 ++++--- src/shared/listeners.ts | 24 +--- src/shared/managers/ServiceWorkerManager.ts | 14 +- .../managers/sessionManager/SessionManager.ts | 2 +- src/shared/managers/subscription/base.ts | 2 +- src/shared/managers/subscription/page.ts | 6 +- src/shared/services/OneSignalEvent.ts | 19 ++- src/shared/services/types.ts | 127 ++++++++++++++++++ src/shared/utils/utils.ts | 2 +- 30 files changed, 278 insertions(+), 282 deletions(-) delete mode 100644 __test__/unit/events/eventsUnique.test.ts delete mode 100644 src/onesignal/OneSignalEvents.ts create mode 100644 src/shared/services/types.ts diff --git a/__test__/support/environment/TestEnvironmentHelpers.ts b/__test__/support/environment/TestEnvironmentHelpers.ts index 043b7e239..7eab1af75 100644 --- a/__test__/support/environment/TestEnvironmentHelpers.ts +++ b/__test__/support/environment/TestEnvironmentHelpers.ts @@ -6,7 +6,6 @@ import { SubscriptionType } from 'src/shared/subscriptions/constants'; import { CoreModuleDirector } from '../../../src/core/CoreModuleDirector'; import NotificationsNamespace from '../../../src/onesignal/NotificationsNamespace'; import OneSignal from '../../../src/onesignal/OneSignal'; -import { ONESIGNAL_EVENTS } from '../../../src/onesignal/OneSignalEvents'; import User from '../../../src/onesignal/User'; import UserNamespace from '../../../src/onesignal/UserNamespace'; import Context from '../../../src/page/models/Context'; @@ -23,7 +22,6 @@ declare const global: { export function initOSGlobals(config: TestEnvironmentConfig = {}) { global.OneSignal = OneSignal; - global.OneSignal.EVENTS = ONESIGNAL_EVENTS; global.OneSignal.config = TestContext.getFakeMergedConfig(config); global.OneSignal._context = new Context(global.OneSignal.config); global.OneSignal._initialized = true; diff --git a/__test__/unit/events/eventsUnique.test.ts b/__test__/unit/events/eventsUnique.test.ts deleted file mode 100644 index d7dd50845..000000000 --- a/__test__/unit/events/eventsUnique.test.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ONESIGNAL_EVENTS } from '../../../src/onesignal/OneSignalEvents'; - -test('Test uniqueness of OneSignal event names', () => { - const events = Object.values(ONESIGNAL_EVENTS); - const uniqueEvents = [...new Set(events)]; - expect(events.length).toEqual(uniqueEvents.length); -}); diff --git a/__test__/unit/push/registerForPush.test.ts b/__test__/unit/push/registerForPush.test.ts index 68978fcc7..de41ca350 100644 --- a/__test__/unit/push/registerForPush.test.ts +++ b/__test__/unit/push/registerForPush.test.ts @@ -32,7 +32,7 @@ describe('Register for push', () => { const promise = OneSignal.User.PushSubscription.optIn(); expect(spy).not.toHaveBeenCalled(); - OneSignalEvent._trigger(OneSignal.EVENTS.SDK_INITIALIZED); + OneSignalEvent._trigger('initializeInternal'); await promise; expect(OneSignal._initialized).toBe(true); expect(spy).toHaveBeenCalledTimes(1); diff --git a/src/onesignal/NotificationsNamespace.ts b/src/onesignal/NotificationsNamespace.ts index b5aa46936..2c06e4c7f 100644 --- a/src/onesignal/NotificationsNamespace.ts +++ b/src/onesignal/NotificationsNamespace.ts @@ -30,13 +30,10 @@ export default class NotificationsNamespace extends EventListenerBase { this._permission = permissionNative === 'granted'; if (typeof OneSignal !== 'undefined') { - OneSignal._emitter.on( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_STRING, - (permissionNative: NotificationPermission) => { - this._permissionNative = permissionNative; - this._permission = permissionNative === 'granted'; - }, - ); + OneSignal._emitter.on('permissionChangeAsString', (permissionNative) => { + this._permissionNative = permissionNative; + this._permission = permissionNative === 'granted'; + }); } } diff --git a/src/onesignal/OneSignal.test.ts b/src/onesignal/OneSignal.test.ts index 026141a5c..c13baeb76 100644 --- a/src/onesignal/OneSignal.test.ts +++ b/src/onesignal/OneSignal.test.ts @@ -678,7 +678,7 @@ describe('OneSignal - No Consent Required', () => { test('login then accept web push permissions - it should make two user calls', async () => { const { promise, resolve } = Promise.withResolvers(); - OneSignal._emitter.on(OneSignal.EVENTS.SUBSCRIPTION_CHANGED, resolve); + OneSignal._emitter.on('change', resolve); setGetUserResponse(); setCreateUserResponse({ onesignalId: ONESIGNAL_ID, diff --git a/src/onesignal/OneSignal.ts b/src/onesignal/OneSignal.ts index 9b3704a34..336ba91b1 100644 --- a/src/onesignal/OneSignal.ts +++ b/src/onesignal/OneSignal.ts @@ -43,14 +43,11 @@ import Emitter from '../shared/libraries/Emitter'; import Log from '../shared/libraries/Log'; import DebugNamespace from './DebugNamesapce'; import NotificationsNamespace from './NotificationsNamespace'; -import { ONESIGNAL_EVENTS } from './OneSignalEvents'; import { SessionNamespace } from './SessionNamespace'; import SlidedownNamespace from './SlidedownNamespace'; import UserNamespace from './UserNamespace'; export default class OneSignal { - static EVENTS = ONESIGNAL_EVENTS; - static _consentGiven = false; private static async _initializeCoreModuleAndOSNamespaces() { @@ -176,14 +173,11 @@ export default class OneSignal { OneSignal._initAlreadyCalled = true; OneSignal._emitter.on( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_STRING, + 'permissionChangeAsString', checkAndTriggerSubscriptionChanged, ); - OneSignal._emitter.on( - OneSignal.EVENTS.SUBSCRIPTION_CHANGED, - _onSubscriptionChanged, - ); - OneSignal._emitter.on(OneSignal.EVENTS.SDK_INITIALIZED, onSdkInitialized); + OneSignal._emitter.on('change', _onSubscriptionChanged); + OneSignal._emitter.on('initializeInternal', onSdkInitialized); window.addEventListener('focus', () => { // Checks if permission changed every time a user focuses on the page, diff --git a/src/onesignal/OneSignalEvents.ts b/src/onesignal/OneSignalEvents.ts deleted file mode 100644 index d5256bd89..000000000 --- a/src/onesignal/OneSignalEvents.ts +++ /dev/null @@ -1,62 +0,0 @@ -export const ONESIGNAL_EVENTS = { - /** - * Occurs immediately when the notification permission changes for the domain at the browser level. - * This normally happens when the user clicks "Allow" or "Block" on the native permission prompt - * on Chrome, Firefox, etc, however it also changes if the end-user clicks on the lock icon and - * manually changes it. - * Occurs BEFORE the actual push subscription is created on on the backend. - */ - NOTIFICATION_PERMISSION_CHANGED_AS_STRING: 'permissionChangeAsString', - /** - * Same as NOTIFICATION_PERMISSION_CHANGED_AS_STRING, expect a boolean and will be used to fire - * events to the public API OneSignal.Notification.addEventListener("permissionChange", function....) - */ - NOTIFICATION_PERMISSION_CHANGED_AS_BOOLEAN: 'permissionChange', - /** - * Occurs after the user is officially subscribed to push notifications. The service worker is fully registered - * and activated and the user is eligible to receive push notifications at any point after this. - */ - SUBSCRIPTION_CHANGED: 'change', - /** - * Occurs after a POST call to OneSignal's server to send the welcome notification has completed. The actual - * notification arrives shortly after. - */ - WELCOME_NOTIFICATION_SENT: 'sendWelcomeNotification', - /** - * Occurs when a notification is displayed. - */ - NOTIFICATION_WILL_DISPLAY: 'foregroundWillDisplay', - /** - * Occurs when a notification is dismissed by the user either clicking 'X' or clearing all notifications - * (available in Android). This event is NOT called if the user clicks the notification's body or any of the - * action buttons. - */ - NOTIFICATION_DISMISSED: 'dismiss', - /** - * New event replacing legacy addNotificationOpenedHandler(). Used when the notification was clicked. - */ - NOTIFICATION_CLICKED: 'click', - /** - * Occurs after the document ready event fires - */ - SDK_INITIALIZED: 'initializeInternal', - /** - * Occurs after the SDK finishes its final internal initialization. The final initialization event. - */ - SDK_INITIALIZED_PUBLIC: 'initialize', - /** - * Occurs after the user subscribes to push notifications and a new user entry is created on OneSignal's server, - * and also occurs when the user begins a new site session and the last_session and last_active is updated on - * OneSignal's server. - */ - REGISTERED: 'register', - /** - * Occurs when the native permission prompt is displayed. - */ - PERMISSION_PROMPT_DISPLAYED: 'permissionPromptDisplay', - /** - * For internal testing only. Used for all sorts of things. - */ - TEST_FINISHED_ALLOW_CLICK_HANDLING: 'testFinishedAllowClickHandling', - SESSION_STARTED: 'os.sessionStarted', -}; diff --git a/src/onesignal/PushSubscriptionNamespace.ts b/src/onesignal/PushSubscriptionNamespace.ts index 80005405e..8721481bc 100644 --- a/src/onesignal/PushSubscriptionNamespace.ts +++ b/src/onesignal/PushSubscriptionNamespace.ts @@ -12,7 +12,8 @@ import { onInternalSubscriptionSet, } from 'src/shared/listeners'; import { IDManager } from 'src/shared/managers/IDManager'; -import type { SubscriptionChangeEvent } from '../page/models/SubscriptionChangeEvent'; +import type { EventsMap } from 'src/shared/services/types'; +import type { UserSubscription } from 'src/shared/subscriptions/types'; import { EventListenerBase } from '../page/userModel/EventListenerBase'; import Log from '../shared/libraries/Log'; import { isCompleteSubscriptionObject } from '../shared/managers/utils'; @@ -56,20 +57,14 @@ export default class PushSubscriptionNamespace extends EventListenerBase { Log._error(e); }); - OneSignal._emitter.on( - OneSignal.EVENTS.SUBSCRIPTION_CHANGED, - async (change: SubscriptionChangeEvent | undefined) => { - this._id = change?.current.id; - this._token = change?.current.token; - }, - ); - - OneSignal._emitter.on( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_STRING, - async (permission: NotificationPermission) => { - this._permission = permission; - }, - ); + OneSignal._emitter.on('change', async (change) => { + this._id = change?.current.id; + this._token = change?.current.token; + }); + + OneSignal._emitter.on('permissionChangeAsString', async (permission) => { + this._permission = permission; + }); } get id(): string | null | undefined { @@ -110,14 +105,14 @@ export default class PushSubscriptionNamespace extends EventListenerBase { addEventListener( event: 'change', - listener: (change: SubscriptionChangeEvent) => void, + listener: (change: EventsMap['change']) => void, ): void { OneSignal._emitter.on(event, listener); } removeEventListener( event: 'change', - listener: (change: SubscriptionChangeEvent) => void, + listener: (change: EventsMap['change']) => void, ): void { OneSignal._emitter.off(event, listener); } diff --git a/src/onesignal/UserNamespace.ts b/src/onesignal/UserNamespace.ts index a4409bdc6..ae4a11cfc 100644 --- a/src/onesignal/UserNamespace.ts +++ b/src/onesignal/UserNamespace.ts @@ -1,3 +1,5 @@ +import type { UserEventsMap } from 'src/shared/services/types'; +import type { UserSubscription } from 'src/shared/subscriptions/types'; import type { UserChangeEvent } from '../page/models/UserChangeEvent'; import { EventListenerBase } from '../page/userModel/EventListenerBase'; import Emitter from '../shared/libraries/Emitter'; @@ -10,7 +12,7 @@ export default class UserNamespace extends EventListenerBase { readonly PushSubscription = new PushSubscriptionNamespace(false); - static _emitter = new Emitter(); + static _emitter = new Emitter(); constructor( initialize: boolean, @@ -111,7 +113,7 @@ export default class UserNamespace extends EventListenerBase { addEventListener( event: 'change', - listener: (userChange: UserChangeEvent) => void, + listener: (userChange: UserEventsMap['change']) => void, ): void { UserNamespace._emitter.on(event, listener); } diff --git a/src/page/bell/Bell.ts b/src/page/bell/Bell.ts index 108a1208d..8523edd17 100755 --- a/src/page/bell/Bell.ts +++ b/src/page/bell/Bell.ts @@ -18,7 +18,6 @@ import Log from '../../shared/libraries/Log'; import OneSignalEvent from '../../shared/services/OneSignalEvent'; import { once } from '../../shared/utils/utils'; import { DismissPrompt } from '../models/Dismiss'; -import type { SubscriptionChangeEvent } from '../models/SubscriptionChangeEvent'; import { ResourceLoadState } from '../services/DynamicResourceLoader'; import Badge from './Badge'; import Button from './Button'; @@ -26,7 +25,6 @@ import Dialog from './Dialog'; import Launcher from './Launcher'; import Message from './Message'; import { - BellEvent, BellState, type BellStateValue, MESSAGE_TIMEOUT, @@ -173,7 +171,7 @@ export default class Bell { private _installEventHooks() { // Install event hooks - OneSignal._emitter.on(BellEvent._SubscribeClick, () => { + OneSignal._emitter.on('notifyButtonSubscribeClick', () => { const subscribeButton = this._dialog._subscribeButton; if (subscribeButton) { subscribeButton.disabled = true; @@ -206,7 +204,7 @@ export default class Bell { }); }); - OneSignal._emitter.on(BellEvent._UnsubscribeClick, () => { + OneSignal._emitter.on('notifyButtonUnsubscribeClick', () => { const unsubscribeButton = this._dialog._unsubscribeButton; if (unsubscribeButton) { unsubscribeButton.disabled = true; @@ -234,7 +232,7 @@ export default class Bell { }); }); - OneSignal._emitter.on(BellEvent._Hovering, () => { + OneSignal._emitter.on('notifyButtonHovering', () => { this._hovering = true; this._launcher._activateIfInactive(); @@ -278,7 +276,7 @@ export default class Bell { }); }); - OneSignal._emitter.on(BellEvent._Hovered, () => { + OneSignal._emitter.on('notifyButtonHover', () => { // If a message is displayed (and not a tip), don't control it. Visitors have no control over messages if (this._message._contentType === MessageType._Message) { return; @@ -317,34 +315,31 @@ export default class Bell { } }); - OneSignal._emitter.on( - OneSignal.EVENTS.SUBSCRIPTION_CHANGED, - async (isSubscribed: SubscriptionChangeEvent) => { - if (isSubscribed.current.optedIn) { - if (this._badge._shown && this._options.prenotify) { - this._badge._hide(); - } - if (this._dialog._notificationIcons === null) { - const icons = await getNotificationIcons(); - this._dialog._notificationIcons = icons; - } + OneSignal._emitter.on('change', async (isSubscribed) => { + if (isSubscribed?.current.optedIn) { + if (this._badge._shown && this._options.prenotify) { + this._badge._hide(); } - - const permission = - await OneSignal._context._permissionManager._getPermissionStatus(); - let bellState: BellStateValue; - if (isSubscribed.current.optedIn) { - bellState = BellState._Subscribed; - } else if (permission === 'denied') { - bellState = BellState._Blocked; - } else { - bellState = BellState._Unsubscribed; + if (this._dialog._notificationIcons === null) { + const icons = await getNotificationIcons(); + this._dialog._notificationIcons = icons; } - this._setState(bellState, this._ignoreSubscriptionState); - }, - ); + } + + const permission = + await OneSignal._context._permissionManager._getPermissionStatus(); + let bellState: BellStateValue; + if (isSubscribed?.current.optedIn) { + bellState = BellState._Subscribed; + } else if (permission === 'denied') { + bellState = BellState._Blocked; + } else { + bellState = BellState._Unsubscribed; + } + this._setState(bellState, this._ignoreSubscriptionState); + }); - OneSignal._emitter.on(BellEvent._StateChanged, (state) => { + OneSignal._emitter.on('notifyButtonStateChange', (state) => { if (!this._launcher._element) { // Notify button doesn't exist return; @@ -359,12 +354,9 @@ export default class Bell { } }); - OneSignal._emitter.on( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_STRING, - () => { - this._updateState(); - }, - ); + OneSignal._emitter.on('permissionChangeAsString', () => { + this._updateState(); + }); } private _addDefaultClasses() { @@ -721,7 +713,7 @@ export default class Bell { const lastState = this._state; this._state = newState; if (lastState !== newState && !silent) { - OneSignalEvent._trigger(BellEvent._StateChanged, { + OneSignalEvent._trigger('notifyButtonStateChange', { from: lastState, to: newState, }); diff --git a/src/page/bell/Button.ts b/src/page/bell/Button.ts index a9bfeedde..752171d9b 100755 --- a/src/page/bell/Button.ts +++ b/src/page/bell/Button.ts @@ -8,7 +8,7 @@ import { import OneSignalEvent from 'src/shared/services/OneSignalEvent'; import AnimatedElement from './AnimatedElement'; import type Bell from './Bell'; -import { BellEvent, MESSAGE_TIMEOUT, MessageType } from './constants'; +import { MESSAGE_TIMEOUT, MessageType } from './constants'; export default class Button extends AnimatedElement { public _isHandlingClick: boolean = false; @@ -73,14 +73,14 @@ export default class Button extends AnimatedElement { limitIsEmpty(this._events.mouse) || limitGetLast(this._events.mouse) === 'out' ) { - OneSignalEvent._trigger(BellEvent._Hovering); + OneSignalEvent._trigger('notifyButtonHovering'); } limitStorePut(this._events.mouse, 'over'); } _onHovered() { limitStorePut(this._events.mouse, 'out'); - OneSignalEvent._trigger(BellEvent._Hovered); + OneSignalEvent._trigger('notifyButtonHover'); } _onTap() { @@ -99,8 +99,8 @@ export default class Button extends AnimatedElement { if (this._isHandlingClick) return; this._isHandlingClick = true; - OneSignalEvent._trigger(BellEvent._BellClick); - OneSignalEvent._trigger(BellEvent._LauncherClick); + OneSignalEvent._trigger('notifyButtonButtonClick'); + OneSignalEvent._trigger('notifyButtonLauncherClick'); try { if ( @@ -116,7 +116,7 @@ export default class Button extends AnimatedElement { // The user is actually subscribed, register him for notifications registerForPushNotifications(); this._bell._ignoreSubscriptionState = true; - OneSignal._emitter.once(OneSignal.EVENTS.SUBSCRIPTION_CHANGED, () => { + OneSignal._emitter.once('change', () => { this._bell._message ._display( MessageType._Message, diff --git a/src/page/bell/Dialog.ts b/src/page/bell/Dialog.ts index c95d04e04..a00bb492c 100755 --- a/src/page/bell/Dialog.ts +++ b/src/page/bell/Dialog.ts @@ -10,7 +10,7 @@ import { getPlatformNotificationIcon } from 'src/shared/utils/utils'; import OneSignalEvent from '../../shared/services/OneSignalEvent'; import AnimatedElement from './AnimatedElement'; import type Bell from './Bell'; -import { BellEvent, BellState } from './constants'; +import { BellState } from './constants'; const STATIC_RESOURCES_URL = new URL('https://media.onesignal.com/web-sdk'); @@ -132,12 +132,12 @@ export default class Dialog extends AnimatedElement { a notification shown in this resubscription case. */ OneSignal._doNotShowWelcomeNotification = false; - OneSignalEvent._trigger(BellEvent._SubscribeClick); + OneSignalEvent._trigger('notifyButtonSubscribeClick'); }); } if (this._unsubscribeButton) { this._unsubscribeButton.addEventListener('click', () => - OneSignalEvent._trigger(BellEvent._UnsubscribeClick), + OneSignalEvent._trigger('notifyButtonUnsubscribeClick'), ); } this._bell._setCustomColorsIfSpecified(); diff --git a/src/page/bell/constants.ts b/src/page/bell/constants.ts index 776183cd8..5d9f111a0 100644 --- a/src/page/bell/constants.ts +++ b/src/page/bell/constants.ts @@ -5,16 +5,6 @@ export const BellState = { _Blocked: 3, } as const; -export const BellEvent = { - _StateChanged: 'notifyButtonStateChange', - _LauncherClick: 'notifyButtonLauncherClick', - _BellClick: 'notifyButtonButtonClick', - _SubscribeClick: 'notifyButtonSubscribeClick', - _UnsubscribeClick: 'notifyButtonUnsubscribeClick', - _Hovering: 'notifyButtonHovering', - _Hovered: 'notifyButtonHover', -} as const; - export const MessageType = { _Tip: 'tip', // Appears on button hover, disappears on button endhover _Message: 'message', // Appears manually for a specified duration, site visitor cannot control its display. Messages override tips diff --git a/src/page/managers/PromptsManager.ts b/src/page/managers/PromptsManager.ts index f2d1583cd..cdf9226d1 100644 --- a/src/page/managers/PromptsManager.ts +++ b/src/page/managers/PromptsManager.ts @@ -24,11 +24,8 @@ import { } from 'src/shared/useragent/detect'; import { logMethodCall } from 'src/shared/utils/utils'; import { markPromptDismissedWithType } from '../../shared/helpers/dismiss'; -import Log from '../../shared/libraries/Log'; -import OneSignalEvent from '../../shared/services/OneSignalEvent'; import { DismissPrompt } from '../models/Dismiss'; import { ResourceLoadState } from '../services/DynamicResourceLoader'; -import Slidedown from '../slidedown/Slidedown'; export interface AutoPromptOptions { force?: boolean; @@ -298,20 +295,17 @@ export class PromptsManager { public _installEventHooksForSlidedown(): void { this._eventHooksInstalled = true; - OneSignal._emitter.on(Slidedown.EVENTS.SHOWN, () => { + OneSignal._emitter.on('slidedownShown', () => { this._context._slidedownManager._setIsSlidedownShowing(true); }); - OneSignal._emitter.on(Slidedown.EVENTS.CLOSED, () => { + OneSignal._emitter.on('slidedownClosed', () => { this._context._slidedownManager._setIsSlidedownShowing(false); this._context._slidedownManager._showQueued(); }); - OneSignal._emitter.on(Slidedown.EVENTS.ALLOW_CLICK, async () => { + OneSignal._emitter.on('slidedownAllowClick', async () => { await this._context._slidedownManager._handleAllowClick(); - OneSignalEvent._trigger( - OneSignal.EVENTS.TEST_FINISHED_ALLOW_CLICK_HANDLING, - ); }); - OneSignal._emitter.on(Slidedown.EVENTS.CANCEL_CLICK, () => { + OneSignal._emitter.on('slidedownCancelClick', () => { if (!this._context._slidedownManager._slidedown) { return; } diff --git a/src/page/managers/slidedownManager/SlidedownManager.ts b/src/page/managers/slidedownManager/SlidedownManager.ts index f238941df..b3329b885 100644 --- a/src/page/managers/slidedownManager/SlidedownManager.ts +++ b/src/page/managers/slidedownManager/SlidedownManager.ts @@ -269,7 +269,7 @@ export class SlidedownManager { await confirmationToast._show(); await delay(5000); confirmationToast._close(); - ConfirmationToast._triggerSlidedownEvent(ConfirmationToast.EVENTS.CLOSED); + ConfirmationToast._triggerSlidedownEvent('toastClosed'); } private async _mountAuxiliaryContainers( @@ -401,7 +401,7 @@ export class SlidedownManager { // timeout to allow slidedown close animation to finish in case another slidedown is queued await delay(1000); - Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.CLOSED); + Slidedown._triggerSlidedownEvent('slidedownClosed'); } switch (slidedownType) { @@ -433,7 +433,7 @@ export class SlidedownManager { public _enqueue(options: AutoPromptOptions): void { this._slidedownQueue.push(options); - Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.QUEUED); + Slidedown._triggerSlidedownEvent('slidedownQueued'); } public _dequeue(): AutoPromptOptions | undefined { @@ -468,8 +468,8 @@ export class SlidedownManager { this._slidedown = new Slidedown(slidedownPromptOptions); await this._slidedown._create(options.isInUpdateMode); await this._mountAuxiliaryContainers(options); - Log._debug('Showing OneSignal Slidedown'); - Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.SHOWN); + debug('Showing OneSignal Slidedown'); + Slidedown._triggerSlidedownEvent('slidedownShown'); } catch (e) { Log._error('There was an error showing the OneSignal Slidedown:', e); this._setIsSlidedownShowing(false); diff --git a/src/page/slidedown/ConfirmationToast.ts b/src/page/slidedown/ConfirmationToast.ts index fbdde72e2..06106a20b 100755 --- a/src/page/slidedown/ConfirmationToast.ts +++ b/src/page/slidedown/ConfirmationToast.ts @@ -52,10 +52,12 @@ export default class ConfirmationToast { : SLIDEDOWN_CSS_CLASSES._SlideDown, ); - ConfirmationToast._triggerSlidedownEvent(ConfirmationToast.EVENTS.SHOWN); + ConfirmationToast._triggerSlidedownEvent('toastShown'); } - static async _triggerSlidedownEvent(eventName: string): Promise { + static async _triggerSlidedownEvent( + eventName: 'toastShown' | 'toastClosed', + ): Promise { await OneSignalEvent._trigger(eventName); } @@ -86,11 +88,4 @@ export default class ConfirmationToast { get _dialog() { return getDomElementOrStub(`#${SLIDEDOWN_CSS_IDS._Dialog}`); } - - static get EVENTS() { - return { - SHOWN: 'toastShown', - CLOSED: 'toastClosed', - }; - } } diff --git a/src/page/slidedown/Slidedown.ts b/src/page/slidedown/Slidedown.ts index dcf07a567..971b7cfbf 100755 --- a/src/page/slidedown/Slidedown.ts +++ b/src/page/slidedown/Slidedown.ts @@ -160,18 +160,25 @@ export default class Slidedown { } } - static async _triggerSlidedownEvent(eventName: string): Promise { + static async _triggerSlidedownEvent( + eventName: + | 'slidedownAllowClick' + | 'slidedownCancelClick' + | 'slidedownClosed' + | 'slidedownQueued' + | 'slidedownShown', + ): Promise { await OneSignalEvent._trigger(eventName); } async _onSlidedownAllowed(_: any): Promise { - await Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.ALLOW_CLICK); + await Slidedown._triggerSlidedownEvent('slidedownAllowClick'); } _onSlidedownCanceled(_: any): void { - Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.CANCEL_CLICK); + Slidedown._triggerSlidedownEvent('slidedownCancelClick'); this._close(); - Slidedown._triggerSlidedownEvent(Slidedown.EVENTS.CLOSED); + Slidedown._triggerSlidedownEvent('slidedownClosed'); } _close(): void { @@ -338,16 +345,6 @@ export default class Slidedown { get _slidedownFooter() { return getDomElementOrStub(`#${SLIDEDOWN_CSS_IDS._Footer}`); } - - static get EVENTS() { - return { - ALLOW_CLICK: 'slidedownAllowClick', - CANCEL_CLICK: 'slidedownCancelClick', - SHOWN: 'slidedownShown', - CLOSED: 'slidedownClosed', - QUEUED: 'slidedownQueued', - }; - } } export function manageNotifyButtonStateWhileSlidedownShows(): void { @@ -361,7 +358,7 @@ export function manageNotifyButtonStateWhileSlidedownShows(): void { OneSignal._notifyButton?._launcher?._hide(); }); } - OneSignal._emitter.once(Slidedown.EVENTS.CLOSED, () => { + OneSignal._emitter.once('slidedownClosed', () => { if (OneSignal._notifyButton && OneSignal._notifyButton._options.enable) { OneSignal._notifyButton._launcher._show(); } diff --git a/src/shared/helpers/init.test.ts b/src/shared/helpers/init.test.ts index 38c75260e..2b55ee345 100644 --- a/src/shared/helpers/init.test.ts +++ b/src/shared/helpers/init.test.ts @@ -22,7 +22,7 @@ afterEach(() => { /** onSdkInitialized */ test('onSdkInitialized: ensure public sdk initialized triggered', async () => { - OneSignal._emitter.on(OneSignal.EVENTS.SDK_INITIALIZED_PUBLIC, () => { + OneSignal._emitter.on('initialize', () => { expect(true).toBe(true); }); await InitHelper.onSdkInitialized(); diff --git a/src/shared/helpers/init.ts b/src/shared/helpers/init.ts index d5988f43f..9367fa001 100755 --- a/src/shared/helpers/init.ts +++ b/src/shared/helpers/init.ts @@ -24,7 +24,7 @@ export async function internalInit() { const sessionManager = OneSignal._context._sessionManager; OneSignal._emitter.on( - OneSignal.EVENTS.SESSION_STARTED, + 'os.sessionStarted', sessionManager._sendOnSessionUpdateFromPage.bind(sessionManager), ); incrementPageViewCount(); @@ -92,7 +92,7 @@ async function sessionInit(): Promise { } OneSignal._sessionInitAlreadyRunning = false; - await OneSignalEvent._trigger(OneSignal.EVENTS.SDK_INITIALIZED); + await OneSignalEvent._trigger('initializeInternal'); } export async function registerForPushNotifications(): Promise { @@ -127,7 +127,7 @@ export async function onSdkInitialized() { await OneSignal._context._updateManager._sendOnSessionUpdate(); } - await OneSignalEvent._trigger(OneSignal.EVENTS.SDK_INITIALIZED_PUBLIC); + await OneSignalEvent._trigger('initialize'); } /** Helper methods */ @@ -233,7 +233,7 @@ async function showNotifyButton() { const displayPredicate = OneSignal.config!.userConfig.notifyButton!.displayPredicate; if (displayPredicate && typeof displayPredicate === 'function') { - OneSignal._emitter.once(OneSignal.EVENTS.SDK_INITIALIZED, async () => { + OneSignal._emitter.once('initializeInternal', async () => { const predicateValue = await Promise.resolve( OneSignal.config!.userConfig.notifyButton!.displayPredicate?.(), ); diff --git a/src/shared/helpers/permission.test.ts b/src/shared/helpers/permission.test.ts index baad85ef3..d311908b7 100644 --- a/src/shared/helpers/permission.test.ts +++ b/src/shared/helpers/permission.test.ts @@ -68,7 +68,7 @@ test('Should update Notification.permission in time', async () => { // simulating delay permission change event to fire after permission boolean change event const originalEmit = OneSignal._emitter._emit.bind(OneSignal._emitter); vi.spyOn(OneSignal._emitter, '_emit').mockImplementation( - async (...args: any[]) => { + async (...args: Parameters) => { if (args[0] === 'permissionChangeAsString') await delay(100); return originalEmit(...args); }, diff --git a/src/shared/helpers/permissions.ts b/src/shared/helpers/permissions.ts index 512c6302c..e2f5623b5 100644 --- a/src/shared/helpers/permissions.ts +++ b/src/shared/helpers/permissions.ts @@ -38,10 +38,7 @@ const privateTriggerNotificationPermissionChanged = async (force: boolean) => { value: newPermission, }); - await OneSignalEvent._trigger( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_STRING, - newPermission, - ); + await OneSignalEvent._trigger('permissionChangeAsString', newPermission); triggerBooleanPermissionChangeEvent(previousPermission, newPermission, force); }; @@ -55,8 +52,5 @@ const triggerBooleanPermissionChangeEvent = ( const triggerEvent = newPermission !== previousPermission || force; if (!triggerEvent) return; - OneSignalEvent._trigger( - OneSignal.EVENTS.NOTIFICATION_PERMISSION_CHANGED_AS_BOOLEAN, - newPermissionBoolean, - ); + OneSignalEvent._trigger('permissionChange', newPermissionBoolean); }; diff --git a/src/shared/libraries/Emitter.ts b/src/shared/libraries/Emitter.ts index aa97fa4df..dc3057fd7 100644 --- a/src/shared/libraries/Emitter.ts +++ b/src/shared/libraries/Emitter.ts @@ -2,15 +2,13 @@ * Source: https://github.com/pazguille/emitter-es6 */ +import type { EventsMap } from '../services/types'; + export type EventHandler = (...args: any[]) => any; export type OnceEventHandler = { listener: EventHandler; }; -interface ListenerMap { - [index: string]: (EventHandler | OnceEventHandler)[]; -} - /** * Creates a new instance of Emitter. * @class @@ -18,8 +16,9 @@ interface ListenerMap { * @example * var emitter = new Emitter(); */ -export default class Emitter { - private _events: ListenerMap; +export default class Emitter { + private _events: { [K in keyof TEventsMap]?: ((...args: any[]) => void)[] } = + {}; constructor() { this._events = {}; @@ -28,9 +27,12 @@ export default class Emitter { /** * Adds a listener to the collection for a specified event. */ - public on(event: string, listener: EventHandler): Emitter { - this._events[event] = this._events[event] || []; - this._events[event].push(listener); + public on( + eventName: K, + listener: (data: TEventsMap[K]) => void, + ): Emitter { + this._events[eventName] = this._events[eventName] || []; + this._events[eventName].push(listener); return this; } @@ -38,11 +40,14 @@ export default class Emitter { * Adds a one time listener to the collection for a specified event. It will * execute only once. */ - public once(event: string, listener: EventHandler): Emitter { + public once( + event: K, + listener: (data: TEventsMap[K]) => void, + ): Emitter { // eslint-disable-next-line @typescript-eslint/no-this-alias const that = this; - function fn(this: EventHandler) { + function fn(this: Emitter) { that.off(event, fn); // @ts-expect-error - arguments is not typed listener.apply(this, arguments); @@ -57,14 +62,18 @@ export default class Emitter { /** * Removes a listener from the collection for a specified event. */ - public off(event: string, listener: EventHandler): Emitter { + public off( + event: K, + listener: (data: TEventsMap[K]) => void, + ): Emitter { const listeners = this._events[event]; if (listeners !== undefined) { for (let j = 0; j < listeners.length; j += 1) { if ( listeners[j] === listener || - (listeners[j] as OnceEventHandler).listener === listener + (listeners[j] as unknown as { listener: (...args: any[]) => void }) + .listener === listener ) { listeners.splice(j, 1); break; @@ -80,7 +89,7 @@ export default class Emitter { /** * Removes all listeners from the collection for a specified event. */ - public _removeAllListeners(event?: string): Emitter { + public _removeAllListeners(event?: keyof TEventsMap): Emitter { if (event) delete this._events[event]; else this._events = {}; @@ -98,8 +107,8 @@ export default class Emitter { * me.listeners('ready'); */ public _listeners( - event: string, - ): (EventHandler | OnceEventHandler)[] | undefined { + event: keyof TEventsMap, + ): ((...args: any[]) => void)[] | undefined { try { return this._events[event]; } catch (e) { @@ -117,7 +126,7 @@ export default class Emitter { * @example * me.numberOfListeners('ready'); */ - public _numberOfListeners(event: string): number { + public _numberOfListeners(event: keyof TEventsMap): number { const listeners = this._listeners(event); if (listeners) return listeners.length; return 0; @@ -128,9 +137,11 @@ export default class Emitter { * @param event - String of the event name * @param args - Variable number of args to pass to the functions subscribe to the event */ - public async _emit(...args: any[]): Promise { + public async _emit( + ...args: [K, TEventsMap[K] | undefined] | [K] + ): Promise> { const event = args.shift(); - let listeners = this._events[event]; + let listeners = this._events[event as K]; if (listeners !== undefined) { listeners = listeners.slice(0); diff --git a/src/shared/listeners.ts b/src/shared/listeners.ts index 7016bcccb..1ce3fe62d 100644 --- a/src/shared/listeners.ts +++ b/src/shared/listeners.ts @@ -1,6 +1,7 @@ import UserNamespace from 'src/onesignal/UserNamespace'; import type { SubscriptionChangeEvent } from 'src/page/models/SubscriptionChangeEvent'; import type { UserChangeEvent } from 'src/page/models/UserChangeEvent'; +import { debug, info } from 'src/shared/libraries/log'; import { db, getOptionsValue } from './database/client'; import { getAppState, setAppState } from './database/config'; import { decodeHtmlEntities } from './helpers/dom'; @@ -75,7 +76,7 @@ export async function checkAndTriggerSubscriptionChanged() { } function triggerSubscriptionChanged(change: SubscriptionChangeEvent) { - OneSignalEvent._trigger(OneSignal.EVENTS.SUBSCRIPTION_CHANGED, change); + OneSignalEvent._trigger('change', change); } export function triggerNotificationClick( @@ -85,10 +86,7 @@ export function triggerNotificationClick( notification: event.notification, result: event.result, }; - return OneSignalEvent._trigger( - OneSignal.EVENTS.NOTIFICATION_CLICKED, - publicEvent, - ); + return OneSignalEvent._trigger('click', publicEvent); } const getUserState = async (): Promise => { @@ -148,11 +146,7 @@ export async function checkAndTriggerUserChanged() { } function triggerUserChanged(change: UserChangeEvent) { - OneSignalEvent._trigger( - OneSignal.EVENTS.SUBSCRIPTION_CHANGED, - change, - UserNamespace._emitter, - ); + UserNamespace._emitter._emit('change', change); } async function onSubscriptionChanged_evaluateNotifyButtonDisplayPredicate() { @@ -167,14 +161,10 @@ async function onSubscriptionChanged_evaluateNotifyButtonDisplayPredicate() { ) { const predicateResult = await displayPredicate(); if (predicateResult !== false) { - Log._debug( - 'Showing notify button because display predicate returned true.', - ); + debug('Showing notify button because display predicate returned true.'); OneSignal._notifyButton._launcher._show(); } else { - Log._debug( - 'Hiding notify button because display predicate returned false.', - ); + debug('Hiding notify button because display predicate returned false.'); OneSignal._notifyButton._launcher._hide(); } } @@ -253,7 +243,7 @@ async function onSubscriptionChanged_showWelcomeNotification( { __isOneSignalWelcomeNotification: true }, undefined, ); - OneSignalEvent._trigger(OneSignal.EVENTS.WELCOME_NOTIFICATION_SENT, { + OneSignalEvent._trigger('sendWelcomeNotification', { title: title, message: message, url: url, diff --git a/src/shared/managers/ServiceWorkerManager.ts b/src/shared/managers/ServiceWorkerManager.ts index dd989630a..2b171e5a4 100644 --- a/src/shared/managers/ServiceWorkerManager.ts +++ b/src/shared/managers/ServiceWorkerManager.ts @@ -272,10 +272,7 @@ export class ServiceWorkerManager { throw new Error('Browser does not support preventing display.'); }, }; - await OneSignalEvent._trigger( - OneSignal.EVENTS.NOTIFICATION_WILL_DISPLAY, - publicEvent, - ); + await OneSignalEvent._trigger('foregroundWillDisplay', publicEvent); }, ); @@ -283,9 +280,7 @@ export class ServiceWorkerManager { WorkerMessengerCommand._NotificationClicked, async (event: NotificationClickEventInternal) => { const clickedListenerCallbackCount = - OneSignal._emitter._numberOfListeners( - OneSignal.EVENTS.NOTIFICATION_CLICKED, - ); + OneSignal._emitter._numberOfListeners('click'); if (clickedListenerCallbackCount === 0) { /* @@ -317,10 +312,7 @@ export class ServiceWorkerManager { workerMessenger._on( WorkerMessengerCommand._NotificationDismissed, async (data) => { - await OneSignalEvent._trigger( - OneSignal.EVENTS.NOTIFICATION_DISMISSED, - data, - ); + await OneSignalEvent._trigger('dismiss', data); }, ); diff --git a/src/shared/managers/sessionManager/SessionManager.ts b/src/shared/managers/sessionManager/SessionManager.ts index 5b53330f2..7dbc61362 100644 --- a/src/shared/managers/sessionManager/SessionManager.ts +++ b/src/shared/managers/sessionManager/SessionManager.ts @@ -289,7 +289,7 @@ export class SessionManager implements ISessionManager { this._setupSessionEventListeners(); } else { this._onSessionSent = sessionOrigin === SessionOrigin._UserCreate; - OneSignal._emitter._emit(OneSignal.EVENTS.SESSION_STARTED); + OneSignal._emitter._emit('os.sessionStarted'); } } diff --git a/src/shared/managers/subscription/base.ts b/src/shared/managers/subscription/base.ts index 2d8d37590..cfc769018 100644 --- a/src/shared/managers/subscription/base.ts +++ b/src/shared/managers/subscription/base.ts @@ -106,7 +106,7 @@ export class SubscriptionManagerBase< await setSubscription(subscription); if (!IS_SERVICE_WORKER) { - OneSignalEvent._trigger(OneSignal.EVENTS.REGISTERED); + OneSignalEvent._trigger('register'); } if (typeof OneSignal !== 'undefined') { diff --git a/src/shared/managers/subscription/page.ts b/src/shared/managers/subscription/page.ts index 3b6b1c698..1b793ce35 100644 --- a/src/shared/managers/subscription/page.ts +++ b/src/shared/managers/subscription/page.ts @@ -307,7 +307,7 @@ export class SubscriptionManagerPage extends SubscriptionManagerBase( + eventName: T, + data?: EventsMap[T], + ) { if (!containsMatch(SILENT_EVENTS, eventName)) { const displayData = data; @@ -31,15 +33,12 @@ export default class OneSignalEvent { // Fire internal event to those listening via OneSignal.emitter.on() if (!IS_SERVICE_WORKER) { - if (eventName === OneSignal.EVENTS.SDK_INITIALIZED) { + if (eventName === 'initializeInternal') { if (OneSignal._initialized) return; else OneSignal._initialized = true; } - if (emitter) { - await emitter._emit(eventName, data); - } else { - await OneSignal._emitter._emit(eventName, data); - } + + await OneSignal._emitter._emit(eventName, data); } } } diff --git a/src/shared/services/types.ts b/src/shared/services/types.ts new file mode 100644 index 000000000..bae4201ab --- /dev/null +++ b/src/shared/services/types.ts @@ -0,0 +1,127 @@ +import type { BellStateValue } from 'src/page/bell/constants'; +import type { SubscriptionChangeEvent } from 'src/page/models/SubscriptionChangeEvent'; +import type { UserChangeEvent } from 'src/page/models/UserChangeEvent'; +import type Emitter from '../libraries/Emitter'; +import type { + NotificationClickEvent, + NotificationDismissEvent, + NotificationForegroundWillDisplayEvent, +} from '../notifications/types'; + +export type EventsMap = { + /** + * Occurs after the user is officially subscribed to push notifications. The service worker is fully registered + * and activated and the user is eligible to receive push notifications at any point after this. + */ + change: SubscriptionChangeEvent | undefined; + + /** + * New event replacing legacy addNotificationOpenedHandler(). Used when the notification was clicked. + */ + click: NotificationClickEvent; + + /** + * Occurs when a notification is dismissed by the user either clicking 'X' or clearing all notifications + * (available in Android). This event is NOT called if the user clicks the notification's body or any of the + * action buttons. + */ + dismiss: NotificationDismissEvent; + + /** + * Occurs when a notification is displayed. + */ + foregroundWillDisplay: NotificationForegroundWillDisplayEvent; + + /** + * Occurs after the SDK finishes its final internal initialization. The final initialization event. + */ + initialize: void; + + /** + * Occurs after the document ready event fires + */ + initializeInternal: void; + + notifyButtonButtonClick: void; + notifyButtonHover: void; + notifyButtonHovering: void; + notifyButtonLauncherClick: void; + notifyButtonStateChange: { from: BellStateValue; to: BellStateValue }; + notifyButtonSubscribeClick: void; + notifyButtonUnsubscribeClick: void; + 'os.sessionStarted': void; + + /** + * Same as permissionChangeAsString, expect a boolean and will be used to fire + * events to the public API OneSignal.Notification.addEventListener("permissionChange", function....) + */ + permissionChange: boolean; + + /** + * Occurs immediately when the notification permission changes for the domain at the browser level. + * This normally happens when the user clicks "Allow" or "Block" on the native permission prompt + * on Chrome, Firefox, etc, however it also changes if the end-user clicks on the lock icon and + * manually changes it. + * Occurs BEFORE the actual push subscription is created on on the backend. + */ + permissionChangeAsString: NotificationPermission; + + /** + * Occurs when the native permission prompt is displayed. + */ + permissionPromptDisplay: void; + + /** + * Occurs after the user subscribes to push notifications and a new user entry is created on OneSignal's server, + * and also occurs when the user begins a new site session and the last_session and last_active is updated on + * OneSignal's server. + */ + register: void; + + /** + * Occurs after a POST call to OneSignal's server to send the welcome notification has completed. The actual + * notification arrives shortly after. + */ + sendWelcomeNotification: { + title: string; + message: string; + url: string; + }; + + slidedownAllowClick: void; + slidedownCancelClick: void; + slidedownClosed: void; + slidedownQueued: void; + slidedownShown: boolean; + toastShown: void; + toastClosed: void; +}; + +export type NotificationEventsMap = Pick< + EventsMap, + | 'click' + | 'foregroundWillDisplay' + | 'dismiss' + | 'permissionChange' + | 'permissionPromptDisplay' +>; + +export type PushSubscriptionEventsMap = { + change: SubscriptionChangeEvent | undefined; +}; + +export type SlidedownEventsMap = Pick; + +export type UserEventsMap = { + change: UserChangeEvent; +}; + +export type EventTriggerArgs = + | ['change', UserChangeEvent, Emitter] + | { + [K in keyof EventsMap]: [K, EventsMap[K], Emitter?] | [K]; + }[keyof EventsMap]; + +export type EventListenerArgs = { + [K in keyof EventsMap]: [K, (data: EventsMap[K]) => void]; +}[keyof EventsMap]; diff --git a/src/shared/utils/utils.ts b/src/shared/utils/utils.ts index a392ae83a..eb1823da4 100755 --- a/src/shared/utils/utils.ts +++ b/src/shared/utils/utils.ts @@ -11,7 +11,7 @@ import { getBrowserName } from '../useragent/detect'; export async function awaitOneSignalInitAndSupported(): Promise { return new Promise((resolve) => { if (!OneSignal._initialized) - OneSignal._emitter.once(OneSignal.EVENTS.SDK_INITIALIZED, resolve); + OneSignal._emitter.once('initializeInternal', resolve); else resolve(); }); } From 34747dd650330a1e2920b0c9c0991acf103b7297 Mon Sep 17 00:00:00 2001 From: Fadi George Date: Fri, 24 Oct 2025 11:04:01 -0700 Subject: [PATCH 2/2] clean up code --- package.json | 2 +- src/onesignal/PushSubscriptionNamespace.ts | 1 - src/onesignal/UserNamespace.ts | 1 - src/page/managers/PromptsManager.ts | 1 + .../slidedownManager/SlidedownManager.ts | 2 +- src/shared/listeners.ts | 9 +++++--- src/shared/services/OneSignalEvent.ts | 2 +- src/shared/services/types.ts | 22 ------------------- 8 files changed, 10 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index b00e8f78e..498a9a594 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ }, { "path": "./build/releases/OneSignalSDK.page.es6.js", - "limit": "46.23 kB", + "limit": "45.63 kB", "gzip": true }, { diff --git a/src/onesignal/PushSubscriptionNamespace.ts b/src/onesignal/PushSubscriptionNamespace.ts index 8721481bc..a82459994 100644 --- a/src/onesignal/PushSubscriptionNamespace.ts +++ b/src/onesignal/PushSubscriptionNamespace.ts @@ -13,7 +13,6 @@ import { } from 'src/shared/listeners'; import { IDManager } from 'src/shared/managers/IDManager'; import type { EventsMap } from 'src/shared/services/types'; -import type { UserSubscription } from 'src/shared/subscriptions/types'; import { EventListenerBase } from '../page/userModel/EventListenerBase'; import Log from '../shared/libraries/Log'; import { isCompleteSubscriptionObject } from '../shared/managers/utils'; diff --git a/src/onesignal/UserNamespace.ts b/src/onesignal/UserNamespace.ts index ae4a11cfc..2145f5c8d 100644 --- a/src/onesignal/UserNamespace.ts +++ b/src/onesignal/UserNamespace.ts @@ -1,5 +1,4 @@ import type { UserEventsMap } from 'src/shared/services/types'; -import type { UserSubscription } from 'src/shared/subscriptions/types'; import type { UserChangeEvent } from '../page/models/UserChangeEvent'; import { EventListenerBase } from '../page/userModel/EventListenerBase'; import Emitter from '../shared/libraries/Emitter'; diff --git a/src/page/managers/PromptsManager.ts b/src/page/managers/PromptsManager.ts index cdf9226d1..82478c0e7 100644 --- a/src/page/managers/PromptsManager.ts +++ b/src/page/managers/PromptsManager.ts @@ -2,6 +2,7 @@ import type { ContextInterface } from 'src/shared/context/types'; import { delay } from 'src/shared/helpers/general'; import { registerForPushNotifications } from 'src/shared/helpers/init'; import { getLocalPageViewCount } from 'src/shared/helpers/localStorage'; +import Log from 'src/shared/libraries/Log'; import { CONFIG_DEFAULTS_SLIDEDOWN_OPTIONS, DelayedPromptType, diff --git a/src/page/managers/slidedownManager/SlidedownManager.ts b/src/page/managers/slidedownManager/SlidedownManager.ts index b3329b885..617f4c337 100644 --- a/src/page/managers/slidedownManager/SlidedownManager.ts +++ b/src/page/managers/slidedownManager/SlidedownManager.ts @@ -468,7 +468,7 @@ export class SlidedownManager { this._slidedown = new Slidedown(slidedownPromptOptions); await this._slidedown._create(options.isInUpdateMode); await this._mountAuxiliaryContainers(options); - debug('Showing OneSignal Slidedown'); + Log._debug('Showing OneSignal Slidedown'); Slidedown._triggerSlidedownEvent('slidedownShown'); } catch (e) { Log._error('There was an error showing the OneSignal Slidedown:', e); diff --git a/src/shared/listeners.ts b/src/shared/listeners.ts index 1ce3fe62d..f94c66259 100644 --- a/src/shared/listeners.ts +++ b/src/shared/listeners.ts @@ -1,7 +1,6 @@ import UserNamespace from 'src/onesignal/UserNamespace'; import type { SubscriptionChangeEvent } from 'src/page/models/SubscriptionChangeEvent'; import type { UserChangeEvent } from 'src/page/models/UserChangeEvent'; -import { debug, info } from 'src/shared/libraries/log'; import { db, getOptionsValue } from './database/client'; import { getAppState, setAppState } from './database/config'; import { decodeHtmlEntities } from './helpers/dom'; @@ -161,10 +160,14 @@ async function onSubscriptionChanged_evaluateNotifyButtonDisplayPredicate() { ) { const predicateResult = await displayPredicate(); if (predicateResult !== false) { - debug('Showing notify button because display predicate returned true.'); + Log._debug( + 'Showing notify button because display predicate returned true.', + ); OneSignal._notifyButton._launcher._show(); } else { - debug('Hiding notify button because display predicate returned false.'); + Log._debug( + 'Hiding notify button because display predicate returned false.', + ); OneSignal._notifyButton._launcher._hide(); } } diff --git a/src/shared/services/OneSignalEvent.ts b/src/shared/services/OneSignalEvent.ts index 31617b4e9..458f1e7de 100755 --- a/src/shared/services/OneSignalEvent.ts +++ b/src/shared/services/OneSignalEvent.ts @@ -1,6 +1,6 @@ -import { debug } from 'src/shared/libraries/log'; import { containsMatch } from '../context/helpers'; import { windowEnvString } from '../environment/detect'; +import Log from '../libraries/Log'; import { IS_SERVICE_WORKER } from '../utils/env'; import type { EventsMap } from './types'; diff --git a/src/shared/services/types.ts b/src/shared/services/types.ts index bae4201ab..09f00f28c 100644 --- a/src/shared/services/types.ts +++ b/src/shared/services/types.ts @@ -1,7 +1,6 @@ import type { BellStateValue } from 'src/page/bell/constants'; import type { SubscriptionChangeEvent } from 'src/page/models/SubscriptionChangeEvent'; import type { UserChangeEvent } from 'src/page/models/UserChangeEvent'; -import type Emitter from '../libraries/Emitter'; import type { NotificationClickEvent, NotificationDismissEvent, @@ -97,31 +96,10 @@ export type EventsMap = { toastClosed: void; }; -export type NotificationEventsMap = Pick< - EventsMap, - | 'click' - | 'foregroundWillDisplay' - | 'dismiss' - | 'permissionChange' - | 'permissionPromptDisplay' ->; - -export type PushSubscriptionEventsMap = { - change: SubscriptionChangeEvent | undefined; -}; - -export type SlidedownEventsMap = Pick; - export type UserEventsMap = { change: UserChangeEvent; }; -export type EventTriggerArgs = - | ['change', UserChangeEvent, Emitter] - | { - [K in keyof EventsMap]: [K, EventsMap[K], Emitter?] | [K]; - }[keyof EventsMap]; - export type EventListenerArgs = { [K in keyof EventsMap]: [K, (data: EventsMap[K]) => void]; }[keyof EventsMap];