onesignal-vue 1.0.2 → 2.0.0-beta.2

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