react-onesignal 2.0.0-beta1 → 2.0.3

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 ADDED
@@ -0,0 +1,1170 @@
1
+ const ONESIGNAL_SDK_ID = 'onesignal-sdk';
2
+ const ONE_SIGNAL_SCRIPT_SRC = 'https://cdn.onesignal.com/sdks/OneSignalSDK.js';
3
+ const reactOneSignalFunctionQueue = [];
4
+
5
+ // true if the script is successfully loaded from CDN.
6
+ let isOneSignalInitialized = false;
7
+ // true if the script fails to load from CDN. A separate flag is necessary
8
+ // to disambiguate between a CDN load failure and a delayed call to
9
+ // OneSignal#init.
10
+ let isOneSignalScriptFailed = false;
11
+
12
+ const doesOneSignalExist = () => {
13
+ if (window["OneSignal"]) {
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+
19
+ const handleOnLoad = (resolve: () => void, options: IInitObject) => {
20
+ isOneSignalInitialized = true;
21
+
22
+ // OneSignal is assumed to be loaded correctly because this method
23
+ // is called after the script is successfully loaded by CDN, but
24
+ // just in case.
25
+ window["OneSignal"] = window["OneSignal"] || []
26
+
27
+ window["OneSignal"].push(() => {
28
+ window["OneSignal"].init(options);
29
+ });
30
+
31
+ window["OneSignal"].push(() => {
32
+ processQueuedOneSignalFunctions();
33
+ resolve();
34
+ });
35
+ }
36
+
37
+ const handleOnError = (resolve: () => void) => {
38
+ isOneSignalScriptFailed = true;
39
+ // Ensure that any unresolved functions are cleared from the queue,
40
+ // even in the event of a CDN load failure.
41
+ processQueuedOneSignalFunctions();
42
+ resolve();
43
+ }
44
+
45
+ const processQueuedOneSignalFunctions = () => {
46
+ reactOneSignalFunctionQueue.forEach(element => {
47
+ const { name, args, promiseResolver } = element;
48
+
49
+ if (!!promiseResolver) {
50
+ OneSignalReact[name](...args).then(result => {
51
+ promiseResolver(result);
52
+ });
53
+ } else {
54
+ OneSignalReact[name](...args);
55
+ }
56
+ });
57
+ }
58
+
59
+ const init = (options: IInitObject) => new Promise<void>(resolve => {
60
+ if (isOneSignalInitialized) {
61
+ resolve();
62
+ return;
63
+ }
64
+
65
+ if (!options || !options.appId) {
66
+ throw new Error('You need to provide your OneSignal appId.');
67
+ }
68
+ if (!document) {
69
+ resolve();
70
+ return;
71
+ }
72
+
73
+ const script = document.createElement('script');
74
+ script.id = ONESIGNAL_SDK_ID;
75
+ script.src = ONE_SIGNAL_SCRIPT_SRC;
76
+ script.async = true;
77
+
78
+ script.onload = () => {
79
+ handleOnLoad(resolve, options);
80
+ };
81
+
82
+ // Always resolve whether or not the script is successfully initialized.
83
+ // This is important for users who may block cdn.onesignal.com w/ adblock.
84
+ script.onerror = () => {
85
+ handleOnError(resolve);
86
+ }
87
+
88
+ document.head.appendChild(script);
89
+ });
90
+
91
+ type Action<T> = (item: T) => void;
92
+ interface AutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; slidedownPromptOptions?: IOneSignalAutoPromptOptions; }
93
+ interface RegisterOptions { modalPrompt?: boolean; httpPermissionRequest?: boolean; slidedown?: boolean; autoAccept?: boolean }
94
+ interface SetSMSOptions { identifierAuthHash?: string; }
95
+ interface SetEmailOptions { identifierAuthHash?: string; emailAuthHash?: string; }
96
+ interface TagsObject<T> { [key: string]: T; }
97
+ interface IOneSignalAutoPromptOptions { force?: boolean; forceSlidedownOverNative?: boolean; isInUpdateMode?: boolean; categoryOptions?: IOneSignalCategories; }
98
+ interface IOneSignalCategories { positiveUpdateButton: string; negativeUpdateButton: string; savingButtonText: string; errorButtonText: string; updateMessage: string; tags: IOneSignalTagCategory[]; }
99
+ interface IOneSignalTagCategory { tag: string; label: string; checked?: boolean; }
100
+
101
+ interface IInitObject {
102
+ appId: string;
103
+ subdomainName?: string;
104
+ requiresUserPrivacyConsent?: boolean;
105
+ promptOptions?: object;
106
+ welcomeNotification?: object;
107
+ notifyButton?: object;
108
+ persistNotification?: boolean;
109
+ webhooks?: object;
110
+ autoResubscribe?: boolean;
111
+ autoRegister?: boolean;
112
+ notificationClickHandlerMatch?: string;
113
+ notificationClickHandlerAction?: string;
114
+ serviceWorkerParam?: { scope: string };
115
+ serviceWorkerPath?: string;
116
+ serviceWorkerUpdaterPath?: string;
117
+ path?: string;
118
+ allowLocalhostAsSecureOrigin?: boolean;
119
+ [key: string]: any;
120
+ }
121
+
122
+ interface IOneSignal {
123
+ init(options: IInitObject): Promise<void>
124
+ on(event: string, listener: () => void): void
125
+ off(event: string, listener: () => void): void
126
+ once(event: string, listener: () => void): void
127
+ isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean>
128
+ showHttpPrompt(options?: AutoPromptOptions): Promise<void>
129
+ registerForPushNotifications(options?: RegisterOptions): Promise<void>
130
+ setDefaultNotificationUrl(url: string): Promise<void>
131
+ setDefaultTitle(title: string): Promise<void>
132
+ getTags(callback?: Action<any>): Promise<void>
133
+ sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null>
134
+ sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null>
135
+ deleteTag(tag: string): Promise<Array<string>>
136
+ deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>>
137
+ addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void>
138
+ setSubscription(newSubscription: boolean): Promise<void>
139
+ showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any>
140
+ showNativePrompt(): Promise<void>
141
+ showSlidedownPrompt(options?: AutoPromptOptions): Promise<void>
142
+ showCategorySlidedown(options?: AutoPromptOptions): Promise<void>
143
+ showSmsSlidedown(options?: AutoPromptOptions): Promise<void>
144
+ showEmailSlidedown(options?: AutoPromptOptions): Promise<void>
145
+ showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void>
146
+ getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission>
147
+ getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null>
148
+ getSubscription(callback?: Action<boolean>): Promise<boolean>
149
+ setEmail(email: string, options?: SetEmailOptions): Promise<string|null>
150
+ setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null>
151
+ logoutEmail(): Promise<void>
152
+ logoutSMS(): Promise<void>
153
+ setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void>
154
+ removeExternalUserId(): Promise<void>
155
+ getExternalUserId(): Promise<string | undefined | null>
156
+ provideUserConsent(consent: boolean): Promise<void>
157
+ getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined>
158
+ getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined>
159
+ sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void>
160
+ [index: string]: Function;
161
+ }
162
+
163
+
164
+
165
+ function on(event: string, listener: () => void): void {
166
+ if (!doesOneSignalExist()) {
167
+ reactOneSignalFunctionQueue.push({
168
+ name: 'on',
169
+ args: arguments,
170
+ });
171
+ return;
172
+ }
173
+
174
+ window["OneSignal"].push(() => {
175
+ window["OneSignal"].on(event, listener)
176
+ });
177
+ }
178
+
179
+ function off(event: string, listener: () => void): void {
180
+ if (!doesOneSignalExist()) {
181
+ reactOneSignalFunctionQueue.push({
182
+ name: 'off',
183
+ args: arguments,
184
+ });
185
+ return;
186
+ }
187
+
188
+ window["OneSignal"].push(() => {
189
+ window["OneSignal"].off(event, listener)
190
+ });
191
+ }
192
+
193
+ function once(event: string, listener: () => void): void {
194
+ if (!doesOneSignalExist()) {
195
+ reactOneSignalFunctionQueue.push({
196
+ name: 'once',
197
+ args: arguments,
198
+ });
199
+ return;
200
+ }
201
+
202
+ window["OneSignal"].push(() => {
203
+ window["OneSignal"].once(event, listener)
204
+ });
205
+ }
206
+
207
+ function isPushNotificationsEnabled(callback?: Action<boolean>): Promise<boolean> {
208
+ return new Promise((resolve, reject) => {
209
+ if (isOneSignalScriptFailed) {
210
+ resolve();
211
+ return;
212
+ }
213
+
214
+ if (!doesOneSignalExist()) {
215
+ reactOneSignalFunctionQueue.push({
216
+ name: 'isPushNotificationsEnabled',
217
+ args: arguments,
218
+ promiseResolver: resolve,
219
+ });
220
+ return;
221
+ }
222
+
223
+ try {
224
+ window["OneSignal"].push(() => {
225
+ window["OneSignal"].isPushNotificationsEnabled(callback)
226
+ .then((value: any) => resolve(value))
227
+ .catch((error: any) => reject(error));
228
+ });
229
+ } catch (error) {
230
+ reject(error);
231
+ }
232
+ });
233
+ }
234
+
235
+ function showHttpPrompt(options?: AutoPromptOptions): Promise<void> {
236
+ return new Promise((resolve, reject) => {
237
+ if (isOneSignalScriptFailed) {
238
+ resolve();
239
+ return;
240
+ }
241
+
242
+ if (!doesOneSignalExist()) {
243
+ reactOneSignalFunctionQueue.push({
244
+ name: 'showHttpPrompt',
245
+ args: arguments,
246
+ promiseResolver: resolve,
247
+ });
248
+ return;
249
+ }
250
+
251
+ try {
252
+ window["OneSignal"].push(() => {
253
+ window["OneSignal"].showHttpPrompt(options)
254
+ .then((value: any) => resolve(value))
255
+ .catch((error: any) => reject(error));
256
+ });
257
+ } catch (error) {
258
+ reject(error);
259
+ }
260
+ });
261
+ }
262
+
263
+ function registerForPushNotifications(options?: RegisterOptions): Promise<void> {
264
+ return new Promise((resolve, reject) => {
265
+ if (isOneSignalScriptFailed) {
266
+ resolve();
267
+ return;
268
+ }
269
+
270
+ if (!doesOneSignalExist()) {
271
+ reactOneSignalFunctionQueue.push({
272
+ name: 'registerForPushNotifications',
273
+ args: arguments,
274
+ promiseResolver: resolve,
275
+ });
276
+ return;
277
+ }
278
+
279
+ try {
280
+ window["OneSignal"].push(() => {
281
+ window["OneSignal"].registerForPushNotifications(options)
282
+ .then((value: any) => resolve(value))
283
+ .catch((error: any) => reject(error));
284
+ });
285
+ } catch (error) {
286
+ reject(error);
287
+ }
288
+ });
289
+ }
290
+
291
+ function setDefaultNotificationUrl(url: string): Promise<void> {
292
+ return new Promise((resolve, reject) => {
293
+ if (isOneSignalScriptFailed) {
294
+ resolve();
295
+ return;
296
+ }
297
+
298
+ if (!doesOneSignalExist()) {
299
+ reactOneSignalFunctionQueue.push({
300
+ name: 'setDefaultNotificationUrl',
301
+ args: arguments,
302
+ promiseResolver: resolve,
303
+ });
304
+ return;
305
+ }
306
+
307
+ try {
308
+ window["OneSignal"].push(() => {
309
+ window["OneSignal"].setDefaultNotificationUrl(url)
310
+ .then((value: any) => resolve(value))
311
+ .catch((error: any) => reject(error));
312
+ });
313
+ } catch (error) {
314
+ reject(error);
315
+ }
316
+ });
317
+ }
318
+
319
+ function setDefaultTitle(title: string): Promise<void> {
320
+ return new Promise((resolve, reject) => {
321
+ if (isOneSignalScriptFailed) {
322
+ resolve();
323
+ return;
324
+ }
325
+
326
+ if (!doesOneSignalExist()) {
327
+ reactOneSignalFunctionQueue.push({
328
+ name: 'setDefaultTitle',
329
+ args: arguments,
330
+ promiseResolver: resolve,
331
+ });
332
+ return;
333
+ }
334
+
335
+ try {
336
+ window["OneSignal"].push(() => {
337
+ window["OneSignal"].setDefaultTitle(title)
338
+ .then((value: any) => resolve(value))
339
+ .catch((error: any) => reject(error));
340
+ });
341
+ } catch (error) {
342
+ reject(error);
343
+ }
344
+ });
345
+ }
346
+
347
+ function getTags(callback?: Action<any>): Promise<void> {
348
+ return new Promise((resolve, reject) => {
349
+ if (isOneSignalScriptFailed) {
350
+ resolve();
351
+ return;
352
+ }
353
+
354
+ if (!doesOneSignalExist()) {
355
+ reactOneSignalFunctionQueue.push({
356
+ name: 'getTags',
357
+ args: arguments,
358
+ promiseResolver: resolve,
359
+ });
360
+ return;
361
+ }
362
+
363
+ try {
364
+ window["OneSignal"].push(() => {
365
+ window["OneSignal"].getTags(callback)
366
+ .then((value: any) => resolve(value))
367
+ .catch((error: any) => reject(error));
368
+ });
369
+ } catch (error) {
370
+ reject(error);
371
+ }
372
+ });
373
+ }
374
+
375
+ function sendTag(key: string, value: any, callback?: Action<Object>): Promise<Object | null> {
376
+ return new Promise((resolve, reject) => {
377
+ if (isOneSignalScriptFailed) {
378
+ resolve();
379
+ return;
380
+ }
381
+
382
+ if (!doesOneSignalExist()) {
383
+ reactOneSignalFunctionQueue.push({
384
+ name: 'sendTag',
385
+ args: arguments,
386
+ promiseResolver: resolve,
387
+ });
388
+ return;
389
+ }
390
+
391
+ try {
392
+ window["OneSignal"].push(() => {
393
+ window["OneSignal"].sendTag(key, value, callback)
394
+ .then((value: any) => resolve(value))
395
+ .catch((error: any) => reject(error));
396
+ });
397
+ } catch (error) {
398
+ reject(error);
399
+ }
400
+ });
401
+ }
402
+
403
+ function sendTags(tags: TagsObject<any>, callback?: Action<Object>): Promise<Object | null> {
404
+ return new Promise((resolve, reject) => {
405
+ if (isOneSignalScriptFailed) {
406
+ resolve();
407
+ return;
408
+ }
409
+
410
+ if (!doesOneSignalExist()) {
411
+ reactOneSignalFunctionQueue.push({
412
+ name: 'sendTags',
413
+ args: arguments,
414
+ promiseResolver: resolve,
415
+ });
416
+ return;
417
+ }
418
+
419
+ try {
420
+ window["OneSignal"].push(() => {
421
+ window["OneSignal"].sendTags(tags, callback)
422
+ .then((value: any) => resolve(value))
423
+ .catch((error: any) => reject(error));
424
+ });
425
+ } catch (error) {
426
+ reject(error);
427
+ }
428
+ });
429
+ }
430
+
431
+ function deleteTag(tag: string): Promise<Array<string>> {
432
+ return new Promise((resolve, reject) => {
433
+ if (isOneSignalScriptFailed) {
434
+ resolve();
435
+ return;
436
+ }
437
+
438
+ if (!doesOneSignalExist()) {
439
+ reactOneSignalFunctionQueue.push({
440
+ name: 'deleteTag',
441
+ args: arguments,
442
+ promiseResolver: resolve,
443
+ });
444
+ return;
445
+ }
446
+
447
+ try {
448
+ window["OneSignal"].push(() => {
449
+ window["OneSignal"].deleteTag(tag)
450
+ .then((value: any) => resolve(value))
451
+ .catch((error: any) => reject(error));
452
+ });
453
+ } catch (error) {
454
+ reject(error);
455
+ }
456
+ });
457
+ }
458
+
459
+ function deleteTags(tags: Array<string>, callback?: Action<Array<string>>): Promise<Array<string>> {
460
+ return new Promise((resolve, reject) => {
461
+ if (isOneSignalScriptFailed) {
462
+ resolve();
463
+ return;
464
+ }
465
+
466
+ if (!doesOneSignalExist()) {
467
+ reactOneSignalFunctionQueue.push({
468
+ name: 'deleteTags',
469
+ args: arguments,
470
+ promiseResolver: resolve,
471
+ });
472
+ return;
473
+ }
474
+
475
+ try {
476
+ window["OneSignal"].push(() => {
477
+ window["OneSignal"].deleteTags(tags, callback)
478
+ .then((value: any) => resolve(value))
479
+ .catch((error: any) => reject(error));
480
+ });
481
+ } catch (error) {
482
+ reject(error);
483
+ }
484
+ });
485
+ }
486
+
487
+ function addListenerForNotificationOpened(callback?: Action<Notification>): Promise<void> {
488
+ return new Promise((resolve, reject) => {
489
+ if (isOneSignalScriptFailed) {
490
+ resolve();
491
+ return;
492
+ }
493
+
494
+ if (!doesOneSignalExist()) {
495
+ reactOneSignalFunctionQueue.push({
496
+ name: 'addListenerForNotificationOpened',
497
+ args: arguments,
498
+ promiseResolver: resolve,
499
+ });
500
+ return;
501
+ }
502
+
503
+ try {
504
+ window["OneSignal"].push(() => {
505
+ window["OneSignal"].addListenerForNotificationOpened(callback)
506
+ .then((value: any) => resolve(value))
507
+ .catch((error: any) => reject(error));
508
+ });
509
+ } catch (error) {
510
+ reject(error);
511
+ }
512
+ });
513
+ }
514
+
515
+ function setSubscription(newSubscription: boolean): Promise<void> {
516
+ return new Promise((resolve, reject) => {
517
+ if (isOneSignalScriptFailed) {
518
+ resolve();
519
+ return;
520
+ }
521
+
522
+ if (!doesOneSignalExist()) {
523
+ reactOneSignalFunctionQueue.push({
524
+ name: 'setSubscription',
525
+ args: arguments,
526
+ promiseResolver: resolve,
527
+ });
528
+ return;
529
+ }
530
+
531
+ try {
532
+ window["OneSignal"].push(() => {
533
+ window["OneSignal"].setSubscription(newSubscription)
534
+ .then((value: any) => resolve(value))
535
+ .catch((error: any) => reject(error));
536
+ });
537
+ } catch (error) {
538
+ reject(error);
539
+ }
540
+ });
541
+ }
542
+
543
+ function showHttpPermissionRequest(options?: AutoPromptOptions): Promise<any> {
544
+ return new Promise((resolve, reject) => {
545
+ if (isOneSignalScriptFailed) {
546
+ resolve();
547
+ return;
548
+ }
549
+
550
+ if (!doesOneSignalExist()) {
551
+ reactOneSignalFunctionQueue.push({
552
+ name: 'showHttpPermissionRequest',
553
+ args: arguments,
554
+ promiseResolver: resolve,
555
+ });
556
+ return;
557
+ }
558
+
559
+ try {
560
+ window["OneSignal"].push(() => {
561
+ window["OneSignal"].showHttpPermissionRequest(options)
562
+ .then((value: any) => resolve(value))
563
+ .catch((error: any) => reject(error));
564
+ });
565
+ } catch (error) {
566
+ reject(error);
567
+ }
568
+ });
569
+ }
570
+
571
+ function showNativePrompt(): Promise<void> {
572
+ return new Promise((resolve, reject) => {
573
+ if (isOneSignalScriptFailed) {
574
+ resolve();
575
+ return;
576
+ }
577
+
578
+ if (!doesOneSignalExist()) {
579
+ reactOneSignalFunctionQueue.push({
580
+ name: 'showNativePrompt',
581
+ args: arguments,
582
+ promiseResolver: resolve,
583
+ });
584
+ return;
585
+ }
586
+
587
+ try {
588
+ window["OneSignal"].push(() => {
589
+ window["OneSignal"].showNativePrompt()
590
+ .then((value: any) => resolve(value))
591
+ .catch((error: any) => reject(error));
592
+ });
593
+ } catch (error) {
594
+ reject(error);
595
+ }
596
+ });
597
+ }
598
+
599
+ function showSlidedownPrompt(options?: AutoPromptOptions): Promise<void> {
600
+ return new Promise((resolve, reject) => {
601
+ if (isOneSignalScriptFailed) {
602
+ resolve();
603
+ return;
604
+ }
605
+
606
+ if (!doesOneSignalExist()) {
607
+ reactOneSignalFunctionQueue.push({
608
+ name: 'showSlidedownPrompt',
609
+ args: arguments,
610
+ promiseResolver: resolve,
611
+ });
612
+ return;
613
+ }
614
+
615
+ try {
616
+ window["OneSignal"].push(() => {
617
+ window["OneSignal"].showSlidedownPrompt(options)
618
+ .then((value: any) => resolve(value))
619
+ .catch((error: any) => reject(error));
620
+ });
621
+ } catch (error) {
622
+ reject(error);
623
+ }
624
+ });
625
+ }
626
+
627
+ function showCategorySlidedown(options?: AutoPromptOptions): Promise<void> {
628
+ return new Promise((resolve, reject) => {
629
+ if (isOneSignalScriptFailed) {
630
+ resolve();
631
+ return;
632
+ }
633
+
634
+ if (!doesOneSignalExist()) {
635
+ reactOneSignalFunctionQueue.push({
636
+ name: 'showCategorySlidedown',
637
+ args: arguments,
638
+ promiseResolver: resolve,
639
+ });
640
+ return;
641
+ }
642
+
643
+ try {
644
+ window["OneSignal"].push(() => {
645
+ window["OneSignal"].showCategorySlidedown(options)
646
+ .then((value: any) => resolve(value))
647
+ .catch((error: any) => reject(error));
648
+ });
649
+ } catch (error) {
650
+ reject(error);
651
+ }
652
+ });
653
+ }
654
+
655
+ function showSmsSlidedown(options?: AutoPromptOptions): Promise<void> {
656
+ return new Promise((resolve, reject) => {
657
+ if (isOneSignalScriptFailed) {
658
+ resolve();
659
+ return;
660
+ }
661
+
662
+ if (!doesOneSignalExist()) {
663
+ reactOneSignalFunctionQueue.push({
664
+ name: 'showSmsSlidedown',
665
+ args: arguments,
666
+ promiseResolver: resolve,
667
+ });
668
+ return;
669
+ }
670
+
671
+ try {
672
+ window["OneSignal"].push(() => {
673
+ window["OneSignal"].showSmsSlidedown(options)
674
+ .then((value: any) => resolve(value))
675
+ .catch((error: any) => reject(error));
676
+ });
677
+ } catch (error) {
678
+ reject(error);
679
+ }
680
+ });
681
+ }
682
+
683
+ function showEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
684
+ return new Promise((resolve, reject) => {
685
+ if (isOneSignalScriptFailed) {
686
+ resolve();
687
+ return;
688
+ }
689
+
690
+ if (!doesOneSignalExist()) {
691
+ reactOneSignalFunctionQueue.push({
692
+ name: 'showEmailSlidedown',
693
+ args: arguments,
694
+ promiseResolver: resolve,
695
+ });
696
+ return;
697
+ }
698
+
699
+ try {
700
+ window["OneSignal"].push(() => {
701
+ window["OneSignal"].showEmailSlidedown(options)
702
+ .then((value: any) => resolve(value))
703
+ .catch((error: any) => reject(error));
704
+ });
705
+ } catch (error) {
706
+ reject(error);
707
+ }
708
+ });
709
+ }
710
+
711
+ function showSmsAndEmailSlidedown(options?: AutoPromptOptions): Promise<void> {
712
+ return new Promise((resolve, reject) => {
713
+ if (isOneSignalScriptFailed) {
714
+ resolve();
715
+ return;
716
+ }
717
+
718
+ if (!doesOneSignalExist()) {
719
+ reactOneSignalFunctionQueue.push({
720
+ name: 'showSmsAndEmailSlidedown',
721
+ args: arguments,
722
+ promiseResolver: resolve,
723
+ });
724
+ return;
725
+ }
726
+
727
+ try {
728
+ window["OneSignal"].push(() => {
729
+ window["OneSignal"].showSmsAndEmailSlidedown(options)
730
+ .then((value: any) => resolve(value))
731
+ .catch((error: any) => reject(error));
732
+ });
733
+ } catch (error) {
734
+ reject(error);
735
+ }
736
+ });
737
+ }
738
+
739
+ function getNotificationPermission(onComplete?: Action<NotificationPermission>): Promise<NotificationPermission> {
740
+ return new Promise((resolve, reject) => {
741
+ if (isOneSignalScriptFailed) {
742
+ resolve();
743
+ return;
744
+ }
745
+
746
+ if (!doesOneSignalExist()) {
747
+ reactOneSignalFunctionQueue.push({
748
+ name: 'getNotificationPermission',
749
+ args: arguments,
750
+ promiseResolver: resolve,
751
+ });
752
+ return;
753
+ }
754
+
755
+ try {
756
+ window["OneSignal"].push(() => {
757
+ window["OneSignal"].getNotificationPermission(onComplete)
758
+ .then((value: any) => resolve(value))
759
+ .catch((error: any) => reject(error));
760
+ });
761
+ } catch (error) {
762
+ reject(error);
763
+ }
764
+ });
765
+ }
766
+
767
+ function getUserId(callback?: Action<string | undefined | null>): Promise<string | undefined | null> {
768
+ return new Promise((resolve, reject) => {
769
+ if (isOneSignalScriptFailed) {
770
+ resolve();
771
+ return;
772
+ }
773
+
774
+ if (!doesOneSignalExist()) {
775
+ reactOneSignalFunctionQueue.push({
776
+ name: 'getUserId',
777
+ args: arguments,
778
+ promiseResolver: resolve,
779
+ });
780
+ return;
781
+ }
782
+
783
+ try {
784
+ window["OneSignal"].push(() => {
785
+ window["OneSignal"].getUserId(callback)
786
+ .then((value: any) => resolve(value))
787
+ .catch((error: any) => reject(error));
788
+ });
789
+ } catch (error) {
790
+ reject(error);
791
+ }
792
+ });
793
+ }
794
+
795
+ function getSubscription(callback?: Action<boolean>): Promise<boolean> {
796
+ return new Promise((resolve, reject) => {
797
+ if (isOneSignalScriptFailed) {
798
+ resolve();
799
+ return;
800
+ }
801
+
802
+ if (!doesOneSignalExist()) {
803
+ reactOneSignalFunctionQueue.push({
804
+ name: 'getSubscription',
805
+ args: arguments,
806
+ promiseResolver: resolve,
807
+ });
808
+ return;
809
+ }
810
+
811
+ try {
812
+ window["OneSignal"].push(() => {
813
+ window["OneSignal"].getSubscription(callback)
814
+ .then((value: any) => resolve(value))
815
+ .catch((error: any) => reject(error));
816
+ });
817
+ } catch (error) {
818
+ reject(error);
819
+ }
820
+ });
821
+ }
822
+
823
+ function setEmail(email: string, options?: SetEmailOptions): Promise<string|null> {
824
+ return new Promise((resolve, reject) => {
825
+ if (isOneSignalScriptFailed) {
826
+ resolve();
827
+ return;
828
+ }
829
+
830
+ if (!doesOneSignalExist()) {
831
+ reactOneSignalFunctionQueue.push({
832
+ name: 'setEmail',
833
+ args: arguments,
834
+ promiseResolver: resolve,
835
+ });
836
+ return;
837
+ }
838
+
839
+ try {
840
+ window["OneSignal"].push(() => {
841
+ window["OneSignal"].setEmail(email, options)
842
+ .then((value: any) => resolve(value))
843
+ .catch((error: any) => reject(error));
844
+ });
845
+ } catch (error) {
846
+ reject(error);
847
+ }
848
+ });
849
+ }
850
+
851
+ function setSMSNumber(smsNumber: string, options?: SetSMSOptions): Promise<string | null> {
852
+ return new Promise((resolve, reject) => {
853
+ if (isOneSignalScriptFailed) {
854
+ resolve();
855
+ return;
856
+ }
857
+
858
+ if (!doesOneSignalExist()) {
859
+ reactOneSignalFunctionQueue.push({
860
+ name: 'setSMSNumber',
861
+ args: arguments,
862
+ promiseResolver: resolve,
863
+ });
864
+ return;
865
+ }
866
+
867
+ try {
868
+ window["OneSignal"].push(() => {
869
+ window["OneSignal"].setSMSNumber(smsNumber, options)
870
+ .then((value: any) => resolve(value))
871
+ .catch((error: any) => reject(error));
872
+ });
873
+ } catch (error) {
874
+ reject(error);
875
+ }
876
+ });
877
+ }
878
+
879
+ function logoutEmail(): Promise<void> {
880
+ return new Promise((resolve, reject) => {
881
+ if (isOneSignalScriptFailed) {
882
+ resolve();
883
+ return;
884
+ }
885
+
886
+ if (!doesOneSignalExist()) {
887
+ reactOneSignalFunctionQueue.push({
888
+ name: 'logoutEmail',
889
+ args: arguments,
890
+ promiseResolver: resolve,
891
+ });
892
+ return;
893
+ }
894
+
895
+ try {
896
+ window["OneSignal"].push(() => {
897
+ window["OneSignal"].logoutEmail()
898
+ .then((value: any) => resolve(value))
899
+ .catch((error: any) => reject(error));
900
+ });
901
+ } catch (error) {
902
+ reject(error);
903
+ }
904
+ });
905
+ }
906
+
907
+ function logoutSMS(): Promise<void> {
908
+ return new Promise((resolve, reject) => {
909
+ if (isOneSignalScriptFailed) {
910
+ resolve();
911
+ return;
912
+ }
913
+
914
+ if (!doesOneSignalExist()) {
915
+ reactOneSignalFunctionQueue.push({
916
+ name: 'logoutSMS',
917
+ args: arguments,
918
+ promiseResolver: resolve,
919
+ });
920
+ return;
921
+ }
922
+
923
+ try {
924
+ window["OneSignal"].push(() => {
925
+ window["OneSignal"].logoutSMS()
926
+ .then((value: any) => resolve(value))
927
+ .catch((error: any) => reject(error));
928
+ });
929
+ } catch (error) {
930
+ reject(error);
931
+ }
932
+ });
933
+ }
934
+
935
+ function setExternalUserId(externalUserId: string | undefined | null, authHash?: string): Promise<void> {
936
+ return new Promise((resolve, reject) => {
937
+ if (isOneSignalScriptFailed) {
938
+ resolve();
939
+ return;
940
+ }
941
+
942
+ if (!doesOneSignalExist()) {
943
+ reactOneSignalFunctionQueue.push({
944
+ name: 'setExternalUserId',
945
+ args: arguments,
946
+ promiseResolver: resolve,
947
+ });
948
+ return;
949
+ }
950
+
951
+ try {
952
+ window["OneSignal"].push(() => {
953
+ window["OneSignal"].setExternalUserId(externalUserId, authHash)
954
+ .then((value: any) => resolve(value))
955
+ .catch((error: any) => reject(error));
956
+ });
957
+ } catch (error) {
958
+ reject(error);
959
+ }
960
+ });
961
+ }
962
+
963
+ function removeExternalUserId(): Promise<void> {
964
+ return new Promise((resolve, reject) => {
965
+ if (isOneSignalScriptFailed) {
966
+ resolve();
967
+ return;
968
+ }
969
+
970
+ if (!doesOneSignalExist()) {
971
+ reactOneSignalFunctionQueue.push({
972
+ name: 'removeExternalUserId',
973
+ args: arguments,
974
+ promiseResolver: resolve,
975
+ });
976
+ return;
977
+ }
978
+
979
+ try {
980
+ window["OneSignal"].push(() => {
981
+ window["OneSignal"].removeExternalUserId()
982
+ .then((value: any) => resolve(value))
983
+ .catch((error: any) => reject(error));
984
+ });
985
+ } catch (error) {
986
+ reject(error);
987
+ }
988
+ });
989
+ }
990
+
991
+ function getExternalUserId(): Promise<string | undefined | null> {
992
+ return new Promise((resolve, reject) => {
993
+ if (isOneSignalScriptFailed) {
994
+ resolve();
995
+ return;
996
+ }
997
+
998
+ if (!doesOneSignalExist()) {
999
+ reactOneSignalFunctionQueue.push({
1000
+ name: 'getExternalUserId',
1001
+ args: arguments,
1002
+ promiseResolver: resolve,
1003
+ });
1004
+ return;
1005
+ }
1006
+
1007
+ try {
1008
+ window["OneSignal"].push(() => {
1009
+ window["OneSignal"].getExternalUserId()
1010
+ .then((value: any) => resolve(value))
1011
+ .catch((error: any) => reject(error));
1012
+ });
1013
+ } catch (error) {
1014
+ reject(error);
1015
+ }
1016
+ });
1017
+ }
1018
+
1019
+ function provideUserConsent(consent: boolean): Promise<void> {
1020
+ return new Promise((resolve, reject) => {
1021
+ if (isOneSignalScriptFailed) {
1022
+ resolve();
1023
+ return;
1024
+ }
1025
+
1026
+ if (!doesOneSignalExist()) {
1027
+ reactOneSignalFunctionQueue.push({
1028
+ name: 'provideUserConsent',
1029
+ args: arguments,
1030
+ promiseResolver: resolve,
1031
+ });
1032
+ return;
1033
+ }
1034
+
1035
+ try {
1036
+ window["OneSignal"].push(() => {
1037
+ window["OneSignal"].provideUserConsent(consent)
1038
+ .then((value: any) => resolve(value))
1039
+ .catch((error: any) => reject(error));
1040
+ });
1041
+ } catch (error) {
1042
+ reject(error);
1043
+ }
1044
+ });
1045
+ }
1046
+
1047
+ function getEmailId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
1048
+ return new Promise((resolve, reject) => {
1049
+ if (isOneSignalScriptFailed) {
1050
+ resolve();
1051
+ return;
1052
+ }
1053
+
1054
+ if (!doesOneSignalExist()) {
1055
+ reactOneSignalFunctionQueue.push({
1056
+ name: 'getEmailId',
1057
+ args: arguments,
1058
+ promiseResolver: resolve,
1059
+ });
1060
+ return;
1061
+ }
1062
+
1063
+ try {
1064
+ window["OneSignal"].push(() => {
1065
+ window["OneSignal"].getEmailId(callback)
1066
+ .then((value: any) => resolve(value))
1067
+ .catch((error: any) => reject(error));
1068
+ });
1069
+ } catch (error) {
1070
+ reject(error);
1071
+ }
1072
+ });
1073
+ }
1074
+
1075
+ function getSMSId(callback?: Action<string | undefined>): Promise<string | null | undefined> {
1076
+ return new Promise((resolve, reject) => {
1077
+ if (isOneSignalScriptFailed) {
1078
+ resolve();
1079
+ return;
1080
+ }
1081
+
1082
+ if (!doesOneSignalExist()) {
1083
+ reactOneSignalFunctionQueue.push({
1084
+ name: 'getSMSId',
1085
+ args: arguments,
1086
+ promiseResolver: resolve,
1087
+ });
1088
+ return;
1089
+ }
1090
+
1091
+ try {
1092
+ window["OneSignal"].push(() => {
1093
+ window["OneSignal"].getSMSId(callback)
1094
+ .then((value: any) => resolve(value))
1095
+ .catch((error: any) => reject(error));
1096
+ });
1097
+ } catch (error) {
1098
+ reject(error);
1099
+ }
1100
+ });
1101
+ }
1102
+
1103
+ function sendOutcome(outcomeName: string, outcomeWeight?: number | undefined): Promise<void> {
1104
+ return new Promise((resolve, reject) => {
1105
+ if (isOneSignalScriptFailed) {
1106
+ resolve();
1107
+ return;
1108
+ }
1109
+
1110
+ if (!doesOneSignalExist()) {
1111
+ reactOneSignalFunctionQueue.push({
1112
+ name: 'sendOutcome',
1113
+ args: arguments,
1114
+ promiseResolver: resolve,
1115
+ });
1116
+ return;
1117
+ }
1118
+
1119
+ try {
1120
+ window["OneSignal"].push(() => {
1121
+ window["OneSignal"].sendOutcome(outcomeName, outcomeWeight)
1122
+ .then((value: any) => resolve(value))
1123
+ .catch((error: any) => reject(error));
1124
+ });
1125
+ } catch (error) {
1126
+ reject(error);
1127
+ }
1128
+ });
1129
+ }
1130
+
1131
+ const OneSignalReact: IOneSignal = {
1132
+ init,
1133
+ on,
1134
+ off,
1135
+ once,
1136
+ isPushNotificationsEnabled,
1137
+ showHttpPrompt,
1138
+ registerForPushNotifications,
1139
+ setDefaultNotificationUrl,
1140
+ setDefaultTitle,
1141
+ getTags,
1142
+ sendTag,
1143
+ sendTags,
1144
+ deleteTag,
1145
+ deleteTags,
1146
+ addListenerForNotificationOpened,
1147
+ setSubscription,
1148
+ showHttpPermissionRequest,
1149
+ showNativePrompt,
1150
+ showSlidedownPrompt,
1151
+ showCategorySlidedown,
1152
+ showSmsSlidedown,
1153
+ showEmailSlidedown,
1154
+ showSmsAndEmailSlidedown,
1155
+ getNotificationPermission,
1156
+ getUserId,
1157
+ getSubscription,
1158
+ setEmail,
1159
+ setSMSNumber,
1160
+ logoutEmail,
1161
+ logoutSMS,
1162
+ setExternalUserId,
1163
+ removeExternalUserId,
1164
+ getExternalUserId,
1165
+ provideUserConsent,
1166
+ getEmailId,
1167
+ getSMSId,
1168
+ sendOutcome,
1169
+ };
1170
+ export default OneSignalReact