dauth-context-react 1.0.3 → 2.1.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.
@@ -1,4 +1,4 @@
1
- import React, { useReducer, useCallback, useEffect, useMemo, createContext, useContext } from 'react';
1
+ import React, { useReducer, useRef, useCallback, useEffect, useMemo, createContext, useContext } from 'react';
2
2
 
3
3
  function asyncGeneratorStep(n, t, e, r, o, a, c) {
4
4
  try {
@@ -350,92 +350,83 @@ var sendEmailVerificationAPI = /*#__PURE__*/function () {
350
350
  return _ref3.apply(this, arguments);
351
351
  };
352
352
  }();
353
- var refreshAccessTokenAPI = /*#__PURE__*/function () {
354
- var _ref4 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(domainName, token) {
353
+ var refreshTokenAPI = /*#__PURE__*/function () {
354
+ var _ref5 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(domainName, refreshToken) {
355
355
  var params, response, data;
356
- return _regenerator().w(function (_context4) {
357
- while (1) switch (_context4.n) {
356
+ return _regenerator().w(function (_context5) {
357
+ while (1) switch (_context5.n) {
358
358
  case 0:
359
359
  params = {
360
- method: 'GET',
360
+ method: 'POST',
361
361
  headers: {
362
- Authorization: token,
363
362
  'Content-Type': 'application/json'
364
- }
363
+ },
364
+ body: JSON.stringify({
365
+ refreshToken: refreshToken
366
+ })
365
367
  };
366
- _context4.n = 1;
367
- return fetch(getServerBasePath() + "/app/" + domainName + "/refresh-access-token", params);
368
+ _context5.n = 1;
369
+ return fetch(getServerBasePath() + "/app/" + domainName + "/refresh-token", params);
368
370
  case 1:
369
- response = _context4.v;
370
- _context4.n = 2;
371
+ response = _context5.v;
372
+ _context5.n = 2;
371
373
  return response.json();
372
374
  case 2:
373
- data = _context4.v;
374
- return _context4.a(2, {
375
+ data = _context5.v;
376
+ return _context5.a(2, {
375
377
  response: response,
376
378
  data: data
377
379
  });
378
380
  }
379
- }, _callee4);
381
+ }, _callee5);
380
382
  }));
381
- return function refreshAccessTokenAPI(_x8, _x9) {
382
- return _ref4.apply(this, arguments);
383
+ return function refreshTokenAPI(_x0, _x1) {
384
+ return _ref5.apply(this, arguments);
383
385
  };
384
386
  }();
385
- var verifyTokenAPI = /*#__PURE__*/function () {
386
- var _ref6 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(_ref5) {
387
- var domainName, tsk, token, params, response, data;
388
- return _regenerator().w(function (_context5) {
389
- while (1) switch (_context5.n) {
387
+ var logoutAPI = /*#__PURE__*/function () {
388
+ var _ref6 = /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(domainName, refreshToken) {
389
+ var params, response;
390
+ return _regenerator().w(function (_context6) {
391
+ while (1) switch (_context6.n) {
390
392
  case 0:
391
- domainName = _ref5.domainName, tsk = _ref5.tsk, token = _ref5.token;
392
393
  params = {
393
394
  method: 'POST',
394
395
  headers: {
395
- Authorization: token,
396
396
  'Content-Type': 'application/json'
397
397
  },
398
398
  body: JSON.stringify({
399
- tsk: tsk
399
+ refreshToken: refreshToken
400
400
  })
401
401
  };
402
- _context5.n = 1;
403
- return fetch(getServerBasePath() + "/app/" + domainName + "/verify-token", params);
402
+ _context6.n = 1;
403
+ return fetch(getServerBasePath() + "/app/" + domainName + "/logout", params);
404
404
  case 1:
405
- response = _context5.v;
406
- _context5.n = 2;
407
- return response.json();
408
- case 2:
409
- data = _context5.v;
410
- return _context5.a(2, {
411
- response: response,
412
- data: data
405
+ response = _context6.v;
406
+ return _context6.a(2, {
407
+ response: response
413
408
  });
414
409
  }
415
- }, _callee5);
410
+ }, _callee6);
416
411
  }));
417
- return function verifyTokenAPI(_x0) {
412
+ return function logoutAPI(_x10, _x11) {
418
413
  return _ref6.apply(this, arguments);
419
414
  };
420
415
  }();
421
416
 
422
417
  var TOKEN_LS = 'dauth_state';
423
-
424
- var routes = {
425
- signin: 'signin',
426
- updateUser: 'update-user'
427
- };
418
+ var REFRESH_TOKEN_LS = 'dauth_refresh_token';
428
419
 
429
420
  function setDauthStateAction(_x) {
430
421
  return _setDauthStateAction.apply(this, arguments);
431
422
  }
432
423
  function _setDauthStateAction() {
433
424
  _setDauthStateAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(_ref) {
434
- var dispatch, token, domainName, getUserFetch, _t;
425
+ var dispatch, token, refreshToken, domainName, getUserFetch, _t;
435
426
  return _regenerator().w(function (_context) {
436
427
  while (1) switch (_context.p = _context.n) {
437
428
  case 0:
438
- dispatch = _ref.dispatch, token = _ref.token, domainName = _ref.domainName;
429
+ dispatch = _ref.dispatch, token = _ref.token, refreshToken = _ref.refreshToken, domainName = _ref.domainName;
439
430
  dispatch({
440
431
  type: SET_IS_LOADING,
441
432
  payload: {
@@ -460,7 +451,9 @@ function _setDauthStateAction() {
460
451
  }
461
452
  });
462
453
  window.history.replaceState({}, document.title, window.location.pathname);
463
- return _context.a(2, localStorage.setItem(TOKEN_LS, token));
454
+ localStorage.setItem(TOKEN_LS, token);
455
+ localStorage.setItem(REFRESH_TOKEN_LS, refreshToken);
456
+ return _context.a(2);
464
457
  case 3:
465
458
  return _context.a(2, resetUser(dispatch));
466
459
  case 4:
@@ -492,29 +485,45 @@ function setAutoLoginAction(_x2) {
492
485
  }
493
486
  function _setAutoLoginAction() {
494
487
  _setAutoLoginAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(_ref2) {
495
- var dispatch, token_ls, domainName, refreshAccessTokenFetch, newToken, getUserFetch, _t2;
488
+ var dispatch, domainName, storedRefreshToken, refreshResult, newAccessToken, newRefreshToken, getUserFetch, _t2;
496
489
  return _regenerator().w(function (_context2) {
497
490
  while (1) switch (_context2.p = _context2.n) {
498
491
  case 0:
499
- dispatch = _ref2.dispatch, token_ls = _ref2.token_ls, domainName = _ref2.domainName;
492
+ dispatch = _ref2.dispatch, domainName = _ref2.domainName;
500
493
  dispatch({
501
494
  type: SET_IS_LOADING,
502
495
  payload: {
503
496
  isLoading: true
504
497
  }
505
498
  });
499
+ storedRefreshToken = localStorage.getItem(REFRESH_TOKEN_LS);
500
+ if (storedRefreshToken) {
501
+ _context2.n = 1;
502
+ break;
503
+ }
504
+ dispatch({
505
+ type: SET_IS_LOADING,
506
+ payload: {
507
+ isLoading: false
508
+ }
509
+ });
510
+ return _context2.a(2, resetUser(dispatch));
511
+ case 1:
506
512
  _context2.p = 1;
507
513
  _context2.n = 2;
508
- return refreshAccessTokenAPI(domainName, token_ls);
514
+ return refreshTokenAPI(domainName, storedRefreshToken);
509
515
  case 2:
510
- refreshAccessTokenFetch = _context2.v;
511
- if (!(refreshAccessTokenFetch.response.status === 200)) {
512
- _context2.n = 6;
516
+ refreshResult = _context2.v;
517
+ if (!(refreshResult.response.status === 200)) {
518
+ _context2.n = 4;
513
519
  break;
514
520
  }
515
- newToken = refreshAccessTokenFetch.data.accessToken || token_ls;
521
+ newAccessToken = refreshResult.data.accessToken;
522
+ newRefreshToken = refreshResult.data.refreshToken;
523
+ localStorage.setItem(TOKEN_LS, newAccessToken);
524
+ localStorage.setItem(REFRESH_TOKEN_LS, newRefreshToken);
516
525
  _context2.n = 3;
517
- return getUserAPI(domainName, newToken);
526
+ return getUserAPI(domainName, newAccessToken);
518
527
  case 3:
519
528
  getUserFetch = _context2.v;
520
529
  if (!(getUserFetch.response.status === 200)) {
@@ -529,132 +538,197 @@ function _setAutoLoginAction() {
529
538
  isAuthenticated: true
530
539
  }
531
540
  });
532
- localStorage.setItem(TOKEN_LS, refreshAccessTokenFetch.data.accessToken);
533
541
  return _context2.a(2);
534
542
  case 4:
535
- window.location.replace(getClientBasePath() + "/" + domainName + "/" + routes.signin);
536
- return _context2.a(2, resetUser(dispatch));
537
- case 5:
538
- _context2.n = 7;
539
- break;
540
- case 6:
541
- window.location.replace(getClientBasePath() + "/" + domainName + "/" + routes.signin);
542
- return _context2.a(2, resetUser(dispatch));
543
- case 7:
544
- _context2.n = 9;
543
+ // Refresh failed session expired
544
+ resetUser(dispatch);
545
+ _context2.n = 6;
545
546
  break;
546
- case 8:
547
- _context2.p = 8;
547
+ case 5:
548
+ _context2.p = 5;
548
549
  _t2 = _context2.v;
549
550
  console.error(_t2);
550
- return _context2.a(2, resetUser(dispatch));
551
- case 9:
552
- _context2.p = 9;
551
+ resetUser(dispatch);
552
+ case 6:
553
+ _context2.p = 6;
553
554
  dispatch({
554
555
  type: SET_IS_LOADING,
555
556
  payload: {
556
557
  isLoading: false
557
558
  }
558
559
  });
559
- return _context2.f(9);
560
- case 10:
560
+ return _context2.f(6);
561
+ case 7:
561
562
  return _context2.a(2);
562
563
  }
563
- }, _callee2, null, [[1, 8, 9, 10]]);
564
+ }, _callee2, null, [[1, 5, 6, 7]]);
564
565
  }));
565
566
  return _setAutoLoginAction.apply(this, arguments);
566
567
  }
567
- function setLogoutAction(_ref3) {
568
- var dispatch = _ref3.dispatch;
569
- dispatch({
570
- type: SET_IS_LOADING,
571
- payload: {
572
- isLoading: true
573
- }
574
- });
575
- dispatch({
576
- type: LOGIN,
577
- payload: {
578
- user: {
579
- language: window.document.documentElement.getAttribute('lang') || 'es'
580
- },
581
- domain: {},
582
- isAuthenticated: false
583
- }
584
- });
585
- localStorage.removeItem(TOKEN_LS);
586
- return dispatch({
587
- type: SET_IS_LOADING,
588
- payload: {
589
- isLoading: false
590
- }
591
- });
568
+ function setLogoutAction(_x3) {
569
+ return _setLogoutAction.apply(this, arguments);
592
570
  }
593
- function setUpdateUserAction(_x3) {
571
+ function _setLogoutAction() {
572
+ _setLogoutAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(_ref3) {
573
+ var dispatch, domainName, storedRefreshToken;
574
+ return _regenerator().w(function (_context3) {
575
+ while (1) switch (_context3.p = _context3.n) {
576
+ case 0:
577
+ dispatch = _ref3.dispatch, domainName = _ref3.domainName;
578
+ storedRefreshToken = localStorage.getItem(REFRESH_TOKEN_LS);
579
+ if (!(storedRefreshToken && domainName)) {
580
+ _context3.n = 4;
581
+ break;
582
+ }
583
+ _context3.p = 1;
584
+ _context3.n = 2;
585
+ return logoutAPI(domainName, storedRefreshToken);
586
+ case 2:
587
+ _context3.n = 4;
588
+ break;
589
+ case 3:
590
+ _context3.p = 3;
591
+ case 4:
592
+ dispatch({
593
+ type: SET_IS_LOADING,
594
+ payload: {
595
+ isLoading: true
596
+ }
597
+ });
598
+ dispatch({
599
+ type: LOGIN,
600
+ payload: {
601
+ user: {
602
+ language: window.document.documentElement.getAttribute('lang') || 'es'
603
+ },
604
+ domain: {},
605
+ isAuthenticated: false
606
+ }
607
+ });
608
+ localStorage.removeItem(TOKEN_LS);
609
+ localStorage.removeItem(REFRESH_TOKEN_LS);
610
+ return _context3.a(2, dispatch({
611
+ type: SET_IS_LOADING,
612
+ payload: {
613
+ isLoading: false
614
+ }
615
+ }));
616
+ }
617
+ }, _callee3, null, [[1, 3]]);
618
+ }));
619
+ return _setLogoutAction.apply(this, arguments);
620
+ }
621
+ function refreshSessionAction(_x4) {
622
+ return _refreshSessionAction.apply(this, arguments);
623
+ }
624
+ function _refreshSessionAction() {
625
+ _refreshSessionAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(_ref4) {
626
+ var dispatch, domainName, storedRefreshToken, refreshResult, _t4;
627
+ return _regenerator().w(function (_context4) {
628
+ while (1) switch (_context4.p = _context4.n) {
629
+ case 0:
630
+ dispatch = _ref4.dispatch, domainName = _ref4.domainName;
631
+ storedRefreshToken = localStorage.getItem(REFRESH_TOKEN_LS);
632
+ if (storedRefreshToken) {
633
+ _context4.n = 1;
634
+ break;
635
+ }
636
+ return _context4.a(2, resetUser(dispatch));
637
+ case 1:
638
+ _context4.p = 1;
639
+ _context4.n = 2;
640
+ return refreshTokenAPI(domainName, storedRefreshToken);
641
+ case 2:
642
+ refreshResult = _context4.v;
643
+ if (!(refreshResult.response.status === 200)) {
644
+ _context4.n = 3;
645
+ break;
646
+ }
647
+ localStorage.setItem(TOKEN_LS, refreshResult.data.accessToken);
648
+ localStorage.setItem(REFRESH_TOKEN_LS, refreshResult.data.refreshToken);
649
+ return _context4.a(2);
650
+ case 3:
651
+ // Refresh failed — revoked or expired
652
+ resetUser(dispatch);
653
+ _context4.n = 5;
654
+ break;
655
+ case 4:
656
+ _context4.p = 4;
657
+ _t4 = _context4.v;
658
+ console.error(_t4);
659
+ resetUser(dispatch);
660
+ case 5:
661
+ return _context4.a(2);
662
+ }
663
+ }, _callee4, null, [[1, 4]]);
664
+ }));
665
+ return _refreshSessionAction.apply(this, arguments);
666
+ }
667
+ function setUpdateUserAction(_x5) {
594
668
  return _setUpdateUserAction.apply(this, arguments);
595
669
  }
596
670
  function _setUpdateUserAction() {
597
- _setUpdateUserAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(_ref4) {
598
- var dispatch, domainName, user, token, getUserFetch, _t3;
599
- return _regenerator().w(function (_context3) {
600
- while (1) switch (_context3.p = _context3.n) {
671
+ _setUpdateUserAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(_ref5) {
672
+ var dispatch, domainName, user, token, getUserFetch, _t5;
673
+ return _regenerator().w(function (_context5) {
674
+ while (1) switch (_context5.p = _context5.n) {
601
675
  case 0:
602
- dispatch = _ref4.dispatch, domainName = _ref4.domainName, user = _ref4.user, token = _ref4.token;
676
+ dispatch = _ref5.dispatch, domainName = _ref5.domainName, user = _ref5.user, token = _ref5.token;
603
677
  if (user.language) {
604
678
  window.document.documentElement.setAttribute('lang', user.language);
605
679
  }
606
680
  if (token) {
607
- _context3.n = 1;
681
+ _context5.n = 1;
608
682
  break;
609
683
  }
610
684
  dispatch({
611
685
  type: UPDATE_USER,
612
686
  payload: user
613
687
  });
614
- return _context3.a(2, false);
688
+ return _context5.a(2, false);
615
689
  case 1:
616
- _context3.p = 1;
617
- _context3.n = 2;
690
+ _context5.p = 1;
691
+ _context5.n = 2;
618
692
  return updateUserAPI(domainName, user, token);
619
693
  case 2:
620
- getUserFetch = _context3.v;
694
+ getUserFetch = _context5.v;
621
695
  if (!(getUserFetch.response.status === 200)) {
622
- _context3.n = 3;
696
+ _context5.n = 3;
623
697
  break;
624
698
  }
625
699
  dispatch({
626
700
  type: UPDATE_USER,
627
701
  payload: getUserFetch.data.user
628
702
  });
629
- return _context3.a(2, true);
703
+ return _context5.a(2, true);
630
704
  case 3:
631
705
  console.error('Update user error', getUserFetch.data.message);
632
- return _context3.a(2, false);
706
+ return _context5.a(2, false);
633
707
  case 4:
634
- _context3.n = 6;
708
+ _context5.n = 6;
635
709
  break;
636
710
  case 5:
637
- _context3.p = 5;
638
- _t3 = _context3.v;
639
- console.error('Update user error', _t3);
640
- return _context3.a(2, false);
711
+ _context5.p = 5;
712
+ _t5 = _context5.v;
713
+ console.error('Update user error', _t5);
714
+ return _context5.a(2, false);
641
715
  case 6:
642
- return _context3.a(2);
716
+ return _context5.a(2);
643
717
  }
644
- }, _callee3, null, [[1, 5]]);
718
+ }, _callee5, null, [[1, 5]]);
645
719
  }));
646
720
  return _setUpdateUserAction.apply(this, arguments);
647
721
  }
648
- function sendEmailVerificationAction(_x4) {
722
+ function sendEmailVerificationAction(_x6) {
649
723
  return _sendEmailVerificationAction.apply(this, arguments);
650
724
  }
651
725
  function _sendEmailVerificationAction() {
652
- _sendEmailVerificationAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(_ref5) {
726
+ _sendEmailVerificationAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(_ref6) {
653
727
  var dispatch, domainName, token, sendEmailFetch;
654
- return _regenerator().w(function (_context4) {
655
- while (1) switch (_context4.p = _context4.n) {
728
+ return _regenerator().w(function (_context6) {
729
+ while (1) switch (_context6.p = _context6.n) {
656
730
  case 0:
657
- dispatch = _ref5.dispatch, domainName = _ref5.domainName, token = _ref5.token;
731
+ dispatch = _ref6.dispatch, domainName = _ref6.domainName, token = _ref6.token;
658
732
  dispatch({
659
733
  type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
660
734
  payload: true
@@ -666,13 +740,13 @@ function _sendEmailVerificationAction() {
666
740
  message: 'Sending email verification...'
667
741
  }
668
742
  });
669
- _context4.p = 1;
670
- _context4.n = 2;
743
+ _context6.p = 1;
744
+ _context6.n = 2;
671
745
  return sendEmailVerificationAPI(domainName, token);
672
746
  case 2:
673
- sendEmailFetch = _context4.v;
747
+ sendEmailFetch = _context6.v;
674
748
  if (!(sendEmailFetch.response.status === 200)) {
675
- _context4.n = 3;
749
+ _context6.n = 3;
676
750
  break;
677
751
  }
678
752
  dispatch({
@@ -686,7 +760,7 @@ function _sendEmailVerificationAction() {
686
760
  type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
687
761
  payload: false
688
762
  });
689
- return _context4.a(2, true);
763
+ return _context6.a(2, true);
690
764
  case 3:
691
765
  dispatch({
692
766
  type: SET_SEND_EMAIL_VERIFICATION_STATUS,
@@ -699,12 +773,12 @@ function _sendEmailVerificationAction() {
699
773
  type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
700
774
  payload: false
701
775
  });
702
- return _context4.a(2, false);
776
+ return _context6.a(2, false);
703
777
  case 4:
704
- _context4.n = 6;
778
+ _context6.n = 6;
705
779
  break;
706
780
  case 5:
707
- _context4.p = 5;
781
+ _context6.p = 5;
708
782
  dispatch({
709
783
  type: SET_SEND_EMAIL_VERIFICATION_STATUS,
710
784
  payload: {
@@ -716,104 +790,68 @@ function _sendEmailVerificationAction() {
716
790
  type: SET_SEND_EMAIL_VERIFICATION_IS_LOADING,
717
791
  payload: false
718
792
  });
719
- return _context4.a(2, false);
793
+ return _context6.a(2, false);
720
794
  case 6:
721
- return _context4.a(2);
795
+ return _context6.a(2);
722
796
  }
723
- }, _callee4, null, [[1, 5]]);
797
+ }, _callee6, null, [[1, 5]]);
724
798
  }));
725
799
  return _sendEmailVerificationAction.apply(this, arguments);
726
800
  }
727
- function checkTokenAction(_x5) {
728
- return _checkTokenAction.apply(this, arguments);
729
- }
730
- function _checkTokenAction() {
731
- _checkTokenAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(_ref6) {
732
- var dispatch, domainName, token, refreshAccessTokenFetch, _t5;
733
- return _regenerator().w(function (_context5) {
734
- while (1) switch (_context5.p = _context5.n) {
735
- case 0:
736
- dispatch = _ref6.dispatch, domainName = _ref6.domainName, token = _ref6.token;
737
- _context5.p = 1;
738
- _context5.n = 2;
739
- return refreshAccessTokenAPI(domainName, token);
740
- case 2:
741
- refreshAccessTokenFetch = _context5.v;
742
- if (!(refreshAccessTokenFetch.response.status === 200)) {
743
- _context5.n = 3;
744
- break;
745
- }
746
- if (refreshAccessTokenFetch.data.accessToken) {
747
- localStorage.setItem(TOKEN_LS, refreshAccessTokenFetch.data.accessToken);
748
- }
749
- return _context5.a(2);
750
- case 3:
751
- window.location.replace(getClientBasePath() + "/" + domainName + "/" + routes.signin);
752
- return _context5.a(2, resetUser(dispatch));
753
- case 4:
754
- _context5.n = 6;
755
- break;
756
- case 5:
757
- _context5.p = 5;
758
- _t5 = _context5.v;
759
- resetUser(dispatch);
760
- throw _t5;
761
- case 6:
762
- return _context5.a(2);
763
- }
764
- }, _callee5, null, [[1, 5]]);
765
- }));
766
- return _checkTokenAction.apply(this, arguments);
767
- }
768
- function getAccessTokenAction(_x6) {
801
+ function getAccessTokenAction(_x7) {
769
802
  return _getAccessTokenAction.apply(this, arguments);
770
803
  }
771
804
  ///////////////////////////////////////////
772
805
  //////////////////////////////////////////
773
806
  function _getAccessTokenAction() {
774
- _getAccessTokenAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(_ref7) {
775
- var dispatch, domainName, token_ls, refreshAccessTokenFetch, _refreshAccessTokenFe, _t6;
776
- return _regenerator().w(function (_context6) {
777
- while (1) switch (_context6.p = _context6.n) {
807
+ _getAccessTokenAction = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(_ref7) {
808
+ var dispatch, domainName, token_ls, payloadB64, payload, expiresIn, refreshedToken;
809
+ return _regenerator().w(function (_context7) {
810
+ while (1) switch (_context7.p = _context7.n) {
778
811
  case 0:
779
812
  dispatch = _ref7.dispatch, domainName = _ref7.domainName;
780
813
  token_ls = localStorage.getItem(TOKEN_LS);
781
814
  if (token_ls) {
782
- _context6.n = 1;
815
+ _context7.n = 1;
783
816
  break;
784
817
  }
785
- return _context6.a(2);
818
+ return _context7.a(2, 'token-not-found');
786
819
  case 1:
787
- _context6.p = 1;
788
- _context6.n = 2;
789
- return refreshAccessTokenAPI(domainName, token_ls);
790
- case 2:
791
- refreshAccessTokenFetch = _context6.v;
792
- if (!(refreshAccessTokenFetch.response.status === 200)) {
793
- _context6.n = 3;
820
+ _context7.p = 1;
821
+ payloadB64 = token_ls.split('.')[1];
822
+ if (!payloadB64) {
823
+ _context7.n = 3;
794
824
  break;
795
825
  }
796
- return _context6.a(2, (_refreshAccessTokenFe = refreshAccessTokenFetch.data.accessToken) != null ? _refreshAccessTokenFe : token_ls);
826
+ payload = JSON.parse(atob(payloadB64));
827
+ expiresIn = (payload.exp || 0) * 1000 - Date.now(); // If token expires in less than 5 minutes, refresh proactively
828
+ if (!(expiresIn < 5 * 60 * 1000)) {
829
+ _context7.n = 3;
830
+ break;
831
+ }
832
+ _context7.n = 2;
833
+ return refreshSessionAction({
834
+ dispatch: dispatch,
835
+ domainName: domainName
836
+ });
837
+ case 2:
838
+ refreshedToken = localStorage.getItem(TOKEN_LS);
839
+ return _context7.a(2, refreshedToken || 'token-not-found');
797
840
  case 3:
798
- resetUser(dispatch);
799
- return _context6.a(2, 'token-not-found');
800
- case 4:
801
- _context6.n = 6;
841
+ _context7.n = 5;
802
842
  break;
843
+ case 4:
844
+ _context7.p = 4;
803
845
  case 5:
804
- _context6.p = 5;
805
- _t6 = _context6.v;
806
- resetUser(dispatch);
807
- throw _t6;
808
- case 6:
809
- return _context6.a(2);
846
+ return _context7.a(2, token_ls);
810
847
  }
811
- }, _callee6, null, [[1, 5]]);
848
+ }, _callee7, null, [[1, 4]]);
812
849
  }));
813
850
  return _getAccessTokenAction.apply(this, arguments);
814
851
  }
815
852
  var resetUser = function resetUser(dispatch) {
816
853
  localStorage.removeItem(TOKEN_LS);
854
+ localStorage.removeItem(REFRESH_TOKEN_LS);
817
855
  return dispatch({
818
856
  type: LOGIN,
819
857
  payload: {
@@ -824,91 +862,70 @@ var resetUser = function resetUser(dispatch) {
824
862
  });
825
863
  };
826
864
 
865
+ var routes = {
866
+ signin: 'signin',
867
+ updateUser: 'update-user'
868
+ };
869
+
827
870
  var DauthProvider = function DauthProvider(props) {
828
871
  var domainName = props.domainName,
829
- tsk = props.tsk,
830
872
  children = props.children;
831
873
  var _useReducer = useReducer(userReducer, initialDauthState),
832
874
  dauthState = _useReducer[0],
833
875
  dispatch = _useReducer[1];
834
- var isValidTsk = useCallback(/*#__PURE__*/function () {
835
- var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(token) {
836
- var verifyToken;
837
- return _regenerator().w(function (_context) {
838
- while (1) switch (_context.p = _context.n) {
839
- case 0:
840
- _context.p = 0;
841
- _context.n = 1;
842
- return verifyTokenAPI({
843
- domainName: domainName,
844
- token: token,
845
- tsk: tsk
846
- });
847
- case 1:
848
- verifyToken = _context.v;
849
- if (!(verifyToken.response.status !== 200)) {
850
- _context.n = 2;
851
- break;
852
- }
853
- return _context.a(2, false);
854
- case 2:
855
- return _context.a(2, true);
856
- case 3:
857
- _context.p = 3;
858
- return _context.a(2, false);
859
- }
860
- }, _callee, null, [[0, 3]]);
861
- }));
862
- return function (_x) {
863
- return _ref.apply(this, arguments);
864
- };
865
- }(), [domainName, tsk]);
866
- // Check token periodically
867
- useEffect(function () {
868
- if (!dauthState.isAuthenticated) return;
869
- var interval = setInterval(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
870
- var token_ls, isValid;
871
- return _regenerator().w(function (_context2) {
872
- while (1) switch (_context2.n) {
873
- case 0:
874
- token_ls = localStorage.getItem(TOKEN_LS);
875
- if (token_ls) {
876
+ var refreshTimerRef = useRef(null);
877
+ // Schedule next proactive refresh based on access token expiry
878
+ var scheduleRefresh = useCallback(function () {
879
+ if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);
880
+ var token = localStorage.getItem(TOKEN_LS);
881
+ if (!token) return;
882
+ try {
883
+ var payloadB64 = token.split('.')[1];
884
+ if (!payloadB64) return;
885
+ var payload = JSON.parse(atob(payloadB64));
886
+ var expiresIn = (payload.exp || 0) * 1000 - Date.now();
887
+ // Refresh 5 minutes before expiry, minimum 10 seconds
888
+ var refreshIn = Math.max(expiresIn - 5 * 60 * 1000, 10000);
889
+ refreshTimerRef.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
890
+ return _regenerator().w(function (_context) {
891
+ while (1) switch (_context.n) {
892
+ case 0:
893
+ _context.n = 1;
894
+ return refreshSessionAction({
895
+ dispatch: dispatch,
896
+ domainName: domainName
897
+ });
898
+ case 1:
899
+ scheduleRefresh();
900
+ case 2:
901
+ return _context.a(2);
902
+ }
903
+ }, _callee);
904
+ })), refreshIn);
905
+ } catch (_) {
906
+ // If decode fails, retry in 5 minutes
907
+ refreshTimerRef.current = setTimeout(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
908
+ return _regenerator().w(function (_context2) {
909
+ while (1) switch (_context2.n) {
910
+ case 0:
876
911
  _context2.n = 1;
877
- break;
878
- }
879
- return _context2.a(2);
880
- case 1:
881
- _context2.n = 2;
882
- return isValidTsk(token_ls);
883
- case 2:
884
- isValid = _context2.v;
885
- if (!isValid) {
886
- _context2.n = 3;
887
- break;
888
- }
889
- return _context2.a(2, checkTokenAction({
890
- dispatch: dispatch,
891
- domainName: domainName,
892
- token: token_ls
893
- }));
894
- case 3:
895
- setLogoutAction({
896
- dispatch: dispatch
897
- });
898
- throw new Error('Ask value in DauthProvider is not valid');
899
- case 4:
900
- return _context2.a(2);
901
- }
902
- }, _callee2);
903
- })), 1000 * 60 * 5);
904
- return function () {
905
- return clearInterval(interval);
906
- };
907
- }, [dauthState.isAuthenticated, isValidTsk]);
912
+ return refreshSessionAction({
913
+ dispatch: dispatch,
914
+ domainName: domainName
915
+ });
916
+ case 1:
917
+ scheduleRefresh();
918
+ case 2:
919
+ return _context2.a(2);
920
+ }
921
+ }, _callee2);
922
+ })), 5 * 60 * 1000);
923
+ }
924
+ }, [domainName]);
908
925
  // Catch login redirect
909
926
  useEffect(function () {
910
927
  _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
911
- var queryString, urlParams, token_url, isValid;
928
+ var queryString, urlParams, token_url, refresh_url;
912
929
  return _regenerator().w(function (_context3) {
913
930
  while (1) switch (_context3.n) {
914
931
  case 0:
@@ -921,29 +938,18 @@ var DauthProvider = function DauthProvider(props) {
921
938
  case 1:
922
939
  urlParams = new URLSearchParams(queryString);
923
940
  token_url = urlParams.get(TOKEN_LS);
924
- if (!(token_url && !dauthState.isAuthenticated)) {
925
- _context3.n = 4;
926
- break;
927
- }
928
- _context3.n = 2;
929
- return isValidTsk(token_url);
930
- case 2:
931
- isValid = _context3.v;
932
- if (!isValid) {
933
- _context3.n = 3;
941
+ refresh_url = urlParams.get(REFRESH_TOKEN_LS);
942
+ if (!(token_url && refresh_url && !dauthState.isAuthenticated)) {
943
+ _context3.n = 2;
934
944
  break;
935
945
  }
936
946
  return _context3.a(2, setDauthStateAction({
937
947
  dispatch: dispatch,
938
948
  token: token_url,
949
+ refreshToken: refresh_url,
939
950
  domainName: domainName
940
951
  }));
941
- case 3:
942
- setLogoutAction({
943
- dispatch: dispatch
944
- });
945
- throw new Error('Ask value in DauthProvider is not valid');
946
- case 4:
952
+ case 2:
947
953
  return _context3.a(2);
948
954
  }
949
955
  }, _callee3);
@@ -952,57 +958,51 @@ var DauthProvider = function DauthProvider(props) {
952
958
  // Auto Login
953
959
  useEffect(function () {
954
960
  _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
955
- var token_ls, isValid;
961
+ var refreshToken;
956
962
  return _regenerator().w(function (_context4) {
957
963
  while (1) switch (_context4.n) {
958
964
  case 0:
959
- token_ls = localStorage.getItem(TOKEN_LS);
960
- if (!(token_ls && !dauthState.isAuthenticated)) {
961
- _context4.n = 4;
962
- break;
963
- }
964
- _context4.n = 1;
965
- return isValidTsk(token_ls);
966
- case 1:
967
- isValid = _context4.v;
968
- if (!isValid) {
969
- _context4.n = 2;
965
+ refreshToken = localStorage.getItem(REFRESH_TOKEN_LS);
966
+ if (!(refreshToken && !dauthState.isAuthenticated)) {
967
+ _context4.n = 1;
970
968
  break;
971
969
  }
972
970
  return _context4.a(2, setAutoLoginAction({
973
971
  dispatch: dispatch,
974
- token_ls: token_ls,
975
972
  domainName: domainName
976
973
  }));
977
- case 2:
978
- setLogoutAction({
979
- dispatch: dispatch
980
- });
981
- throw new Error('Ask value in DauthProvider is not valid');
982
- case 3:
983
- _context4.n = 5;
984
- break;
985
- case 4:
974
+ case 1:
986
975
  return _context4.a(2, dispatch({
987
976
  type: SET_IS_LOADING,
988
977
  payload: {
989
978
  isLoading: false
990
979
  }
991
980
  }));
992
- case 5:
981
+ case 2:
993
982
  return _context4.a(2);
994
983
  }
995
984
  }, _callee4);
996
985
  }))();
997
986
  }, []);
987
+ // Schedule proactive refresh when authenticated
988
+ useEffect(function () {
989
+ if (dauthState.isAuthenticated) {
990
+ scheduleRefresh();
991
+ }
992
+ return function () {
993
+ if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);
994
+ };
995
+ }, [dauthState.isAuthenticated, scheduleRefresh]);
998
996
  var loginWithRedirect = useCallback(function () {
999
997
  return window.location.replace(getClientBasePath() + "/" + domainName + "/" + routes.signin);
1000
998
  }, [domainName]);
1001
999
  var logout = useCallback(function () {
1000
+ if (refreshTimerRef.current) clearTimeout(refreshTimerRef.current);
1002
1001
  return setLogoutAction({
1003
- dispatch: dispatch
1002
+ dispatch: dispatch,
1003
+ domainName: domainName
1004
1004
  });
1005
- }, []);
1005
+ }, [domainName]);
1006
1006
  var getAccessToken = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
1007
1007
  var token;
1008
1008
  return _regenerator().w(function (_context5) {
@@ -1020,13 +1020,13 @@ var DauthProvider = function DauthProvider(props) {
1020
1020
  }, _callee5);
1021
1021
  })), [domainName]);
1022
1022
  var updateUser = useCallback(/*#__PURE__*/function () {
1023
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(_ref6) {
1024
- var name, lastname, nickname, telPrefix, telSuffix, language, avatar, token_ls, user;
1023
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(fields) {
1024
+ var token_ls, name, lastname, nickname, telPrefix, telSuffix, language, avatar, birthDate, country, metadata, user;
1025
1025
  return _regenerator().w(function (_context6) {
1026
1026
  while (1) switch (_context6.n) {
1027
1027
  case 0:
1028
- name = _ref6.name, lastname = _ref6.lastname, nickname = _ref6.nickname, telPrefix = _ref6.telPrefix, telSuffix = _ref6.telSuffix, language = _ref6.language, avatar = _ref6.avatar;
1029
1028
  token_ls = localStorage.getItem(TOKEN_LS);
1029
+ name = fields.name, lastname = fields.lastname, nickname = fields.nickname, telPrefix = fields.telPrefix, telSuffix = fields.telSuffix, language = fields.language, avatar = fields.avatar, birthDate = fields.birthDate, country = fields.country, metadata = fields.metadata;
1030
1030
  user = {
1031
1031
  name: name,
1032
1032
  lastname: lastname,
@@ -1034,7 +1034,10 @@ var DauthProvider = function DauthProvider(props) {
1034
1034
  telPrefix: telPrefix,
1035
1035
  telSuffix: telSuffix,
1036
1036
  language: language,
1037
- avatar: avatar
1037
+ avatar: avatar,
1038
+ birthDate: birthDate,
1039
+ country: country,
1040
+ metadata: metadata
1038
1041
  };
1039
1042
  _context6.n = 1;
1040
1043
  return setUpdateUserAction({
@@ -1048,8 +1051,8 @@ var DauthProvider = function DauthProvider(props) {
1048
1051
  }
1049
1052
  }, _callee6);
1050
1053
  }));
1051
- return function (_x2) {
1052
- return _ref7.apply(this, arguments);
1054
+ return function (_x) {
1055
+ return _ref6.apply(this, arguments);
1053
1056
  };
1054
1057
  }(), [domainName]);
1055
1058
  var updateUserWithRedirect = useCallback(function () {