diff --git a/index.html b/index.html index 50e62d45a..4521dd8fe 100644 --- a/index.html +++ b/index.html @@ -16,6 +16,16 @@ OneSignalDeferred.push(async function (OneSignal) { await OneSignal.init({ appId, + // promptOptions: { + // slidedown: { + // prompts: [ + // { + // type: 'email', + // // autoPrompt: false, + // }, + // ], + // }, + // }, }); }); diff --git a/package.json b/package.json index bf9d312f3..a17bf7fa2 100644 --- a/package.json +++ b/package.json @@ -81,12 +81,12 @@ }, { "path": "./build/releases/OneSignalSDK.page.es6.js", - "limit": "54.81 kB", + "limit": "54.812 kB", "gzip": true }, { "path": "./build/releases/OneSignalSDK.sw.js", - "limit": "15.34 kB", + "limit": "15.29 kB", "gzip": true }, { diff --git a/src/entries/worker.ts b/src/entries/worker.ts index a34b3eada..ab507e1ad 100644 --- a/src/entries/worker.ts +++ b/src/entries/worker.ts @@ -3,4 +3,5 @@ */ import { OneSignalServiceWorker } from '../sw/serviceWorker/ServiceWorker'; +// Expose this class to the global scope (self as any).OneSignal = OneSignalServiceWorker; diff --git a/src/global.d.ts b/src/global.d.ts index dab5fe95a..571fe300f 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -34,18 +34,27 @@ declare global { safari?: { pushNotification?: SafariRemoteNotification; }; - intlTelInput: (( + intlTelInputUtils: { + numberFormat: { + E164: string; + }; + }; + intlTelInput: ( element: Element, options: { autoPlaceholder: string; separateDialCode: boolean; }, - ) => void) & { - utils: { - numberFormat: { - E164: string; - }; - }; + ) => { + isValidNumber: () => boolean; + getNumber: (format: string) => string; }; } + + interface WorkerGlobalScope { + OneSignal: _OneSignal; + OneSignalWorker: typeof import('./sw/serviceWorker/ServiceWorker').OneSignalServiceWorker; + workerMessenger: import('./sw/serviceWorker/WorkerMessengerSW').WorkerMessengerSW; + shouldLog: boolean; + } } diff --git a/src/page/slidedown/ChannelCaptureContainer.ts b/src/page/slidedown/ChannelCaptureContainer.ts index 2191ee8e4..8aba0e3b0 100644 --- a/src/page/slidedown/ChannelCaptureContainer.ts +++ b/src/page/slidedown/ChannelCaptureContainer.ts @@ -34,7 +34,7 @@ export default class ChannelCaptureContainer { public smsInputFieldIsValid = true; public emailInputFieldIsValid = true; private promptOptions: SlidedownPromptOptions; - private itiOneSignal: any; // iti library initialization return obj + private itiOneSignal: ReturnType | undefined; constructor(promptOptions: SlidedownPromptOptions) { this.promptOptions = promptOptions; @@ -207,7 +207,7 @@ export default class ChannelCaptureContainer { smsInput.addEventListener('keyup', (event) => { this.smsInputFieldIsValid = - this.itiOneSignal.isValidNumber() || + this.itiOneSignal?.isValidNumber() || (smsInput as HTMLInputElement)?.value === ''; // @ts-expect-error - TODO: improve type @@ -222,7 +222,7 @@ export default class ChannelCaptureContainer { // handles case where number is typed, then country is changed after smsInput.addEventListener('blur', () => { this.smsInputFieldIsValid = - this.itiOneSignal.isValidNumber() || + this.itiOneSignal?.isValidNumber() || (smsInput as HTMLInputElement)?.value === ''; this.updateValidationOnSmsInputChange(); @@ -369,8 +369,8 @@ export default class ChannelCaptureContainer { getValueFromSmsInput(): string { return ( - this.itiOneSignal.getNumber( - window.intlTelInput.utils.numberFormat.E164, + this.itiOneSignal?.getNumber( + window.intlTelInputUtils.numberFormat.E164, ) || '' ); } diff --git a/src/shared/context/types.ts b/src/shared/context/types.ts index 84d49f4b9..7d0a0c8c1 100644 --- a/src/shared/context/types.ts +++ b/src/shared/context/types.ts @@ -17,7 +17,6 @@ export type RecursivePartial = { export interface ContextBase { appConfig: AppConfig; - sessionManager: ISessionManager; } export interface ContextSWInterface extends ContextBase { @@ -30,6 +29,7 @@ export interface ContextInterface extends ContextBase { permissionManager: PermissionManager; serviceWorkerManager: ServiceWorkerManager; slidedownManager: ISlidedownManager; + sessionManager: ISessionManager; subscriptionManager: SubscriptionManagerPage; tagManager: ITagManager; updateManager: UpdateManager; diff --git a/src/shared/libraries/Log.ts b/src/shared/libraries/Log.ts index a82ea2c5d..cbb9fb8c1 100644 --- a/src/shared/libraries/Log.ts +++ b/src/shared/libraries/Log.ts @@ -2,7 +2,8 @@ import { IS_SERVICE_WORKER, LOGGING } from '../utils/EnvVariables'; export default class Log { private static shouldLog(): boolean { - if (IS_SERVICE_WORKER) return !!(self as any).shouldLog; + if (IS_SERVICE_WORKER) + return !!(self as unknown as ServiceWorkerGlobalScope).shouldLog; try { /* LocalStorage may not be accessible on browser profiles that restrict 3rd party cookies */ const level = window.localStorage.getItem('loglevel'); diff --git a/src/shared/managers/subscription/base.ts b/src/shared/managers/subscription/base.ts index 148cd7477..c891e79c5 100644 --- a/src/shared/managers/subscription/base.ts +++ b/src/shared/managers/subscription/base.ts @@ -82,7 +82,9 @@ export class SubscriptionManagerBase< if ('updateManager' in this.context) { await this.context.updateManager.sendPushDeviceRecordUpdate(); } - } else { + + // NOTE: We only have sessionManager in the page context, should sw upsert do anything? + } else if ('sessionManager' in this.context) { this.context.sessionManager.upsertSession(SessionOrigin.UserCreate); } diff --git a/src/shared/models/ContextSW.ts b/src/shared/models/ContextSW.ts index 39fe60b03..40b67eefa 100644 --- a/src/shared/models/ContextSW.ts +++ b/src/shared/models/ContextSW.ts @@ -1,21 +1,17 @@ -import { SessionManager } from '../../sw/managers/sessionManager/SessionManager'; import type { AppConfig } from '../config/types'; import type { ContextSWInterface } from '../context/types'; import { getSubscriptionManagerSW } from '../helpers/context'; import { WorkerMessengerSW } from '../libraries/workerMessenger/sw'; -import type { ISessionManager } from '../managers/sessionManager/types'; import { SubscriptionManagerSW } from '../managers/subscription/sw'; export default class ContextSW implements ContextSWInterface { public appConfig: AppConfig; public subscriptionManager: SubscriptionManagerSW; - public sessionManager: ISessionManager; public workerMessenger: WorkerMessengerSW; constructor(appConfig: AppConfig) { this.appConfig = appConfig; this.subscriptionManager = getSubscriptionManagerSW(this); - this.sessionManager = new SessionManager(); this.workerMessenger = new WorkerMessengerSW(this); } } diff --git a/src/sw/managers/sessionManager/SessionManager.ts b/src/sw/managers/sessionManager/SessionManager.ts deleted file mode 100644 index 88ed16f6a..000000000 --- a/src/sw/managers/sessionManager/SessionManager.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { SessionOriginValue } from 'src/shared/session/types'; -import type { ISessionManager } from '../../../shared/managers/sessionManager/types'; - -export class SessionManager implements ISessionManager { - async upsertSession(_sessionOrigin: SessionOriginValue): Promise { - // TODO: how should it be implemented if called from inside of service worker? - } - - async setupSessionEventListeners(): Promise { - // TO DO - } - - async sendOnSessionUpdateFromPage(): Promise { - // TODO: how should it be implemented if called from inside of service worker? - } -} diff --git a/src/sw/serviceWorker/ServiceWorker.ts b/src/sw/serviceWorker/ServiceWorker.ts index 926a8e203..a4a8219d7 100755 --- a/src/sw/serviceWorker/ServiceWorker.ts +++ b/src/sw/serviceWorker/ServiceWorker.ts @@ -91,10 +91,10 @@ export class OneSignalServiceWorker { * service worker to close all active notifications. */ static get workerMessenger(): WorkerMessengerSW { - if (!(self as any).workerMessenger) { - (self as any).workerMessenger = new WorkerMessengerSW(undefined); + if (!self.workerMessenger) { + self.workerMessenger = new WorkerMessengerSW(undefined); } - return (self as any).workerMessenger; + return self.workerMessenger; } /** @@ -1180,6 +1180,5 @@ export class OneSignalServiceWorker { } } -// Expose this class to the global scope -(self as any).OneSignalWorker = OneSignalServiceWorker; +self.OneSignalWorker = OneSignalServiceWorker; OneSignalServiceWorker.run();