UNPKG

react-onesignal

Version:

React OneSignal Module: Make it easy to integrate OneSignal with your React App!

1 lines 46 kB
{"version":3,"file":"index.cjs","sources":["../index.ts"],"sourcesContent":["const ONESIGNAL_SDK_ID = 'onesignal-sdk';\nconst ONE_SIGNAL_SCRIPT_SRC =\n 'https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js';\n\n// true if the script is successfully loaded from CDN.\nlet isOneSignalInitialized = false;\n// true if the script fails to load from CDN. A separate flag is necessary\n// to disambiguate between a CDN load failure and a delayed call to\n// OneSignal#init.\nlet isOneSignalScriptFailed = false;\n\nif (typeof window !== 'undefined') {\n window.OneSignalDeferred = window.OneSignalDeferred || [];\n addSDKScript();\n}\n\ndeclare global {\n interface Window {\n OneSignalDeferred?: OneSignalDeferredLoadedCallback[];\n OneSignal?: IOneSignalOneSignal;\n safari?: {\n pushNotification: any;\n };\n }\n}\n\n/* H E L P E R S */\n\nfunction handleOnError() {\n isOneSignalScriptFailed = true;\n}\n\nfunction addSDKScript() {\n const script = document.createElement('script');\n script.id = ONESIGNAL_SDK_ID;\n script.defer = true;\n script.src = ONE_SIGNAL_SCRIPT_SRC;\n\n // Always resolve whether or not the script is successfully initialized.\n // This is important for users who may block cdn.onesignal.com w/ adblock.\n script.onerror = () => {\n handleOnError();\n };\n\n document.head.appendChild(script);\n}\n\n/**\n * The following code is copied directly from the native SDK source file BrowserSupportsPush.ts\n * S T A R T\n */\n\n// Checks if the browser supports push notifications by checking if specific\n// classes and properties on them exist\nfunction isPushNotificationsSupported() {\n return supportsVapidPush() || supportsSafariPush();\n}\n\nfunction isMacOSSafariInIframe(): boolean {\n // Fallback detection for Safari on macOS in an iframe context\n return (\n window.top !== window && // isContextIframe\n navigator.vendor === 'Apple Computer, Inc.' && // isSafari\n navigator.platform === 'MacIntel'\n ); // isMacOS\n}\n\nfunction supportsSafariPush(): boolean {\n return (\n (window.safari && typeof window.safari.pushNotification !== 'undefined') ||\n isMacOSSafariInIframe()\n );\n}\n\n// Does the browser support the standard Push API\nfunction supportsVapidPush(): boolean {\n return (\n typeof PushSubscriptionOptions !== 'undefined' &&\n PushSubscriptionOptions.prototype.hasOwnProperty('applicationServerKey')\n );\n}\n/* E N D */\n\n/**\n * This is a SPECIAL FUNCTION\n * It is a hardcoded implementation copied from the upstream/native WebSDK since we want to return a boolean immediately\n * Natively, this is done via the shimloading mechanism (i.e. if the SDK loads, push is supported)\n * @PublicApi\n */\nconst isPushSupported = (): boolean => {\n return isPushNotificationsSupported();\n};\n\n/**\n * @PublicApi\n */\nconst init = (options: IInitObject): Promise<void> => {\n if (isOneSignalInitialized) {\n return Promise.reject(`OneSignal is already initialized.`);\n }\n\n if (!options || !options.appId) {\n return Promise.reject('You need to provide your OneSignal appId.');\n }\n\n if (!document) {\n return Promise.reject(`Document is not defined.`);\n }\n\n // Handle both disabled and disable keys for welcome notification\n if (options.welcomeNotification?.disabled !== undefined) {\n options.welcomeNotification.disable = options.welcomeNotification.disabled;\n }\n\n return new Promise<void>((resolve, reject) => {\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.init(options)\n .then(() => {\n isOneSignalInitialized = true;\n resolve();\n })\n .catch(reject);\n });\n });\n};\n\nexport interface AutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; slidedownPromptOptions?: IOneSignalAutoPromptOptions; }\nexport interface IOneSignalAutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; isInUpdateMode?: boolean; categoryOptions?: IOneSignalCategories; }\nexport interface IOneSignalCategories { positiveUpdateButton: string; negativeUpdateButton: string; savingButtonText: string; errorButtonText: string; updateMessage: string; tags: IOneSignalTagCategory[]; }\nexport interface IOneSignalTagCategory { tag: string; label: string; checked?: boolean; }\nexport type PushSubscriptionNamespaceProperties = { id: string | null | undefined; token: string | null | undefined; optedIn: boolean; };\nexport type SubscriptionChangeEvent = { previous: PushSubscriptionNamespaceProperties; current: PushSubscriptionNamespaceProperties; };\nexport type NotificationEventName = 'click' | 'foregroundWillDisplay' | 'dismiss' | 'permissionChange' | 'permissionPromptDisplay';\nexport type SlidedownEventName = 'slidedownAllowClick' | 'slidedownCancelClick' | 'slidedownClosed' | 'slidedownQueued' | 'slidedownShown';\nexport type OneSignalDeferredLoadedCallback = (onesignal: IOneSignalOneSignal) => void;\nexport interface IOSNotification {\n /**\n * The OneSignal notification id;\n * - Primary id on OneSignal's REST API and dashboard\n */\n readonly notificationId: string;\n\n /**\n * Visible title text on the notification\n */\n readonly title?: string;\n\n /**\n * Visible body text on the notification\n */\n readonly body: string;\n\n /**\n * Visible icon the notification; URL format\n */\n readonly icon?: string;\n\n /**\n * Visible small badgeIcon that displays on some devices; URL format\n * Example: On Android's status bar\n */\n readonly badgeIcon?: string;\n\n /**\n * Visible image on the notification; URL format\n */\n readonly image?: string;\n\n /**\n * Visible buttons on the notification\n */\n readonly actionButtons?: IOSNotificationActionButton[];\n\n /**\n * If this value is the same as existing notification, it will replace it\n * Can be set when creating the notification with \"Web Push Topic\" on the dashboard\n * or web_push_topic from the REST API.\n */\n readonly topic?: string;\n\n /**\n * Custom object that was sent with the notification;\n * definable when creating the notification from the OneSignal REST API or dashboard\n */\n readonly additionalData?: object;\n\n /**\n * URL to open when clicking or tapping on the notification\n */\n readonly launchURL?: string;\n\n /**\n * Confirm the push was received by reporting back to OneSignal\n */\n readonly confirmDelivery: boolean;\n}\n\nexport interface IOSNotificationActionButton {\n /**\n * Any unique identifier to represent which button was clicked. This is typically passed back to the service worker\n * and host page through events to identify which button was clicked.\n * e.g. 'like-button'\n */\n readonly actionId: string;\n /**\n * The notification action button's text.\n */\n readonly text: string;\n /**\n * A valid publicly reachable HTTPS URL to an image.\n */\n readonly icon?: string;\n /**\n * The URL to open the web browser to when this action button is clicked.\n */\n readonly launchURL?: string;\n}\n\nexport interface NotificationClickResult {\n readonly actionId?: string;\n readonly url?: string;\n}\n\nexport type NotificationEventTypeMap = {\n 'click': NotificationClickEvent;\n 'foregroundWillDisplay': NotificationForegroundWillDisplayEvent;\n 'dismiss': NotificationDismissEvent;\n 'permissionChange': boolean;\n 'permissionPromptDisplay': void;\n};\n\nexport interface NotificationForegroundWillDisplayEvent {\n readonly notification: IOSNotification;\n preventDefault(): void;\n}\n\nexport interface NotificationDismissEvent {\n notification: IOSNotification;\n}\n\nexport interface NotificationClickEvent {\n readonly notification: IOSNotification;\n readonly result: NotificationClickResult;\n}\n\nexport type UserChangeEvent = {\n current: UserNamespaceProperties;\n};\nexport type UserNamespaceProperties = {\n onesignalId: string | undefined;\n externalId: string | undefined;\n};\n\nexport interface IInitObject {\n appId: string;\n subdomainName?: string;\n requiresUserPrivacyConsent?: boolean;\n promptOptions?: {\n slidedown: {\n prompts: {\n /**\n * Whether to automatically display the prompt.\n * `true` will display the prompt based on the delay options.\n * `false` will prevent the prompt from displaying until the Slidedowns methods are used.\n */\n autoPrompt: boolean;\n\n /**\n * Only available for type: category. Up to 10 categories.\n * @example\n * categories: [{ tag: 'local_news', label: 'Local News' }] // The user will be tagged with local_news but will see \"Local News\" in the prompt.\n */\n categories: {\n /** Should identify the action. */\n tag: string;\n\n /** What the user will see. */\n label: string;\n }[];\n\n /**\n * The delay options for the prompt.\n * @example delay: { pageViews: 3, timeDelay: 20 } // The user will not be shown the prompt until 20 seconds after the 3rd page view.\n */\n delay: {\n /** The number of pages a user needs to visit before the prompt is displayed. */\n pageViews?: number;\n\n /** The number of seconds a user needs to wait before the prompt is displayed.Both options must be satisfied for the prompt to display */\n timeDelay?: number;\n };\n\n /**\n * The text to display in the prompt.\n */\n text?: {\n /** The callout asking the user to opt-in. Up to 90 characters. */\n actionMessage?: string;\n\n /** Triggers the opt-in. Up to 15 characters. */\n acceptButton?: string;\n\n /** Cancels opt-in. Up to 15 characters. */\n cancelMessage?: string;\n\n /** The message of the confirmation prompt displayed after the email and/or phone number is provided. Up to 90 characters. */\n confirmMessage?: string;\n\n /** Identifies the email text field. Up to 15 characters. */\n emailLabel?: string;\n\n /** Cancels the category update. Up to 15 characters. */\n negativeUpdateButton?: string;\n\n /** Saves the updated category tags. Up to 15 characters. */\n positiveUpdateButton?: string;\n\n /** Identifies the phone number text field. Up to 15 characters. */\n smsLabel?: string;\n\n /** A different message shown to subscribers presented the prompt again to update categories. Up to 90 characters. */\n updateMessage?: string;\n };\n\n /**\n * The type of prompt to display.\n * `push` which is the Slide Prompt without categories.\n * `category` which is the Slide Prompt with categories.\n * `sms` only asks for phone number.\n * `email` only asks for email address.\n * `smsAndEmail` asks for both phone number and email address.\n */\n type: 'push' | 'category' | 'sms' | 'email' | 'smsAndEmail';\n }[];\n };\n };\n welcomeNotification?: {\n /**\n * Disables sending a welcome notification to new site visitors. If you want to disable welcome notifications, this is the only option you need.\n * @deprecated Use 'disable' instead. This will be removed in a future version.\n */\n disabled?: boolean;\n\n /**\n * Disables sending a welcome notification to new site visitors. If you want to disable welcome notifications, this is the only option you need.\n */\n disable?: boolean;\n\n /**\n * The welcome notification's message. You can localize this to your own language.\n * If left blank or set to blank, the default of 'Thanks for subscribing!' will be used.\n */\n message: string;\n\n /**\n * The welcome notification's title. You can localize this to your own language. If not set, or left blank, the site's title will be used.\n * Set to one space ' ' to clear the title, although this is not recommended.\n */\n title?: string;\n\n /**\n * By default, clicking the welcome notification does not open any link.\n * This is recommended because the user has just visited your site and subscribed.\n */\n url?: string;\n };\n\n /**\n * Will enable customization of the notify/subscription bell button.\n */\n notifyButton?: {\n /**\n * A function you define that returns true to show the Subscription Bell, or false to hide it.\n * Typically used the hide the Subscription Bell after the user is subscribed.\n * This function is not re-evaluated on every state change; this function is only evaluated once when the Subscription Bell begins to show.\n */\n displayPredicate?: () => boolean | Promise<boolean>;\n\n /**\n * Enable the Subscription Bell. The Subscription Bell is otherwise disabled by default.\n */\n enable?: boolean;\n\n /** Specify CSS-valid pixel offsets using bottom, left, and right. */\n offset?: { bottom: string; left: string; right: string };\n\n /**\n * If `true`, the Subscription Bell will display an icon that there is 1 unread message.\n * When hovering over the Subscription Bell, the user will see custom text set by message.prenotify.\n */\n prenotify: boolean;\n\n /** Either `bottom-left` or `bottom-right`. The Subscription Bell will be fixed at this location on your page. */\n position?: 'bottom-left' | 'bottom-right';\n\n /** Set `false` to hide the 'Powered by OneSignal' text in the Subscription Bell dialog popup. */\n showCredit: boolean;\n\n /**\n * The Subscription Bell will initially appear at one of these sizes, and then shrink down to size `small` after the user subscribes.\n */\n size?: 'small' | 'medium' | 'large';\n\n /** Customize the Subscription Bell text. */\n text: {\n 'dialog.blocked.message': string;\n 'dialog.blocked.title': string;\n 'dialog.main.button.subscribe': string;\n 'dialog.main.button.unsubscribe': string;\n 'dialog.main.title': string;\n 'message.action.resubscribed': string;\n 'message.action.subscribed': string;\n 'message.action.subscribing': string;\n 'message.action.unsubscribed': string;\n 'message.prenotify': string;\n 'tip.state.blocked': string;\n 'tip.state.subscribed': string;\n 'tip.state.unsubscribed': string;\n };\n };\n\n persistNotification?: boolean;\n webhooks?: {\n /**\n * Enable this setting only if your server has CORS enabled and supports non-simple CORS requests.\n * If this setting is disabled, your webhook will not need CORS to receive data, but it will not receive the custom headers.\n * The simplest option is to leave it disabled.\n * @default false\n */\n cors: boolean;\n\n /**\n * This event occurs after a notification is clicked.\n * @example https://site.com/hook\n */\n 'notification.clicked'?: string;\n\n /**\n * This event occurs after a notification is intentionally dismissed by the user (clicking the notification body or one of the notification action buttons does not trigger the dismissed webhook),\n * after a group of notifications are all dismissed (with this notification as part of that group), or after a notification expires on its own time and disappears. This event is supported on Chrome only.\n * @example https://site.com/hook\n */\n 'notification.dismissed'?: string;\n\n /**\n * This event occurs after a notification is displayed.\n * @example https://site.com/hook\n */\n 'notification.willDisplay'?: string;\n };\n autoResubscribe?: boolean;\n autoRegister?: boolean;\n notificationClickHandlerMatch?: string;\n notificationClickHandlerAction?: string;\n path?: string;\n serviceWorkerParam?: { scope: string };\n serviceWorkerPath?: string;\n serviceWorkerOverrideForTypical?: boolean;\n serviceWorkerUpdaterPath?: string;\n allowLocalhostAsSecureOrigin?: boolean;\n [key: string]: any;\n}\n\nexport interface IOneSignalOneSignal {\n\tSlidedown: IOneSignalSlidedown;\n\tNotifications: IOneSignalNotifications;\n\tSession: IOneSignalSession;\n\tUser: IOneSignalUser;\n\tDebug: IOneSignalDebug;\n\tlogin(externalId: string, jwtToken?: string): Promise<void>;\n\tlogout(): Promise<void>;\n\tinit(options: IInitObject): Promise<void>;\n\tsetConsentGiven(consent: boolean): Promise<void>;\n\tsetConsentRequired(requiresConsent: boolean): Promise<void>;\n}\nexport interface IOneSignalNotifications {\n\tpermissionNative: NotificationPermission;\n\tpermission: boolean;\n\tsetDefaultUrl(url: string): Promise<void>;\n\tsetDefaultTitle(title: string): Promise<void>;\n\tisPushSupported(): boolean;\n\trequestPermission(): Promise<boolean>;\n\taddEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void;\n\tremoveEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void;\n}\nexport interface IOneSignalSlidedown {\n\tpromptPush(options?: AutoPromptOptions): Promise<void>;\n\tpromptPushCategories(options?: AutoPromptOptions): Promise<void>;\n\tpromptSms(options?: AutoPromptOptions): Promise<void>;\n\tpromptEmail(options?: AutoPromptOptions): Promise<void>;\n\tpromptSmsAndEmail(options?: AutoPromptOptions): Promise<void>;\n\taddEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void;\n\tremoveEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void;\n}\nexport interface IOneSignalDebug {\n\tsetLogLevel(logLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error'): void;\n}\nexport interface IOneSignalSession {\n\tsendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void>;\n\tsendUniqueOutcome(outcomeName: string): Promise<void>;\n}\nexport interface IOneSignalUser {\n\tonesignalId: string | undefined;\n\texternalId: string | undefined;\n\tPushSubscription: IOneSignalPushSubscription;\n\taddAlias(label: string, id: string): void;\n\taddAliases(aliases: { [key: string]: string }): void;\n\tremoveAlias(label: string): void;\n\tremoveAliases(labels: string[]): void;\n\taddEmail(email: string): void;\n\tremoveEmail(email: string): void;\n\taddSms(smsNumber: string): void;\n\tremoveSms(smsNumber: string): void;\n\taddTag(key: string, value: string): void;\n\taddTags(tags: { [key: string]: string }): void;\n\tremoveTag(key: string): void;\n\tremoveTags(keys: string[]): void;\n\tgetTags(): { [key: string]: string };\n\taddEventListener(event: 'change', listener: (change: UserChangeEvent) => void): void;\n\tremoveEventListener(event: 'change', listener: (change: UserChangeEvent) => void): void;\n\tsetLanguage(language: string): void;\n\tgetLanguage(): string;\n\ttrackEvent(name: string, properties?: Record<string, unknown>): void;\n}\nexport interface IOneSignalPushSubscription {\n\tid: string | null | undefined;\n\ttoken: string | null | undefined;\n\toptedIn: boolean | undefined;\n\toptIn(): Promise<void>;\n\toptOut(): Promise<void>;\n\taddEventListener(event: 'change', listener: (change: SubscriptionChangeEvent) => void): void;\n\tremoveEventListener(event: 'change', listener: (change: SubscriptionChangeEvent) => void): void;\n}\nfunction oneSignalLogin(externalId: string, jwtToken?: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.login(externalId, jwtToken)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction oneSignalLogout(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.logout()\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction oneSignalSetConsentGiven(consent: boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.setConsentGiven(consent)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction oneSignalSetConsentRequired(requiresConsent: boolean): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.setConsentRequired(requiresConsent)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownPromptPush(options?: AutoPromptOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.promptPush(options)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownPromptPushCategories(options?: AutoPromptOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.promptPushCategories(options)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownPromptSms(options?: AutoPromptOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.promptSms(options)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownPromptEmail(options?: AutoPromptOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.promptEmail(options)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownPromptSmsAndEmail(options?: AutoPromptOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.promptSmsAndEmail(options)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction slidedownAddEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.addEventListener(event, listener);\n });\n \n}\nfunction slidedownRemoveEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Slidedown.removeEventListener(event, listener);\n });\n \n}\nfunction notificationsSetDefaultUrl(url: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Notifications.setDefaultUrl(url)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction notificationsSetDefaultTitle(title: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Notifications.setDefaultTitle(title)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction notificationsRequestPermission(): Promise<boolean> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Notifications.requestPermission()\n .then(result => resolve(result))\n .catch(error => reject(error));\n });\n });\n}\nfunction notificationsAddEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Notifications.addEventListener(event, listener);\n });\n \n}\nfunction notificationsRemoveEventListener<K extends NotificationEventName>(event: K, listener: (obj: NotificationEventTypeMap[K]) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Notifications.removeEventListener(event, listener);\n });\n \n}\nfunction sessionSendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Session.sendOutcome(outcomeName, outcomeWeight)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction sessionSendUniqueOutcome(outcomeName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Session.sendUniqueOutcome(outcomeName)\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction userAddAlias(label: string, id: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addAlias(label, id);\n });\n \n}\nfunction userAddAliases(aliases: { [key: string]: string }): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addAliases(aliases);\n });\n \n}\nfunction userRemoveAlias(label: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeAlias(label);\n });\n \n}\nfunction userRemoveAliases(labels: string[]): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeAliases(labels);\n });\n \n}\nfunction userAddEmail(email: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addEmail(email);\n });\n \n}\nfunction userRemoveEmail(email: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeEmail(email);\n });\n \n}\nfunction userAddSms(smsNumber: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addSms(smsNumber);\n });\n \n}\nfunction userRemoveSms(smsNumber: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeSms(smsNumber);\n });\n \n}\nfunction userAddTag(key: string, value: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addTag(key, value);\n });\n \n}\nfunction userAddTags(tags: { [key: string]: string }): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addTags(tags);\n });\n \n}\nfunction userRemoveTag(key: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeTag(key);\n });\n \n}\nfunction userRemoveTags(keys: string[]): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeTags(keys);\n });\n \n}\n// @ts-expect-error - return non-Promise type despite needing to await OneSignalDeferred\nasync function userGetTags(): { [key: string]: string } {\n let retVal: { [key: string]: string };\n await window.OneSignalDeferred?.push((OneSignal) => {\n retVal = OneSignal.User.getTags();\n });\n return retVal;\n}\nfunction userAddEventListener(event: 'change', listener: (change: UserChangeEvent) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.addEventListener(event, listener);\n });\n \n}\nfunction userRemoveEventListener(event: 'change', listener: (change: UserChangeEvent) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.removeEventListener(event, listener);\n });\n \n}\nfunction userSetLanguage(language: string): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.setLanguage(language);\n });\n \n}\n// @ts-expect-error - return non-Promise type despite needing to await OneSignalDeferred\nasync function userGetLanguage(): string {\n let retVal: string;\n await window.OneSignalDeferred?.push((OneSignal) => {\n retVal = OneSignal.User.getLanguage();\n });\n return retVal;\n}\nfunction userTrackEvent(name: string, properties?: Record<string, unknown>): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.trackEvent(name, properties);\n });\n \n}\nfunction pushSubscriptionOptIn(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.PushSubscription.optIn()\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction pushSubscriptionOptOut(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (isOneSignalScriptFailed) {\n reject(new Error('OneSignal script failed to load.'));\n return;\n }\n\n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.PushSubscription.optOut()\n .then(() => resolve())\n .catch(error => reject(error));\n });\n });\n}\nfunction pushSubscriptionAddEventListener(event: 'change', listener: (change: SubscriptionChangeEvent) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.PushSubscription.addEventListener(event, listener);\n });\n \n}\nfunction pushSubscriptionRemoveEventListener(event: 'change', listener: (change: SubscriptionChangeEvent) => void): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.User.PushSubscription.removeEventListener(event, listener);\n });\n \n}\nfunction debugSetLogLevel(logLevel: 'trace' | 'debug' | 'info' | 'warn' | 'error'): void {\n \n window.OneSignalDeferred?.push((OneSignal) => {\n OneSignal.Debug.setLogLevel(logLevel);\n });\n \n}\nconst PushSubscriptionNamespace: IOneSignalPushSubscription = {\n\tget id(): string | null | undefined { return window.OneSignal?.User?.PushSubscription?.id; },\n\tget token(): string | null | undefined { return window.OneSignal?.User?.PushSubscription?.token; },\n\tget optedIn(): boolean | undefined { return window.OneSignal?.User?.PushSubscription?.optedIn; },\n\toptIn: pushSubscriptionOptIn,\n\toptOut: pushSubscriptionOptOut,\n\taddEventListener: pushSubscriptionAddEventListener,\n\tremoveEventListener: pushSubscriptionRemoveEventListener,\n};\n\nconst UserNamespace: IOneSignalUser = {\n\tget onesignalId(): string | undefined { return window.OneSignal?.User?.onesignalId; },\n\tget externalId(): string | undefined { return window.OneSignal?.User?.externalId; },\n\taddAlias: userAddAlias,\n\taddAliases: userAddAliases,\n\tremoveAlias: userRemoveAlias,\n\tremoveAliases: userRemoveAliases,\n\taddEmail: userAddEmail,\n\tremoveEmail: userRemoveEmail,\n\taddSms: userAddSms,\n\tremoveSms: userRemoveSms,\n\taddTag: userAddTag,\n\taddTags: userAddTags,\n\tremoveTag: userRemoveTag,\n\tremoveTags: userRemoveTags,\n\tgetTags: userGetTags,\n\taddEventListener: userAddEventListener,\n\tremoveEventListener: userRemoveEventListener,\n\tsetLanguage: userSetLanguage,\n\tgetLanguage: userGetLanguage,\n\ttrackEvent: userTrackEvent,\n\tPushSubscription: PushSubscriptionNamespace,\n};\n\nconst SessionNamespace: IOneSignalSession = {\n\tsendOutcome: sessionSendOutcome,\n\tsendUniqueOutcome: sessionSendUniqueOutcome,\n};\n\nconst DebugNamespace: IOneSignalDebug = {\n\tsetLogLevel: debugSetLogLevel,\n};\n\nconst SlidedownNamespace: IOneSignalSlidedown = {\n\tpromptPush: slidedownPromptPush,\n\tpromptPushCategories: slidedownPromptPushCategories,\n\tpromptSms: slidedownPromptSms,\n\tpromptEmail: slidedownPromptEmail,\n\tpromptSmsAndEmail: slidedownPromptSmsAndEmail,\n\taddEventListener: slidedownAddEventListener,\n\tremoveEventListener: slidedownRemoveEventListener,\n};\n\nconst NotificationsNamespace: IOneSignalNotifications = {\n\tget permissionNative(): NotificationPermission { return window.OneSignal?.Notifications?.permissionNative ?? 'default'; },\n\tget permission(): boolean { return window.OneSignal?.Notifications?.permission ?? false; },\n\tsetDefaultUrl: notificationsSetDefaultUrl,\n\tsetDefaultTitle: notificationsSetDefaultTitle,\n\tisPushSupported,\n\trequestPermission: notificationsRequestPermission,\n\taddEventListener: notificationsAddEventListener,\n\tremoveEventListener: notificationsRemoveEventListener,\n};\n\nconst OneSignalNamespace: IOneSignalOneSignal = {\n\tlogin: oneSignalLogin,\n\tlogout: oneSignalLogout,\n\tinit,\n\tsetConsentGiven: oneSignalSetConsentGiven,\n\tsetConsentRequired: oneSignalSetConsentRequired,\n\tSlidedown: SlidedownNamespace,\n\tNotifications: NotificationsNamespace,\n\tSession: SessionNamespace,\n\tUser: UserNamespace,\n\tDebug: DebugNamespace,\n};\n\nconst OneSignal = OneSignalNamespace;\nexport default OneSignal;\n"],"names":["ONESIGNAL_SDK_ID","ONE_SIGNAL_SCRIPT_SRC","isOneSignalInitialized","isOneSignalScriptFailed","addSDKScript","handleOnError","script","isPushNotificationsSupported","supportsVapidPush","supportsSafariPush","isMacOSSafariInIframe","isPushSupported","init","options","_a","resolve","reject","OneSignal","oneSignalLogin","externalId","jwtToken","error","oneSignalLogout","oneSignalSetConsentGiven","consent","oneSignalSetConsentRequired","requiresConsent","slidedownPromptPush","slidedownPromptPushCategories","slidedownPromptSms","slidedownPromptEmail","slidedownPromptSmsAndEmail","slidedownAddEventListener","event","listener","slidedownRemoveEventListener","notificationsSetDefaultUrl","url","notificationsSetDefaultTitle","title","notificationsRequestPermission","result","notificationsAddEventListener","notificationsRemoveEventListener","sessionSendOutcome","outcomeName","outcomeWeight","sessionSendUniqueOutcome","userAddAlias","label","id","userAddAliases","aliases","userRemoveAlias","userRemoveAliases","labels","userAddEmail","email","userRemoveEmail","userAddSms","smsNumber","userRemoveSms","userAddTag","key","value","userAddTags","tags","userRemoveTag","userRemoveTags","keys","userGetTags","retVal","userAddEventListener","userRemoveEventListener","userSetLanguage","language","userGetLanguage","userTrackEvent","name","properties","pushSubscriptionOptIn","pushSubscriptionOptOut","pushSubscriptionAddEventListener","pushSubscriptionRemoveEventListener","debugSetLogLevel","logLevel","PushSubscriptionNamespace","_c","_b","UserNamespace","SessionNamespace","DebugNamespace","SlidedownNamespace","NotificationsNamespace","OneSignalNamespace"],"mappings":"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"}