@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.
- package/LiffProvider.cjs.js +89 -25
- package/LiffProvider.esm.js +89 -25
- package/package.json +1 -1
- package/src/lib/Provider/LiffProvider.d.ts +1 -1
package/LiffProvider.cjs.js
CHANGED
|
@@ -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
|
-
|
|
776
|
+
15,
|
|
738
777
|
,
|
|
739
|
-
|
|
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
|
-
|
|
878
|
+
14
|
|
820
879
|
];
|
|
821
|
-
_state.label =
|
|
822
|
-
case
|
|
880
|
+
_state.label = 9;
|
|
881
|
+
case 9:
|
|
823
882
|
_state.trys.push([
|
|
824
|
-
7,
|
|
825
883
|
9,
|
|
884
|
+
11,
|
|
826
885
|
,
|
|
827
|
-
|
|
886
|
+
12
|
|
828
887
|
]);
|
|
829
888
|
return [
|
|
830
889
|
4,
|
|
831
890
|
liff.getFriendship()
|
|
832
891
|
];
|
|
833
|
-
case
|
|
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
|
-
|
|
900
|
+
12
|
|
842
901
|
];
|
|
843
|
-
case
|
|
902
|
+
case 11:
|
|
844
903
|
error = _state.sent();
|
|
845
904
|
console.error("Error in liff.getFriendship():", error);
|
|
846
905
|
return [
|
|
847
906
|
3,
|
|
848
|
-
|
|
907
|
+
12
|
|
849
908
|
];
|
|
850
|
-
case
|
|
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
|
|
918
|
+
case 13:
|
|
860
919
|
_state.sent();
|
|
861
|
-
_state.label =
|
|
862
|
-
case
|
|
920
|
+
_state.label = 14;
|
|
921
|
+
case 14:
|
|
863
922
|
return [
|
|
864
923
|
3,
|
|
865
|
-
|
|
924
|
+
16
|
|
866
925
|
];
|
|
867
|
-
case
|
|
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
|
-
|
|
932
|
+
16
|
|
874
933
|
];
|
|
875
|
-
case
|
|
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,
|
package/LiffProvider.esm.js
CHANGED
|
@@ -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
|
-
|
|
772
|
+
15,
|
|
734
773
|
,
|
|
735
|
-
|
|
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
|
-
|
|
874
|
+
14
|
|
816
875
|
];
|
|
817
|
-
_state.label =
|
|
818
|
-
case
|
|
876
|
+
_state.label = 9;
|
|
877
|
+
case 9:
|
|
819
878
|
_state.trys.push([
|
|
820
|
-
7,
|
|
821
879
|
9,
|
|
880
|
+
11,
|
|
822
881
|
,
|
|
823
|
-
|
|
882
|
+
12
|
|
824
883
|
]);
|
|
825
884
|
return [
|
|
826
885
|
4,
|
|
827
886
|
liff.getFriendship()
|
|
828
887
|
];
|
|
829
|
-
case
|
|
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
|
-
|
|
896
|
+
12
|
|
838
897
|
];
|
|
839
|
-
case
|
|
898
|
+
case 11:
|
|
840
899
|
error = _state.sent();
|
|
841
900
|
console.error("Error in liff.getFriendship():", error);
|
|
842
901
|
return [
|
|
843
902
|
3,
|
|
844
|
-
|
|
903
|
+
12
|
|
845
904
|
];
|
|
846
|
-
case
|
|
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
|
|
914
|
+
case 13:
|
|
856
915
|
_state.sent();
|
|
857
|
-
_state.label =
|
|
858
|
-
case
|
|
916
|
+
_state.label = 14;
|
|
917
|
+
case 14:
|
|
859
918
|
return [
|
|
860
919
|
3,
|
|
861
|
-
|
|
920
|
+
16
|
|
862
921
|
];
|
|
863
|
-
case
|
|
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
|
-
|
|
928
|
+
16
|
|
870
929
|
];
|
|
871
|
-
case
|
|
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
|
@@ -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
|
};
|