@onesignal/onesignal-vue3 1.0.1 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.ts CHANGED
@@ -1,79 +1,135 @@
1
- import { App, inject } from 'vue';
1
+ import { App } from 'vue';
2
2
 
3
3
  const ONESIGNAL_SDK_ID = 'onesignal-sdk';
4
- const ONE_SIGNAL_SCRIPT_SRC = 'https://cdn.onesignal.com/sdks/OneSignalSDK.js';
5
- const ONESIGNAL_NOT_SETUP_ERROR = 'OneSignal is not setup correctly.';
6
- const MAX_TIMEOUT = 30;
4
+ const ONE_SIGNAL_SCRIPT_SRC = "https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js";
7
5
 
6
+ // true if the script is successfully loaded from CDN.
8
7
  let isOneSignalInitialized = false;
9
- const vueOneSignalFunctionQueue: IOneSignalFunctionCall[] = [];
8
+ // true if the script fails to load from CDN. A separate flag is necessary
9
+ // to disambiguate between a CDN load failure and a delayed call to
10
+ // OneSignal#init.
11
+ let isOneSignalScriptFailed = false;
12
+
13
+ window.OneSignalDeferred = window.OneSignalDeferred || [];
14
+
15
+ addSDKScript();
10
16
 
11
17
  /* H E L P E R S */
12
18
 
13
- const injectScript = () => {
19
+ function handleOnError() {
20
+ isOneSignalScriptFailed = true;
21
+ }
22
+
23
+ function addSDKScript() {
14
24
  const script = document.createElement('script');
15
25
  script.id = ONESIGNAL_SDK_ID;
26
+ script.defer = true;
16
27
  script.src = ONE_SIGNAL_SCRIPT_SRC;
17
- script.async = true;
28
+
29
+ // Always resolve whether or not the script is successfully initialized.
30
+ // This is important for users who may block cdn.onesignal.com w/ adblock.
31
+ script.onerror = () => {
32
+ handleOnError();
33
+ }
34
+
18
35
  document.head.appendChild(script);
19
36
  }
37
+ /* T Y P E D E C L A R A T I O N S */
20
38
 
21
- const doesOneSignalExist = () => {
22
- if (window.OneSignal) {
23
- return true;
39
+ declare module '@vue/runtime-core' {
40
+ export interface ComponentCustomProperties {
41
+ $OneSignal: IOneSignalOneSignal;
24
42
  }
25
- return false;
26
43
  }
27
44
 
28
- const processQueuedOneSignalFunctions = () => {
29
- vueOneSignalFunctionQueue.forEach(element => {
30
- const { name, args, promiseResolver } = element;
45
+ declare global {
46
+ interface Window {
47
+ OneSignalDeferred?: OneSignalDeferredLoadedCallback[];
48
+ safari?: {
49
+ pushNotification: any;
50
+ };
51
+ }
52
+ }
53
+
54
+
55
+ /* O N E S I G N A L A P I */
56
+
57
+ /**
58
+ * @PublicApi
59
+ */
60
+ const init = (options: IInitObject): Promise<void> => {
61
+ if (isOneSignalInitialized) {
62
+ return Promise.reject(`OneSignal is already initialized.`);
63
+ }
64
+
65
+ if (!options || !options.appId) {
66
+ throw new Error('You need to provide your OneSignal appId.');
67
+ }
31
68
 
32
- if (!!promiseResolver) {
33
- OneSignalVue[name](...args).then((result: any) => {
34
- promiseResolver(result);
69
+ if (!document) {
70
+ return Promise.reject(`Document is not defined.`);
71
+ }
72
+
73
+ return new Promise<void>((resolve) => {
74
+ window.OneSignalDeferred?.push((OneSignal) => {
75
+ OneSignal.init(options).then(() => {
76
+ isOneSignalInitialized = true;
77
+ resolve();
35
78
  });
36
- } else {
37
- window.OneSignal[name](...args);
38
- }
79
+ });
39
80
  });
40
- }
81
+ };
41
82
 
42
- const setupOneSignalIfMissing = () => {
43
- if (!doesOneSignalExist()) {
44
- window.OneSignal = window.OneSignal || [];
45
- }
83
+
84
+ /**
85
+ * The following code is copied directly from the native SDK source file BrowserSupportsPush.ts
86
+ * S T A R T
87
+ */
88
+
89
+ // Checks if the browser supports push notifications by checking if specific
90
+ // classes and properties on them exist
91
+ function isPushNotificationsSupported() {
92
+ return supportsVapidPush() || supportsSafariPush();
46
93
  }
47
94
 
48
- /* T Y P E D E C L A R A T I O N S */
95
+ function isMacOSSafariInIframe(): boolean {
96
+ // Fallback detection for Safari on macOS in an iframe context
97
+ return window.top !== window && // isContextIframe
98
+ navigator.vendor === "Apple Computer, Inc." && // isSafari
99
+ navigator.platform === "MacIntel"; // isMacOS
100
+ }
49
101
 
50
- declare module '@vue/runtime-core' {
51
- export interface ComponentCustomProperties {
52
- $OneSignal: IOneSignal;
53
- }
102
+ function supportsSafariPush(): boolean {
103
+ return (window.safari && typeof window.safari.pushNotification !== "undefined") ||
104
+ isMacOSSafariInIframe();
54
105
  }
55
106
 
56
- declare global {
57
- interface Window {
58
- OneSignal: any;
59
- }
107
+ // Does the browser support the standard Push API
108
+ function supportsVapidPush(): boolean {
109
+ return typeof PushSubscriptionOptions !== "undefined" &&
110
+ PushSubscriptionOptions.prototype.hasOwnProperty("applicationServerKey");
60
111
  }
112
+ /* E N D */
61
113
 
62
- interface IOneSignalFunctionCall {
63
- name: string;
64
- args: IArguments;
65
- promiseResolver?: Function;
114
+ /**
115
+ * @PublicApi
116
+ */
117
+ const isPushSupported = (): boolean => {
118
+ return isPushNotificationsSupported();
66
119
  }
67
120
 
68
121
  type Action<T> = (item: T) => void;
69
122
  interface AutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; slidedownPromptOptions?: IOneSignalAutoPromptOptions; }
70
- interface RegisterOptions { modalPrompt?: boolean; httpPermissionRequest?: boolean; slidedown?: boolean; autoAccept?: boolean }
71
- interface SetSMSOptions { identifierAuthHash?: string; }
72
- interface SetEmailOptions { identifierAuthHash?: string; emailAuthHash?: string; }
73
- interface TagsObject<T> { [key: string]: T; }
74
123
  interface IOneSignalAutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; isInUpdateMode?: boolean; categoryOptions?: IOneSignalCategories; }
75
124
  interface IOneSignalCategories { positiveUpdateButton: string; negativeUpdateButton: string; savingButtonText: string; errorButtonText: string; updateMessage: string; tags: IOneSignalTagCategory[]; }
76
125
  interface IOneSignalTagCategory { tag: string; label: string; checked?: boolean; }
126
+ type PushSubscriptionNamespaceProperties = { id: string | null | undefined; token: string | null | undefined; optedIn: boolean; };
127
+ type SubscriptionChangeEvent = { previous: PushSubscriptionNamespaceProperties; current: PushSubscriptionNamespaceProperties; };
128
+ type NotificationEventName = 'click' | 'willDisplay' | 'dismiss' | 'permissionChange' | 'permissionPromptDisplay';
129
+ interface NotificationButtonData { action?: string; title?: string; icon?: string; url?: string; }
130
+ interface StructuredNotification { id: string; content: string; heading?: string; url?: string; data?: object; rr?: string; icon?: string; image?: string; tag?: string; badge?: string; vibrate?: string; buttons?: NotificationButtonData[]; }
131
+ type SlidedownEventName = 'slidedownShown';
132
+ type OneSignalDeferredLoadedCallback = (onesignal: IOneSignalOneSignal) => void;
77
133
 
78
134
  interface IInitObject {
79
135
  appId: string;
@@ -96,795 +152,540 @@ interface IInitObject {
96
152
  [key: string]: any;
97
153
  }
98
154
 
99
- interface IOneSignal {
155
+ interface IOneSignalOneSignal {
156
+ login(externalId: string, jwtToken?: string): Promise<void>
157
+ logout(): Promise<void>
100
158
  init(options: IInitObject): Promise<void>
101
- on(event: string, listener: (eventData?: any) => void): void
102
- off(event: string, listener: (eventData?: any) => void): void
103
- once(event: string, listener: (eventData?: any) => void): void
104
- isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean>
105
- showHttpPrompt(options?: AutoPromptOptions): Promise<void>
106
- registerForPushNotifications(options?: RegisterOptions): Promise<void>
107
- setDefaultNotificationUrl(url: string): Promise<void>
159
+ setConsentGiven(consent: boolean): Promise<void>
160
+ setConsentRequired(requiresConsent: boolean): Promise<void>
161
+ Slidedown: IOneSignalSlidedown;
162
+ Notifications: IOneSignalNotifications;
163
+ Session: IOneSignalSession;
164
+ User: IOneSignalUser;
165
+ Debug: IOneSignalDebug;
166
+ [index: string]: any;
167
+ }
168
+ interface IOneSignalNotifications {
169
+ setDefaultUrl(url: string): Promise<void>
108
170
  setDefaultTitle(title: string): Promise<void>
109
- getTags(callback?: Action<any>): Promise<void>
110
- sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null>
111
- sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null>
112
- deleteTag(tag: string): Promise<Array<string>>
113
- deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>>
114
- addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void>
115
- setSubscription(newSubscription: boolean): Promise<void>
116
- showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any>
117
- showNativePrompt(): Promise<void>
118
- showSlidedownPrompt(options?: AutoPromptOptions): Promise<void>
119
- showCategorySlidedown(options?: AutoPromptOptions): Promise<void>
120
- showSmsSlidedown(options?: AutoPromptOptions): Promise<void>
121
- showEmailSlidedown(options?: AutoPromptOptions): Promise<void>
122
- showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void>
123
- getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission>
124
- getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null>
125
- getSubscription(callback?: Action<boolean>): Promise<boolean>
126
- setEmail(email: string, options?: SetEmailOptions): Promise<string|null>
127
- setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null>
128
- logoutEmail(): Promise<void>
129
- logoutSMS(): Promise<void>
130
- setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void>
131
- removeExternalUserId(): Promise<void>
132
- getExternalUserId(): Promise<string | undefined | null>
133
- provideUserConsent(consent: boolean): Promise<void>
134
- getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined>
135
- getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined>
136
- sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void>
137
- [index: string]: Function;
171
+ isPushSupported(): boolean
172
+ getPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission>
173
+ requestPermission(): Promise<void>
174
+ addEventListener(event: NotificationEventName, listener: (obj: any) => void): void
175
+ removeEventListener(event: NotificationEventName, listener: (obj: any) => void): void
176
+ [index: string]: any;
177
+ }
178
+ interface IOneSignalSlidedown {
179
+ promptPush(options?: AutoPromptOptions): Promise<void>
180
+ promptPushCategories(options?: AutoPromptOptions): Promise<void>
181
+ promptSms(options?: AutoPromptOptions): Promise<void>
182
+ promptEmail(options?: AutoPromptOptions): Promise<void>
183
+ promptSmsAndEmail(options?: AutoPromptOptions): Promise<void>
184
+ addEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void
185
+ removeEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void
186
+ [index: string]: any;
187
+ }
188
+ interface IOneSignalDebug {
189
+ setLogLevel(logLevel: string): void
190
+ [index: string]: any;
191
+ }
192
+ interface IOneSignalSession {
193
+ sendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void>
194
+ sendUniqueOutcome(outcomeName: string): Promise<void>
195
+ [index: string]: any;
196
+ }
197
+ interface IOneSignalUser {
198
+ addAlias(label: string, id: string): void
199
+ addAliases(aliases: { [key: string]: string }): void
200
+ removeAlias(label: string): void
201
+ removeAliases(labels: string[]): void
202
+ addEmail(email: string): void
203
+ removeEmail(email: string): void
204
+ addSms(smsNumber: string): void
205
+ removeSms(smsNumber: string): void
206
+ PushSubscription: IOneSignalPushSubscription;
207
+ [index: string]: any;
208
+ }
209
+ interface IOneSignalPushSubscription {
210
+ optIn(): Promise<void>
211
+ optOut(): Promise<void>
212
+ addEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void
213
+ removeEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void
214
+ [index: string]: any;
138
215
  }
139
216
 
140
-
141
- /* O N E S I G N A L A P I */
142
-
143
- function init(options: IInitObject) {
144
- return new Promise<void>(resolve => {
145
- if (isOneSignalInitialized) {
146
- return;
217
+ function oneSignalLogin(externalId: string, jwtToken?: string): Promise<void> {
218
+ return new Promise(function (resolve, reject) {
219
+ if (isOneSignalScriptFailed) {
220
+ reject();
147
221
  }
148
222
 
149
- injectScript();
150
- setupOneSignalIfMissing();
151
- window.OneSignal.push(() => {
152
- window.OneSignal.init(options);
153
- })
154
-
155
- const timeout = setTimeout(() => {
156
- console.error(ONESIGNAL_NOT_SETUP_ERROR);
157
- }, MAX_TIMEOUT * 1_000);
158
-
159
- window.OneSignal.push(() => {
160
- clearTimeout(timeout);
161
- isOneSignalInitialized = true;
162
- processQueuedOneSignalFunctions();
163
- resolve();
164
- });
223
+ try {
224
+ window.OneSignalDeferred?.push((OneSignal) => {
225
+ OneSignal.login(externalId, jwtToken)
226
+ .then(value => resolve(value))
227
+ .catch(error => reject(error));
228
+ });
229
+ } catch (error) {
230
+ reject(error);
231
+ }
165
232
  });
166
233
  }
167
234
 
168
- function on(event: string, listener: (eventData?: any) => void): void {
169
- if (!doesOneSignalExist()) {
170
- vueOneSignalFunctionQueue.push({
171
- name: 'on',
172
- args: arguments,
173
- });
174
- return;
235
+ function oneSignalLogout(): Promise<void> {
236
+ return new Promise(function (resolve, reject) {
237
+ if (isOneSignalScriptFailed) {
238
+ reject();
175
239
  }
176
240
 
177
- window.OneSignal.push(() => {
178
- window.OneSignal.on(event, listener)
179
- });
180
- }
181
-
182
- function off(event: string, listener: (eventData?: any) => void): void {
183
- if (!doesOneSignalExist()) {
184
- vueOneSignalFunctionQueue.push({
185
- name: 'off',
186
- args: arguments,
241
+ try {
242
+ window.OneSignalDeferred?.push((OneSignal) => {
243
+ OneSignal.logout()
244
+ .then(value => resolve(value))
245
+ .catch(error => reject(error));
187
246
  });
188
- return;
247
+ } catch (error) {
248
+ reject(error);
189
249
  }
250
+ });
251
+ }
190
252
 
191
- window.OneSignal.push(() => {
192
- window.OneSignal.off(event, listener)
193
- });
194
- }
195
-
196
- function once(event: string, listener: (eventData?: any) => void): void {
197
- if (!doesOneSignalExist()) {
198
- vueOneSignalFunctionQueue.push({
199
- name: 'once',
200
- args: arguments,
201
- });
202
- return;
253
+ function oneSignalSetConsentGiven(consent: boolean): Promise<void> {
254
+ return new Promise(function (resolve, reject) {
255
+ if (isOneSignalScriptFailed) {
256
+ reject();
203
257
  }
204
258
 
205
- window.OneSignal.push(() => {
206
- window.OneSignal.once(event, listener)
207
- });
208
- }
209
-
210
- function isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean> {
211
- return new Promise(function (resolve, reject) {
212
- if (!doesOneSignalExist()) {
213
- vueOneSignalFunctionQueue.push({
214
- name: 'isPushNotificationsEnabled',
215
- args: arguments,
216
- promiseResolver: resolve,
217
- });
218
- return;
219
- }
220
-
221
- window.OneSignal.push(() => {
222
- window.OneSignal.isPushNotificationsEnabled(callback)
259
+ try {
260
+ window.OneSignalDeferred?.push((OneSignal) => {
261
+ OneSignal.setConsentGiven(consent)
223
262
  .then(value => resolve(value))
224
263
  .catch(error => reject(error));
225
264
  });
226
- });
227
- }
265
+ } catch (error) {
266
+ reject(error);
267
+ }
268
+ });
269
+ }
228
270
 
229
- function showHttpPrompt(options?: AutoPromptOptions): Promise<void> {
230
- return new Promise(function (resolve, reject) {
231
- if (!doesOneSignalExist()) {
232
- vueOneSignalFunctionQueue.push({
233
- name: 'showHttpPrompt',
234
- args: arguments,
235
- promiseResolver: resolve,
236
- });
237
- return;
238
- }
239
-
240
- window.OneSignal.push(() => {
241
- window.OneSignal.showHttpPrompt(options)
242
- .then(value => resolve(value))
243
- .catch(error => reject(error));
244
- });
245
- });
246
- }
271
+ function oneSignalSetConsentRequired(requiresConsent: boolean): Promise<void> {
272
+ return new Promise(function (resolve, reject) {
273
+ if (isOneSignalScriptFailed) {
274
+ reject();
275
+ }
247
276
 
248
- function registerForPushNotifications(options?: RegisterOptions): Promise<void> {
249
- return new Promise(function (resolve, reject) {
250
- if (!doesOneSignalExist()) {
251
- vueOneSignalFunctionQueue.push({
252
- name: 'registerForPushNotifications',
253
- args: arguments,
254
- promiseResolver: resolve,
255
- });
256
- return;
257
- }
258
-
259
- window.OneSignal.push(() => {
260
- window.OneSignal.registerForPushNotifications(options)
277
+ try {
278
+ window.OneSignalDeferred?.push((OneSignal) => {
279
+ OneSignal.setConsentRequired(requiresConsent)
261
280
  .then(value => resolve(value))
262
281
  .catch(error => reject(error));
263
282
  });
264
- });
265
- }
283
+ } catch (error) {
284
+ reject(error);
285
+ }
286
+ });
287
+ }
266
288
 
267
- function setDefaultNotificationUrl(url: string): Promise<void> {
268
- return new Promise(function (resolve, reject) {
269
- if (!doesOneSignalExist()) {
270
- vueOneSignalFunctionQueue.push({
271
- name: 'setDefaultNotificationUrl',
272
- args: arguments,
273
- promiseResolver: resolve,
274
- });
275
- return;
276
- }
277
-
278
- window.OneSignal.push(() => {
279
- window.OneSignal.setDefaultNotificationUrl(url)
280
- .then(value => resolve(value))
281
- .catch(error => reject(error));
282
- });
283
- });
284
- }
289
+ function slidedownPromptPush(options?: AutoPromptOptions): Promise<void> {
290
+ return new Promise(function (resolve, reject) {
291
+ if (isOneSignalScriptFailed) {
292
+ reject();
293
+ }
285
294
 
286
- function setDefaultTitle(title: string): Promise<void> {
287
- return new Promise(function (resolve, reject) {
288
- if (!doesOneSignalExist()) {
289
- vueOneSignalFunctionQueue.push({
290
- name: 'setDefaultTitle',
291
- args: arguments,
292
- promiseResolver: resolve,
293
- });
294
- return;
295
- }
296
-
297
- window.OneSignal.push(() => {
298
- window.OneSignal.setDefaultTitle(title)
295
+ try {
296
+ window.OneSignalDeferred?.push((OneSignal) => {
297
+ OneSignal.Slidedown.promptPush(options)
299
298
  .then(value => resolve(value))
300
299
  .catch(error => reject(error));
301
300
  });
302
- });
303
- }
301
+ } catch (error) {
302
+ reject(error);
303
+ }
304
+ });
305
+ }
304
306
 
305
- function getTags(callback?: Action<any>): Promise<void> {
306
- return new Promise(function (resolve, reject) {
307
- if (!doesOneSignalExist()) {
308
- vueOneSignalFunctionQueue.push({
309
- name: 'getTags',
310
- args: arguments,
311
- promiseResolver: resolve,
312
- });
313
- return;
314
- }
315
-
316
- window.OneSignal.push(() => {
317
- window.OneSignal.getTags(callback)
318
- .then(value => resolve(value))
319
- .catch(error => reject(error));
320
- });
321
- });
322
- }
307
+ function slidedownPromptPushCategories(options?: AutoPromptOptions): Promise<void> {
308
+ return new Promise(function (resolve, reject) {
309
+ if (isOneSignalScriptFailed) {
310
+ reject();
311
+ }
323
312
 
324
- function sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null> {
325
- return new Promise(function (resolve, reject) {
326
- if (!doesOneSignalExist()) {
327
- vueOneSignalFunctionQueue.push({
328
- name: 'sendTag',
329
- args: arguments,
330
- promiseResolver: resolve,
331
- });
332
- return;
333
- }
334
-
335
- window.OneSignal.push(() => {
336
- window.OneSignal.sendTag(key, value, callback)
313
+ try {
314
+ window.OneSignalDeferred?.push((OneSignal) => {
315
+ OneSignal.Slidedown.promptPushCategories(options)
337
316
  .then(value => resolve(value))
338
317
  .catch(error => reject(error));
339
318
  });
340
- });
341
- }
319
+ } catch (error) {
320
+ reject(error);
321
+ }
322
+ });
323
+ }
342
324
 
343
- function sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null> {
344
- return new Promise(function (resolve, reject) {
345
- if (!doesOneSignalExist()) {
346
- vueOneSignalFunctionQueue.push({
347
- name: 'sendTags',
348
- args: arguments,
349
- promiseResolver: resolve,
350
- });
351
- return;
352
- }
353
-
354
- window.OneSignal.push(() => {
355
- window.OneSignal.sendTags(tags, callback)
356
- .then(value => resolve(value))
357
- .catch(error => reject(error));
358
- });
359
- });
360
- }
325
+ function slidedownPromptSms(options?: AutoPromptOptions): Promise<void> {
326
+ return new Promise(function (resolve, reject) {
327
+ if (isOneSignalScriptFailed) {
328
+ reject();
329
+ }
361
330
 
362
- function deleteTag(tag: string): Promise<Array<string>> {
363
- return new Promise(function (resolve, reject) {
364
- if (!doesOneSignalExist()) {
365
- vueOneSignalFunctionQueue.push({
366
- name: 'deleteTag',
367
- args: arguments,
368
- promiseResolver: resolve,
369
- });
370
- return;
371
- }
372
-
373
- window.OneSignal.push(() => {
374
- window.OneSignal.deleteTag(tag)
331
+ try {
332
+ window.OneSignalDeferred?.push((OneSignal) => {
333
+ OneSignal.Slidedown.promptSms(options)
375
334
  .then(value => resolve(value))
376
335
  .catch(error => reject(error));
377
336
  });
378
- });
379
- }
337
+ } catch (error) {
338
+ reject(error);
339
+ }
340
+ });
341
+ }
380
342
 
381
- function deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>> {
382
- return new Promise(function (resolve, reject) {
383
- if (!doesOneSignalExist()) {
384
- vueOneSignalFunctionQueue.push({
385
- name: 'deleteTags',
386
- args: arguments,
387
- promiseResolver: resolve,
388
- });
389
- return;
390
- }
391
-
392
- window.OneSignal.push(() => {
393
- window.OneSignal.deleteTags(tags, callback)
394
- .then(value => resolve(value))
395
- .catch(error => reject(error));
396
- });
397
- });
398
- }
343
+ function slidedownPromptEmail(options?: AutoPromptOptions): Promise<void> {
344
+ return new Promise(function (resolve, reject) {
345
+ if (isOneSignalScriptFailed) {
346
+ reject();
347
+ }
399
348
 
400
- function addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void> {
401
- return new Promise(function (resolve, reject) {
402
- if (!doesOneSignalExist()) {
403
- vueOneSignalFunctionQueue.push({
404
- name: 'addListenerForNotificationOpened',
405
- args: arguments,
406
- promiseResolver: resolve,
407
- });
408
- return;
409
- }
410
-
411
- window.OneSignal.push(() => {
412
- window.OneSignal.addListenerForNotificationOpened(callback)
349
+ try {
350
+ window.OneSignalDeferred?.push((OneSignal) => {
351
+ OneSignal.Slidedown.promptEmail(options)
413
352
  .then(value => resolve(value))
414
353
  .catch(error => reject(error));
415
354
  });
416
- });
417
- }
355
+ } catch (error) {
356
+ reject(error);
357
+ }
358
+ });
359
+ }
418
360
 
419
- function setSubscription(newSubscription: boolean): Promise<void> {
420
- return new Promise(function (resolve, reject) {
421
- if (!doesOneSignalExist()) {
422
- vueOneSignalFunctionQueue.push({
423
- name: 'setSubscription',
424
- args: arguments,
425
- promiseResolver: resolve,
426
- });
427
- return;
428
- }
429
-
430
- window.OneSignal.push(() => {
431
- window.OneSignal.setSubscription(newSubscription)
432
- .then(value => resolve(value))
433
- .catch(error => reject(error));
434
- });
435
- });
436
- }
361
+ function slidedownPromptSmsAndEmail(options?: AutoPromptOptions): Promise<void> {
362
+ return new Promise(function (resolve, reject) {
363
+ if (isOneSignalScriptFailed) {
364
+ reject();
365
+ }
437
366
 
438
- function showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any> {
439
- return new Promise(function (resolve, reject) {
440
- if (!doesOneSignalExist()) {
441
- vueOneSignalFunctionQueue.push({
442
- name: 'showHttpPermissionRequest',
443
- args: arguments,
444
- promiseResolver: resolve,
445
- });
446
- return;
447
- }
448
-
449
- window.OneSignal.push(() => {
450
- window.OneSignal.showHttpPermissionRequest(options)
367
+ try {
368
+ window.OneSignalDeferred?.push((OneSignal) => {
369
+ OneSignal.Slidedown.promptSmsAndEmail(options)
451
370
  .then(value => resolve(value))
452
371
  .catch(error => reject(error));
453
372
  });
454
- });
455
- }
373
+ } catch (error) {
374
+ reject(error);
375
+ }
376
+ });
377
+ }
456
378
 
457
- function showNativePrompt(): Promise<void> {
458
- return new Promise(function (resolve, reject) {
459
- if (!doesOneSignalExist()) {
460
- vueOneSignalFunctionQueue.push({
461
- name: 'showNativePrompt',
462
- args: arguments,
463
- promiseResolver: resolve,
464
- });
465
- return;
466
- }
467
-
468
- window.OneSignal.push(() => {
469
- window.OneSignal.showNativePrompt()
470
- .then(value => resolve(value))
471
- .catch(error => reject(error));
472
- });
473
- });
474
- }
379
+ function slidedownAddEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
380
+ window.OneSignalDeferred?.push((OneSignal) => {
381
+ OneSignal.Slidedown.addEventListener(event, listener)
382
+ });
383
+ }
475
384
 
476
- function showSlidedownPrompt(options?: AutoPromptOptions): Promise<void> {
477
- return new Promise(function (resolve, reject) {
478
- if (!doesOneSignalExist()) {
479
- vueOneSignalFunctionQueue.push({
480
- name: 'showSlidedownPrompt',
481
- args: arguments,
482
- promiseResolver: resolve,
483
- });
484
- return;
485
- }
486
-
487
- window.OneSignal.push(() => {
488
- window.OneSignal.showSlidedownPrompt(options)
489
- .then(value => resolve(value))
490
- .catch(error => reject(error));
491
- });
492
- });
493
- }
385
+ function slidedownRemoveEventListener(event: SlidedownEventName, listener: (wasShown: boolean) => void): void {
386
+ window.OneSignalDeferred?.push((OneSignal) => {
387
+ OneSignal.Slidedown.removeEventListener(event, listener)
388
+ });
389
+ }
494
390
 
495
- function showCategorySlidedown(options?: AutoPromptOptions): Promise<void> {
496
- return new Promise(function (resolve, reject) {
497
- if (!doesOneSignalExist()) {
498
- vueOneSignalFunctionQueue.push({
499
- name: 'showCategorySlidedown',
500
- args: arguments,
501
- promiseResolver: resolve,
502
- });
503
- return;
504
- }
505
-
506
- window.OneSignal.push(() => {
507
- window.OneSignal.showCategorySlidedown(options)
508
- .then(value => resolve(value))
509
- .catch(error => reject(error));
510
- });
511
- });
512
- }
391
+ function notificationsSetDefaultUrl(url: string): Promise<void> {
392
+ return new Promise(function (resolve, reject) {
393
+ if (isOneSignalScriptFailed) {
394
+ reject();
395
+ }
513
396
 
514
- function showSmsSlidedown(options?: AutoPromptOptions): Promise<void> {
515
- return new Promise(function (resolve, reject) {
516
- if (!doesOneSignalExist()) {
517
- vueOneSignalFunctionQueue.push({
518
- name: 'showSmsSlidedown',
519
- args: arguments,
520
- promiseResolver: resolve,
521
- });
522
- return;
523
- }
524
-
525
- window.OneSignal.push(() => {
526
- window.OneSignal.showSmsSlidedown(options)
397
+ try {
398
+ window.OneSignalDeferred?.push((OneSignal) => {
399
+ OneSignal.Notifications.setDefaultUrl(url)
527
400
  .then(value => resolve(value))
528
401
  .catch(error => reject(error));
529
402
  });
530
- });
531
- }
403
+ } catch (error) {
404
+ reject(error);
405
+ }
406
+ });
407
+ }
532
408
 
533
- function showEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
534
- return new Promise(function (resolve, reject) {
535
- if (!doesOneSignalExist()) {
536
- vueOneSignalFunctionQueue.push({
537
- name: 'showEmailSlidedown',
538
- args: arguments,
539
- promiseResolver: resolve,
540
- });
541
- return;
542
- }
543
-
544
- window.OneSignal.push(() => {
545
- window.OneSignal.showEmailSlidedown(options)
546
- .then(value => resolve(value))
547
- .catch(error => reject(error));
548
- });
549
- });
550
- }
409
+ function notificationsSetDefaultTitle(title: string): Promise<void> {
410
+ return new Promise(function (resolve, reject) {
411
+ if (isOneSignalScriptFailed) {
412
+ reject();
413
+ }
551
414
 
552
- function showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
553
- return new Promise(function (resolve, reject) {
554
- if (!doesOneSignalExist()) {
555
- vueOneSignalFunctionQueue.push({
556
- name: 'showSmsAndEmailSlidedown',
557
- args: arguments,
558
- promiseResolver: resolve,
559
- });
560
- return;
561
- }
562
-
563
- window.OneSignal.push(() => {
564
- window.OneSignal.showSmsAndEmailSlidedown(options)
415
+ try {
416
+ window.OneSignalDeferred?.push((OneSignal) => {
417
+ OneSignal.Notifications.setDefaultTitle(title)
565
418
  .then(value => resolve(value))
566
419
  .catch(error => reject(error));
567
420
  });
568
- });
569
- }
421
+ } catch (error) {
422
+ reject(error);
423
+ }
424
+ });
425
+ }
570
426
 
571
- function getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission> {
572
- return new Promise(function (resolve, reject) {
573
- if (!doesOneSignalExist()) {
574
- vueOneSignalFunctionQueue.push({
575
- name: 'getNotificationPermission',
576
- args: arguments,
577
- promiseResolver: resolve,
578
- });
579
- return;
580
- }
581
-
582
- window.OneSignal.push(() => {
583
- window.OneSignal.getNotificationPermission(onComplete)
584
- .then(value => resolve(value))
585
- .catch(error => reject(error));
586
- });
587
- });
588
- }
427
+ function notificationsGetPermissionStatus(onComplete: Action<NotificationPermission>): Promise<NotificationPermission> {
428
+ return new Promise(function (resolve, reject) {
429
+ if (isOneSignalScriptFailed) {
430
+ reject();
431
+ }
589
432
 
590
- function getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null> {
591
- return new Promise(function (resolve, reject) {
592
- if (!doesOneSignalExist()) {
593
- vueOneSignalFunctionQueue.push({
594
- name: 'getUserId',
595
- args: arguments,
596
- promiseResolver: resolve,
597
- });
598
- return;
599
- }
600
-
601
- window.OneSignal.push(() => {
602
- window.OneSignal.getUserId(callback)
433
+ try {
434
+ window.OneSignalDeferred?.push((OneSignal) => {
435
+ OneSignal.Notifications.getPermissionStatus(onComplete)
603
436
  .then(value => resolve(value))
604
437
  .catch(error => reject(error));
605
438
  });
606
- });
607
- }
439
+ } catch (error) {
440
+ reject(error);
441
+ }
442
+ });
443
+ }
608
444
 
609
- function getSubscription(callback?: Action<boolean>): Promise<boolean> {
610
- return new Promise(function (resolve, reject) {
611
- if (!doesOneSignalExist()) {
612
- vueOneSignalFunctionQueue.push({
613
- name: 'getSubscription',
614
- args: arguments,
615
- promiseResolver: resolve,
616
- });
617
- return;
618
- }
619
-
620
- window.OneSignal.push(() => {
621
- window.OneSignal.getSubscription(callback)
622
- .then(value => resolve(value))
623
- .catch(error => reject(error));
624
- });
625
- });
626
- }
445
+ function notificationsRequestPermission(): Promise<void> {
446
+ return new Promise(function (resolve, reject) {
447
+ if (isOneSignalScriptFailed) {
448
+ reject();
449
+ }
627
450
 
628
- function setEmail(email: string, options?: SetEmailOptions): Promise<string|null> {
629
- return new Promise(function (resolve, reject) {
630
- if (!doesOneSignalExist()) {
631
- vueOneSignalFunctionQueue.push({
632
- name: 'setEmail',
633
- args: arguments,
634
- promiseResolver: resolve,
635
- });
636
- return;
637
- }
638
-
639
- window.OneSignal.push(() => {
640
- window.OneSignal.setEmail(email, options)
451
+ try {
452
+ window.OneSignalDeferred?.push((OneSignal) => {
453
+ OneSignal.Notifications.requestPermission()
641
454
  .then(value => resolve(value))
642
455
  .catch(error => reject(error));
643
456
  });
644
- });
645
- }
457
+ } catch (error) {
458
+ reject(error);
459
+ }
460
+ });
461
+ }
646
462
 
647
- function setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null> {
648
- return new Promise(function (resolve, reject) {
649
- if (!doesOneSignalExist()) {
650
- vueOneSignalFunctionQueue.push({
651
- name: 'setSMSNumber',
652
- args: arguments,
653
- promiseResolver: resolve,
654
- });
655
- return;
656
- }
657
-
658
- window.OneSignal.push(() => {
659
- window.OneSignal.setSMSNumber(smsNumber, options)
660
- .then(value => resolve(value))
661
- .catch(error => reject(error));
662
- });
663
- });
664
- }
463
+ function notificationsAddEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
464
+ function notificationsAddEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
465
+ function notificationsAddEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
665
466
 
666
- function logoutEmail(): Promise<void> {
667
- return new Promise(function (resolve, reject) {
668
- if (!doesOneSignalExist()) {
669
- vueOneSignalFunctionQueue.push({
670
- name: 'logoutEmail',
671
- args: arguments,
672
- promiseResolver: resolve,
673
- });
674
- return;
675
- }
676
-
677
- window.OneSignal.push(() => {
678
- window.OneSignal.logoutEmail()
679
- .then(value => resolve(value))
680
- .catch(error => reject(error));
681
- });
682
- });
683
- }
467
+ function notificationsAddEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
468
+ window.OneSignalDeferred?.push((OneSignal) => {
469
+ OneSignal.Notifications.addEventListener(event, listener)
470
+ });
471
+ }
684
472
 
685
- function logoutSMS(): Promise<void> {
686
- return new Promise(function (resolve, reject) {
687
- if (!doesOneSignalExist()) {
688
- vueOneSignalFunctionQueue.push({
689
- name: 'logoutSMS',
690
- args: arguments,
691
- promiseResolver: resolve,
692
- });
693
- return;
694
- }
695
-
696
- window.OneSignal.push(() => {
697
- window.OneSignal.logoutSMS()
698
- .then(value => resolve(value))
699
- .catch(error => reject(error));
700
- });
701
- });
702
- }
473
+ function notificationsRemoveEventListener(event: 'click' | 'willDisplay' | 'dismiss', listener: (obj: StructuredNotification) => void): void;
474
+ function notificationsRemoveEventListener(event: 'permissionChange', listener: (obj: { to: NotificationPermission }) => void): void;
475
+ function notificationsRemoveEventListener(event: 'permissionPromptDisplay', listener: () => void): void;
703
476
 
704
- function setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void> {
705
- return new Promise(function (resolve, reject) {
706
- if (!doesOneSignalExist()) {
707
- vueOneSignalFunctionQueue.push({
708
- name: 'setExternalUserId',
709
- args: arguments,
710
- promiseResolver: resolve,
711
- });
712
- return;
713
- }
714
-
715
- window.OneSignal.push(() => {
716
- window.OneSignal.setExternalUserId(externalUserId, authHash)
717
- .then(value => resolve(value))
718
- .catch(error => reject(error));
719
- });
720
- });
721
- }
477
+ function notificationsRemoveEventListener(event: NotificationEventName, listener: (obj: any) => void): void {
478
+ window.OneSignalDeferred?.push((OneSignal) => {
479
+ OneSignal.Notifications.removeEventListener(event, listener)
480
+ });
481
+ }
722
482
 
723
- function removeExternalUserId(): Promise<void> {
724
- return new Promise(function (resolve, reject) {
725
- if (!doesOneSignalExist()) {
726
- vueOneSignalFunctionQueue.push({
727
- name: 'removeExternalUserId',
728
- args: arguments,
729
- promiseResolver: resolve,
730
- });
731
- return;
732
- }
733
-
734
- window.OneSignal.push(() => {
735
- window.OneSignal.removeExternalUserId()
736
- .then(value => resolve(value))
737
- .catch(error => reject(error));
738
- });
739
- });
740
- }
483
+ function sessionSendOutcome(outcomeName: string, outcomeWeight?: number): Promise<void> {
484
+ return new Promise(function (resolve, reject) {
485
+ if (isOneSignalScriptFailed) {
486
+ reject();
487
+ }
741
488
 
742
- function getExternalUserId(): Promise<string | undefined | null> {
743
- return new Promise(function (resolve, reject) {
744
- if (!doesOneSignalExist()) {
745
- vueOneSignalFunctionQueue.push({
746
- name: 'getExternalUserId',
747
- args: arguments,
748
- promiseResolver: resolve,
749
- });
750
- return;
751
- }
752
-
753
- window.OneSignal.push(() => {
754
- window.OneSignal.getExternalUserId()
489
+ try {
490
+ window.OneSignalDeferred?.push((OneSignal) => {
491
+ OneSignal.Session.sendOutcome(outcomeName, outcomeWeight)
755
492
  .then(value => resolve(value))
756
493
  .catch(error => reject(error));
757
494
  });
758
- });
759
- }
495
+ } catch (error) {
496
+ reject(error);
497
+ }
498
+ });
499
+ }
760
500
 
761
- function provideUserConsent(consent: boolean): Promise<void> {
762
- return new Promise(function (resolve, reject) {
763
- if (!doesOneSignalExist()) {
764
- vueOneSignalFunctionQueue.push({
765
- name: 'provideUserConsent',
766
- args: arguments,
767
- promiseResolver: resolve,
768
- });
769
- return;
770
- }
771
-
772
- window.OneSignal.push(() => {
773
- window.OneSignal.provideUserConsent(consent)
774
- .then(value => resolve(value))
775
- .catch(error => reject(error));
776
- });
777
- });
778
- }
501
+ function sessionSendUniqueOutcome(outcomeName: string): Promise<void> {
502
+ return new Promise(function (resolve, reject) {
503
+ if (isOneSignalScriptFailed) {
504
+ reject();
505
+ }
779
506
 
780
- function getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
781
- return new Promise(function (resolve, reject) {
782
- if (!doesOneSignalExist()) {
783
- vueOneSignalFunctionQueue.push({
784
- name: 'getEmailId',
785
- args: arguments,
786
- promiseResolver: resolve,
787
- });
788
- return;
789
- }
790
-
791
- window.OneSignal.push(() => {
792
- window.OneSignal.getEmailId(callback)
507
+ try {
508
+ window.OneSignalDeferred?.push((OneSignal) => {
509
+ OneSignal.Session.sendUniqueOutcome(outcomeName)
793
510
  .then(value => resolve(value))
794
511
  .catch(error => reject(error));
795
512
  });
796
- });
797
- }
513
+ } catch (error) {
514
+ reject(error);
515
+ }
516
+ });
517
+ }
518
+
519
+ function userAddAlias(label: string, id: string): void {
520
+ window.OneSignalDeferred?.push((OneSignal) => {
521
+ OneSignal.User.addAlias(label, id)
522
+ });
523
+ }
798
524
 
799
- function getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
800
- return new Promise(function (resolve, reject) {
801
- if (!doesOneSignalExist()) {
802
- vueOneSignalFunctionQueue.push({
803
- name: 'getSMSId',
804
- args: arguments,
805
- promiseResolver: resolve,
806
- });
807
- return;
808
- }
809
-
810
- window.OneSignal.push(() => {
811
- window.OneSignal.getSMSId(callback)
525
+ function userAddAliases(aliases: { [key: string]: string }): void {
526
+ window.OneSignalDeferred?.push((OneSignal) => {
527
+ OneSignal.User.addAliases(aliases)
528
+ });
529
+ }
530
+
531
+ function userRemoveAlias(label: string): void {
532
+ window.OneSignalDeferred?.push((OneSignal) => {
533
+ OneSignal.User.removeAlias(label)
534
+ });
535
+ }
536
+
537
+ function userRemoveAliases(labels: string[]): void {
538
+ window.OneSignalDeferred?.push((OneSignal) => {
539
+ OneSignal.User.removeAliases(labels)
540
+ });
541
+ }
542
+
543
+ function userAddEmail(email: string): void {
544
+ window.OneSignalDeferred?.push((OneSignal) => {
545
+ OneSignal.User.addEmail(email)
546
+ });
547
+ }
548
+
549
+ function userRemoveEmail(email: string): void {
550
+ window.OneSignalDeferred?.push((OneSignal) => {
551
+ OneSignal.User.removeEmail(email)
552
+ });
553
+ }
554
+
555
+ function userAddSms(smsNumber: string): void {
556
+ window.OneSignalDeferred?.push((OneSignal) => {
557
+ OneSignal.User.addSms(smsNumber)
558
+ });
559
+ }
560
+
561
+ function userRemoveSms(smsNumber: string): void {
562
+ window.OneSignalDeferred?.push((OneSignal) => {
563
+ OneSignal.User.removeSms(smsNumber)
564
+ });
565
+ }
566
+
567
+ function pushSubscriptionOptIn(): Promise<void> {
568
+ return new Promise(function (resolve, reject) {
569
+ if (isOneSignalScriptFailed) {
570
+ reject();
571
+ }
572
+
573
+ try {
574
+ window.OneSignalDeferred?.push((OneSignal) => {
575
+ OneSignal.User.PushSubscription.optIn()
812
576
  .then(value => resolve(value))
813
577
  .catch(error => reject(error));
814
578
  });
815
- });
816
- }
579
+ } catch (error) {
580
+ reject(error);
581
+ }
582
+ });
583
+ }
817
584
 
818
- function sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void> {
819
- return new Promise(function (resolve, reject) {
820
- if (!doesOneSignalExist()) {
821
- vueOneSignalFunctionQueue.push({
822
- name: 'sendOutcome',
823
- args: arguments,
824
- promiseResolver: resolve,
825
- });
826
- return;
827
- }
828
-
829
- window.OneSignal.push(() => {
830
- window.OneSignal.sendOutcome(outcomeName, outcomeWeight)
585
+ function pushSubscriptionOptOut(): Promise<void> {
586
+ return new Promise(function (resolve, reject) {
587
+ if (isOneSignalScriptFailed) {
588
+ reject();
589
+ }
590
+
591
+ try {
592
+ window.OneSignalDeferred?.push((OneSignal) => {
593
+ OneSignal.User.PushSubscription.optOut()
831
594
  .then(value => resolve(value))
832
595
  .catch(error => reject(error));
833
596
  });
834
- });
835
- }
597
+ } catch (error) {
598
+ reject(error);
599
+ }
600
+ });
601
+ }
836
602
 
837
- const OneSignalVue: IOneSignal = {
838
- init,
839
- on,
840
- off,
841
- once,
842
- isPushNotificationsEnabled,
843
- showHttpPrompt,
844
- registerForPushNotifications,
845
- setDefaultNotificationUrl,
846
- setDefaultTitle,
847
- getTags,
848
- sendTag,
849
- sendTags,
850
- deleteTag,
851
- deleteTags,
852
- addListenerForNotificationOpened,
853
- setSubscription,
854
- showHttpPermissionRequest,
855
- showNativePrompt,
856
- showSlidedownPrompt,
857
- showCategorySlidedown,
858
- showSmsSlidedown,
859
- showEmailSlidedown,
860
- showSmsAndEmailSlidedown,
861
- getNotificationPermission,
862
- getUserId,
863
- getSubscription,
864
- setEmail,
865
- setSMSNumber,
866
- logoutEmail,
867
- logoutSMS,
868
- setExternalUserId,
869
- removeExternalUserId,
870
- getExternalUserId,
871
- provideUserConsent,
872
- getEmailId,
873
- getSMSId,
874
- sendOutcome,
603
+ function pushSubscriptionAddEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
604
+ window.OneSignalDeferred?.push((OneSignal) => {
605
+ OneSignal.User.PushSubscription.addEventListener(event, listener)
606
+ });
607
+ }
608
+
609
+ function pushSubscriptionRemoveEventListener(event: 'subscriptionChange', listener: (change: SubscriptionChangeEvent) => void): void {
610
+ window.OneSignalDeferred?.push((OneSignal) => {
611
+ OneSignal.User.PushSubscription.removeEventListener(event, listener)
612
+ });
613
+ }
614
+
615
+ function debugSetLogLevel(logLevel: string): void {
616
+ window.OneSignalDeferred?.push((OneSignal) => {
617
+ OneSignal.Debug.setLogLevel(logLevel)
618
+ });
619
+ }
620
+ const PushSubscriptionNamespace: IOneSignalPushSubscription = {
621
+ optIn: pushSubscriptionOptIn,
622
+ optOut: pushSubscriptionOptOut,
623
+ addEventListener: pushSubscriptionAddEventListener,
624
+ removeEventListener: pushSubscriptionRemoveEventListener,
625
+ };
626
+
627
+ const UserNamespace: IOneSignalUser = {
628
+ addAlias: userAddAlias,
629
+ addAliases: userAddAliases,
630
+ removeAlias: userRemoveAlias,
631
+ removeAliases: userRemoveAliases,
632
+ addEmail: userAddEmail,
633
+ removeEmail: userRemoveEmail,
634
+ addSms: userAddSms,
635
+ removeSms: userRemoveSms,
636
+ PushSubscription: PushSubscriptionNamespace,
637
+ };
638
+
639
+ const SessionNamespace: IOneSignalSession = {
640
+ sendOutcome: sessionSendOutcome,
641
+ sendUniqueOutcome: sessionSendUniqueOutcome,
642
+ };
643
+
644
+ const DebugNamespace: IOneSignalDebug = {
645
+ setLogLevel: debugSetLogLevel,
646
+ };
647
+
648
+ const SlidedownNamespace: IOneSignalSlidedown = {
649
+ promptPush: slidedownPromptPush,
650
+ promptPushCategories: slidedownPromptPushCategories,
651
+ promptSms: slidedownPromptSms,
652
+ promptEmail: slidedownPromptEmail,
653
+ promptSmsAndEmail: slidedownPromptSmsAndEmail,
654
+ addEventListener: slidedownAddEventListener,
655
+ removeEventListener: slidedownRemoveEventListener,
875
656
  };
876
657
 
877
- const INJECT_KEY = "onesignal";
658
+ const NotificationsNamespace: IOneSignalNotifications = {
659
+ setDefaultUrl: notificationsSetDefaultUrl,
660
+ setDefaultTitle: notificationsSetDefaultTitle,
661
+ isPushSupported,
662
+ getPermissionStatus: notificationsGetPermissionStatus,
663
+ requestPermission: notificationsRequestPermission,
664
+ addEventListener: notificationsAddEventListener,
665
+ removeEventListener: notificationsRemoveEventListener,
666
+ };
667
+
668
+ const OneSignalNamespace: IOneSignalOneSignal = {
669
+ login: oneSignalLogin,
670
+ logout: oneSignalLogout,
671
+ init,
672
+ setConsentGiven: oneSignalSetConsentGiven,
673
+ setConsentRequired: oneSignalSetConsentRequired,
674
+ Slidedown: SlidedownNamespace,
675
+ Notifications: NotificationsNamespace,
676
+ Session: SessionNamespace,
677
+ User: UserNamespace,
678
+ Debug: DebugNamespace,
679
+ };
878
680
 
879
681
  export const useOneSignal = () => {
880
- return inject(INJECT_KEY);
682
+ return OneSignalNamespace;
881
683
  }
882
684
 
883
685
  const OneSignalVuePlugin = {
884
686
  install(app: App, options: IInitObject) {
885
- app.config.globalProperties.$OneSignal = OneSignalVue as IOneSignal;
687
+ app.config.globalProperties.$OneSignal = OneSignalNamespace as IOneSignalOneSignal;
886
688
  app.config.globalProperties.$OneSignal.init(options);
887
- app.provide(INJECT_KEY, OneSignalVue);
888
689
  }
889
690
  }
890
691