react-onesignal 2.0.2 → 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/dist/index.js CHANGED
@@ -2,16 +2,39 @@
2
2
 
3
3
  const ONESIGNAL_SDK_ID = 'onesignal-sdk';
4
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
5
  const reactOneSignalFunctionQueue = [];
7
- const MAX_TIMEOUT = 30;
6
+ // true if the script is successfully loaded from CDN.
8
7
  let isOneSignalInitialized = false;
9
- const injectScript = () => {
10
- const script = document.createElement('script');
11
- script.id = ONESIGNAL_SDK_ID;
12
- script.src = ONE_SIGNAL_SCRIPT_SRC;
13
- script.async = true;
14
- document.head.appendChild(script);
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
+ const doesOneSignalExist = () => {
13
+ if (window["OneSignal"]) {
14
+ return true;
15
+ }
16
+ return false;
17
+ };
18
+ const handleOnLoad = (resolve, options) => {
19
+ isOneSignalInitialized = true;
20
+ // OneSignal is assumed to be loaded correctly because this method
21
+ // is called after the script is successfully loaded by CDN, but
22
+ // just in case.
23
+ window["OneSignal"] = window["OneSignal"] || [];
24
+ window["OneSignal"].push(() => {
25
+ window["OneSignal"].init(options);
26
+ });
27
+ window["OneSignal"].push(() => {
28
+ processQueuedOneSignalFunctions();
29
+ resolve();
30
+ });
31
+ };
32
+ const handleOnError = (resolve) => {
33
+ isOneSignalScriptFailed = true;
34
+ // Ensure that any unresolved functions are cleared from the queue,
35
+ // even in the event of a CDN load failure.
36
+ processQueuedOneSignalFunctions();
37
+ resolve();
15
38
  };
16
39
  const processQueuedOneSignalFunctions = () => {
17
40
  reactOneSignalFunctionQueue.forEach(element => {
@@ -26,46 +49,36 @@ const processQueuedOneSignalFunctions = () => {
26
49
  }
27
50
  });
28
51
  };
29
- const doesOneSignalExist = () => {
30
- if (window["OneSignal"]) {
31
- return true;
32
- }
33
- return false;
34
- };
35
- const setupOneSignalIfMissing = () => {
36
- if (!doesOneSignalExist()) {
37
- window["OneSignal"] = window["OneSignal"] || [];
38
- }
39
- };
40
52
  const init = (options) => new Promise(resolve => {
41
53
  if (isOneSignalInitialized) {
54
+ resolve();
42
55
  return;
43
56
  }
44
57
  if (!options || !options.appId) {
45
58
  throw new Error('You need to provide your OneSignal appId.');
46
59
  }
47
60
  if (!document) {
61
+ resolve();
48
62
  return;
49
63
  }
50
- injectScript();
51
- setupOneSignalIfMissing();
52
- window["OneSignal"].push(() => {
53
- window["OneSignal"].init(options);
54
- });
55
- const timeout = setTimeout(() => {
56
- console.error(ONESIGNAL_NOT_SETUP_ERROR);
57
- }, MAX_TIMEOUT * 1000);
58
- window["OneSignal"].push(() => {
59
- clearTimeout(timeout);
60
- processQueuedOneSignalFunctions();
61
- resolve();
62
- });
63
- isOneSignalInitialized = true;
64
+ const script = document.createElement('script');
65
+ script.id = ONESIGNAL_SDK_ID;
66
+ script.src = ONE_SIGNAL_SCRIPT_SRC;
67
+ script.async = true;
68
+ script.onload = () => {
69
+ handleOnLoad(resolve, options);
70
+ };
71
+ // Always resolve whether or not the script is successfully initialized.
72
+ // This is important for users who may block cdn.onesignal.com w/ adblock.
73
+ script.onerror = () => {
74
+ handleOnError(resolve);
75
+ };
76
+ document.head.appendChild(script);
64
77
  });
65
78
  function on(event, listener) {
66
79
  if (!doesOneSignalExist()) {
67
80
  reactOneSignalFunctionQueue.push({
68
- name: "on",
81
+ name: 'on',
69
82
  args: arguments,
70
83
  });
71
84
  return;
@@ -77,7 +90,7 @@ function on(event, listener) {
77
90
  function off(event, listener) {
78
91
  if (!doesOneSignalExist()) {
79
92
  reactOneSignalFunctionQueue.push({
80
- name: "off",
93
+ name: 'off',
81
94
  args: arguments,
82
95
  });
83
96
  return;
@@ -89,7 +102,7 @@ function off(event, listener) {
89
102
  function once(event, listener) {
90
103
  if (!doesOneSignalExist()) {
91
104
  reactOneSignalFunctionQueue.push({
92
- name: "once",
105
+ name: 'once',
93
106
  args: arguments,
94
107
  });
95
108
  return;
@@ -100,9 +113,13 @@ function once(event, listener) {
100
113
  }
101
114
  function isPushNotificationsEnabled(callback) {
102
115
  return new Promise((resolve, reject) => {
116
+ if (isOneSignalScriptFailed) {
117
+ resolve();
118
+ return;
119
+ }
103
120
  if (!doesOneSignalExist()) {
104
121
  reactOneSignalFunctionQueue.push({
105
- name: "isPushNotificationsEnabled",
122
+ name: 'isPushNotificationsEnabled',
106
123
  args: arguments,
107
124
  promiseResolver: resolve,
108
125
  });
@@ -122,9 +139,13 @@ function isPushNotificationsEnabled(callback) {
122
139
  }
123
140
  function showHttpPrompt(options) {
124
141
  return new Promise((resolve, reject) => {
142
+ if (isOneSignalScriptFailed) {
143
+ resolve();
144
+ return;
145
+ }
125
146
  if (!doesOneSignalExist()) {
126
147
  reactOneSignalFunctionQueue.push({
127
- name: "showHttpPrompt",
148
+ name: 'showHttpPrompt',
128
149
  args: arguments,
129
150
  promiseResolver: resolve,
130
151
  });
@@ -144,9 +165,13 @@ function showHttpPrompt(options) {
144
165
  }
145
166
  function registerForPushNotifications(options) {
146
167
  return new Promise((resolve, reject) => {
168
+ if (isOneSignalScriptFailed) {
169
+ resolve();
170
+ return;
171
+ }
147
172
  if (!doesOneSignalExist()) {
148
173
  reactOneSignalFunctionQueue.push({
149
- name: "registerForPushNotifications",
174
+ name: 'registerForPushNotifications',
150
175
  args: arguments,
151
176
  promiseResolver: resolve,
152
177
  });
@@ -166,9 +191,13 @@ function registerForPushNotifications(options) {
166
191
  }
167
192
  function setDefaultNotificationUrl(url) {
168
193
  return new Promise((resolve, reject) => {
194
+ if (isOneSignalScriptFailed) {
195
+ resolve();
196
+ return;
197
+ }
169
198
  if (!doesOneSignalExist()) {
170
199
  reactOneSignalFunctionQueue.push({
171
- name: "setDefaultNotificationUrl",
200
+ name: 'setDefaultNotificationUrl',
172
201
  args: arguments,
173
202
  promiseResolver: resolve,
174
203
  });
@@ -188,9 +217,13 @@ function setDefaultNotificationUrl(url) {
188
217
  }
189
218
  function setDefaultTitle(title) {
190
219
  return new Promise((resolve, reject) => {
220
+ if (isOneSignalScriptFailed) {
221
+ resolve();
222
+ return;
223
+ }
191
224
  if (!doesOneSignalExist()) {
192
225
  reactOneSignalFunctionQueue.push({
193
- name: "setDefaultTitle",
226
+ name: 'setDefaultTitle',
194
227
  args: arguments,
195
228
  promiseResolver: resolve,
196
229
  });
@@ -210,9 +243,13 @@ function setDefaultTitle(title) {
210
243
  }
211
244
  function getTags(callback) {
212
245
  return new Promise((resolve, reject) => {
246
+ if (isOneSignalScriptFailed) {
247
+ resolve();
248
+ return;
249
+ }
213
250
  if (!doesOneSignalExist()) {
214
251
  reactOneSignalFunctionQueue.push({
215
- name: "getTags",
252
+ name: 'getTags',
216
253
  args: arguments,
217
254
  promiseResolver: resolve,
218
255
  });
@@ -232,9 +269,13 @@ function getTags(callback) {
232
269
  }
233
270
  function sendTag(key, value, callback) {
234
271
  return new Promise((resolve, reject) => {
272
+ if (isOneSignalScriptFailed) {
273
+ resolve();
274
+ return;
275
+ }
235
276
  if (!doesOneSignalExist()) {
236
277
  reactOneSignalFunctionQueue.push({
237
- name: "sendTag",
278
+ name: 'sendTag',
238
279
  args: arguments,
239
280
  promiseResolver: resolve,
240
281
  });
@@ -254,9 +295,13 @@ function sendTag(key, value, callback) {
254
295
  }
255
296
  function sendTags(tags, callback) {
256
297
  return new Promise((resolve, reject) => {
298
+ if (isOneSignalScriptFailed) {
299
+ resolve();
300
+ return;
301
+ }
257
302
  if (!doesOneSignalExist()) {
258
303
  reactOneSignalFunctionQueue.push({
259
- name: "sendTags",
304
+ name: 'sendTags',
260
305
  args: arguments,
261
306
  promiseResolver: resolve,
262
307
  });
@@ -276,9 +321,13 @@ function sendTags(tags, callback) {
276
321
  }
277
322
  function deleteTag(tag) {
278
323
  return new Promise((resolve, reject) => {
324
+ if (isOneSignalScriptFailed) {
325
+ resolve();
326
+ return;
327
+ }
279
328
  if (!doesOneSignalExist()) {
280
329
  reactOneSignalFunctionQueue.push({
281
- name: "deleteTag",
330
+ name: 'deleteTag',
282
331
  args: arguments,
283
332
  promiseResolver: resolve,
284
333
  });
@@ -298,9 +347,13 @@ function deleteTag(tag) {
298
347
  }
299
348
  function deleteTags(tags, callback) {
300
349
  return new Promise((resolve, reject) => {
350
+ if (isOneSignalScriptFailed) {
351
+ resolve();
352
+ return;
353
+ }
301
354
  if (!doesOneSignalExist()) {
302
355
  reactOneSignalFunctionQueue.push({
303
- name: "deleteTags",
356
+ name: 'deleteTags',
304
357
  args: arguments,
305
358
  promiseResolver: resolve,
306
359
  });
@@ -320,9 +373,13 @@ function deleteTags(tags, callback) {
320
373
  }
321
374
  function addListenerForNotificationOpened(callback) {
322
375
  return new Promise((resolve, reject) => {
376
+ if (isOneSignalScriptFailed) {
377
+ resolve();
378
+ return;
379
+ }
323
380
  if (!doesOneSignalExist()) {
324
381
  reactOneSignalFunctionQueue.push({
325
- name: "addListenerForNotificationOpened",
382
+ name: 'addListenerForNotificationOpened',
326
383
  args: arguments,
327
384
  promiseResolver: resolve,
328
385
  });
@@ -342,9 +399,13 @@ function addListenerForNotificationOpened(callback) {
342
399
  }
343
400
  function setSubscription(newSubscription) {
344
401
  return new Promise((resolve, reject) => {
402
+ if (isOneSignalScriptFailed) {
403
+ resolve();
404
+ return;
405
+ }
345
406
  if (!doesOneSignalExist()) {
346
407
  reactOneSignalFunctionQueue.push({
347
- name: "setSubscription",
408
+ name: 'setSubscription',
348
409
  args: arguments,
349
410
  promiseResolver: resolve,
350
411
  });
@@ -364,9 +425,13 @@ function setSubscription(newSubscription) {
364
425
  }
365
426
  function showHttpPermissionRequest(options) {
366
427
  return new Promise((resolve, reject) => {
428
+ if (isOneSignalScriptFailed) {
429
+ resolve();
430
+ return;
431
+ }
367
432
  if (!doesOneSignalExist()) {
368
433
  reactOneSignalFunctionQueue.push({
369
- name: "showHttpPermissionRequest",
434
+ name: 'showHttpPermissionRequest',
370
435
  args: arguments,
371
436
  promiseResolver: resolve,
372
437
  });
@@ -386,9 +451,13 @@ function showHttpPermissionRequest(options) {
386
451
  }
387
452
  function showNativePrompt() {
388
453
  return new Promise((resolve, reject) => {
454
+ if (isOneSignalScriptFailed) {
455
+ resolve();
456
+ return;
457
+ }
389
458
  if (!doesOneSignalExist()) {
390
459
  reactOneSignalFunctionQueue.push({
391
- name: "showNativePrompt",
460
+ name: 'showNativePrompt',
392
461
  args: arguments,
393
462
  promiseResolver: resolve,
394
463
  });
@@ -408,9 +477,13 @@ function showNativePrompt() {
408
477
  }
409
478
  function showSlidedownPrompt(options) {
410
479
  return new Promise((resolve, reject) => {
480
+ if (isOneSignalScriptFailed) {
481
+ resolve();
482
+ return;
483
+ }
411
484
  if (!doesOneSignalExist()) {
412
485
  reactOneSignalFunctionQueue.push({
413
- name: "showSlidedownPrompt",
486
+ name: 'showSlidedownPrompt',
414
487
  args: arguments,
415
488
  promiseResolver: resolve,
416
489
  });
@@ -430,9 +503,13 @@ function showSlidedownPrompt(options) {
430
503
  }
431
504
  function showCategorySlidedown(options) {
432
505
  return new Promise((resolve, reject) => {
506
+ if (isOneSignalScriptFailed) {
507
+ resolve();
508
+ return;
509
+ }
433
510
  if (!doesOneSignalExist()) {
434
511
  reactOneSignalFunctionQueue.push({
435
- name: "showCategorySlidedown",
512
+ name: 'showCategorySlidedown',
436
513
  args: arguments,
437
514
  promiseResolver: resolve,
438
515
  });
@@ -452,9 +529,13 @@ function showCategorySlidedown(options) {
452
529
  }
453
530
  function showSmsSlidedown(options) {
454
531
  return new Promise((resolve, reject) => {
532
+ if (isOneSignalScriptFailed) {
533
+ resolve();
534
+ return;
535
+ }
455
536
  if (!doesOneSignalExist()) {
456
537
  reactOneSignalFunctionQueue.push({
457
- name: "showSmsSlidedown",
538
+ name: 'showSmsSlidedown',
458
539
  args: arguments,
459
540
  promiseResolver: resolve,
460
541
  });
@@ -474,9 +555,13 @@ function showSmsSlidedown(options) {
474
555
  }
475
556
  function showEmailSlidedown(options) {
476
557
  return new Promise((resolve, reject) => {
558
+ if (isOneSignalScriptFailed) {
559
+ resolve();
560
+ return;
561
+ }
477
562
  if (!doesOneSignalExist()) {
478
563
  reactOneSignalFunctionQueue.push({
479
- name: "showEmailSlidedown",
564
+ name: 'showEmailSlidedown',
480
565
  args: arguments,
481
566
  promiseResolver: resolve,
482
567
  });
@@ -496,9 +581,13 @@ function showEmailSlidedown(options) {
496
581
  }
497
582
  function showSmsAndEmailSlidedown(options) {
498
583
  return new Promise((resolve, reject) => {
584
+ if (isOneSignalScriptFailed) {
585
+ resolve();
586
+ return;
587
+ }
499
588
  if (!doesOneSignalExist()) {
500
589
  reactOneSignalFunctionQueue.push({
501
- name: "showSmsAndEmailSlidedown",
590
+ name: 'showSmsAndEmailSlidedown',
502
591
  args: arguments,
503
592
  promiseResolver: resolve,
504
593
  });
@@ -518,9 +607,13 @@ function showSmsAndEmailSlidedown(options) {
518
607
  }
519
608
  function getNotificationPermission(onComplete) {
520
609
  return new Promise((resolve, reject) => {
610
+ if (isOneSignalScriptFailed) {
611
+ resolve();
612
+ return;
613
+ }
521
614
  if (!doesOneSignalExist()) {
522
615
  reactOneSignalFunctionQueue.push({
523
- name: "getNotificationPermission",
616
+ name: 'getNotificationPermission',
524
617
  args: arguments,
525
618
  promiseResolver: resolve,
526
619
  });
@@ -540,9 +633,13 @@ function getNotificationPermission(onComplete) {
540
633
  }
541
634
  function getUserId(callback) {
542
635
  return new Promise((resolve, reject) => {
636
+ if (isOneSignalScriptFailed) {
637
+ resolve();
638
+ return;
639
+ }
543
640
  if (!doesOneSignalExist()) {
544
641
  reactOneSignalFunctionQueue.push({
545
- name: "getUserId",
642
+ name: 'getUserId',
546
643
  args: arguments,
547
644
  promiseResolver: resolve,
548
645
  });
@@ -562,9 +659,13 @@ function getUserId(callback) {
562
659
  }
563
660
  function getSubscription(callback) {
564
661
  return new Promise((resolve, reject) => {
662
+ if (isOneSignalScriptFailed) {
663
+ resolve();
664
+ return;
665
+ }
565
666
  if (!doesOneSignalExist()) {
566
667
  reactOneSignalFunctionQueue.push({
567
- name: "getSubscription",
668
+ name: 'getSubscription',
568
669
  args: arguments,
569
670
  promiseResolver: resolve,
570
671
  });
@@ -584,9 +685,13 @@ function getSubscription(callback) {
584
685
  }
585
686
  function setEmail(email, options) {
586
687
  return new Promise((resolve, reject) => {
688
+ if (isOneSignalScriptFailed) {
689
+ resolve();
690
+ return;
691
+ }
587
692
  if (!doesOneSignalExist()) {
588
693
  reactOneSignalFunctionQueue.push({
589
- name: "setEmail",
694
+ name: 'setEmail',
590
695
  args: arguments,
591
696
  promiseResolver: resolve,
592
697
  });
@@ -606,9 +711,13 @@ function setEmail(email, options) {
606
711
  }
607
712
  function setSMSNumber(smsNumber, options) {
608
713
  return new Promise((resolve, reject) => {
714
+ if (isOneSignalScriptFailed) {
715
+ resolve();
716
+ return;
717
+ }
609
718
  if (!doesOneSignalExist()) {
610
719
  reactOneSignalFunctionQueue.push({
611
- name: "setSMSNumber",
720
+ name: 'setSMSNumber',
612
721
  args: arguments,
613
722
  promiseResolver: resolve,
614
723
  });
@@ -628,9 +737,13 @@ function setSMSNumber(smsNumber, options) {
628
737
  }
629
738
  function logoutEmail() {
630
739
  return new Promise((resolve, reject) => {
740
+ if (isOneSignalScriptFailed) {
741
+ resolve();
742
+ return;
743
+ }
631
744
  if (!doesOneSignalExist()) {
632
745
  reactOneSignalFunctionQueue.push({
633
- name: "logoutEmail",
746
+ name: 'logoutEmail',
634
747
  args: arguments,
635
748
  promiseResolver: resolve,
636
749
  });
@@ -650,9 +763,13 @@ function logoutEmail() {
650
763
  }
651
764
  function logoutSMS() {
652
765
  return new Promise((resolve, reject) => {
766
+ if (isOneSignalScriptFailed) {
767
+ resolve();
768
+ return;
769
+ }
653
770
  if (!doesOneSignalExist()) {
654
771
  reactOneSignalFunctionQueue.push({
655
- name: "logoutSMS",
772
+ name: 'logoutSMS',
656
773
  args: arguments,
657
774
  promiseResolver: resolve,
658
775
  });
@@ -672,9 +789,13 @@ function logoutSMS() {
672
789
  }
673
790
  function setExternalUserId(externalUserId, authHash) {
674
791
  return new Promise((resolve, reject) => {
792
+ if (isOneSignalScriptFailed) {
793
+ resolve();
794
+ return;
795
+ }
675
796
  if (!doesOneSignalExist()) {
676
797
  reactOneSignalFunctionQueue.push({
677
- name: "setExternalUserId",
798
+ name: 'setExternalUserId',
678
799
  args: arguments,
679
800
  promiseResolver: resolve,
680
801
  });
@@ -694,9 +815,13 @@ function setExternalUserId(externalUserId, authHash) {
694
815
  }
695
816
  function removeExternalUserId() {
696
817
  return new Promise((resolve, reject) => {
818
+ if (isOneSignalScriptFailed) {
819
+ resolve();
820
+ return;
821
+ }
697
822
  if (!doesOneSignalExist()) {
698
823
  reactOneSignalFunctionQueue.push({
699
- name: "removeExternalUserId",
824
+ name: 'removeExternalUserId',
700
825
  args: arguments,
701
826
  promiseResolver: resolve,
702
827
  });
@@ -716,9 +841,13 @@ function removeExternalUserId() {
716
841
  }
717
842
  function getExternalUserId() {
718
843
  return new Promise((resolve, reject) => {
844
+ if (isOneSignalScriptFailed) {
845
+ resolve();
846
+ return;
847
+ }
719
848
  if (!doesOneSignalExist()) {
720
849
  reactOneSignalFunctionQueue.push({
721
- name: "getExternalUserId",
850
+ name: 'getExternalUserId',
722
851
  args: arguments,
723
852
  promiseResolver: resolve,
724
853
  });
@@ -738,9 +867,13 @@ function getExternalUserId() {
738
867
  }
739
868
  function provideUserConsent(consent) {
740
869
  return new Promise((resolve, reject) => {
870
+ if (isOneSignalScriptFailed) {
871
+ resolve();
872
+ return;
873
+ }
741
874
  if (!doesOneSignalExist()) {
742
875
  reactOneSignalFunctionQueue.push({
743
- name: "provideUserConsent",
876
+ name: 'provideUserConsent',
744
877
  args: arguments,
745
878
  promiseResolver: resolve,
746
879
  });
@@ -760,9 +893,13 @@ function provideUserConsent(consent) {
760
893
  }
761
894
  function getEmailId(callback) {
762
895
  return new Promise((resolve, reject) => {
896
+ if (isOneSignalScriptFailed) {
897
+ resolve();
898
+ return;
899
+ }
763
900
  if (!doesOneSignalExist()) {
764
901
  reactOneSignalFunctionQueue.push({
765
- name: "getEmailId",
902
+ name: 'getEmailId',
766
903
  args: arguments,
767
904
  promiseResolver: resolve,
768
905
  });
@@ -782,9 +919,13 @@ function getEmailId(callback) {
782
919
  }
783
920
  function getSMSId(callback) {
784
921
  return new Promise((resolve, reject) => {
922
+ if (isOneSignalScriptFailed) {
923
+ resolve();
924
+ return;
925
+ }
785
926
  if (!doesOneSignalExist()) {
786
927
  reactOneSignalFunctionQueue.push({
787
- name: "getSMSId",
928
+ name: 'getSMSId',
788
929
  args: arguments,
789
930
  promiseResolver: resolve,
790
931
  });
@@ -804,9 +945,13 @@ function getSMSId(callback) {
804
945
  }
805
946
  function sendOutcome(outcomeName, outcomeWeight) {
806
947
  return new Promise((resolve, reject) => {
948
+ if (isOneSignalScriptFailed) {
949
+ resolve();
950
+ return;
951
+ }
807
952
  if (!doesOneSignalExist()) {
808
953
  reactOneSignalFunctionQueue.push({
809
- name: "sendOutcome",
954
+ name: 'sendOutcome',
810
955
  args: arguments,
811
956
  promiseResolver: resolve,
812
957
  });