@sunggang/ui-lib 0.4.52 → 0.4.53

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.
@@ -511,6 +511,33 @@ var LiffProvider = function(param) {
511
511
  console.error("儲存 liffUserInfo 失敗:", err);
512
512
  }
513
513
  };
514
+ // 移除 LIFF profile 的 localStorage
515
+ var removeLiffUserInfoFromStorage = function() {
516
+ try {
517
+ window.localStorage.removeItem(liffUserInfoStorageKey);
518
+ } catch (err) {
519
+ // ignore
520
+ }
521
+ };
522
+ // 移除 LIFF initialized flag
523
+ var removeLiffInitializedFromStorage = function() {
524
+ try {
525
+ window.localStorage.removeItem("".concat(localStorageKey, "-liffInitialized"));
526
+ } catch (err) {
527
+ // ignore
528
+ }
529
+ };
530
+ // 清除 LIFF 相關快取與狀態(暴露給外部 as needed)
531
+ var clearLiffData = function() {
532
+ try {
533
+ removeLiffUserInfoFromStorage();
534
+ removeLiffInitializedFromStorage();
535
+ } catch (e) {
536
+ // ignore
537
+ }
538
+ setLiffProfile(null);
539
+ setLiffObject(null);
540
+ };
514
541
  var fetchMemberInfo = function() {
515
542
  var _ref = _async_to_generator(function(token) {
516
543
  var response, err;
@@ -619,6 +646,12 @@ var LiffProvider = function(param) {
619
646
  // token 無效時清除 userInfo
620
647
  setUserInfo(null);
621
648
  window.localStorage.removeItem(userInfoStorageKey);
649
+ // 使用統一清理方法清除 LIFF 快取與初始化標記
650
+ try {
651
+ clearLiffData();
652
+ } catch (e) {
653
+ // ignore
654
+ }
622
655
  return [
623
656
  3,
624
657
  7
@@ -698,8 +731,14 @@ var LiffProvider = function(param) {
698
731
  6
699
732
  ];
700
733
  case 5:
734
+ // 登入沒有回傳 token,視為登入失敗 — 清除 LIFF 快取
701
735
  setUserInfo(response);
702
736
  saveUserInfoToStorage(response);
737
+ try {
738
+ clearLiffData();
739
+ } catch (e) {
740
+ // ignore
741
+ }
703
742
  if (handleLoginError) handleLoginError();
704
743
  _state.label = 6;
705
744
  case 6:
@@ -728,15 +767,15 @@ var LiffProvider = function(param) {
728
767
  // 初始化 LIFF
729
768
  var initializeLiff = function() {
730
769
  var _ref = _async_to_generator(function(isValid) {
731
- var customFetch, liff, originalFetch, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
770
+ var customFetch, liff, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
732
771
  return _ts_generator(this, function(_state) {
733
772
  switch(_state.label){
734
773
  case 0:
735
774
  _state.trys.push([
736
775
  0,
737
- 13,
776
+ 15,
738
777
  ,
739
- 14
778
+ 16
740
779
  ]);
741
780
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
742
781
  // eslint-disable-next-line no-inner-declarations
@@ -766,6 +805,17 @@ var LiffProvider = function(param) {
766
805
  _state.sent();
767
806
  console.log("LIFF init succeeded.");
768
807
  setLiffObject(liff);
808
+ // 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
809
+ storedProfileExists = false;
810
+ try {
811
+ storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
812
+ } catch (e) {
813
+ storedProfileExists = false;
814
+ }
815
+ if (!(!storedProfileExists && !liffProfile)) return [
816
+ 3,
817
+ 7
818
+ ];
769
819
  _state.label = 3;
770
820
  case 3:
771
821
  _state.trys.push([
@@ -794,6 +844,15 @@ var LiffProvider = function(param) {
794
844
  6
795
845
  ];
796
846
  case 6:
847
+ return [
848
+ 3,
849
+ 8
850
+ ];
851
+ case 7:
852
+ // 已有快取,跳過呼叫
853
+ console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
854
+ _state.label = 8;
855
+ case 8:
797
856
  lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
798
857
  // 未登入先進行登入
799
858
  if (!liff.isLoggedIn()) {
@@ -816,21 +875,21 @@ var LiffProvider = function(param) {
816
875
  tempFriendship = null;
817
876
  if (!lineToken) return [
818
877
  3,
819
- 12
878
+ 14
820
879
  ];
821
- _state.label = 7;
822
- case 7:
880
+ _state.label = 9;
881
+ case 9:
823
882
  _state.trys.push([
824
- 7,
825
883
  9,
884
+ 11,
826
885
  ,
827
- 10
886
+ 12
828
887
  ]);
829
888
  return [
830
889
  4,
831
890
  liff.getFriendship()
832
891
  ];
833
- case 8:
892
+ case 10:
834
893
  friendship = _state.sent();
835
894
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
836
895
  setFriendship(friendFlag);
@@ -838,16 +897,16 @@ var LiffProvider = function(param) {
838
897
  console.log("isFriendship", friendFlag);
839
898
  return [
840
899
  3,
841
- 10
900
+ 12
842
901
  ];
843
- case 9:
902
+ case 11:
844
903
  error = _state.sent();
845
904
  console.error("Error in liff.getFriendship():", error);
846
905
  return [
847
906
  3,
848
- 10
907
+ 12
849
908
  ];
850
- case 10:
909
+ case 12:
851
910
  console.log("isValid", isValid);
852
911
  if (tempFriendship && isValid) return [
853
912
  2
@@ -856,23 +915,23 @@ var LiffProvider = function(param) {
856
915
  4,
857
916
  loginInit(lineToken)
858
917
  ];
859
- case 11:
918
+ case 13:
860
919
  _state.sent();
861
- _state.label = 12;
862
- case 12:
920
+ _state.label = 14;
921
+ case 14:
863
922
  return [
864
923
  3,
865
- 14
924
+ 16
866
925
  ];
867
- case 13:
926
+ case 15:
868
927
  err = _state.sent();
869
928
  setLiffError(err.toString());
870
929
  console.log("LIFF init failed.", err);
871
930
  return [
872
931
  3,
873
- 14
932
+ 16
874
933
  ];
875
- case 14:
934
+ case 16:
876
935
  return [
877
936
  2
878
937
  ];
@@ -1029,6 +1088,12 @@ var LiffProvider = function(param) {
1029
1088
  setLoginType(null);
1030
1089
  setUserInfo(null);
1031
1090
  window.localStorage.removeItem(userInfoStorageKey);
1091
+ // 使用統一清理方法
1092
+ try {
1093
+ clearLiffData();
1094
+ } catch (e) {
1095
+ // ignore
1096
+ }
1032
1097
  console.warn("LIFF token 驗證失敗,需重新登入", err);
1033
1098
  return [
1034
1099
  2,
@@ -1137,14 +1202,12 @@ var LiffProvider = function(param) {
1137
1202
  userInfo: userInfo,
1138
1203
  accessToken: accessToken,
1139
1204
  liffError: liffError,
1140
- initializeLiff: function() {
1141
- return initializeLiff(false);
1142
- },
1143
1205
  isFriendship: isFriendship,
1144
1206
  ensureLiffTokenValid: ensureLiffTokenValid,
1145
1207
  accountLogin: accountLogin,
1146
1208
  loginType: loginType,
1147
- liffProfile: liffProfile
1209
+ liffProfile: liffProfile,
1210
+ clearLiffData: clearLiffData
1148
1211
  };
1149
1212
  }, [
1150
1213
  liffObject,
@@ -1156,7 +1219,8 @@ var LiffProvider = function(param) {
1156
1219
  ensureLiffTokenValid,
1157
1220
  accountLogin,
1158
1221
  loginType,
1159
- liffProfile
1222
+ liffProfile,
1223
+ clearLiffData
1160
1224
  ]);
1161
1225
  return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
1162
1226
  value: contextValue,
@@ -507,6 +507,33 @@ var LiffProvider = function(param) {
507
507
  console.error("儲存 liffUserInfo 失敗:", err);
508
508
  }
509
509
  };
510
+ // 移除 LIFF profile 的 localStorage
511
+ var removeLiffUserInfoFromStorage = function() {
512
+ try {
513
+ window.localStorage.removeItem(liffUserInfoStorageKey);
514
+ } catch (err) {
515
+ // ignore
516
+ }
517
+ };
518
+ // 移除 LIFF initialized flag
519
+ var removeLiffInitializedFromStorage = function() {
520
+ try {
521
+ window.localStorage.removeItem("".concat(localStorageKey, "-liffInitialized"));
522
+ } catch (err) {
523
+ // ignore
524
+ }
525
+ };
526
+ // 清除 LIFF 相關快取與狀態(暴露給外部 as needed)
527
+ var clearLiffData = function() {
528
+ try {
529
+ removeLiffUserInfoFromStorage();
530
+ removeLiffInitializedFromStorage();
531
+ } catch (e) {
532
+ // ignore
533
+ }
534
+ setLiffProfile(null);
535
+ setLiffObject(null);
536
+ };
510
537
  var fetchMemberInfo = function() {
511
538
  var _ref = _async_to_generator(function(token) {
512
539
  var response, err;
@@ -615,6 +642,12 @@ var LiffProvider = function(param) {
615
642
  // token 無效時清除 userInfo
616
643
  setUserInfo(null);
617
644
  window.localStorage.removeItem(userInfoStorageKey);
645
+ // 使用統一清理方法清除 LIFF 快取與初始化標記
646
+ try {
647
+ clearLiffData();
648
+ } catch (e) {
649
+ // ignore
650
+ }
618
651
  return [
619
652
  3,
620
653
  7
@@ -694,8 +727,14 @@ var LiffProvider = function(param) {
694
727
  6
695
728
  ];
696
729
  case 5:
730
+ // 登入沒有回傳 token,視為登入失敗 — 清除 LIFF 快取
697
731
  setUserInfo(response);
698
732
  saveUserInfoToStorage(response);
733
+ try {
734
+ clearLiffData();
735
+ } catch (e) {
736
+ // ignore
737
+ }
699
738
  if (handleLoginError) handleLoginError();
700
739
  _state.label = 6;
701
740
  case 6:
@@ -724,15 +763,15 @@ var LiffProvider = function(param) {
724
763
  // 初始化 LIFF
725
764
  var initializeLiff = function() {
726
765
  var _ref = _async_to_generator(function(isValid) {
727
- var customFetch, liff, originalFetch, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
766
+ var customFetch, liff, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
728
767
  return _ts_generator(this, function(_state) {
729
768
  switch(_state.label){
730
769
  case 0:
731
770
  _state.trys.push([
732
771
  0,
733
- 13,
772
+ 15,
734
773
  ,
735
- 14
774
+ 16
736
775
  ]);
737
776
  customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
738
777
  // eslint-disable-next-line no-inner-declarations
@@ -762,6 +801,17 @@ var LiffProvider = function(param) {
762
801
  _state.sent();
763
802
  console.log("LIFF init succeeded.");
764
803
  setLiffObject(liff);
804
+ // 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
805
+ storedProfileExists = false;
806
+ try {
807
+ storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
808
+ } catch (e) {
809
+ storedProfileExists = false;
810
+ }
811
+ if (!(!storedProfileExists && !liffProfile)) return [
812
+ 3,
813
+ 7
814
+ ];
765
815
  _state.label = 3;
766
816
  case 3:
767
817
  _state.trys.push([
@@ -790,6 +840,15 @@ var LiffProvider = function(param) {
790
840
  6
791
841
  ];
792
842
  case 6:
843
+ return [
844
+ 3,
845
+ 8
846
+ ];
847
+ case 7:
848
+ // 已有快取,跳過呼叫
849
+ console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
850
+ _state.label = 8;
851
+ case 8:
793
852
  lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
794
853
  // 未登入先進行登入
795
854
  if (!liff.isLoggedIn()) {
@@ -812,21 +871,21 @@ var LiffProvider = function(param) {
812
871
  tempFriendship = null;
813
872
  if (!lineToken) return [
814
873
  3,
815
- 12
874
+ 14
816
875
  ];
817
- _state.label = 7;
818
- case 7:
876
+ _state.label = 9;
877
+ case 9:
819
878
  _state.trys.push([
820
- 7,
821
879
  9,
880
+ 11,
822
881
  ,
823
- 10
882
+ 12
824
883
  ]);
825
884
  return [
826
885
  4,
827
886
  liff.getFriendship()
828
887
  ];
829
- case 8:
888
+ case 10:
830
889
  friendship = _state.sent();
831
890
  friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
832
891
  setFriendship(friendFlag);
@@ -834,16 +893,16 @@ var LiffProvider = function(param) {
834
893
  console.log("isFriendship", friendFlag);
835
894
  return [
836
895
  3,
837
- 10
896
+ 12
838
897
  ];
839
- case 9:
898
+ case 11:
840
899
  error = _state.sent();
841
900
  console.error("Error in liff.getFriendship():", error);
842
901
  return [
843
902
  3,
844
- 10
903
+ 12
845
904
  ];
846
- case 10:
905
+ case 12:
847
906
  console.log("isValid", isValid);
848
907
  if (tempFriendship && isValid) return [
849
908
  2
@@ -852,23 +911,23 @@ var LiffProvider = function(param) {
852
911
  4,
853
912
  loginInit(lineToken)
854
913
  ];
855
- case 11:
914
+ case 13:
856
915
  _state.sent();
857
- _state.label = 12;
858
- case 12:
916
+ _state.label = 14;
917
+ case 14:
859
918
  return [
860
919
  3,
861
- 14
920
+ 16
862
921
  ];
863
- case 13:
922
+ case 15:
864
923
  err = _state.sent();
865
924
  setLiffError(err.toString());
866
925
  console.log("LIFF init failed.", err);
867
926
  return [
868
927
  3,
869
- 14
928
+ 16
870
929
  ];
871
- case 14:
930
+ case 16:
872
931
  return [
873
932
  2
874
933
  ];
@@ -1025,6 +1084,12 @@ var LiffProvider = function(param) {
1025
1084
  setLoginType(null);
1026
1085
  setUserInfo(null);
1027
1086
  window.localStorage.removeItem(userInfoStorageKey);
1087
+ // 使用統一清理方法
1088
+ try {
1089
+ clearLiffData();
1090
+ } catch (e) {
1091
+ // ignore
1092
+ }
1028
1093
  console.warn("LIFF token 驗證失敗,需重新登入", err);
1029
1094
  return [
1030
1095
  2,
@@ -1133,14 +1198,12 @@ var LiffProvider = function(param) {
1133
1198
  userInfo: userInfo,
1134
1199
  accessToken: accessToken,
1135
1200
  liffError: liffError,
1136
- initializeLiff: function() {
1137
- return initializeLiff(false);
1138
- },
1139
1201
  isFriendship: isFriendship,
1140
1202
  ensureLiffTokenValid: ensureLiffTokenValid,
1141
1203
  accountLogin: accountLogin,
1142
1204
  loginType: loginType,
1143
- liffProfile: liffProfile
1205
+ liffProfile: liffProfile,
1206
+ clearLiffData: clearLiffData
1144
1207
  };
1145
1208
  }, [
1146
1209
  liffObject,
@@ -1152,7 +1215,8 @@ var LiffProvider = function(param) {
1152
1215
  ensureLiffTokenValid,
1153
1216
  accountLogin,
1154
1217
  loginType,
1155
- liffProfile
1218
+ liffProfile,
1219
+ clearLiffData
1156
1220
  ]);
1157
1221
  return /*#__PURE__*/ jsx(LiffContext.Provider, {
1158
1222
  value: contextValue,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sunggang/ui-lib",
3
- "version": "0.4.52",
3
+ "version": "0.4.53",
4
4
  "sideEffects": [
5
5
  "*.css",
6
6
  "./src/style.css",
@@ -6,9 +6,9 @@ type LiffContextType = {
6
6
  liffProfile?: any;
7
7
  accessToken: string;
8
8
  liffError: string | null;
9
- initializeLiff: () => Promise<void>;
10
9
  isFriendship: boolean | null;
11
10
  ensureLiffTokenValid: () => Promise<boolean>;
11
+ clearLiffData: () => void;
12
12
  loginType: string | null;
13
13
  accountLogin: (username: string, password: string) => Promise<void>;
14
14
  };