@sunggang/ui-lib 0.4.38 → 0.4.40
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/BaseCkeditor.cjs.js +3 -7
- package/BaseCkeditor.esm.js +3 -7
- package/LiffProvider.cjs.js +144 -56
- package/LiffProvider.esm.js +144 -56
- package/package.json +1 -1
package/BaseCkeditor.cjs.js
CHANGED
|
@@ -67018,12 +67018,6 @@ function _ts_values(o) {
|
|
|
67018
67018
|
writer: {
|
|
67019
67019
|
removePlugins: [
|
|
67020
67020
|
"MediaEmbed",
|
|
67021
|
-
"Table",
|
|
67022
|
-
"TableCaption",
|
|
67023
|
-
"TableCellProperties",
|
|
67024
|
-
"TableColumnResize",
|
|
67025
|
-
"TableProperties",
|
|
67026
|
-
"TableToolbar",
|
|
67027
67021
|
"SourceEditing",
|
|
67028
67022
|
"HtmlEmbed",
|
|
67029
67023
|
"HtmlComment",
|
|
@@ -67043,7 +67037,10 @@ function _ts_values(o) {
|
|
|
67043
67037
|
"fontSize",
|
|
67044
67038
|
"fontColor",
|
|
67045
67039
|
"fontBackgroundColor",
|
|
67040
|
+
"|",
|
|
67046
67041
|
"link",
|
|
67042
|
+
"insertTable",
|
|
67043
|
+
"|",
|
|
67047
67044
|
"bulletedList",
|
|
67048
67045
|
"numberedList",
|
|
67049
67046
|
"-",
|
|
@@ -67060,7 +67057,6 @@ function _ts_values(o) {
|
|
|
67060
67057
|
shouldNotGroupWhenFull: !0
|
|
67061
67058
|
}
|
|
67062
67059
|
},
|
|
67063
|
-
heading: gD.heading,
|
|
67064
67060
|
viewer: {
|
|
67065
67061
|
removePlugins: [
|
|
67066
67062
|
"ImageInsert",
|
package/BaseCkeditor.esm.js
CHANGED
|
@@ -67012,12 +67012,6 @@ function _ts_values(o) {
|
|
|
67012
67012
|
writer: {
|
|
67013
67013
|
removePlugins: [
|
|
67014
67014
|
"MediaEmbed",
|
|
67015
|
-
"Table",
|
|
67016
|
-
"TableCaption",
|
|
67017
|
-
"TableCellProperties",
|
|
67018
|
-
"TableColumnResize",
|
|
67019
|
-
"TableProperties",
|
|
67020
|
-
"TableToolbar",
|
|
67021
67015
|
"SourceEditing",
|
|
67022
67016
|
"HtmlEmbed",
|
|
67023
67017
|
"HtmlComment",
|
|
@@ -67037,7 +67031,10 @@ function _ts_values(o) {
|
|
|
67037
67031
|
"fontSize",
|
|
67038
67032
|
"fontColor",
|
|
67039
67033
|
"fontBackgroundColor",
|
|
67034
|
+
"|",
|
|
67040
67035
|
"link",
|
|
67036
|
+
"insertTable",
|
|
67037
|
+
"|",
|
|
67041
67038
|
"bulletedList",
|
|
67042
67039
|
"numberedList",
|
|
67043
67040
|
"-",
|
|
@@ -67054,7 +67051,6 @@ function _ts_values(o) {
|
|
|
67054
67051
|
shouldNotGroupWhenFull: !0
|
|
67055
67052
|
}
|
|
67056
67053
|
},
|
|
67057
|
-
heading: gD.heading,
|
|
67058
67054
|
viewer: {
|
|
67059
67055
|
removePlugins: [
|
|
67060
67056
|
"ImageInsert",
|
package/LiffProvider.cjs.js
CHANGED
|
@@ -254,7 +254,7 @@ var fetchAPI = function() {
|
|
|
254
254
|
};
|
|
255
255
|
}();
|
|
256
256
|
|
|
257
|
-
function _array_like_to_array(arr, len) {
|
|
257
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */ 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 = function() {
|
|
468
|
+
var loadUserInfoFromStorage = React.useCallback(function() {
|
|
469
469
|
try {
|
|
470
470
|
var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
|
|
471
471
|
if (storedUserInfo) {
|
|
@@ -477,16 +477,20 @@ var LiffProvider = function(param) {
|
|
|
477
477
|
console.error("載入 userInfo 失敗:", err);
|
|
478
478
|
}
|
|
479
479
|
return null;
|
|
480
|
-
}
|
|
480
|
+
}, [
|
|
481
|
+
userInfoStorageKey
|
|
482
|
+
]);
|
|
481
483
|
// 儲存 userInfo 到 localStorage
|
|
482
|
-
var saveUserInfoToStorage = function(info) {
|
|
484
|
+
var saveUserInfoToStorage = React.useCallback(function(info) {
|
|
483
485
|
try {
|
|
484
486
|
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
485
487
|
} catch (err) {
|
|
486
488
|
console.error("儲存 userInfo 失敗:", err);
|
|
487
489
|
}
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
+
}, [
|
|
491
|
+
userInfoStorageKey
|
|
492
|
+
]);
|
|
493
|
+
var fetchMemberInfo = React.useCallback(function() {
|
|
490
494
|
var _ref = _async_to_generator(function(token) {
|
|
491
495
|
var response, err;
|
|
492
496
|
return _ts_generator(this, function(_state) {
|
|
@@ -531,19 +535,23 @@ var LiffProvider = function(param) {
|
|
|
531
535
|
}
|
|
532
536
|
});
|
|
533
537
|
});
|
|
534
|
-
return function
|
|
538
|
+
return function(token) {
|
|
535
539
|
return _ref.apply(this, arguments);
|
|
536
540
|
};
|
|
537
|
-
}()
|
|
541
|
+
}(), [
|
|
542
|
+
memberInfoUrl,
|
|
543
|
+
saveUserInfoToStorage
|
|
544
|
+
]);
|
|
538
545
|
// 檢查 token 的有效性
|
|
539
|
-
var checkTokenFunc = function() {
|
|
546
|
+
var checkTokenFunc = React.useCallback(function() {
|
|
540
547
|
var _ref = _async_to_generator(function(token) {
|
|
541
548
|
var finalToken, response, err;
|
|
542
549
|
return _ts_generator(this, function(_state) {
|
|
543
550
|
switch(_state.label){
|
|
544
551
|
case 0:
|
|
545
552
|
if (!checkTokenUrl) return [
|
|
546
|
-
2
|
|
553
|
+
2,
|
|
554
|
+
false
|
|
547
555
|
];
|
|
548
556
|
finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
|
|
549
557
|
_state.label = 1;
|
|
@@ -606,12 +614,17 @@ var LiffProvider = function(param) {
|
|
|
606
614
|
}
|
|
607
615
|
});
|
|
608
616
|
});
|
|
609
|
-
return function
|
|
617
|
+
return function(token) {
|
|
610
618
|
return _ref.apply(this, arguments);
|
|
611
619
|
};
|
|
612
|
-
}()
|
|
620
|
+
}(), [
|
|
621
|
+
checkTokenUrl,
|
|
622
|
+
memberInfoUrl,
|
|
623
|
+
userInfoStorageKey,
|
|
624
|
+
fetchMemberInfo
|
|
625
|
+
]);
|
|
613
626
|
// 登入初始化函數
|
|
614
|
-
var loginInit = function() {
|
|
627
|
+
var loginInit = React.useCallback(function() {
|
|
615
628
|
var _ref = _async_to_generator(function(token) {
|
|
616
629
|
var _resData_data, _resData_data1, response, resData, loginToken, err;
|
|
617
630
|
return _ts_generator(this, function(_state) {
|
|
@@ -696,22 +709,34 @@ var LiffProvider = function(param) {
|
|
|
696
709
|
}
|
|
697
710
|
});
|
|
698
711
|
});
|
|
699
|
-
return function
|
|
712
|
+
return function(token) {
|
|
700
713
|
return _ref.apply(this, arguments);
|
|
701
714
|
};
|
|
702
|
-
}()
|
|
715
|
+
}(), [
|
|
716
|
+
loginUrl,
|
|
717
|
+
ignoreCheckAddFriend,
|
|
718
|
+
inviteCode,
|
|
719
|
+
localStorageKey,
|
|
720
|
+
memberInfoUrl,
|
|
721
|
+
handleLoginError,
|
|
722
|
+
fetchMemberInfo,
|
|
723
|
+
saveUserInfoToStorage
|
|
724
|
+
]);
|
|
703
725
|
// 初始化 LIFF
|
|
704
|
-
var initializeLiff = function() {
|
|
726
|
+
var initializeLiff = React.useCallback(function() {
|
|
705
727
|
var _ref = _async_to_generator(function(isValid) {
|
|
706
|
-
var customFetch, liff,
|
|
728
|
+
var originalFetch, customFetch, liff, redirectUri, lineToken, tempFriendship, friendship, friendFlag, error, err;
|
|
707
729
|
return _ts_generator(this, function(_state) {
|
|
708
730
|
switch(_state.label){
|
|
709
731
|
case 0:
|
|
732
|
+
originalFetch = window.fetch;
|
|
733
|
+
_state.label = 1;
|
|
734
|
+
case 1:
|
|
710
735
|
_state.trys.push([
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
,
|
|
714
|
-
|
|
736
|
+
1,
|
|
737
|
+
13,
|
|
738
|
+
14,
|
|
739
|
+
15
|
|
715
740
|
]);
|
|
716
741
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
717
742
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -725,11 +750,15 @@ var LiffProvider = function(param) {
|
|
|
725
750
|
4,
|
|
726
751
|
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
727
752
|
];
|
|
728
|
-
case
|
|
753
|
+
case 2:
|
|
729
754
|
liff = _state.sent().liff;
|
|
730
|
-
originalFetch = window.fetch;
|
|
731
755
|
window.fetch = customFetch;
|
|
732
756
|
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
|
+
];
|
|
733
762
|
return [
|
|
734
763
|
4,
|
|
735
764
|
liff.init({
|
|
@@ -737,11 +766,17 @@ var LiffProvider = function(param) {
|
|
|
737
766
|
withLoginOnExternalBrowser: false
|
|
738
767
|
})
|
|
739
768
|
];
|
|
740
|
-
case
|
|
769
|
+
case 3:
|
|
741
770
|
_state.sent();
|
|
742
771
|
console.log("LIFF init succeeded.");
|
|
743
|
-
|
|
744
|
-
|
|
772
|
+
return [
|
|
773
|
+
3,
|
|
774
|
+
5
|
|
775
|
+
];
|
|
776
|
+
case 4:
|
|
777
|
+
console.log("LIFF already logged in, skip init.");
|
|
778
|
+
_state.label = 5;
|
|
779
|
+
case 5:
|
|
745
780
|
// 未登入先進行登入
|
|
746
781
|
if (!liff.isLoggedIn()) {
|
|
747
782
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
@@ -760,42 +795,58 @@ var LiffProvider = function(param) {
|
|
|
760
795
|
redirectUri: redirectUri
|
|
761
796
|
});
|
|
762
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
|
+
return [
|
|
804
|
+
2
|
|
805
|
+
];
|
|
806
|
+
}
|
|
763
807
|
tempFriendship = null;
|
|
764
808
|
if (!lineToken) return [
|
|
765
809
|
3,
|
|
766
|
-
|
|
810
|
+
12
|
|
767
811
|
];
|
|
768
|
-
_state.label =
|
|
769
|
-
case
|
|
812
|
+
_state.label = 6;
|
|
813
|
+
case 6:
|
|
770
814
|
_state.trys.push([
|
|
771
|
-
|
|
772
|
-
|
|
815
|
+
6,
|
|
816
|
+
9,
|
|
773
817
|
,
|
|
774
|
-
|
|
818
|
+
10
|
|
775
819
|
]);
|
|
820
|
+
if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
|
|
821
|
+
3,
|
|
822
|
+
8
|
|
823
|
+
];
|
|
776
824
|
return [
|
|
777
825
|
4,
|
|
778
826
|
liff.getFriendship()
|
|
779
827
|
];
|
|
780
|
-
case
|
|
828
|
+
case 7:
|
|
781
829
|
friendship = _state.sent();
|
|
782
830
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
783
831
|
setFriendship(friendFlag);
|
|
784
832
|
tempFriendship = friendFlag;
|
|
785
833
|
console.log("isFriendship", friendFlag);
|
|
834
|
+
_state.label = 8;
|
|
835
|
+
case 8:
|
|
786
836
|
return [
|
|
787
837
|
3,
|
|
788
|
-
|
|
838
|
+
10
|
|
789
839
|
];
|
|
790
|
-
case
|
|
840
|
+
case 9:
|
|
791
841
|
error = _state.sent();
|
|
792
842
|
console.error("Error in liff.getFriendship():", error);
|
|
793
843
|
return [
|
|
794
844
|
3,
|
|
795
|
-
|
|
845
|
+
10
|
|
796
846
|
];
|
|
797
|
-
case
|
|
847
|
+
case 10:
|
|
798
848
|
console.log("isValid", isValid);
|
|
849
|
+
// 如果是好友且 token 有效,跳過 loginInit
|
|
799
850
|
if (tempFriendship && isValid) return [
|
|
800
851
|
2
|
|
801
852
|
];
|
|
@@ -803,34 +854,52 @@ var LiffProvider = function(param) {
|
|
|
803
854
|
4,
|
|
804
855
|
loginInit(lineToken)
|
|
805
856
|
];
|
|
806
|
-
case
|
|
857
|
+
case 11:
|
|
807
858
|
_state.sent();
|
|
808
|
-
_state.label =
|
|
809
|
-
case
|
|
859
|
+
_state.label = 12;
|
|
860
|
+
case 12:
|
|
810
861
|
return [
|
|
811
862
|
3,
|
|
812
|
-
|
|
863
|
+
15
|
|
813
864
|
];
|
|
814
|
-
case
|
|
865
|
+
case 13:
|
|
815
866
|
err = _state.sent();
|
|
816
867
|
setLiffError(err.toString());
|
|
817
868
|
console.log("LIFF init failed.", err);
|
|
818
869
|
return [
|
|
819
870
|
3,
|
|
820
|
-
|
|
871
|
+
15
|
|
821
872
|
];
|
|
822
|
-
case
|
|
873
|
+
case 14:
|
|
874
|
+
// 確保還原全域 fetch
|
|
875
|
+
try {
|
|
876
|
+
window.fetch = originalFetch;
|
|
877
|
+
} catch (e) {
|
|
878
|
+
// ignore
|
|
879
|
+
}
|
|
880
|
+
return [
|
|
881
|
+
7
|
|
882
|
+
];
|
|
883
|
+
case 15:
|
|
823
884
|
return [
|
|
824
885
|
2
|
|
825
886
|
];
|
|
826
887
|
}
|
|
827
888
|
});
|
|
828
889
|
});
|
|
829
|
-
return function
|
|
890
|
+
return function(isValid) {
|
|
830
891
|
return _ref.apply(this, arguments);
|
|
831
892
|
};
|
|
832
|
-
}()
|
|
833
|
-
|
|
893
|
+
}(), [
|
|
894
|
+
openInApp,
|
|
895
|
+
liffId,
|
|
896
|
+
liffLogin,
|
|
897
|
+
loginByUser,
|
|
898
|
+
ignoreRoute,
|
|
899
|
+
customerRedirectUrl,
|
|
900
|
+
loginInit
|
|
901
|
+
]);
|
|
902
|
+
var accountLogin = React.useCallback(function() {
|
|
834
903
|
var _ref = _async_to_generator(function(username, password) {
|
|
835
904
|
var response, token, tokenType, finalToken, err;
|
|
836
905
|
return _ts_generator(this, function(_state) {
|
|
@@ -897,10 +966,14 @@ var LiffProvider = function(param) {
|
|
|
897
966
|
}
|
|
898
967
|
});
|
|
899
968
|
});
|
|
900
|
-
return function
|
|
969
|
+
return function(username, password) {
|
|
901
970
|
return _ref.apply(this, arguments);
|
|
902
971
|
};
|
|
903
|
-
}()
|
|
972
|
+
}(), [
|
|
973
|
+
accountLoginUrl,
|
|
974
|
+
localStorageKey,
|
|
975
|
+
fetchMemberInfo
|
|
976
|
+
]);
|
|
904
977
|
var ensureLiffTokenValid = React.useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
905
978
|
var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
|
|
906
979
|
return _ts_generator(this, function(_state) {
|
|
@@ -989,26 +1062,34 @@ var LiffProvider = function(param) {
|
|
|
989
1062
|
});
|
|
990
1063
|
}), [
|
|
991
1064
|
liffObject,
|
|
992
|
-
userInfoStorageKey
|
|
1065
|
+
userInfoStorageKey,
|
|
1066
|
+
checkTokenFunc,
|
|
1067
|
+
localStorageKey,
|
|
1068
|
+
loginData
|
|
993
1069
|
]);
|
|
994
1070
|
var normalizeToken = function(token) {
|
|
995
1071
|
var trimmed = token.trim();
|
|
996
1072
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
997
1073
|
};
|
|
998
|
-
|
|
1074
|
+
// searchParams 移到 useEffect 內部以避免每次 render 變動造成的依賴問題
|
|
1075
|
+
// (會在後面的 useEffect 中建立)
|
|
1076
|
+
var searchParams = null;
|
|
999
1077
|
// 初始載入時從 localStorage 載入 userInfo
|
|
1000
1078
|
React.useEffect(function() {
|
|
1001
1079
|
loadUserInfoFromStorage();
|
|
1002
|
-
}, [
|
|
1080
|
+
}, [
|
|
1081
|
+
loadUserInfoFromStorage
|
|
1082
|
+
]);
|
|
1003
1083
|
// 客戶端初始化 LIFF
|
|
1004
1084
|
React.useEffect(function() {
|
|
1005
1085
|
var checkAndInitialize = function() {
|
|
1006
1086
|
var _ref = _async_to_generator(function() {
|
|
1007
|
-
var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1087
|
+
var searchParamsLocal, tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1008
1088
|
return _ts_generator(this, function(_state) {
|
|
1009
1089
|
switch(_state.label){
|
|
1010
1090
|
case 0:
|
|
1011
|
-
|
|
1091
|
+
searchParamsLocal = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1092
|
+
tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
|
|
1012
1093
|
if (!tokenFromQuery) return [
|
|
1013
1094
|
3,
|
|
1014
1095
|
2
|
|
@@ -1075,7 +1156,13 @@ var LiffProvider = function(param) {
|
|
|
1075
1156
|
};
|
|
1076
1157
|
}();
|
|
1077
1158
|
checkAndInitialize();
|
|
1078
|
-
}, [
|
|
1159
|
+
}, [
|
|
1160
|
+
checkTokenFunc,
|
|
1161
|
+
initializeLiff,
|
|
1162
|
+
localStorageKey,
|
|
1163
|
+
loginData,
|
|
1164
|
+
searchParams
|
|
1165
|
+
]);
|
|
1079
1166
|
var contextValue = React.useMemo(function() {
|
|
1080
1167
|
return {
|
|
1081
1168
|
liffObject: liffObject,
|
|
@@ -1100,7 +1187,8 @@ var LiffProvider = function(param) {
|
|
|
1100
1187
|
isFriendship,
|
|
1101
1188
|
ensureLiffTokenValid,
|
|
1102
1189
|
accountLogin,
|
|
1103
|
-
loginType
|
|
1190
|
+
loginType,
|
|
1191
|
+
initializeLiff
|
|
1104
1192
|
]);
|
|
1105
1193
|
return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
|
|
1106
1194
|
value: contextValue,
|
package/LiffProvider.esm.js
CHANGED
|
@@ -250,7 +250,7 @@ var fetchAPI = function() {
|
|
|
250
250
|
};
|
|
251
251
|
}();
|
|
252
252
|
|
|
253
|
-
function _array_like_to_array(arr, len) {
|
|
253
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */ 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 = function() {
|
|
464
|
+
var loadUserInfoFromStorage = useCallback(function() {
|
|
465
465
|
try {
|
|
466
466
|
var storedUserInfo = window.localStorage.getItem(userInfoStorageKey);
|
|
467
467
|
if (storedUserInfo) {
|
|
@@ -473,16 +473,20 @@ var LiffProvider = function(param) {
|
|
|
473
473
|
console.error("載入 userInfo 失敗:", err);
|
|
474
474
|
}
|
|
475
475
|
return null;
|
|
476
|
-
}
|
|
476
|
+
}, [
|
|
477
|
+
userInfoStorageKey
|
|
478
|
+
]);
|
|
477
479
|
// 儲存 userInfo 到 localStorage
|
|
478
|
-
var saveUserInfoToStorage = function(info) {
|
|
480
|
+
var saveUserInfoToStorage = useCallback(function(info) {
|
|
479
481
|
try {
|
|
480
482
|
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
481
483
|
} catch (err) {
|
|
482
484
|
console.error("儲存 userInfo 失敗:", err);
|
|
483
485
|
}
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
+
}, [
|
|
487
|
+
userInfoStorageKey
|
|
488
|
+
]);
|
|
489
|
+
var fetchMemberInfo = useCallback(function() {
|
|
486
490
|
var _ref = _async_to_generator(function(token) {
|
|
487
491
|
var response, err;
|
|
488
492
|
return _ts_generator(this, function(_state) {
|
|
@@ -527,19 +531,23 @@ var LiffProvider = function(param) {
|
|
|
527
531
|
}
|
|
528
532
|
});
|
|
529
533
|
});
|
|
530
|
-
return function
|
|
534
|
+
return function(token) {
|
|
531
535
|
return _ref.apply(this, arguments);
|
|
532
536
|
};
|
|
533
|
-
}()
|
|
537
|
+
}(), [
|
|
538
|
+
memberInfoUrl,
|
|
539
|
+
saveUserInfoToStorage
|
|
540
|
+
]);
|
|
534
541
|
// 檢查 token 的有效性
|
|
535
|
-
var checkTokenFunc = function() {
|
|
542
|
+
var checkTokenFunc = useCallback(function() {
|
|
536
543
|
var _ref = _async_to_generator(function(token) {
|
|
537
544
|
var finalToken, response, err;
|
|
538
545
|
return _ts_generator(this, function(_state) {
|
|
539
546
|
switch(_state.label){
|
|
540
547
|
case 0:
|
|
541
548
|
if (!checkTokenUrl) return [
|
|
542
|
-
2
|
|
549
|
+
2,
|
|
550
|
+
false
|
|
543
551
|
];
|
|
544
552
|
finalToken = token.startsWith("Bearer ") ? token : "Bearer ".concat(token);
|
|
545
553
|
_state.label = 1;
|
|
@@ -602,12 +610,17 @@ var LiffProvider = function(param) {
|
|
|
602
610
|
}
|
|
603
611
|
});
|
|
604
612
|
});
|
|
605
|
-
return function
|
|
613
|
+
return function(token) {
|
|
606
614
|
return _ref.apply(this, arguments);
|
|
607
615
|
};
|
|
608
|
-
}()
|
|
616
|
+
}(), [
|
|
617
|
+
checkTokenUrl,
|
|
618
|
+
memberInfoUrl,
|
|
619
|
+
userInfoStorageKey,
|
|
620
|
+
fetchMemberInfo
|
|
621
|
+
]);
|
|
609
622
|
// 登入初始化函數
|
|
610
|
-
var loginInit = function() {
|
|
623
|
+
var loginInit = useCallback(function() {
|
|
611
624
|
var _ref = _async_to_generator(function(token) {
|
|
612
625
|
var _resData_data, _resData_data1, response, resData, loginToken, err;
|
|
613
626
|
return _ts_generator(this, function(_state) {
|
|
@@ -692,22 +705,34 @@ var LiffProvider = function(param) {
|
|
|
692
705
|
}
|
|
693
706
|
});
|
|
694
707
|
});
|
|
695
|
-
return function
|
|
708
|
+
return function(token) {
|
|
696
709
|
return _ref.apply(this, arguments);
|
|
697
710
|
};
|
|
698
|
-
}()
|
|
711
|
+
}(), [
|
|
712
|
+
loginUrl,
|
|
713
|
+
ignoreCheckAddFriend,
|
|
714
|
+
inviteCode,
|
|
715
|
+
localStorageKey,
|
|
716
|
+
memberInfoUrl,
|
|
717
|
+
handleLoginError,
|
|
718
|
+
fetchMemberInfo,
|
|
719
|
+
saveUserInfoToStorage
|
|
720
|
+
]);
|
|
699
721
|
// 初始化 LIFF
|
|
700
|
-
var initializeLiff = function() {
|
|
722
|
+
var initializeLiff = useCallback(function() {
|
|
701
723
|
var _ref = _async_to_generator(function(isValid) {
|
|
702
|
-
var customFetch, liff,
|
|
724
|
+
var originalFetch, customFetch, liff, redirectUri, lineToken, tempFriendship, friendship, friendFlag, error, err;
|
|
703
725
|
return _ts_generator(this, function(_state) {
|
|
704
726
|
switch(_state.label){
|
|
705
727
|
case 0:
|
|
728
|
+
originalFetch = window.fetch;
|
|
729
|
+
_state.label = 1;
|
|
730
|
+
case 1:
|
|
706
731
|
_state.trys.push([
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
,
|
|
710
|
-
|
|
732
|
+
1,
|
|
733
|
+
13,
|
|
734
|
+
14,
|
|
735
|
+
15
|
|
711
736
|
]);
|
|
712
737
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
713
738
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -721,11 +746,15 @@ var LiffProvider = function(param) {
|
|
|
721
746
|
4,
|
|
722
747
|
import('./index.esm3.js')
|
|
723
748
|
];
|
|
724
|
-
case
|
|
749
|
+
case 2:
|
|
725
750
|
liff = _state.sent().liff;
|
|
726
|
-
originalFetch = window.fetch;
|
|
727
751
|
window.fetch = customFetch;
|
|
728
752
|
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
|
+
];
|
|
729
758
|
return [
|
|
730
759
|
4,
|
|
731
760
|
liff.init({
|
|
@@ -733,11 +762,17 @@ var LiffProvider = function(param) {
|
|
|
733
762
|
withLoginOnExternalBrowser: false
|
|
734
763
|
})
|
|
735
764
|
];
|
|
736
|
-
case
|
|
765
|
+
case 3:
|
|
737
766
|
_state.sent();
|
|
738
767
|
console.log("LIFF init succeeded.");
|
|
739
|
-
|
|
740
|
-
|
|
768
|
+
return [
|
|
769
|
+
3,
|
|
770
|
+
5
|
|
771
|
+
];
|
|
772
|
+
case 4:
|
|
773
|
+
console.log("LIFF already logged in, skip init.");
|
|
774
|
+
_state.label = 5;
|
|
775
|
+
case 5:
|
|
741
776
|
// 未登入先進行登入
|
|
742
777
|
if (!liff.isLoggedIn()) {
|
|
743
778
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
@@ -756,42 +791,58 @@ var LiffProvider = function(param) {
|
|
|
756
791
|
redirectUri: redirectUri
|
|
757
792
|
});
|
|
758
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
|
+
return [
|
|
800
|
+
2
|
|
801
|
+
];
|
|
802
|
+
}
|
|
759
803
|
tempFriendship = null;
|
|
760
804
|
if (!lineToken) return [
|
|
761
805
|
3,
|
|
762
|
-
|
|
806
|
+
12
|
|
763
807
|
];
|
|
764
|
-
_state.label =
|
|
765
|
-
case
|
|
808
|
+
_state.label = 6;
|
|
809
|
+
case 6:
|
|
766
810
|
_state.trys.push([
|
|
767
|
-
|
|
768
|
-
|
|
811
|
+
6,
|
|
812
|
+
9,
|
|
769
813
|
,
|
|
770
|
-
|
|
814
|
+
10
|
|
771
815
|
]);
|
|
816
|
+
if (!!(liff === null || liff === void 0 ? void 0 : liff.isLoggedIn())) return [
|
|
817
|
+
3,
|
|
818
|
+
8
|
|
819
|
+
];
|
|
772
820
|
return [
|
|
773
821
|
4,
|
|
774
822
|
liff.getFriendship()
|
|
775
823
|
];
|
|
776
|
-
case
|
|
824
|
+
case 7:
|
|
777
825
|
friendship = _state.sent();
|
|
778
826
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
779
827
|
setFriendship(friendFlag);
|
|
780
828
|
tempFriendship = friendFlag;
|
|
781
829
|
console.log("isFriendship", friendFlag);
|
|
830
|
+
_state.label = 8;
|
|
831
|
+
case 8:
|
|
782
832
|
return [
|
|
783
833
|
3,
|
|
784
|
-
|
|
834
|
+
10
|
|
785
835
|
];
|
|
786
|
-
case
|
|
836
|
+
case 9:
|
|
787
837
|
error = _state.sent();
|
|
788
838
|
console.error("Error in liff.getFriendship():", error);
|
|
789
839
|
return [
|
|
790
840
|
3,
|
|
791
|
-
|
|
841
|
+
10
|
|
792
842
|
];
|
|
793
|
-
case
|
|
843
|
+
case 10:
|
|
794
844
|
console.log("isValid", isValid);
|
|
845
|
+
// 如果是好友且 token 有效,跳過 loginInit
|
|
795
846
|
if (tempFriendship && isValid) return [
|
|
796
847
|
2
|
|
797
848
|
];
|
|
@@ -799,34 +850,52 @@ var LiffProvider = function(param) {
|
|
|
799
850
|
4,
|
|
800
851
|
loginInit(lineToken)
|
|
801
852
|
];
|
|
802
|
-
case
|
|
853
|
+
case 11:
|
|
803
854
|
_state.sent();
|
|
804
|
-
_state.label =
|
|
805
|
-
case
|
|
855
|
+
_state.label = 12;
|
|
856
|
+
case 12:
|
|
806
857
|
return [
|
|
807
858
|
3,
|
|
808
|
-
|
|
859
|
+
15
|
|
809
860
|
];
|
|
810
|
-
case
|
|
861
|
+
case 13:
|
|
811
862
|
err = _state.sent();
|
|
812
863
|
setLiffError(err.toString());
|
|
813
864
|
console.log("LIFF init failed.", err);
|
|
814
865
|
return [
|
|
815
866
|
3,
|
|
816
|
-
|
|
867
|
+
15
|
|
817
868
|
];
|
|
818
|
-
case
|
|
869
|
+
case 14:
|
|
870
|
+
// 確保還原全域 fetch
|
|
871
|
+
try {
|
|
872
|
+
window.fetch = originalFetch;
|
|
873
|
+
} catch (e) {
|
|
874
|
+
// ignore
|
|
875
|
+
}
|
|
876
|
+
return [
|
|
877
|
+
7
|
|
878
|
+
];
|
|
879
|
+
case 15:
|
|
819
880
|
return [
|
|
820
881
|
2
|
|
821
882
|
];
|
|
822
883
|
}
|
|
823
884
|
});
|
|
824
885
|
});
|
|
825
|
-
return function
|
|
886
|
+
return function(isValid) {
|
|
826
887
|
return _ref.apply(this, arguments);
|
|
827
888
|
};
|
|
828
|
-
}()
|
|
829
|
-
|
|
889
|
+
}(), [
|
|
890
|
+
openInApp,
|
|
891
|
+
liffId,
|
|
892
|
+
liffLogin,
|
|
893
|
+
loginByUser,
|
|
894
|
+
ignoreRoute,
|
|
895
|
+
customerRedirectUrl,
|
|
896
|
+
loginInit
|
|
897
|
+
]);
|
|
898
|
+
var accountLogin = useCallback(function() {
|
|
830
899
|
var _ref = _async_to_generator(function(username, password) {
|
|
831
900
|
var response, token, tokenType, finalToken, err;
|
|
832
901
|
return _ts_generator(this, function(_state) {
|
|
@@ -893,10 +962,14 @@ var LiffProvider = function(param) {
|
|
|
893
962
|
}
|
|
894
963
|
});
|
|
895
964
|
});
|
|
896
|
-
return function
|
|
965
|
+
return function(username, password) {
|
|
897
966
|
return _ref.apply(this, arguments);
|
|
898
967
|
};
|
|
899
|
-
}()
|
|
968
|
+
}(), [
|
|
969
|
+
accountLoginUrl,
|
|
970
|
+
localStorageKey,
|
|
971
|
+
fetchMemberInfo
|
|
972
|
+
]);
|
|
900
973
|
var ensureLiffTokenValid = useCallback(/*#__PURE__*/ _async_to_generator(function() {
|
|
901
974
|
var _parsedStore_data, _parsedStore_state, jwtTokenValue, jwtToken, parsedStore, isValid, _tmp, err;
|
|
902
975
|
return _ts_generator(this, function(_state) {
|
|
@@ -985,26 +1058,34 @@ var LiffProvider = function(param) {
|
|
|
985
1058
|
});
|
|
986
1059
|
}), [
|
|
987
1060
|
liffObject,
|
|
988
|
-
userInfoStorageKey
|
|
1061
|
+
userInfoStorageKey,
|
|
1062
|
+
checkTokenFunc,
|
|
1063
|
+
localStorageKey,
|
|
1064
|
+
loginData
|
|
989
1065
|
]);
|
|
990
1066
|
var normalizeToken = function(token) {
|
|
991
1067
|
var trimmed = token.trim();
|
|
992
1068
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
993
1069
|
};
|
|
994
|
-
|
|
1070
|
+
// searchParams 移到 useEffect 內部以避免每次 render 變動造成的依賴問題
|
|
1071
|
+
// (會在後面的 useEffect 中建立)
|
|
1072
|
+
var searchParams = null;
|
|
995
1073
|
// 初始載入時從 localStorage 載入 userInfo
|
|
996
1074
|
useEffect(function() {
|
|
997
1075
|
loadUserInfoFromStorage();
|
|
998
|
-
}, [
|
|
1076
|
+
}, [
|
|
1077
|
+
loadUserInfoFromStorage
|
|
1078
|
+
]);
|
|
999
1079
|
// 客戶端初始化 LIFF
|
|
1000
1080
|
useEffect(function() {
|
|
1001
1081
|
var checkAndInitialize = function() {
|
|
1002
1082
|
var _ref = _async_to_generator(function() {
|
|
1003
|
-
var tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1083
|
+
var searchParamsLocal, tokenFromQuery, finalToken, isValid, loginStore, jwtToken, _parsedStore_data, _parsedStore_state, parsedStore, isValid1, _tmp;
|
|
1004
1084
|
return _ts_generator(this, function(_state) {
|
|
1005
1085
|
switch(_state.label){
|
|
1006
1086
|
case 0:
|
|
1007
|
-
|
|
1087
|
+
searchParamsLocal = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1088
|
+
tokenFromQuery = searchParamsLocal === null || searchParamsLocal === void 0 ? void 0 : searchParamsLocal.get("token");
|
|
1008
1089
|
if (!tokenFromQuery) return [
|
|
1009
1090
|
3,
|
|
1010
1091
|
2
|
|
@@ -1071,7 +1152,13 @@ var LiffProvider = function(param) {
|
|
|
1071
1152
|
};
|
|
1072
1153
|
}();
|
|
1073
1154
|
checkAndInitialize();
|
|
1074
|
-
}, [
|
|
1155
|
+
}, [
|
|
1156
|
+
checkTokenFunc,
|
|
1157
|
+
initializeLiff,
|
|
1158
|
+
localStorageKey,
|
|
1159
|
+
loginData,
|
|
1160
|
+
searchParams
|
|
1161
|
+
]);
|
|
1075
1162
|
var contextValue = useMemo(function() {
|
|
1076
1163
|
return {
|
|
1077
1164
|
liffObject: liffObject,
|
|
@@ -1096,7 +1183,8 @@ var LiffProvider = function(param) {
|
|
|
1096
1183
|
isFriendship,
|
|
1097
1184
|
ensureLiffTokenValid,
|
|
1098
1185
|
accountLogin,
|
|
1099
|
-
loginType
|
|
1186
|
+
loginType,
|
|
1187
|
+
initializeLiff
|
|
1100
1188
|
]);
|
|
1101
1189
|
return /*#__PURE__*/ jsx(LiffContext.Provider, {
|
|
1102
1190
|
value: contextValue,
|