web-manager 3.1.52 → 3.2.0

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.
Files changed (3) hide show
  1. package/index.js +244 -190
  2. package/lib/account.js +7 -1
  3. package/package.json +3 -3
package/index.js CHANGED
@@ -43,23 +43,13 @@ function ieVersion() {
43
43
  }
44
44
 
45
45
  function Manager() {
46
+ var self = this;
47
+ var iev = ieVersion();
48
+
46
49
  /**
47
50
  * OPTIONS
48
51
  */
49
- // Should this be changed?
50
- // var parseDELETE = function (req) {
51
- // var result;
52
- // try {
53
- // result = JSON.parse(req.responseText);
54
- // } catch (e) {
55
- // result = req.responseText;
56
- // }
57
- // return [result, req];
58
- // };
59
-
60
- // var t1 = '16'; //@@@ Delete later
61
- iev = ieVersion();
62
- this.properties = {
52
+ self.properties = {
63
53
  options: {
64
54
  page: {},
65
55
  global: {},
@@ -76,8 +66,8 @@ function Manager() {
76
66
  // initSecondaryReady: false,
77
67
  queryString: {},
78
68
  // libErrors: [],
79
- isSupportedBrowser: (!iev || iev >= 11) // https://makandracards.com/makandra/53475-minimal-javascript-function-to-detect-version-of-internet-explorer-or-edge
80
-
69
+ isSupportedBrowser: (!iev || iev >= 11), // https://makandracards.com/makandra/53475-minimal-javascript-function-to-detect-version-of-internet-explorer-or-edge
70
+ startTime: new Date(),
81
71
  // auth: {
82
72
  // status: undefined,
83
73
  // lastAction: 'unknown',
@@ -121,93 +111,97 @@ function Manager() {
121
111
  };
122
112
 
123
113
  try {
124
- this.properties.page.url = window.location.href;
114
+ self.properties.page.url = window.location.href;
125
115
  } catch (e) {
126
116
 
127
117
  }
128
118
 
129
- select = this.dom().select;
130
- loadScript = this.dom().loadScript;
131
- store = this.storage();
119
+ select = self.dom().select;
120
+ loadScript = self.dom().loadScript;
121
+ store = self.storage();
132
122
  }
133
123
 
134
124
  /**
135
125
  * METHODS
136
126
  */
137
127
  Manager.prototype.get = function(path) {
138
- return utilities.get(this, 'properties.' + path);
128
+ var self = this;
129
+
130
+ return utilities.get(self, 'properties.' + path);
139
131
  }
140
132
 
141
133
  Manager.prototype.set = function(path, value) {
142
- return utilities.set(this, 'properties.' + path, value);
134
+ var self = this;
135
+
136
+ return utilities.set(self, 'properties.' + path, value);
143
137
  }
144
138
 
145
139
  Manager.prototype.setEventListeners = function() {
146
- var This = this;
140
+ var self = this;
147
141
 
148
142
  // Setup click handler
149
143
  document.addEventListener('click', function (event) {
150
144
  // auth events
151
145
  if (event.target.matches('.auth-signin-email-btn')) {
152
- This.auth().signIn('email');
146
+ self.auth().signIn('email');
153
147
  } else if (event.target.matches('.auth-signup-email-btn')) {
154
- This.auth().signUp('email');
148
+ self.auth().signUp('email');
155
149
  } else if (event.target.matches('.auth-signin-provider-btn')) {
156
- This.auth().signIn(event.target.getAttribute('data-provider'));
150
+ self.auth().signIn(event.target.getAttribute('data-provider'));
157
151
  } else if (event.target.matches('.auth-signup-provider-btn')) {
158
- This.auth().signUp(event.target.getAttribute('data-provider'));
152
+ self.auth().signUp(event.target.getAttribute('data-provider'));
159
153
  } else if (event.target.matches('.auth-signout-all-btn')) {
160
- This.auth().signOut();
154
+ self.auth().signOut();
161
155
  } else if (event.target.matches('.auth-forgot-email-btn')) {
162
- This.auth().forgot();
156
+ self.auth().forgot();
163
157
  } else if (event.target.matches('#prechat-btn')) {
164
- load_chatsy(This, This.properties.options);
158
+ load_chatsy(self, self.properties.options);
165
159
  } else if (event.target.matches('.auth-subscribe-notifications-btn')) {
166
- This.notifications().subscribe()
160
+ self.notifications().subscribe()
167
161
  }
168
162
 
169
163
  // Autorequest
170
- if (!This._notificationRequested && This.properties.options.pushNotifications.autoRequest) {
171
- This._notificationRequested = true;
164
+ if (!self._notificationRequested && self.properties.options.pushNotifications.autoRequest) {
165
+ self._notificationRequested = true;
172
166
 
173
167
  setTimeout(function () {
174
- This.notifications().subscribe()
175
- }, This.properties.options.pushNotifications.autoRequest * 1000);
168
+ self.notifications().subscribe()
169
+ }, self.properties.options.pushNotifications.autoRequest * 1000);
176
170
  }
177
171
 
178
172
  });
179
173
 
180
174
  // Mouse leave event
181
175
  document.addEventListener('mouseleave', function() {
182
- showExitPopup(This);
176
+ showExitPopup(self);
183
177
  });
184
178
 
185
179
  // Window blur event
186
180
  window.addEventListener('blur', function() {
187
- showExitPopup(This);
181
+ showExitPopup(self);
188
182
  });
189
183
  }
190
184
 
191
- function _authStateHandler(This, user) {
192
- // This.log('----authStateHandler', user);
185
+ function _authStateHandler(self, user) {
186
+ // self.log('----authStateHandler', user);
193
187
  if (user) {
194
188
  if (!user.isAnonymous) {
195
- _authHandle_in(This, user);
189
+ _authHandle_in(self, user);
196
190
 
197
- This.notifications().subscribe().catch(function (e) {
191
+ self.notifications().subscribe().catch(function (e) {
198
192
  console.error(e);
199
193
  });
200
194
  } else {
201
- _authHandle_out(This);
195
+ _authHandle_out(self);
202
196
  }
203
197
  } else {
204
- _authHandle_out(This);
198
+ _authHandle_out(self);
205
199
  }
206
200
  }
207
201
 
208
- function _authHandle_in(This, user) {
209
- // This.log('_authHandle_in', user);
210
- // if (This.properties.page.status.didSignUp) {
202
+ function _authHandle_in(self, user) {
203
+ // self.log('_authHandle_in', user);
204
+ // if (self.properties.page.status.didSignUp) {
211
205
  var done;
212
206
  var hoursSinceCreation = Math.abs(new Date() - new Date(+user.metadata.createdAt)) / 36e5;
213
207
 
@@ -215,7 +209,7 @@ function Manager() {
215
209
  if (!done) {
216
210
  done = true;
217
211
  store.set('didSignUp', true)
218
- _authHandle_in_normal(This, user);
212
+ _authHandle_in_normal(self, user);
219
213
  }
220
214
  }
221
215
 
@@ -223,7 +217,7 @@ function Manager() {
223
217
  user.getIdToken(false)
224
218
  .then(function(token) {
225
219
 
226
- fetch('https://us-central1-' + This.properties.options.libraries.firebase_app.config.projectId + '.cloudfunctions.net/bm_api', {
220
+ fetch('https://us-central1-' + self.properties.options.libraries.firebase_app.config.projectId + '.cloudfunctions.net/bm_api', {
227
221
  method: 'POST',
228
222
  body: JSON.stringify({
229
223
  authenticationToken: token,
@@ -254,14 +248,14 @@ function Manager() {
254
248
 
255
249
 
256
250
 
257
- function _authHandle_in_normal(This, user) {
258
- var returnUrl = This.properties.page.queryString.get('auth_redirect');
259
- if (returnUrl && This.isValidRedirectUrl(returnUrl)) {
251
+ function _authHandle_in_normal(self, user) {
252
+ var returnUrl = self.properties.page.queryString.get('auth_redirect');
253
+ if (returnUrl && self.isValidRedirectUrl(returnUrl)) {
260
254
  window.location.href = decodeURIComponent(returnUrl);
261
255
  return;
262
256
  }
263
- if (This.properties.options.auth.state === 'prohibited') {
264
- window.location.href = This.properties.options.auth.sends.prohibited;
257
+ if (self.properties.options.auth.state === 'prohibited') {
258
+ window.location.href = self.properties.options.auth.sends.prohibited;
265
259
  return;
266
260
  }
267
261
  select('.auth-signedin-true-element').show();
@@ -282,9 +276,9 @@ function Manager() {
282
276
  });
283
277
  }
284
278
 
285
- function _authHandle_out(This) {
286
- if (This.properties.options.auth.state === 'required') {
287
- var sendSplit = This.properties.options.auth.sends.required.split('?');
279
+ function _authHandle_out(self) {
280
+ if (self.properties.options.auth.state === 'required') {
281
+ var sendSplit = self.properties.options.auth.sends.required.split('?');
288
282
  var newQuery = new URLSearchParams(sendSplit[1]);
289
283
  newQuery.set('auth_redirect', window.location.href);
290
284
  window.location.href = sendSplit[0] + '?' + newQuery.toString();
@@ -296,8 +290,9 @@ function Manager() {
296
290
  }
297
291
 
298
292
  Manager.prototype.ready = function(fn, options) {
299
- var This = this;
293
+ var self = this;
300
294
  var waitFor = true;
295
+
301
296
  options = options || {};
302
297
  options.interval = options.interval || 100;
303
298
 
@@ -305,24 +300,26 @@ function Manager() {
305
300
 
306
301
  if (!utilities.get(this, 'properties.page.status.ready', false) || !waitFor) {
307
302
  setTimeout(function () {
308
- This.ready(fn, options);
303
+ self.ready(fn, options);
309
304
  }, options.interval);
310
305
  } else {
311
306
  // Performance
312
- This.performance().mark('manager_ready');
307
+ self.performance().mark('manager_ready');
313
308
 
314
309
  return fn();
315
310
  }
316
311
  }
317
312
 
318
313
  Manager.prototype.serviceWorker = function() {
319
- var This = this;
314
+ var self = this;
320
315
  var SWAvailable = 'serviceWorker' in navigator;
316
+
321
317
  if (SWAvailable) {
322
318
  try {
323
- var swref = This.properties.references.serviceWorker.active || navigator.serviceWorker.controller;
319
+ var swref = self.properties.references.serviceWorker.active || navigator.serviceWorker.controller;
324
320
  } catch (e) {}
325
321
  }
322
+
326
323
  return {
327
324
  postMessage: function() {
328
325
  // var args = getArgs(arguments);
@@ -343,9 +340,9 @@ function Manager() {
343
340
  }
344
341
 
345
342
  // if (!navigator.serviceWorker.controller) {
346
- // This.log('postMessage...');
343
+ // self.log('postMessage...');
347
344
  // setTimeout(function () {
348
- // This.serviceWorker().postMessage(args[0], args[1]);
345
+ // self.serviceWorker().postMessage(args[0], args[1]);
349
346
  // }, 100);
350
347
  // } else {
351
348
  // // post message: https://stackoverflow.com/questions/30177782/chrome-serviceworker-postmessage
@@ -363,27 +360,32 @@ function Manager() {
363
360
 
364
361
  // init with polyfills
365
362
  Manager.prototype.init = function(configuration, callback) {
366
- var This = this;
367
- if (!utilities.get(This, 'properties.page.status.ready', false) && (!utilities.get(This, 'properties.page.status.initializing', false))) {
363
+ var self = this;
364
+ var status = self.properties.page.status;
365
+
366
+ if (
367
+ !status.ready
368
+ && !status.initilizing
369
+ ) {
368
370
 
369
371
  // Performance
370
- This.performance().mark('manager_init');
372
+ self.performance().mark('manager_init');
371
373
 
372
374
  // set initializing to true
373
- This.properties.page.status.initializing = true;
375
+ self.properties.page.status.initializing = true;
374
376
 
375
377
  // set other properties
376
- This.properties.meta.environment = window.location.host.match(/:40|ngrok/)
378
+ self.properties.meta.environment = window.location.host.match(/:40|ngrok/)
377
379
  ? 'development'
378
380
  : 'production';
379
381
 
380
382
  // Load polyfills
381
- init_loadPolyfills(This, configuration, function() {
382
- This.properties.page.status.initializing = false;
383
- // This.properties.genericPromise = new Promise(resolve => { resolve() });
383
+ init_loadPolyfills(self, configuration, function() {
384
+ self.properties.page.status.initializing = false;
385
+ // self.properties.genericPromise = new Promise(resolve => { resolve() });
384
386
  var options_defaults = {
385
387
  // debug: {
386
- // environment: This.properties.meta.environment,
388
+ // environment: self.properties.meta.environment,
387
389
  // },
388
390
  // queryString: {
389
391
  // saveToStorage: false
@@ -523,27 +525,27 @@ function Manager() {
523
525
  }
524
526
 
525
527
  eachRecursive(options_defaults);
526
- This.properties.options = options_user;
528
+ self.properties.options = options_user;
527
529
 
528
530
  // set non-option properties
529
- This.properties.global.app = configuration.global.app;
530
- This.properties.global.version = configuration.global.version;
531
- This.properties.global.url = configuration.global.url;
532
- This.properties.global.cacheBreaker = configuration.global.cacheBreaker;
531
+ self.properties.global.app = configuration.global.app;
532
+ self.properties.global.version = configuration.global.version;
533
+ self.properties.global.url = configuration.global.url;
534
+ self.properties.global.cacheBreaker = configuration.global.cacheBreaker;
533
535
 
534
- This.properties.global.brand = configuration.global.brand;
535
- This.properties.global.contact = configuration.global.contact;
536
- This.properties.global.download = configuration.global.download;
537
- This.properties.global.extension = configuration.global.extension;
536
+ self.properties.global.brand = configuration.global.brand;
537
+ self.properties.global.contact = configuration.global.contact;
538
+ self.properties.global.download = configuration.global.download;
539
+ self.properties.global.extension = configuration.global.extension;
538
540
 
539
- This.properties.global.validRedirectHosts = configuration.global.validRedirectHosts;
540
- This.properties.meta.environment = utilities.get(configuration, 'global.settings.debug.environment', This.properties.meta.environment);
541
- This.properties.page.queryString = new URLSearchParams(window.location.search);
541
+ self.properties.global.validRedirectHosts = configuration.global.validRedirectHosts;
542
+ self.properties.meta.environment = utilities.get(configuration, 'global.settings.debug.environment', self.properties.meta.environment);
543
+ self.properties.page.queryString = new URLSearchParams(window.location.search);
542
544
 
543
545
  var pagePathname = window.location.pathname;
544
546
  var redirect = false;
545
547
 
546
- This.properties.page.queryString.forEach(function(value, key) {
548
+ self.properties.page.queryString.forEach(function(value, key) {
547
549
  if (key.startsWith('utm_')) {
548
550
  store.set('utm.tags.' + key, value);
549
551
  store.set('utm.timestamp', new Date().toISOString());
@@ -559,7 +561,7 @@ function Manager() {
559
561
  }
560
562
  })
561
563
 
562
- if (redirect && This.isValidRedirectUrl(redirect)) {
564
+ if (redirect && self.isValidRedirectUrl(redirect)) {
563
565
  return window.location.href = redirect;
564
566
  }
565
567
 
@@ -577,18 +579,18 @@ function Manager() {
577
579
  // handle firebase user
578
580
  if (typeof firebase !== 'undefined' && firebase.auth) {
579
581
  firebase.auth().onAuthStateChanged(function(user) {
580
- This.properties.page.status.authReady = true;
581
- This.properties.auth.user = user || false;
582
- _authStateHandler(This, user);
582
+ self.properties.page.status.authReady = true;
583
+ self.properties.auth.user = user || false;
584
+ _authStateHandler(self, user);
583
585
  })
584
586
  }
585
587
 
586
588
  // setup
587
- This.setEventListeners();
589
+ self.setEventListeners();
588
590
 
589
591
  // display outdated if it is
590
592
  try {
591
- if (!This.properties.page.isSupportedBrowser) {
593
+ if (!self.properties.page.isSupportedBrowser) {
592
594
  var box = document.getElementsByClassName('master-alert-outdated')[0];
593
595
  box.style.display = 'block';
594
596
  document.body.insertBefore(box, document.body.firstChild);
@@ -596,7 +598,7 @@ function Manager() {
596
598
  } catch (e) {}
597
599
 
598
600
  // run the init callback
599
- This.properties.page.status.ready = true;
601
+ self.properties.page.status.ready = true;
600
602
 
601
603
  try {
602
604
  callback();
@@ -626,17 +628,17 @@ function Manager() {
626
628
  }
627
629
 
628
630
  // load non-critical libraries
629
- load_lazysizes(This, options_user);
630
- load_cookieconsent(This, options_user);
631
- subscriptionManager(This, options_user);
631
+ load_lazysizes(self, options_user);
632
+ load_cookieconsent(self, options_user);
633
+ subscriptionManager(self, options_user);
632
634
 
633
- // This.log('Manager', This);
635
+ // self.log('Manager', self);
634
636
  return;
635
637
  }
636
638
 
637
639
  Promise.all([
638
- load_sentry(This, options_user),
639
- load_firebase(This, options_user),
640
+ load_sentry(self, options_user),
641
+ load_firebase(self, options_user),
640
642
  ])
641
643
  .then(function() {
642
644
  postCrucial();
@@ -675,7 +677,7 @@ function Manager() {
675
677
  }
676
678
 
677
679
  Manager.prototype.auth = function() {
678
- var This = this;
680
+ var self = this;
679
681
  var firebaseActive = typeof firebase !== 'undefined';
680
682
  var erel = '.auth-error-message-element';
681
683
 
@@ -717,17 +719,17 @@ function Manager() {
717
719
  ready: function (fn, options) {
718
720
  options = options || {};
719
721
  options.interval = options.interval || 100;
720
- // if ( (This.get('page.status.authReady', false) === false) ) {
722
+ // if ( (self.get('page.status.authReady', false) === false) ) {
721
723
  // Manager.log('--- authReady() REAL');
722
- if (!utilities.get(This, 'properties.page.status.authReady', false)) {
724
+ if (!utilities.get(self, 'properties.page.status.authReady', false)) {
723
725
  setTimeout(function () {
724
- This.auth().ready(fn, options);
726
+ self.auth().ready(fn, options);
725
727
  }, options.interval);
726
728
  } else {
727
729
 
728
730
  // Set up listener for redirect (for provider login)
729
- if (!This._redirectResultSetup) {
730
- This._redirectResultSetup = true;
731
+ if (!self._redirectResultSetup) {
732
+ self._redirectResultSetup = true;
731
733
  firebase.auth()
732
734
  .getRedirectResult()
733
735
  .catch(function (error) {
@@ -736,16 +738,16 @@ function Manager() {
736
738
  }
737
739
 
738
740
  // Performance
739
- This.performance().mark('manager_authReady');
741
+ self.performance().mark('manager_authReady');
740
742
 
741
- return fn(This.auth().getUser());
743
+ return fn(self.auth().getUser());
742
744
  }
743
745
  },
744
746
  signIn: function (method, email, password) {
745
747
  var mode = 'signin';
746
748
  method = method || 'email';
747
749
  _preDisplayError();
748
- // This.log('Signin attempt: ', method, email, password);
750
+ // self.log('Signin attempt: ', method, email, password);
749
751
  if (method === 'email') {
750
752
  // email = (email || select('.auth-email-input').getValue()).trim().toLowerCase();
751
753
  email = resolveAuthInput(email, mode, 'email');
@@ -758,20 +760,20 @@ function Manager() {
758
760
 
759
761
  firebase.auth().signInWithEmailAndPassword(email, password)
760
762
  .then(function(credential) {
761
- // _postAuthSubscriptionCheck(This)
763
+ // _postAuthSubscriptionCheck(self)
762
764
  // .then(function () {
763
765
  //
764
766
  // })
765
- This.properties.page.status.didSignIn = true;
767
+ self.properties.page.status.didSignIn = true;
766
768
  // signinButtonDisabled(false);
767
769
  setAuthButtonDisabled(mode, false);
768
- // This.log('Good signin');
770
+ // self.log('Good signin');
769
771
  })
770
772
  .catch(function(error) {
771
773
  // signinButtonDisabled(false);
772
774
  setAuthButtonDisabled(mode, false);
773
775
  _displayError(error.message);
774
- // This.log('Error', error.message);
776
+ // self.log('Error', error.message);
775
777
  });
776
778
  } else {
777
779
  firebase.auth().signInWithRedirect(new firebase.auth.OAuthProvider(method))
@@ -785,7 +787,7 @@ function Manager() {
785
787
  method = method || 'email';
786
788
 
787
789
  _preDisplayError();
788
- // This.log('Signup attempt: ', method, email, password, passwordConfirm);
790
+ // self.log('Signup attempt: ', method, email, password, passwordConfirm);
789
791
  // var acceptedTerms
790
792
  // var termEl = select('.auth-terms-input');
791
793
  // if (termEl.exists() && !termEl.getValue() === true) {
@@ -814,43 +816,43 @@ function Manager() {
814
816
  setAuthButtonDisabled(mode, true);
815
817
  firebase.auth().createUserWithEmailAndPassword(email, password)
816
818
  .then(function(credential) {
817
- // This.properties.page.status.didSignUp = true;
818
- // This.log('Good signup');
819
+ // self.properties.page.status.didSignUp = true;
820
+ // self.log('Good signup');
819
821
  // signupButtonDisabled(false);
820
822
  })
821
823
  .catch(function(error) {
822
824
  // signupButtonDisabled(false);
823
825
  setAuthButtonDisabled(mode, false);
824
826
  _displayError(error.message);
825
- // This.log('error', error.message);
827
+ // self.log('error', error.message);
826
828
  });
827
829
  } else {
828
830
  _displayError("Passwords don't match.");
829
831
  }
830
832
  } else {
831
- This.auth().signIn(method);
833
+ self.auth().signIn(method);
832
834
  }
833
835
 
834
836
  },
835
837
  signOut: function() {
836
- // This.log('signOut()');
837
- // var This = this;
838
+ // self.log('signOut()');
839
+ // var self = this;
838
840
  return firebase.auth().signOut()
839
841
  .catch(function(e) {
840
842
  console.error(e);
841
- // This.log('signOut failed: ', error);
843
+ // self.log('signOut failed: ', error);
842
844
  });
843
845
  // return firebase.auth().signOut()
844
846
  // .then(function() {
845
- // // This.log('signOut success.');
847
+ // // self.log('signOut success.');
846
848
  // })
847
849
  // .catch(function(e) {
848
850
  // // console.error(e);
849
- // // This.log('signOut failed: ', error);
851
+ // // self.log('signOut failed: ', error);
850
852
  // });
851
853
  },
852
854
  forgot: function(email) {
853
- // This.log('forgot()');
855
+ // self.log('forgot()');
854
856
  var mode = 'forgot';
855
857
  // email = email || select('.auth-email-input').getValue();
856
858
  email = resolveAuthInput(email, mode, 'email')
@@ -863,13 +865,13 @@ function Manager() {
863
865
  .then(function() {
864
866
  // forgotButtonDisabled(false);
865
867
  setAuthButtonDisabled(mode, false);
866
- // This.log('forgot success.');
868
+ // self.log('forgot success.');
867
869
  _displayError('A reset link has been sent to you.');
868
870
  })
869
871
  .catch(function(error) {
870
872
  // forgotButtonDisabled(false);
871
873
  setAuthButtonDisabled(mode, false);
872
- // This.log('forgot failed: ', error);
874
+ // self.log('forgot failed: ', error);
873
875
  _displayError(error.message);
874
876
  });
875
877
  },
@@ -879,28 +881,29 @@ function Manager() {
879
881
 
880
882
  //@@@NOTIFICATIONS
881
883
  Manager.prototype.notifications = function(options) {
884
+ var self = this;
882
885
  var supported = (typeof firebase.messaging !== 'undefined') && ('serviceWorker' in navigator) && ('Notification' in window);
883
- var This = this;
886
+
884
887
  return {
885
888
  isSubscribed: function () {
886
- // This.log('isSubscribed()');
889
+ // self.log('isSubscribed()');
887
890
  return new Promise(function(resolve, reject) {
888
891
  if (!supported || Notification.permission !== 'granted') {return resolve(false)};
889
892
  return resolve(true);
890
893
  })
891
894
  },
892
895
  subscribe: function () {
893
- // This.log('subscribe()');
896
+ // self.log('subscribe()');
894
897
  return new Promise(function(resolve, reject) {
895
- // var subscribed = !This.notifications().isSubscribed();
898
+ // var subscribed = !self.notifications().isSubscribed();
896
899
  if (!supported) {
897
900
  return resolve(false)
898
901
  }
899
902
  firebase.messaging().getToken({
900
- serviceWorkerRegistration: This.properties.references.serviceWorker,
903
+ serviceWorkerRegistration: self.properties.references.serviceWorker,
901
904
  })
902
905
  .then(function (token) {
903
- var user = This.auth().getUser();
906
+ var user = self.auth().getUser();
904
907
  var localSubscription = store.get('notifications', {});
905
908
  var localHash = localSubscription.token + '|' + localSubscription.uid;
906
909
  var userHash = token + '|' + user.uid;
@@ -920,14 +923,14 @@ function Manager() {
920
923
 
921
924
  function saveLocal() {
922
925
  // console.log('---------saveLocal');
923
- // This.log('Saved local token: ', token);
926
+ // self.log('Saved local token: ', token);
924
927
  store.set('notifications', {uid: user.uid, token: token, lastSynced: timestamp});
925
928
  }
926
929
 
927
930
  function saveServer(doc) {
928
- // console.log('-------saveServer', !doc.exists, !This.utilities().get(doc.data(), 'link.user.data.uid', ''), user.uid);
931
+ // console.log('-------saveServer', !doc.exists, !self.utilities().get(doc.data(), 'link.user.data.uid', ''), user.uid);
929
932
  // Run if it (DOES NOT EXIST on server) OR (it does AND the uid field is null AND the current user is not null)
930
- if (!doc.exists || (doc.exists && !This.utilities().get(doc.data(), 'link.user.data.uid', '') && user.uid)) {
933
+ if (!doc.exists || (doc.exists && !self.utilities().get(doc.data(), 'link.user.data.uid', '') && user.uid)) {
931
934
  subscriptionRef
932
935
  .set(
933
936
  {
@@ -959,13 +962,13 @@ function Manager() {
959
962
  }
960
963
  )
961
964
  .then(function(data) {
962
- // This.log('Updated token: ', token);
965
+ // self.log('Updated token: ', token);
963
966
  saveLocal();
964
967
  resolve(true);
965
968
  })
966
969
  } else {
967
970
  saveLocal();
968
- // This.log('Skip sync, server data exists.');
971
+ // self.log('Skip sync, server data exists.');
969
972
  resolve(false);
970
973
  }
971
974
  }
@@ -980,7 +983,7 @@ function Manager() {
980
983
  saveServer({exists: false})
981
984
  })
982
985
  } else {
983
- // This.log('Skip sync, recently done.');
986
+ // self.log('Skip sync, recently done.');
984
987
  resolve(false);
985
988
  }
986
989
 
@@ -996,24 +999,24 @@ function Manager() {
996
999
  /*
997
1000
  HELPERS
998
1001
  */
999
- function subscriptionManager(This, options_user) {
1002
+ function subscriptionManager(self, options_user) {
1000
1003
  if (!('serviceWorker' in navigator) || !(typeof firebase.messaging !== 'undefined')) {return}
1001
1004
 
1002
1005
  // service worker guide: https://developers.google.com/web/updates/2018/06/fresher-sw
1003
1006
  navigator.serviceWorker.register(
1004
1007
  '/' + (options_user.serviceWorker.path || 'master-service-worker.js')
1005
1008
  + '?config=' + encodeURIComponent(JSON.stringify({
1006
- name: This.properties.global.brand.name,
1007
- app: This.properties.global.app,
1008
- env: This.properties.meta.environment,
1009
- v: This.properties.global.version,
1010
- cb: This.properties.global.cacheBreaker,
1009
+ name: self.properties.global.brand.name,
1010
+ app: self.properties.global.app,
1011
+ env: self.properties.meta.environment,
1012
+ v: self.properties.global.version,
1013
+ cb: self.properties.global.cacheBreaker,
1011
1014
  firebase: options_user.libraries.firebase_app.config
1012
1015
  }))
1013
1016
  )
1014
1017
  .then(function (registration) {
1015
1018
  // firebase.messaging().useServiceWorker(registration);
1016
- This.properties.references.serviceWorker = registration;
1019
+ self.properties.references.serviceWorker = registration;
1017
1020
 
1018
1021
  // TODO: https://googlechrome.github.io/samples/service-worker/post-message/
1019
1022
  // --- leverage this example ^^^ for caching! It's grat and you can do one page at a time through postMessage!
@@ -1048,9 +1051,9 @@ function Manager() {
1048
1051
  // }
1049
1052
  // listenForWaitingServiceWorker(registration, promptUserToRefresh);
1050
1053
 
1051
- // This.log('SW Registered.');
1054
+ // self.log('SW Registered.');
1052
1055
  //@@@NOTIFICATIONS
1053
- // _setupTokenRefreshHandler(This);
1056
+ // _setupTokenRefreshHandler(self);
1054
1057
 
1055
1058
  try {
1056
1059
  // Normally, notifications are not displayed when user is ON PAGE but we will display it here anyway
@@ -1076,8 +1079,8 @@ function Manager() {
1076
1079
  // });
1077
1080
  }
1078
1081
 
1079
- function showExitPopup(This) {
1080
- var exitPopupSettings = This.properties.options.exitPopup;
1082
+ function showExitPopup(self) {
1083
+ var exitPopupSettings = self.properties.options.exitPopup;
1081
1084
 
1082
1085
  if (!exitPopupSettings.enabled) return;
1083
1086
 
@@ -1100,25 +1103,29 @@ function Manager() {
1100
1103
  if (!proceed) { return }
1101
1104
 
1102
1105
  var $el = document.getElementById('modal-exit-popup');
1103
- var modal = new bootstrap.Modal($el);
1104
- modal.show();
1105
- $el.removeAttribute('hidden');
1106
-
1107
- var $title = $el.querySelector('.modal-title');
1108
- var $message = $el.querySelector('.modal-body');
1109
- var $okButton = $el.querySelector('.modal-footer .btn-primary');
1110
- var config = exitPopupSettings.config;
1111
-
1112
- $title.innerHTML = config.title;
1113
- $message.innerHTML = config.message;
1114
- $okButton.innerHTML = config.okButton.text;
1115
- $okButton.setAttribute('href', config.okButton.link);
1106
+ try {
1107
+ var modal = new bootstrap.Modal($el);
1108
+ modal.show();
1109
+ $el.removeAttribute('hidden');
1110
+
1111
+ var $title = $el.querySelector('.modal-title');
1112
+ var $message = $el.querySelector('.modal-body');
1113
+ var $okButton = $el.querySelector('.modal-footer .btn-primary');
1114
+ var config = exitPopupSettings.config;
1115
+
1116
+ $title.innerHTML = config.title;
1117
+ $message.innerHTML = config.message;
1118
+ $okButton.innerHTML = config.okButton.text;
1119
+ $okButton.setAttribute('href', config.okButton.link);
1120
+ } catch (e) {
1121
+ console.warn(e);
1122
+ }
1116
1123
  }
1117
1124
 
1118
1125
  /*
1119
1126
  EXTERNAL LIBS
1120
1127
  */
1121
- var load_firebase = function(This, options) {
1128
+ var load_firebase = function(self, options) {
1122
1129
  return new Promise(function(resolve, reject) {
1123
1130
  // if (typeof window.firebase !== 'undefined') {
1124
1131
  // return resolve();
@@ -1126,21 +1133,21 @@ function Manager() {
1126
1133
  var setting = options.libraries.firebase_app
1127
1134
  if (setting.enabled === true) {
1128
1135
  function _post() {
1129
- // This.log('Loaded Firebase.');
1136
+ // self.log('Loaded Firebase.');
1130
1137
  // console.log('_post.');
1131
1138
  window.app = firebase.initializeApp(setting.config);
1132
1139
 
1133
1140
  Promise.all([
1134
- load_firebase_auth(This, options),
1135
- load_firebase_firestore(This, options),
1136
- load_firebase_messaging(This, options),
1137
- load_firebase_appCheck(This, options),
1141
+ load_firebase_auth(self, options),
1142
+ load_firebase_firestore(self, options),
1143
+ load_firebase_messaging(self, options),
1144
+ load_firebase_appCheck(self, options),
1138
1145
  ])
1139
1146
  .then(resolve)
1140
1147
  .catch(reject);
1141
1148
  }
1142
1149
  if (setting.load) {
1143
- setting.load(This)
1150
+ setting.load(self)
1144
1151
  .then(_post)
1145
1152
  .catch(reject);
1146
1153
  } else {
@@ -1159,7 +1166,7 @@ function Manager() {
1159
1166
  }
1160
1167
 
1161
1168
 
1162
- var load_firebase_auth = function(This, options) {
1169
+ var load_firebase_auth = function(self, options) {
1163
1170
  return new Promise(function(resolve, reject) {
1164
1171
  // if (typeof utilities.get(window, 'firebase.auth', undefined) !== 'undefined') {
1165
1172
  // return resolve();
@@ -1167,7 +1174,7 @@ function Manager() {
1167
1174
  var setting = options.libraries.firebase_auth;
1168
1175
  if (setting.enabled === true) {
1169
1176
  if (setting.load) {
1170
- setting.load(This)
1177
+ setting.load(self)
1171
1178
  .then(resolve)
1172
1179
  .catch(reject);
1173
1180
  } else {
@@ -1184,7 +1191,7 @@ function Manager() {
1184
1191
  }
1185
1192
 
1186
1193
 
1187
- var load_firebase_firestore = function(This, options) {
1194
+ var load_firebase_firestore = function(self, options) {
1188
1195
  return new Promise(function(resolve, reject) {
1189
1196
  // if (typeof utilities.get(window, 'firebase.firestore', undefined) !== 'undefined') {
1190
1197
  // return resolve();
@@ -1192,7 +1199,7 @@ function Manager() {
1192
1199
  var setting = options.libraries.firebase_firestore;
1193
1200
  if (setting.enabled === true) {
1194
1201
  if (setting.load) {
1195
- setting.load(This)
1202
+ setting.load(self)
1196
1203
  .then(resolve)
1197
1204
  .catch(reject);
1198
1205
  } else {
@@ -1207,7 +1214,7 @@ function Manager() {
1207
1214
  });
1208
1215
  }
1209
1216
 
1210
- var load_firebase_messaging = function(This, options) {
1217
+ var load_firebase_messaging = function(self, options) {
1211
1218
  return new Promise(function(resolve, reject) {
1212
1219
  // if (typeof utilities.get(window, 'firebase.messaging', undefined) !== 'undefined') {
1213
1220
  // return resolve();
@@ -1215,7 +1222,7 @@ function Manager() {
1215
1222
  var setting = options.libraries.firebase_messaging;
1216
1223
  if (setting.enabled === true) {
1217
1224
  if (setting.load) {
1218
- setting.load(This)
1225
+ setting.load(self)
1219
1226
  .then(resolve)
1220
1227
  .catch(reject);
1221
1228
  } else {
@@ -1230,12 +1237,12 @@ function Manager() {
1230
1237
  });
1231
1238
  }
1232
1239
 
1233
- var load_firebase_appCheck = function(This, options) {
1240
+ var load_firebase_appCheck = function(self, options) {
1234
1241
  return new Promise(function(resolve, reject) {
1235
1242
  var setting = options.libraries.firebase_appCheck;
1236
1243
  if (setting.enabled === true) {
1237
1244
  if (setting.load) {
1238
- setting.load(This)
1245
+ setting.load(self)
1239
1246
  .then(resolve)
1240
1247
  .catch(reject);
1241
1248
  } else {
@@ -1264,7 +1271,7 @@ function Manager() {
1264
1271
  });
1265
1272
  }
1266
1273
 
1267
- var load_lazysizes = function(This, options) {
1274
+ var load_lazysizes = function(self, options) {
1268
1275
  return new Promise(function(resolve, reject) {
1269
1276
  // if (typeof window.lazysizes !== 'undefined') {
1270
1277
  // return resolve();
@@ -1281,7 +1288,7 @@ function Manager() {
1281
1288
  expand: expand,
1282
1289
  expFactor: expand < 380 ? 3 : 2,
1283
1290
  };
1284
- // This.log('Loaded Lazysizes.');
1291
+ // self.log('Loaded Lazysizes.');
1285
1292
  })
1286
1293
  .catch(reject);
1287
1294
  } else {
@@ -1290,7 +1297,7 @@ function Manager() {
1290
1297
  });
1291
1298
  }
1292
1299
 
1293
- var load_cookieconsent = function(This, options) {
1300
+ var load_cookieconsent = function(self, options) {
1294
1301
  return new Promise(function(resolve, reject) {
1295
1302
  // if (typeof window.cookieconsent !== 'undefined') {
1296
1303
  // return resolve();
@@ -1299,7 +1306,7 @@ function Manager() {
1299
1306
  import('cookieconsent')
1300
1307
  .then(function(mod) {
1301
1308
  window.cookieconsent.initialise(options.libraries.cookieconsent.config);
1302
- // This.log('Loaded Cookieconsent.');
1309
+ // self.log('Loaded Cookieconsent.');
1303
1310
  resolve();
1304
1311
  })
1305
1312
  .catch(reject);
@@ -1310,12 +1317,12 @@ function Manager() {
1310
1317
  });
1311
1318
  }
1312
1319
 
1313
- var load_chatsy = function(This, options) {
1320
+ var load_chatsy = function(self, options) {
1314
1321
  return new Promise(function(resolve, reject) {
1315
1322
 
1316
1323
  if (
1317
1324
  options.libraries.chatsy.enabled === true
1318
- && !This.properties.page._chatsyRequested
1325
+ && !self.properties.page._chatsyRequested
1319
1326
  ) {
1320
1327
  var chatsyPath = 'libraries.chatsy.config';
1321
1328
 
@@ -1344,24 +1351,62 @@ function Manager() {
1344
1351
  resolve();
1345
1352
  })
1346
1353
 
1347
- This.properties.page._chatsyRequested = true;
1354
+ self.properties.page._chatsyRequested = true;
1348
1355
  } else {
1349
1356
  resolve();
1350
1357
  }
1351
1358
  });
1352
1359
  }
1353
1360
 
1354
- var load_sentry = function(This, options) {
1361
+ var load_sentry = function(self, options) {
1355
1362
  return new Promise(function(resolve, reject) {
1356
1363
  if (options.libraries.sentry.enabled === true) {
1357
1364
  import('@sentry/browser')
1358
1365
  .then(function(mod) {
1359
1366
  window.Sentry = mod;
1360
1367
  var config = options.libraries.sentry.config;
1361
- config.release = config.release + '@' + This.properties.global.version;
1362
- config.environment = This.properties.meta.environment;
1368
+ config.release = config.release + '@' + self.properties.global.version;
1369
+ config.environment = self.properties.meta.environment;
1370
+
1371
+ // if (self.isDevelopment()) {
1372
+ // config.dsn = 'https://901db748bbb9469f860dc36fb07a4374@o1120154.ingest.sentry.io/6155285';
1373
+ // }
1374
+
1375
+ if (config.replaysSessionSampleRate > 0 || config.replaysOnErrorSampleRate > 0) {
1376
+ config.integrations = [
1377
+ new Sentry.Replay({
1378
+ // Additional SDK configuration goes in here, for example:
1379
+ // maskAllText: true,
1380
+ // blockAllMedia: true,
1381
+ }),
1382
+ ]
1383
+ }
1384
+
1385
+ config.beforeSend = function (event, hint) {
1386
+ var startTime = self.properties.page.startTime;
1387
+ var hoursSinceStart = (new Date() - startTime) / (1000 * 3600);
1388
+
1389
+ event.tags = event.tags || {};
1390
+ event.tags['process.type'] = event.tags['process.type'] || 'browser';
1391
+
1392
+ // event.tags['usage.total.opens'] = parseInt(usage.total.opens);
1393
+ // event.tags['usage.total.hours'] = usage.total.hours;
1394
+ event.tags['usage.session.hours'] = hoursSinceStart.toFixed(2);
1395
+ // event.tags['store'] = self.properties().isStore();
1396
+ event.user = event.user || {};
1397
+ event.user.email = storage.get('user.auth.email', '')
1398
+ event.user.uid = storage.get('user.auth.uid', '');
1399
+ // event.user.ip = storage.get('user.ip', '');
1400
+
1401
+ console.error('[SENTRY] Caught error', event, hint);
1402
+
1403
+ if (self.isDevelopment()) {
1404
+ return null;
1405
+ }
1406
+
1407
+ return event;
1408
+ }
1363
1409
  Sentry.init(config);
1364
- // This.log('Loaded Sentry.');
1365
1410
  resolve();
1366
1411
  })
1367
1412
  .catch(reject);
@@ -1372,12 +1417,14 @@ function Manager() {
1372
1417
  }
1373
1418
 
1374
1419
  Manager.prototype.log = function() {
1375
- if (this.properties.meta.environment === 'development') {
1420
+ var self = this;
1421
+
1422
+ if (self.isDevelopment()) {
1376
1423
  // 1. Convert args to a normal array
1377
1424
  var args = Array.prototype.slice.call(arguments);
1378
1425
 
1379
1426
  // 2. Prepend log prefix log string
1380
- args.unshift('[ DEV ' + new Date().toLocaleTimeString() + ' ]');
1427
+ args.unshift('[DEV @ ' + new Date().toLocaleTimeString() + ']');
1381
1428
 
1382
1429
  // 3. Pass along arguments to console.log
1383
1430
  if (args[1] === 'error') {
@@ -1395,7 +1442,7 @@ function Manager() {
1395
1442
  }
1396
1443
  }
1397
1444
 
1398
- function init_loadPolyfills(This, configuration, cb) {
1445
+ function init_loadPolyfills(self, configuration, cb) {
1399
1446
  // https://github.com/jquintozamora/polyfill-io-feature-detection/blob/master/index.js
1400
1447
  var featuresDefault = (
1401
1448
  typeof Symbol !== 'undefined'
@@ -1459,6 +1506,7 @@ function Manager() {
1459
1506
 
1460
1507
  Manager.prototype.account = function() {
1461
1508
  var self = this;
1509
+
1462
1510
  return {
1463
1511
  import: function () {
1464
1512
  return import('./lib/account.js')
@@ -1532,8 +1580,14 @@ function Manager() {
1532
1580
  || self.properties.global.validRedirectHosts.includes(returnUrlObject.host)
1533
1581
  }
1534
1582
 
1583
+ Manager.prototype.isDevelopment = function () {
1584
+ var self = this;
1585
+
1586
+ return self.properties.meta.environment === 'development';
1587
+ }
1588
+
1535
1589
  // Manager.prototype.performance = function() {
1536
- // var This = this;
1590
+ // var self = this;
1537
1591
  //
1538
1592
  // return {
1539
1593
  // mark2: function () {
package/lib/account.js CHANGED
@@ -127,9 +127,15 @@ Account.prototype.resolve = function (account, options) {
127
127
 
128
128
  Account.prototype.handleAccount = function (account) {
129
129
  var self = this;
130
+ var planId = account.plan.id;
130
131
 
131
132
  // Handle plans
132
- handlePlanVisibility(account.plan.id);
133
+ handlePlanVisibility(planId);
134
+
135
+ // Enable exit popup if it's already enabled and the plan is basic
136
+ if (self.Manager.properties.options.exitPopup.enabled === true) {
137
+ self.Manager.properties.options.exitPopup.enabled = planId === 'basic';
138
+ }
133
139
 
134
140
  // Handle others
135
141
  // ...
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-manager",
3
- "version": "3.1.52",
3
+ "version": "3.2.00",
4
4
  "description": "Easily access important variables such as the query string, current domain, and current page in a single object.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -31,9 +31,9 @@
31
31
  }
32
32
  },
33
33
  "dependencies": {
34
- "@sentry/browser": "^6.19.7",
34
+ "@sentry/browser": "^7.72.0",
35
35
  "cookieconsent": "^3.1.1",
36
36
  "firebase": "^9.23.0",
37
37
  "lazysizes": "^5.3.2"
38
38
  }
39
- }
39
+ }