@sunggang/ui-lib 0.4.40 → 0.4.42
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 +81 -148
- package/LiffProvider.esm.js +81 -148
- package/package.json +1 -1
package/LiffProvider.cjs.js
CHANGED
|
@@ -254,7 +254,7 @@ var fetchAPI = function() {
|
|
|
254
254
|
};
|
|
255
255
|
}();
|
|
256
256
|
|
|
257
|
-
|
|
257
|
+
function _array_like_to_array(arr, len) {
|
|
258
258
|
if (len == null || len > arr.length) len = arr.length;
|
|
259
259
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
260
260
|
return arr2;
|
|
@@ -465,7 +465,7 @@ var LiffProvider = function(param) {
|
|
|
465
465
|
// userInfo 的 localStorage key
|
|
466
466
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
467
467
|
// 從 localStorage 載入 userInfo
|
|
468
|
-
var loadUserInfoFromStorage =
|
|
468
|
+
var loadUserInfoFromStorage = function() {
|
|
469
469
|
try {
|
|
470
470
|
var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
|
|
471
471
|
if (storedUserInfo) {
|
|
@@ -477,20 +477,16 @@ var LiffProvider = function(param) {
|
|
|
477
477
|
console.error("載入 userInfo 失敗:", err);
|
|
478
478
|
}
|
|
479
479
|
return null;
|
|
480
|
-
}
|
|
481
|
-
userInfoStorageKey
|
|
482
|
-
]);
|
|
480
|
+
};
|
|
483
481
|
// 儲存 userInfo 到 localStorage
|
|
484
|
-
var saveUserInfoToStorage =
|
|
482
|
+
var saveUserInfoToStorage = function(info) {
|
|
485
483
|
try {
|
|
486
484
|
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
487
485
|
} catch (err) {
|
|
488
486
|
console.error("儲存 userInfo 失敗:", err);
|
|
489
487
|
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
]);
|
|
493
|
-
var fetchMemberInfo = React.useCallback(function() {
|
|
488
|
+
};
|
|
489
|
+
var fetchMemberInfo = function() {
|
|
494
490
|
var _ref = _async_to_generator(function(token) {
|
|
495
491
|
var response, err;
|
|
496
492
|
return _ts_generator(this, function(_state) {
|
|
@@ -535,23 +531,19 @@ var LiffProvider = function(param) {
|
|
|
535
531
|
}
|
|
536
532
|
});
|
|
537
533
|
});
|
|
538
|
-
return function(token) {
|
|
534
|
+
return function fetchMemberInfo(token) {
|
|
539
535
|
return _ref.apply(this, arguments);
|
|
540
536
|
};
|
|
541
|
-
}()
|
|
542
|
-
memberInfoUrl,
|
|
543
|
-
saveUserInfoToStorage
|
|
544
|
-
]);
|
|
537
|
+
}();
|
|
545
538
|
// 檢查 token 的有效性
|
|
546
|
-
var checkTokenFunc =
|
|
539
|
+
var checkTokenFunc = function() {
|
|
547
540
|
var _ref = _async_to_generator(function(token) {
|
|
548
541
|
var finalToken, response, err;
|
|
549
542
|
return _ts_generator(this, function(_state) {
|
|
550
543
|
switch(_state.label){
|
|
551
544
|
case 0:
|
|
552
545
|
if (!checkTokenUrl) return [
|
|
553
|
-
2
|
|
554
|
-
false
|
|
546
|
+
2
|
|
555
547
|
];
|
|
556
548
|
finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
|
|
557
549
|
_state.label = 1;
|
|
@@ -614,17 +606,12 @@ var LiffProvider = function(param) {
|
|
|
614
606
|
}
|
|
615
607
|
});
|
|
616
608
|
});
|
|
617
|
-
return function(token) {
|
|
609
|
+
return function checkTokenFunc(token) {
|
|
618
610
|
return _ref.apply(this, arguments);
|
|
619
611
|
};
|
|
620
|
-
}()
|
|
621
|
-
checkTokenUrl,
|
|
622
|
-
memberInfoUrl,
|
|
623
|
-
userInfoStorageKey,
|
|
624
|
-
fetchMemberInfo
|
|
625
|
-
]);
|
|
612
|
+
}();
|
|
626
613
|
// 登入初始化函數
|
|
627
|
-
var loginInit =
|
|
614
|
+
var loginInit = function() {
|
|
628
615
|
var _ref = _async_to_generator(function(token) {
|
|
629
616
|
var _resData_data, _resData_data1, response, resData, loginToken, err;
|
|
630
617
|
return _ts_generator(this, function(_state) {
|
|
@@ -709,34 +696,22 @@ var LiffProvider = function(param) {
|
|
|
709
696
|
}
|
|
710
697
|
});
|
|
711
698
|
});
|
|
712
|
-
return function(token) {
|
|
699
|
+
return function loginInit(token) {
|
|
713
700
|
return _ref.apply(this, arguments);
|
|
714
701
|
};
|
|
715
|
-
}()
|
|
716
|
-
loginUrl,
|
|
717
|
-
ignoreCheckAddFriend,
|
|
718
|
-
inviteCode,
|
|
719
|
-
localStorageKey,
|
|
720
|
-
memberInfoUrl,
|
|
721
|
-
handleLoginError,
|
|
722
|
-
fetchMemberInfo,
|
|
723
|
-
saveUserInfoToStorage
|
|
724
|
-
]);
|
|
702
|
+
}();
|
|
725
703
|
// 初始化 LIFF
|
|
726
|
-
var initializeLiff =
|
|
704
|
+
var initializeLiff = function() {
|
|
727
705
|
var _ref = _async_to_generator(function(isValid) {
|
|
728
|
-
var
|
|
706
|
+
var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
729
707
|
return _ts_generator(this, function(_state) {
|
|
730
708
|
switch(_state.label){
|
|
731
709
|
case 0:
|
|
732
|
-
originalFetch = window.fetch;
|
|
733
|
-
_state.label = 1;
|
|
734
|
-
case 1:
|
|
735
710
|
_state.trys.push([
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
711
|
+
0,
|
|
712
|
+
12,
|
|
713
|
+
,
|
|
714
|
+
13
|
|
740
715
|
]);
|
|
741
716
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
742
717
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -750,34 +725,15 @@ var LiffProvider = function(param) {
|
|
|
750
725
|
4,
|
|
751
726
|
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
752
727
|
];
|
|
753
|
-
case
|
|
728
|
+
case 1:
|
|
754
729
|
liff = _state.sent().liff;
|
|
730
|
+
originalFetch = window.fetch;
|
|
755
731
|
window.fetch = customFetch;
|
|
756
732
|
if (openInApp && !(liff === null || liff === void 0 ? void 0 : liff.isInClient()) && (liff === null || liff === void 0 ? void 0 : liff.getOS()) !== "web") window.location.href = "line://app/".concat(liffId);
|
|
757
|
-
console.log("Initializing LIFF with ID:", liff);
|
|
758
|
-
if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
|
|
759
|
-
3,
|
|
760
|
-
4
|
|
761
|
-
];
|
|
762
|
-
return [
|
|
763
|
-
4,
|
|
764
|
-
liff.init({
|
|
765
|
-
liffId: liffId,
|
|
766
|
-
withLoginOnExternalBrowser: false
|
|
767
|
-
})
|
|
768
|
-
];
|
|
769
|
-
case 3:
|
|
770
|
-
_state.sent();
|
|
771
733
|
console.log("LIFF init succeeded.");
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
];
|
|
776
|
-
case 4:
|
|
777
|
-
console.log("LIFF already logged in, skip init.");
|
|
778
|
-
_state.label = 5;
|
|
779
|
-
case 5:
|
|
780
|
-
// 未登入先進行登入
|
|
734
|
+
setLiffObject(liff);
|
|
735
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
736
|
+
// 未登入先進行登入(呼叫 login 後立即 return,避免後續執行 init)
|
|
781
737
|
if (!liff.isLoggedIn()) {
|
|
782
738
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
783
739
|
if (liffLogin) {
|
|
@@ -794,59 +750,73 @@ var LiffProvider = function(param) {
|
|
|
794
750
|
liff.login({
|
|
795
751
|
redirectUri: redirectUri
|
|
796
752
|
});
|
|
797
|
-
}
|
|
798
|
-
setLiffObject(liff);
|
|
799
|
-
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
800
|
-
// 已登入且 token 有效,跳過 loginInit
|
|
801
|
-
if (isValid) {
|
|
802
|
-
console.log("✅ Token 已驗證有效,跳過 loginInit");
|
|
803
753
|
return [
|
|
804
754
|
2
|
|
805
755
|
];
|
|
806
756
|
}
|
|
757
|
+
if (!!liff.isLoggedIn()) return [
|
|
758
|
+
3,
|
|
759
|
+
3
|
|
760
|
+
];
|
|
761
|
+
return [
|
|
762
|
+
4,
|
|
763
|
+
liff.init({
|
|
764
|
+
liffId: liffId,
|
|
765
|
+
withLoginOnExternalBrowser: false
|
|
766
|
+
})
|
|
767
|
+
];
|
|
768
|
+
case 2:
|
|
769
|
+
_state.sent();
|
|
770
|
+
return [
|
|
771
|
+
3,
|
|
772
|
+
4
|
|
773
|
+
];
|
|
774
|
+
case 3:
|
|
775
|
+
console.log("LIFF 已登入,跳過 liff.init() 以避免重複的 verify/profile 呼叫。");
|
|
776
|
+
_state.label = 4;
|
|
777
|
+
case 4:
|
|
807
778
|
tempFriendship = null;
|
|
808
779
|
if (!lineToken) return [
|
|
809
780
|
3,
|
|
810
|
-
|
|
781
|
+
11
|
|
811
782
|
];
|
|
812
|
-
_state.label =
|
|
813
|
-
case
|
|
783
|
+
_state.label = 5;
|
|
784
|
+
case 5:
|
|
814
785
|
_state.trys.push([
|
|
815
|
-
|
|
816
|
-
|
|
786
|
+
5,
|
|
787
|
+
8,
|
|
817
788
|
,
|
|
818
|
-
|
|
789
|
+
9
|
|
819
790
|
]);
|
|
820
|
-
if (!!
|
|
791
|
+
if (!!liff.isLoggedIn()) return [
|
|
821
792
|
3,
|
|
822
|
-
|
|
793
|
+
7
|
|
823
794
|
];
|
|
824
795
|
return [
|
|
825
796
|
4,
|
|
826
797
|
liff.getFriendship()
|
|
827
798
|
];
|
|
828
|
-
case
|
|
799
|
+
case 6:
|
|
829
800
|
friendship = _state.sent();
|
|
830
801
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
831
802
|
setFriendship(friendFlag);
|
|
832
803
|
tempFriendship = friendFlag;
|
|
833
804
|
console.log("isFriendship", friendFlag);
|
|
834
|
-
_state.label =
|
|
835
|
-
case
|
|
805
|
+
_state.label = 7;
|
|
806
|
+
case 7:
|
|
836
807
|
return [
|
|
837
808
|
3,
|
|
838
|
-
|
|
809
|
+
9
|
|
839
810
|
];
|
|
840
|
-
case
|
|
811
|
+
case 8:
|
|
841
812
|
error = _state.sent();
|
|
842
813
|
console.error("Error in liff.getFriendship():", error);
|
|
843
814
|
return [
|
|
844
815
|
3,
|
|
845
|
-
|
|
816
|
+
9
|
|
846
817
|
];
|
|
847
|
-
case
|
|
818
|
+
case 9:
|
|
848
819
|
console.log("isValid", isValid);
|
|
849
|
-
// 如果是好友且 token 有效,跳過 loginInit
|
|
850
820
|
if (tempFriendship && isValid) return [
|
|
851
821
|
2
|
|
852
822
|
];
|
|
@@ -854,52 +824,34 @@ var LiffProvider = function(param) {
|
|
|
854
824
|
4,
|
|
855
825
|
loginInit(lineToken)
|
|
856
826
|
];
|
|
857
|
-
case
|
|
827
|
+
case 10:
|
|
858
828
|
_state.sent();
|
|
859
|
-
_state.label =
|
|
860
|
-
case
|
|
829
|
+
_state.label = 11;
|
|
830
|
+
case 11:
|
|
861
831
|
return [
|
|
862
832
|
3,
|
|
863
|
-
|
|
833
|
+
13
|
|
864
834
|
];
|
|
865
|
-
case
|
|
835
|
+
case 12:
|
|
866
836
|
err = _state.sent();
|
|
867
837
|
setLiffError(err.toString());
|
|
868
838
|
console.log("LIFF init failed.", err);
|
|
869
839
|
return [
|
|
870
840
|
3,
|
|
871
|
-
|
|
841
|
+
13
|
|
872
842
|
];
|
|
873
|
-
case
|
|
874
|
-
// 確保還原全域 fetch
|
|
875
|
-
try {
|
|
876
|
-
window.fetch = originalFetch;
|
|
877
|
-
} catch (e) {
|
|
878
|
-
// ignore
|
|
879
|
-
}
|
|
880
|
-
return [
|
|
881
|
-
7
|
|
882
|
-
];
|
|
883
|
-
case 15:
|
|
843
|
+
case 13:
|
|
884
844
|
return [
|
|
885
845
|
2
|
|
886
846
|
];
|
|
887
847
|
}
|
|
888
848
|
});
|
|
889
849
|
});
|
|
890
|
-
return function(isValid) {
|
|
850
|
+
return function initializeLiff(isValid) {
|
|
891
851
|
return _ref.apply(this, arguments);
|
|
892
852
|
};
|
|
893
|
-
}()
|
|
894
|
-
|
|
895
|
-
liffId,
|
|
896
|
-
liffLogin,
|
|
897
|
-
loginByUser,
|
|
898
|
-
ignoreRoute,
|
|
899
|
-
customerRedirectUrl,
|
|
900
|
-
loginInit
|
|
901
|
-
]);
|
|
902
|
-
var accountLogin = React.useCallback(function() {
|
|
853
|
+
}();
|
|
854
|
+
var accountLogin = function() {
|
|
903
855
|
var _ref = _async_to_generator(function(username, password) {
|
|
904
856
|
var response, token, tokenType, finalToken, err;
|
|
905
857
|
return _ts_generator(this, function(_state) {
|
|
@@ -966,14 +918,10 @@ var LiffProvider = function(param) {
|
|
|
966
918
|
}
|
|
967
919
|
});
|
|
968
920
|
});
|
|
969
|
-
return function(username, password) {
|
|
921
|
+
return function accountLogin(username, password) {
|
|
970
922
|
return _ref.apply(this, arguments);
|
|
971
923
|
};
|
|
972
|
-
}()
|
|
973
|
-
accountLoginUrl,
|
|
974
|
-
localStorageKey,
|
|
975
|
-
fetchMemberInfo
|
|
976
|
-
]);
|
|
924
|
+
}();
|
|
977
925
|
var ensureLiffTokenValid = React.useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
978
926
|
var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
|
|
979
927
|
return _ts_generator(this, function(_state) {
|
|
@@ -1062,34 +1010,26 @@ var LiffProvider = function(param) {
|
|
|
1062
1010
|
});
|
|
1063
1011
|
}), [
|
|
1064
1012
|
liffObject,
|
|
1065
|
-
userInfoStorageKey
|
|
1066
|
-
checkTokenFunc,
|
|
1067
|
-
localStorageKey,
|
|
1068
|
-
loginData
|
|
1013
|
+
userInfoStorageKey
|
|
1069
1014
|
]);
|
|
1070
1015
|
var normalizeToken = function(token) {
|
|
1071
1016
|
var trimmed = token.trim();
|
|
1072
1017
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1073
1018
|
};
|
|
1074
|
-
|
|
1075
|
-
// (會在後面的 useEffect 中建立)
|
|
1076
|
-
var searchParams = null;
|
|
1019
|
+
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1077
1020
|
// 初始載入時從 localStorage 載入 userInfo
|
|
1078
1021
|
React.useEffect(function() {
|
|
1079
1022
|
loadUserInfoFromStorage();
|
|
1080
|
-
}, [
|
|
1081
|
-
loadUserInfoFromStorage
|
|
1082
|
-
]);
|
|
1023
|
+
}, []);
|
|
1083
1024
|
// 客戶端初始化 LIFF
|
|
1084
1025
|
React.useEffect(function() {
|
|
1085
1026
|
var checkAndInitialize = function() {
|
|
1086
1027
|
var _ref = _async_to_generator(function() {
|
|
1087
|
-
var
|
|
1028
|
+
var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1088
1029
|
return _ts_generator(this, function(_state) {
|
|
1089
1030
|
switch(_state.label){
|
|
1090
1031
|
case 0:
|
|
1091
|
-
|
|
1092
|
-
tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
|
|
1032
|
+
tokenFromQuery = searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("token");
|
|
1093
1033
|
if (!tokenFromQuery) return [
|
|
1094
1034
|
3,
|
|
1095
1035
|
2
|
|
@@ -1156,13 +1096,7 @@ var LiffProvider = function(param) {
|
|
|
1156
1096
|
};
|
|
1157
1097
|
}();
|
|
1158
1098
|
checkAndInitialize();
|
|
1159
|
-
}, [
|
|
1160
|
-
checkTokenFunc,
|
|
1161
|
-
initializeLiff,
|
|
1162
|
-
localStorageKey,
|
|
1163
|
-
loginData,
|
|
1164
|
-
searchParams
|
|
1165
|
-
]);
|
|
1099
|
+
}, []);
|
|
1166
1100
|
var contextValue = React.useMemo(function() {
|
|
1167
1101
|
return {
|
|
1168
1102
|
liffObject: liffObject,
|
|
@@ -1187,8 +1121,7 @@ var LiffProvider = function(param) {
|
|
|
1187
1121
|
isFriendship,
|
|
1188
1122
|
ensureLiffTokenValid,
|
|
1189
1123
|
accountLogin,
|
|
1190
|
-
loginType
|
|
1191
|
-
initializeLiff
|
|
1124
|
+
loginType
|
|
1192
1125
|
]);
|
|
1193
1126
|
return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
|
|
1194
1127
|
value: contextValue,
|
package/LiffProvider.esm.js
CHANGED
|
@@ -250,7 +250,7 @@ var fetchAPI = function() {
|
|
|
250
250
|
};
|
|
251
251
|
}();
|
|
252
252
|
|
|
253
|
-
|
|
253
|
+
function _array_like_to_array(arr, len) {
|
|
254
254
|
if (len == null || len > arr.length) len = arr.length;
|
|
255
255
|
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
256
256
|
return arr2;
|
|
@@ -461,7 +461,7 @@ var LiffProvider = function(param) {
|
|
|
461
461
|
// userInfo 的 localStorage key
|
|
462
462
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
463
463
|
// 從 localStorage 載入 userInfo
|
|
464
|
-
var loadUserInfoFromStorage =
|
|
464
|
+
var loadUserInfoFromStorage = function() {
|
|
465
465
|
try {
|
|
466
466
|
var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
|
|
467
467
|
if (storedUserInfo) {
|
|
@@ -473,20 +473,16 @@ var LiffProvider = function(param) {
|
|
|
473
473
|
console.error("載入 userInfo 失敗:", err);
|
|
474
474
|
}
|
|
475
475
|
return null;
|
|
476
|
-
}
|
|
477
|
-
userInfoStorageKey
|
|
478
|
-
]);
|
|
476
|
+
};
|
|
479
477
|
// 儲存 userInfo 到 localStorage
|
|
480
|
-
var saveUserInfoToStorage =
|
|
478
|
+
var saveUserInfoToStorage = function(info) {
|
|
481
479
|
try {
|
|
482
480
|
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
483
481
|
} catch (err) {
|
|
484
482
|
console.error("儲存 userInfo 失敗:", err);
|
|
485
483
|
}
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
]);
|
|
489
|
-
var fetchMemberInfo = useCallback(function() {
|
|
484
|
+
};
|
|
485
|
+
var fetchMemberInfo = function() {
|
|
490
486
|
var _ref = _async_to_generator(function(token) {
|
|
491
487
|
var response, err;
|
|
492
488
|
return _ts_generator(this, function(_state) {
|
|
@@ -531,23 +527,19 @@ var LiffProvider = function(param) {
|
|
|
531
527
|
}
|
|
532
528
|
});
|
|
533
529
|
});
|
|
534
|
-
return function(token) {
|
|
530
|
+
return function fetchMemberInfo(token) {
|
|
535
531
|
return _ref.apply(this, arguments);
|
|
536
532
|
};
|
|
537
|
-
}()
|
|
538
|
-
memberInfoUrl,
|
|
539
|
-
saveUserInfoToStorage
|
|
540
|
-
]);
|
|
533
|
+
}();
|
|
541
534
|
// 檢查 token 的有效性
|
|
542
|
-
var checkTokenFunc =
|
|
535
|
+
var checkTokenFunc = function() {
|
|
543
536
|
var _ref = _async_to_generator(function(token) {
|
|
544
537
|
var finalToken, response, err;
|
|
545
538
|
return _ts_generator(this, function(_state) {
|
|
546
539
|
switch(_state.label){
|
|
547
540
|
case 0:
|
|
548
541
|
if (!checkTokenUrl) return [
|
|
549
|
-
2
|
|
550
|
-
false
|
|
542
|
+
2
|
|
551
543
|
];
|
|
552
544
|
finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
|
|
553
545
|
_state.label = 1;
|
|
@@ -610,17 +602,12 @@ var LiffProvider = function(param) {
|
|
|
610
602
|
}
|
|
611
603
|
});
|
|
612
604
|
});
|
|
613
|
-
return function(token) {
|
|
605
|
+
return function checkTokenFunc(token) {
|
|
614
606
|
return _ref.apply(this, arguments);
|
|
615
607
|
};
|
|
616
|
-
}()
|
|
617
|
-
checkTokenUrl,
|
|
618
|
-
memberInfoUrl,
|
|
619
|
-
userInfoStorageKey,
|
|
620
|
-
fetchMemberInfo
|
|
621
|
-
]);
|
|
608
|
+
}();
|
|
622
609
|
// 登入初始化函數
|
|
623
|
-
var loginInit =
|
|
610
|
+
var loginInit = function() {
|
|
624
611
|
var _ref = _async_to_generator(function(token) {
|
|
625
612
|
var _resData_data, _resData_data1, response, resData, loginToken, err;
|
|
626
613
|
return _ts_generator(this, function(_state) {
|
|
@@ -705,34 +692,22 @@ var LiffProvider = function(param) {
|
|
|
705
692
|
}
|
|
706
693
|
});
|
|
707
694
|
});
|
|
708
|
-
return function(token) {
|
|
695
|
+
return function loginInit(token) {
|
|
709
696
|
return _ref.apply(this, arguments);
|
|
710
697
|
};
|
|
711
|
-
}()
|
|
712
|
-
loginUrl,
|
|
713
|
-
ignoreCheckAddFriend,
|
|
714
|
-
inviteCode,
|
|
715
|
-
localStorageKey,
|
|
716
|
-
memberInfoUrl,
|
|
717
|
-
handleLoginError,
|
|
718
|
-
fetchMemberInfo,
|
|
719
|
-
saveUserInfoToStorage
|
|
720
|
-
]);
|
|
698
|
+
}();
|
|
721
699
|
// 初始化 LIFF
|
|
722
|
-
var initializeLiff =
|
|
700
|
+
var initializeLiff = function() {
|
|
723
701
|
var _ref = _async_to_generator(function(isValid) {
|
|
724
|
-
var
|
|
702
|
+
var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
725
703
|
return _ts_generator(this, function(_state) {
|
|
726
704
|
switch(_state.label){
|
|
727
705
|
case 0:
|
|
728
|
-
originalFetch = window.fetch;
|
|
729
|
-
_state.label = 1;
|
|
730
|
-
case 1:
|
|
731
706
|
_state.trys.push([
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
707
|
+
0,
|
|
708
|
+
12,
|
|
709
|
+
,
|
|
710
|
+
13
|
|
736
711
|
]);
|
|
737
712
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
738
713
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -746,34 +721,15 @@ var LiffProvider = function(param) {
|
|
|
746
721
|
4,
|
|
747
722
|
import('./index.esm3.js')
|
|
748
723
|
];
|
|
749
|
-
case
|
|
724
|
+
case 1:
|
|
750
725
|
liff = _state.sent().liff;
|
|
726
|
+
originalFetch = window.fetch;
|
|
751
727
|
window.fetch = customFetch;
|
|
752
728
|
if (openInApp && !(liff === null || liff === void 0 ? void 0 : liff.isInClient()) && (liff === null || liff === void 0 ? void 0 : liff.getOS()) !== "web") window.location.href = "line://app/".concat(liffId);
|
|
753
|
-
console.log("Initializing LIFF with ID:", liff);
|
|
754
|
-
if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
|
|
755
|
-
3,
|
|
756
|
-
4
|
|
757
|
-
];
|
|
758
|
-
return [
|
|
759
|
-
4,
|
|
760
|
-
liff.init({
|
|
761
|
-
liffId: liffId,
|
|
762
|
-
withLoginOnExternalBrowser: false
|
|
763
|
-
})
|
|
764
|
-
];
|
|
765
|
-
case 3:
|
|
766
|
-
_state.sent();
|
|
767
729
|
console.log("LIFF init succeeded.");
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
];
|
|
772
|
-
case 4:
|
|
773
|
-
console.log("LIFF already logged in, skip init.");
|
|
774
|
-
_state.label = 5;
|
|
775
|
-
case 5:
|
|
776
|
-
// 未登入先進行登入
|
|
730
|
+
setLiffObject(liff);
|
|
731
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
732
|
+
// 未登入先進行登入(呼叫 login 後立即 return,避免後續執行 init)
|
|
777
733
|
if (!liff.isLoggedIn()) {
|
|
778
734
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
779
735
|
if (liffLogin) {
|
|
@@ -790,59 +746,73 @@ var LiffProvider = function(param) {
|
|
|
790
746
|
liff.login({
|
|
791
747
|
redirectUri: redirectUri
|
|
792
748
|
});
|
|
793
|
-
}
|
|
794
|
-
setLiffObject(liff);
|
|
795
|
-
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
796
|
-
// 已登入且 token 有效,跳過 loginInit
|
|
797
|
-
if (isValid) {
|
|
798
|
-
console.log("✅ Token 已驗證有效,跳過 loginInit");
|
|
799
749
|
return [
|
|
800
750
|
2
|
|
801
751
|
];
|
|
802
752
|
}
|
|
753
|
+
if (!!liff.isLoggedIn()) return [
|
|
754
|
+
3,
|
|
755
|
+
3
|
|
756
|
+
];
|
|
757
|
+
return [
|
|
758
|
+
4,
|
|
759
|
+
liff.init({
|
|
760
|
+
liffId: liffId,
|
|
761
|
+
withLoginOnExternalBrowser: false
|
|
762
|
+
})
|
|
763
|
+
];
|
|
764
|
+
case 2:
|
|
765
|
+
_state.sent();
|
|
766
|
+
return [
|
|
767
|
+
3,
|
|
768
|
+
4
|
|
769
|
+
];
|
|
770
|
+
case 3:
|
|
771
|
+
console.log("LIFF 已登入,跳過 liff.init() 以避免重複的 verify/profile 呼叫。");
|
|
772
|
+
_state.label = 4;
|
|
773
|
+
case 4:
|
|
803
774
|
tempFriendship = null;
|
|
804
775
|
if (!lineToken) return [
|
|
805
776
|
3,
|
|
806
|
-
|
|
777
|
+
11
|
|
807
778
|
];
|
|
808
|
-
_state.label =
|
|
809
|
-
case
|
|
779
|
+
_state.label = 5;
|
|
780
|
+
case 5:
|
|
810
781
|
_state.trys.push([
|
|
811
|
-
|
|
812
|
-
|
|
782
|
+
5,
|
|
783
|
+
8,
|
|
813
784
|
,
|
|
814
|
-
|
|
785
|
+
9
|
|
815
786
|
]);
|
|
816
|
-
if (!!
|
|
787
|
+
if (!!liff.isLoggedIn()) return [
|
|
817
788
|
3,
|
|
818
|
-
|
|
789
|
+
7
|
|
819
790
|
];
|
|
820
791
|
return [
|
|
821
792
|
4,
|
|
822
793
|
liff.getFriendship()
|
|
823
794
|
];
|
|
824
|
-
case
|
|
795
|
+
case 6:
|
|
825
796
|
friendship = _state.sent();
|
|
826
797
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
827
798
|
setFriendship(friendFlag);
|
|
828
799
|
tempFriendship = friendFlag;
|
|
829
800
|
console.log("isFriendship", friendFlag);
|
|
830
|
-
_state.label =
|
|
831
|
-
case
|
|
801
|
+
_state.label = 7;
|
|
802
|
+
case 7:
|
|
832
803
|
return [
|
|
833
804
|
3,
|
|
834
|
-
|
|
805
|
+
9
|
|
835
806
|
];
|
|
836
|
-
case
|
|
807
|
+
case 8:
|
|
837
808
|
error = _state.sent();
|
|
838
809
|
console.error("Error in liff.getFriendship():", error);
|
|
839
810
|
return [
|
|
840
811
|
3,
|
|
841
|
-
|
|
812
|
+
9
|
|
842
813
|
];
|
|
843
|
-
case
|
|
814
|
+
case 9:
|
|
844
815
|
console.log("isValid", isValid);
|
|
845
|
-
// 如果是好友且 token 有效,跳過 loginInit
|
|
846
816
|
if (tempFriendship && isValid) return [
|
|
847
817
|
2
|
|
848
818
|
];
|
|
@@ -850,52 +820,34 @@ var LiffProvider = function(param) {
|
|
|
850
820
|
4,
|
|
851
821
|
loginInit(lineToken)
|
|
852
822
|
];
|
|
853
|
-
case
|
|
823
|
+
case 10:
|
|
854
824
|
_state.sent();
|
|
855
|
-
_state.label =
|
|
856
|
-
case
|
|
825
|
+
_state.label = 11;
|
|
826
|
+
case 11:
|
|
857
827
|
return [
|
|
858
828
|
3,
|
|
859
|
-
|
|
829
|
+
13
|
|
860
830
|
];
|
|
861
|
-
case
|
|
831
|
+
case 12:
|
|
862
832
|
err = _state.sent();
|
|
863
833
|
setLiffError(err.toString());
|
|
864
834
|
console.log("LIFF init failed.", err);
|
|
865
835
|
return [
|
|
866
836
|
3,
|
|
867
|
-
|
|
837
|
+
13
|
|
868
838
|
];
|
|
869
|
-
case
|
|
870
|
-
// 確保還原全域 fetch
|
|
871
|
-
try {
|
|
872
|
-
window.fetch = originalFetch;
|
|
873
|
-
} catch (e) {
|
|
874
|
-
// ignore
|
|
875
|
-
}
|
|
876
|
-
return [
|
|
877
|
-
7
|
|
878
|
-
];
|
|
879
|
-
case 15:
|
|
839
|
+
case 13:
|
|
880
840
|
return [
|
|
881
841
|
2
|
|
882
842
|
];
|
|
883
843
|
}
|
|
884
844
|
});
|
|
885
845
|
});
|
|
886
|
-
return function(isValid) {
|
|
846
|
+
return function initializeLiff(isValid) {
|
|
887
847
|
return _ref.apply(this, arguments);
|
|
888
848
|
};
|
|
889
|
-
}()
|
|
890
|
-
|
|
891
|
-
liffId,
|
|
892
|
-
liffLogin,
|
|
893
|
-
loginByUser,
|
|
894
|
-
ignoreRoute,
|
|
895
|
-
customerRedirectUrl,
|
|
896
|
-
loginInit
|
|
897
|
-
]);
|
|
898
|
-
var accountLogin = useCallback(function() {
|
|
849
|
+
}();
|
|
850
|
+
var accountLogin = function() {
|
|
899
851
|
var _ref = _async_to_generator(function(username, password) {
|
|
900
852
|
var response, token, tokenType, finalToken, err;
|
|
901
853
|
return _ts_generator(this, function(_state) {
|
|
@@ -962,14 +914,10 @@ var LiffProvider = function(param) {
|
|
|
962
914
|
}
|
|
963
915
|
});
|
|
964
916
|
});
|
|
965
|
-
return function(username, password) {
|
|
917
|
+
return function accountLogin(username, password) {
|
|
966
918
|
return _ref.apply(this, arguments);
|
|
967
919
|
};
|
|
968
|
-
}()
|
|
969
|
-
accountLoginUrl,
|
|
970
|
-
localStorageKey,
|
|
971
|
-
fetchMemberInfo
|
|
972
|
-
]);
|
|
920
|
+
}();
|
|
973
921
|
var ensureLiffTokenValid = useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
974
922
|
var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
|
|
975
923
|
return _ts_generator(this, function(_state) {
|
|
@@ -1058,34 +1006,26 @@ var LiffProvider = function(param) {
|
|
|
1058
1006
|
});
|
|
1059
1007
|
}), [
|
|
1060
1008
|
liffObject,
|
|
1061
|
-
userInfoStorageKey
|
|
1062
|
-
checkTokenFunc,
|
|
1063
|
-
localStorageKey,
|
|
1064
|
-
loginData
|
|
1009
|
+
userInfoStorageKey
|
|
1065
1010
|
]);
|
|
1066
1011
|
var normalizeToken = function(token) {
|
|
1067
1012
|
var trimmed = token.trim();
|
|
1068
1013
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1069
1014
|
};
|
|
1070
|
-
|
|
1071
|
-
// (會在後面的 useEffect 中建立)
|
|
1072
|
-
var searchParams = null;
|
|
1015
|
+
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1073
1016
|
// 初始載入時從 localStorage 載入 userInfo
|
|
1074
1017
|
useEffect(function() {
|
|
1075
1018
|
loadUserInfoFromStorage();
|
|
1076
|
-
}, [
|
|
1077
|
-
loadUserInfoFromStorage
|
|
1078
|
-
]);
|
|
1019
|
+
}, []);
|
|
1079
1020
|
// 客戶端初始化 LIFF
|
|
1080
1021
|
useEffect(function() {
|
|
1081
1022
|
var checkAndInitialize = function() {
|
|
1082
1023
|
var _ref = _async_to_generator(function() {
|
|
1083
|
-
var
|
|
1024
|
+
var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1084
1025
|
return _ts_generator(this, function(_state) {
|
|
1085
1026
|
switch(_state.label){
|
|
1086
1027
|
case 0:
|
|
1087
|
-
|
|
1088
|
-
tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
|
|
1028
|
+
tokenFromQuery = searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("token");
|
|
1089
1029
|
if (!tokenFromQuery) return [
|
|
1090
1030
|
3,
|
|
1091
1031
|
2
|
|
@@ -1152,13 +1092,7 @@ var LiffProvider = function(param) {
|
|
|
1152
1092
|
};
|
|
1153
1093
|
}();
|
|
1154
1094
|
checkAndInitialize();
|
|
1155
|
-
}, [
|
|
1156
|
-
checkTokenFunc,
|
|
1157
|
-
initializeLiff,
|
|
1158
|
-
localStorageKey,
|
|
1159
|
-
loginData,
|
|
1160
|
-
searchParams
|
|
1161
|
-
]);
|
|
1095
|
+
}, []);
|
|
1162
1096
|
var contextValue = useMemo(function() {
|
|
1163
1097
|
return {
|
|
1164
1098
|
liffObject: liffObject,
|
|
@@ -1183,8 +1117,7 @@ var LiffProvider = function(param) {
|
|
|
1183
1117
|
isFriendship,
|
|
1184
1118
|
ensureLiffTokenValid,
|
|
1185
1119
|
accountLogin,
|
|
1186
|
-
loginType
|
|
1187
|
-
initializeLiff
|
|
1120
|
+
loginType
|
|
1188
1121
|
]);
|
|
1189
1122
|
return /*#__PURE__*/ jsx(LiffContext.Provider, {
|
|
1190
1123
|
value: contextValue,
|