@sunggang/ui-lib 0.4.46 → 0.4.48
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 +118 -172
- package/LiffProvider.esm.js +119 -173
- package/package.json +1 -1
- package/src/lib/Provider/LiffProvider.d.ts +0 -2
package/LiffProvider.cjs.js
CHANGED
|
@@ -465,8 +465,8 @@ var LiffProvider = function(param) {
|
|
|
465
465
|
var _useState7 = _sliced_to_array(React.useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
466
466
|
// userInfo 的 localStorage key
|
|
467
467
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
468
|
-
// liff
|
|
469
|
-
var
|
|
468
|
+
// liff userInfo 的 localStorage key
|
|
469
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
470
470
|
// 從 localStorage 載入 userInfo
|
|
471
471
|
var loadUserInfoFromStorage = function() {
|
|
472
472
|
try {
|
|
@@ -481,40 +481,36 @@ var LiffProvider = function(param) {
|
|
|
481
481
|
}
|
|
482
482
|
return null;
|
|
483
483
|
};
|
|
484
|
-
//
|
|
485
|
-
var
|
|
484
|
+
// 儲存 userInfo 到 localStorage
|
|
485
|
+
var saveUserInfoToStorage = function(info) {
|
|
486
|
+
try {
|
|
487
|
+
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
488
|
+
} catch (err) {
|
|
489
|
+
console.error("儲存 userInfo 失敗:", err);
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
// 從 localStorage 載入 LIFF userInfo
|
|
493
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
486
494
|
try {
|
|
487
|
-
var stored = window.localStorage.getItem(
|
|
495
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
488
496
|
if (stored) {
|
|
489
497
|
var parsed = JSON.parse(stored);
|
|
490
498
|
setLiffProfile(parsed);
|
|
491
499
|
return parsed;
|
|
492
500
|
}
|
|
493
501
|
} catch (err) {
|
|
494
|
-
console.error("載入
|
|
502
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
495
503
|
}
|
|
496
504
|
return null;
|
|
497
505
|
};
|
|
498
|
-
// 儲存 userInfo 到 localStorage
|
|
499
|
-
var
|
|
506
|
+
// 儲存 LIFF userInfo 到 localStorage
|
|
507
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
500
508
|
try {
|
|
501
|
-
window.localStorage.setItem(
|
|
509
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
502
510
|
} catch (err) {
|
|
503
|
-
console.error("儲存
|
|
511
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
504
512
|
}
|
|
505
|
-
}
|
|
506
|
-
userInfoStorageKey
|
|
507
|
-
]);
|
|
508
|
-
// 儲存 LIFF profile 到 localStorage
|
|
509
|
-
var saveLiffProfileToStorage = React.useCallback(function(info) {
|
|
510
|
-
try {
|
|
511
|
-
window.localStorage.setItem(liffProfileStorageKey, JSON.stringify(info));
|
|
512
|
-
} catch (err) {
|
|
513
|
-
console.error("儲存 liffProfile 失敗:", err);
|
|
514
|
-
}
|
|
515
|
-
}, [
|
|
516
|
-
liffProfileStorageKey
|
|
517
|
-
]);
|
|
513
|
+
};
|
|
518
514
|
var fetchMemberInfo = function() {
|
|
519
515
|
var _ref = _async_to_generator(function(token) {
|
|
520
516
|
var response, err;
|
|
@@ -732,39 +728,35 @@ var LiffProvider = function(param) {
|
|
|
732
728
|
// 初始化 LIFF
|
|
733
729
|
var initializeLiff = function() {
|
|
734
730
|
var _ref = _async_to_generator(function(isValid) {
|
|
735
|
-
var
|
|
731
|
+
var customFetch, liff, redirectUri, originalFetch, profile, lineToken, tempFriendship, friendship, friendFlag, error, err;
|
|
736
732
|
return _ts_generator(this, function(_state) {
|
|
737
733
|
switch(_state.label){
|
|
738
734
|
case 0:
|
|
739
735
|
_state.trys.push([
|
|
740
736
|
0,
|
|
741
|
-
|
|
737
|
+
12,
|
|
742
738
|
,
|
|
743
|
-
|
|
739
|
+
13
|
|
744
740
|
]);
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
741
|
+
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
742
|
+
// eslint-disable-next-line no-inner-declarations
|
|
743
|
+
function customFetch(url, options) {
|
|
744
|
+
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
745
|
+
url = "".concat(url, "?ts=").concat(Math.random());
|
|
746
|
+
}
|
|
747
|
+
return originalFetch(url, options);
|
|
748
|
+
};
|
|
751
749
|
return [
|
|
752
750
|
4,
|
|
753
751
|
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
754
752
|
];
|
|
755
|
-
case
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
if (sdk.isLoggedIn() && isValid) return [
|
|
760
|
-
2
|
|
761
|
-
];
|
|
762
|
-
lineToken = sdk === null || sdk === void 0 ? void 0 : (_sdk_getAccessToken = sdk.getAccessToken) === null || _sdk_getAccessToken === void 0 ? void 0 : _sdk_getAccessToken.call(sdk);
|
|
763
|
-
// 未登入先進行登入(呼叫 login 後立即 return,避免後續執行)
|
|
764
|
-
if (!(sdk === null || sdk === void 0 ? void 0 : (_sdk_isLoggedIn = sdk.isLoggedIn) === null || _sdk_isLoggedIn === void 0 ? void 0 : _sdk_isLoggedIn.call(sdk))) {
|
|
753
|
+
case 1:
|
|
754
|
+
liff = _state.sent().liff;
|
|
755
|
+
// 未登入先進行登入
|
|
756
|
+
if (!liff.isLoggedIn()) {
|
|
765
757
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
766
758
|
if (liffLogin) {
|
|
767
|
-
|
|
759
|
+
liff.login({
|
|
768
760
|
redirectUri: redirectUri
|
|
769
761
|
});
|
|
770
762
|
return [
|
|
@@ -774,54 +766,83 @@ var LiffProvider = function(param) {
|
|
|
774
766
|
if (loginByUser || ignoreRoute) return [
|
|
775
767
|
2
|
|
776
768
|
];
|
|
777
|
-
|
|
769
|
+
liff.login({
|
|
778
770
|
redirectUri: redirectUri
|
|
779
771
|
});
|
|
780
772
|
return [
|
|
781
773
|
2
|
|
782
774
|
];
|
|
783
775
|
}
|
|
776
|
+
originalFetch = window.fetch;
|
|
777
|
+
window.fetch = customFetch;
|
|
778
|
+
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);
|
|
779
|
+
if (!!liff.isLoggedIn()) return [
|
|
780
|
+
3,
|
|
781
|
+
4
|
|
782
|
+
];
|
|
783
|
+
return [
|
|
784
|
+
4,
|
|
785
|
+
liff.init({
|
|
786
|
+
liffId: liffId,
|
|
787
|
+
withLoginOnExternalBrowser: false
|
|
788
|
+
})
|
|
789
|
+
];
|
|
790
|
+
case 2:
|
|
791
|
+
_state.sent();
|
|
792
|
+
console.log("LIFF init succeeded.");
|
|
793
|
+
setLiffObject(liff);
|
|
794
|
+
return [
|
|
795
|
+
4,
|
|
796
|
+
liff.getProfile()
|
|
797
|
+
];
|
|
798
|
+
case 3:
|
|
799
|
+
profile = _state.sent();
|
|
800
|
+
setLiffProfile(profile);
|
|
801
|
+
saveLiffUserInfoToStorage(profile);
|
|
802
|
+
_state.label = 4;
|
|
803
|
+
case 4:
|
|
804
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
784
805
|
tempFriendship = null;
|
|
785
806
|
if (!lineToken) return [
|
|
786
807
|
3,
|
|
787
|
-
|
|
808
|
+
11
|
|
788
809
|
];
|
|
789
|
-
_state.label =
|
|
790
|
-
case
|
|
810
|
+
_state.label = 5;
|
|
811
|
+
case 5:
|
|
791
812
|
_state.trys.push([
|
|
792
|
-
|
|
793
|
-
|
|
813
|
+
5,
|
|
814
|
+
8,
|
|
794
815
|
,
|
|
795
|
-
|
|
816
|
+
9
|
|
796
817
|
]);
|
|
797
|
-
if (
|
|
818
|
+
if (!!liff.isLoggedIn()) return [
|
|
798
819
|
3,
|
|
799
|
-
|
|
820
|
+
7
|
|
800
821
|
];
|
|
801
822
|
return [
|
|
802
823
|
4,
|
|
803
|
-
|
|
824
|
+
liff.getFriendship()
|
|
804
825
|
];
|
|
805
|
-
case
|
|
826
|
+
case 6:
|
|
806
827
|
friendship = _state.sent();
|
|
807
828
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
808
829
|
setFriendship(friendFlag);
|
|
809
830
|
tempFriendship = friendFlag;
|
|
810
831
|
console.log("isFriendship", friendFlag);
|
|
811
|
-
_state.label =
|
|
812
|
-
case
|
|
832
|
+
_state.label = 7;
|
|
833
|
+
case 7:
|
|
813
834
|
return [
|
|
814
835
|
3,
|
|
815
|
-
|
|
836
|
+
9
|
|
816
837
|
];
|
|
817
|
-
case
|
|
838
|
+
case 8:
|
|
818
839
|
error = _state.sent();
|
|
819
840
|
console.error("Error in liff.getFriendship():", error);
|
|
820
841
|
return [
|
|
821
842
|
3,
|
|
822
|
-
|
|
843
|
+
9
|
|
823
844
|
];
|
|
824
|
-
case
|
|
845
|
+
case 9:
|
|
825
846
|
console.log("isValid", isValid);
|
|
826
847
|
if (tempFriendship && isValid) return [
|
|
827
848
|
2
|
|
@@ -830,23 +851,23 @@ var LiffProvider = function(param) {
|
|
|
830
851
|
4,
|
|
831
852
|
loginInit(lineToken)
|
|
832
853
|
];
|
|
833
|
-
case
|
|
854
|
+
case 10:
|
|
834
855
|
_state.sent();
|
|
835
|
-
_state.label =
|
|
836
|
-
case
|
|
856
|
+
_state.label = 11;
|
|
857
|
+
case 11:
|
|
837
858
|
return [
|
|
838
859
|
3,
|
|
839
|
-
|
|
860
|
+
13
|
|
840
861
|
];
|
|
841
|
-
case
|
|
862
|
+
case 12:
|
|
842
863
|
err = _state.sent();
|
|
843
864
|
setLiffError(err.toString());
|
|
844
865
|
console.log("LIFF init failed.", err);
|
|
845
866
|
return [
|
|
846
867
|
3,
|
|
847
|
-
|
|
868
|
+
13
|
|
848
869
|
];
|
|
849
|
-
case
|
|
870
|
+
case 13:
|
|
850
871
|
return [
|
|
851
872
|
2
|
|
852
873
|
];
|
|
@@ -857,94 +878,6 @@ var LiffProvider = function(param) {
|
|
|
857
878
|
return _ref.apply(this, arguments);
|
|
858
879
|
};
|
|
859
880
|
}();
|
|
860
|
-
// 確保 LIFF init 只執行一次且在需要時才執行
|
|
861
|
-
var ensureLiffInitialized = React.useCallback(function() {
|
|
862
|
-
var _ref = _async_to_generator(function(isValid) {
|
|
863
|
-
var customFetch, liff, originalFetch, profile, e;
|
|
864
|
-
return _ts_generator(this, function(_state) {
|
|
865
|
-
switch(_state.label){
|
|
866
|
-
case 0:
|
|
867
|
-
if (!liffId) {
|
|
868
|
-
console.warn("liffId 未提供,跳過 liff.init()。");
|
|
869
|
-
return [
|
|
870
|
-
2
|
|
871
|
-
];
|
|
872
|
-
}
|
|
873
|
-
_state.label = 1;
|
|
874
|
-
case 1:
|
|
875
|
-
_state.trys.push([
|
|
876
|
-
1,
|
|
877
|
-
5,
|
|
878
|
-
,
|
|
879
|
-
6
|
|
880
|
-
]);
|
|
881
|
-
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
882
|
-
// eslint-disable-next-line no-inner-declarations
|
|
883
|
-
function customFetch(url, options) {
|
|
884
|
-
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
885
|
-
url = "".concat(url, "?ts=").concat(Math.random());
|
|
886
|
-
}
|
|
887
|
-
return originalFetch(url, options);
|
|
888
|
-
};
|
|
889
|
-
return [
|
|
890
|
-
4,
|
|
891
|
-
Promise.resolve().then(function () { return require('./index.cjs3.js'); })
|
|
892
|
-
];
|
|
893
|
-
case 2:
|
|
894
|
-
liff = _state.sent().liff;
|
|
895
|
-
originalFetch = window.fetch;
|
|
896
|
-
window.fetch = customFetch;
|
|
897
|
-
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);
|
|
898
|
-
if (liff.isLoggedIn() && isValid) {
|
|
899
|
-
console.log("LIFF already initialized.");
|
|
900
|
-
return [
|
|
901
|
-
2
|
|
902
|
-
];
|
|
903
|
-
}
|
|
904
|
-
return [
|
|
905
|
-
4,
|
|
906
|
-
liff.init({
|
|
907
|
-
liffId: liffId,
|
|
908
|
-
withLoginOnExternalBrowser: false
|
|
909
|
-
})
|
|
910
|
-
];
|
|
911
|
-
case 3:
|
|
912
|
-
_state.sent();
|
|
913
|
-
return [
|
|
914
|
-
4,
|
|
915
|
-
liff.getProfile()
|
|
916
|
-
];
|
|
917
|
-
case 4:
|
|
918
|
-
profile = _state.sent();
|
|
919
|
-
setLiffProfile(profile);
|
|
920
|
-
saveLiffProfileToStorage(profile);
|
|
921
|
-
setLiffObject(liff);
|
|
922
|
-
console.log("LIFF initialized.");
|
|
923
|
-
return [
|
|
924
|
-
3,
|
|
925
|
-
6
|
|
926
|
-
];
|
|
927
|
-
case 5:
|
|
928
|
-
e = _state.sent();
|
|
929
|
-
console.error("ensureLiffInitialized failed:", e);
|
|
930
|
-
return [
|
|
931
|
-
3,
|
|
932
|
-
6
|
|
933
|
-
];
|
|
934
|
-
case 6:
|
|
935
|
-
return [
|
|
936
|
-
2
|
|
937
|
-
];
|
|
938
|
-
}
|
|
939
|
-
});
|
|
940
|
-
});
|
|
941
|
-
return function(isValid) {
|
|
942
|
-
return _ref.apply(this, arguments);
|
|
943
|
-
};
|
|
944
|
-
}(), [
|
|
945
|
-
liffId,
|
|
946
|
-
openInApp
|
|
947
|
-
]);
|
|
948
881
|
var accountLogin = function() {
|
|
949
882
|
var _ref = _async_to_generator(function(username, password) {
|
|
950
883
|
var response, token, tokenType, finalToken, err;
|
|
@@ -1111,10 +1044,10 @@ var LiffProvider = function(param) {
|
|
|
1111
1044
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1112
1045
|
};
|
|
1113
1046
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1114
|
-
// 初始載入時從 localStorage 載入 userInfo
|
|
1047
|
+
// 初始載入時從 localStorage 載入 userInfo
|
|
1115
1048
|
React.useEffect(function() {
|
|
1116
1049
|
loadUserInfoFromStorage();
|
|
1117
|
-
|
|
1050
|
+
loadLiffUserInfoFromStorage();
|
|
1118
1051
|
}, []);
|
|
1119
1052
|
// 客戶端初始化 LIFF
|
|
1120
1053
|
React.useEffect(function() {
|
|
@@ -1192,21 +1125,34 @@ var LiffProvider = function(param) {
|
|
|
1192
1125
|
}();
|
|
1193
1126
|
checkAndInitialize();
|
|
1194
1127
|
}, []);
|
|
1195
|
-
var contextValue = {
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1128
|
+
var contextValue = React.useMemo(function() {
|
|
1129
|
+
return {
|
|
1130
|
+
liffObject: liffObject,
|
|
1131
|
+
loginData: loginData,
|
|
1132
|
+
userInfo: userInfo,
|
|
1133
|
+
accessToken: accessToken,
|
|
1134
|
+
liffError: liffError,
|
|
1135
|
+
initializeLiff: function() {
|
|
1136
|
+
return initializeLiff(false);
|
|
1137
|
+
},
|
|
1138
|
+
isFriendship: isFriendship,
|
|
1139
|
+
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1140
|
+
accountLogin: accountLogin,
|
|
1141
|
+
loginType: loginType,
|
|
1142
|
+
liffProfile: liffProfile
|
|
1143
|
+
};
|
|
1144
|
+
}, [
|
|
1145
|
+
liffObject,
|
|
1146
|
+
loginData,
|
|
1147
|
+
userInfo,
|
|
1148
|
+
accessToken,
|
|
1149
|
+
liffError,
|
|
1150
|
+
isFriendship,
|
|
1151
|
+
ensureLiffTokenValid,
|
|
1152
|
+
accountLogin,
|
|
1153
|
+
loginType,
|
|
1154
|
+
liffProfile
|
|
1155
|
+
]);
|
|
1210
1156
|
return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
|
|
1211
1157
|
value: contextValue,
|
|
1212
1158
|
children: children
|
package/LiffProvider.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { createContext, useState, useCallback, useEffect, useContext } from 'react';
|
|
2
|
+
import { createContext, useState, useCallback, useEffect, useMemo, useContext } from 'react';
|
|
3
3
|
|
|
4
4
|
function asyncGeneratorStep$1(gen, resolve, reject, _next, _throw, key, arg) {
|
|
5
5
|
try {
|
|
@@ -461,8 +461,8 @@ var LiffProvider = function(param) {
|
|
|
461
461
|
var _useState7 = _sliced_to_array(useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
462
462
|
// userInfo 的 localStorage key
|
|
463
463
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
464
|
-
// liff
|
|
465
|
-
var
|
|
464
|
+
// liff userInfo 的 localStorage key
|
|
465
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
466
466
|
// 從 localStorage 載入 userInfo
|
|
467
467
|
var loadUserInfoFromStorage = function() {
|
|
468
468
|
try {
|
|
@@ -477,40 +477,36 @@ var LiffProvider = function(param) {
|
|
|
477
477
|
}
|
|
478
478
|
return null;
|
|
479
479
|
};
|
|
480
|
-
//
|
|
481
|
-
var
|
|
480
|
+
// 儲存 userInfo 到 localStorage
|
|
481
|
+
var saveUserInfoToStorage = function(info) {
|
|
482
|
+
try {
|
|
483
|
+
window.localStorage.setItem(userInfoStorageKey, JSON.stringify(info));
|
|
484
|
+
} catch (err) {
|
|
485
|
+
console.error("儲存 userInfo 失敗:", err);
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
// 從 localStorage 載入 LIFF userInfo
|
|
489
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
482
490
|
try {
|
|
483
|
-
var stored = window.localStorage.getItem(
|
|
491
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
484
492
|
if (stored) {
|
|
485
493
|
var parsed = JSON.parse(stored);
|
|
486
494
|
setLiffProfile(parsed);
|
|
487
495
|
return parsed;
|
|
488
496
|
}
|
|
489
497
|
} catch (err) {
|
|
490
|
-
console.error("載入
|
|
498
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
491
499
|
}
|
|
492
500
|
return null;
|
|
493
501
|
};
|
|
494
|
-
// 儲存 userInfo 到 localStorage
|
|
495
|
-
var
|
|
502
|
+
// 儲存 LIFF userInfo 到 localStorage
|
|
503
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
496
504
|
try {
|
|
497
|
-
window.localStorage.setItem(
|
|
505
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
498
506
|
} catch (err) {
|
|
499
|
-
console.error("儲存
|
|
507
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
500
508
|
}
|
|
501
|
-
}
|
|
502
|
-
userInfoStorageKey
|
|
503
|
-
]);
|
|
504
|
-
// 儲存 LIFF profile 到 localStorage
|
|
505
|
-
var saveLiffProfileToStorage = useCallback(function(info) {
|
|
506
|
-
try {
|
|
507
|
-
window.localStorage.setItem(liffProfileStorageKey, JSON.stringify(info));
|
|
508
|
-
} catch (err) {
|
|
509
|
-
console.error("儲存 liffProfile 失敗:", err);
|
|
510
|
-
}
|
|
511
|
-
}, [
|
|
512
|
-
liffProfileStorageKey
|
|
513
|
-
]);
|
|
509
|
+
};
|
|
514
510
|
var fetchMemberInfo = function() {
|
|
515
511
|
var _ref = _async_to_generator(function(token) {
|
|
516
512
|
var response, err;
|
|
@@ -728,39 +724,35 @@ var LiffProvider = function(param) {
|
|
|
728
724
|
// 初始化 LIFF
|
|
729
725
|
var initializeLiff = function() {
|
|
730
726
|
var _ref = _async_to_generator(function(isValid) {
|
|
731
|
-
var
|
|
727
|
+
var customFetch, liff, redirectUri, originalFetch, profile, lineToken, tempFriendship, friendship, friendFlag, error, err;
|
|
732
728
|
return _ts_generator(this, function(_state) {
|
|
733
729
|
switch(_state.label){
|
|
734
730
|
case 0:
|
|
735
731
|
_state.trys.push([
|
|
736
732
|
0,
|
|
737
|
-
|
|
733
|
+
12,
|
|
738
734
|
,
|
|
739
|
-
|
|
735
|
+
13
|
|
740
736
|
]);
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
737
|
+
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
738
|
+
// eslint-disable-next-line no-inner-declarations
|
|
739
|
+
function customFetch(url, options) {
|
|
740
|
+
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
741
|
+
url = "".concat(url, "?ts=").concat(Math.random());
|
|
742
|
+
}
|
|
743
|
+
return originalFetch(url, options);
|
|
744
|
+
};
|
|
747
745
|
return [
|
|
748
746
|
4,
|
|
749
747
|
import('./index.esm3.js')
|
|
750
748
|
];
|
|
751
|
-
case
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
if (sdk.isLoggedIn() && isValid) return [
|
|
756
|
-
2
|
|
757
|
-
];
|
|
758
|
-
lineToken = sdk === null || sdk === void 0 ? void 0 : (_sdk_getAccessToken = sdk.getAccessToken) === null || _sdk_getAccessToken === void 0 ? void 0 : _sdk_getAccessToken.call(sdk);
|
|
759
|
-
// 未登入先進行登入(呼叫 login 後立即 return,避免後續執行)
|
|
760
|
-
if (!(sdk === null || sdk === void 0 ? void 0 : (_sdk_isLoggedIn = sdk.isLoggedIn) === null || _sdk_isLoggedIn === void 0 ? void 0 : _sdk_isLoggedIn.call(sdk))) {
|
|
749
|
+
case 1:
|
|
750
|
+
liff = _state.sent().liff;
|
|
751
|
+
// 未登入先進行登入
|
|
752
|
+
if (!liff.isLoggedIn()) {
|
|
761
753
|
redirectUri = customerRedirectUrl || "".concat(window.location.href);
|
|
762
754
|
if (liffLogin) {
|
|
763
|
-
|
|
755
|
+
liff.login({
|
|
764
756
|
redirectUri: redirectUri
|
|
765
757
|
});
|
|
766
758
|
return [
|
|
@@ -770,54 +762,83 @@ var LiffProvider = function(param) {
|
|
|
770
762
|
if (loginByUser || ignoreRoute) return [
|
|
771
763
|
2
|
|
772
764
|
];
|
|
773
|
-
|
|
765
|
+
liff.login({
|
|
774
766
|
redirectUri: redirectUri
|
|
775
767
|
});
|
|
776
768
|
return [
|
|
777
769
|
2
|
|
778
770
|
];
|
|
779
771
|
}
|
|
772
|
+
originalFetch = window.fetch;
|
|
773
|
+
window.fetch = customFetch;
|
|
774
|
+
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);
|
|
775
|
+
if (!!liff.isLoggedIn()) return [
|
|
776
|
+
3,
|
|
777
|
+
4
|
|
778
|
+
];
|
|
779
|
+
return [
|
|
780
|
+
4,
|
|
781
|
+
liff.init({
|
|
782
|
+
liffId: liffId,
|
|
783
|
+
withLoginOnExternalBrowser: false
|
|
784
|
+
})
|
|
785
|
+
];
|
|
786
|
+
case 2:
|
|
787
|
+
_state.sent();
|
|
788
|
+
console.log("LIFF init succeeded.");
|
|
789
|
+
setLiffObject(liff);
|
|
790
|
+
return [
|
|
791
|
+
4,
|
|
792
|
+
liff.getProfile()
|
|
793
|
+
];
|
|
794
|
+
case 3:
|
|
795
|
+
profile = _state.sent();
|
|
796
|
+
setLiffProfile(profile);
|
|
797
|
+
saveLiffUserInfoToStorage(profile);
|
|
798
|
+
_state.label = 4;
|
|
799
|
+
case 4:
|
|
800
|
+
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
780
801
|
tempFriendship = null;
|
|
781
802
|
if (!lineToken) return [
|
|
782
803
|
3,
|
|
783
|
-
|
|
804
|
+
11
|
|
784
805
|
];
|
|
785
|
-
_state.label =
|
|
786
|
-
case
|
|
806
|
+
_state.label = 5;
|
|
807
|
+
case 5:
|
|
787
808
|
_state.trys.push([
|
|
788
|
-
|
|
789
|
-
|
|
809
|
+
5,
|
|
810
|
+
8,
|
|
790
811
|
,
|
|
791
|
-
|
|
812
|
+
9
|
|
792
813
|
]);
|
|
793
|
-
if (
|
|
814
|
+
if (!!liff.isLoggedIn()) return [
|
|
794
815
|
3,
|
|
795
|
-
|
|
816
|
+
7
|
|
796
817
|
];
|
|
797
818
|
return [
|
|
798
819
|
4,
|
|
799
|
-
|
|
820
|
+
liff.getFriendship()
|
|
800
821
|
];
|
|
801
|
-
case
|
|
822
|
+
case 6:
|
|
802
823
|
friendship = _state.sent();
|
|
803
824
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
804
825
|
setFriendship(friendFlag);
|
|
805
826
|
tempFriendship = friendFlag;
|
|
806
827
|
console.log("isFriendship", friendFlag);
|
|
807
|
-
_state.label =
|
|
808
|
-
case
|
|
828
|
+
_state.label = 7;
|
|
829
|
+
case 7:
|
|
809
830
|
return [
|
|
810
831
|
3,
|
|
811
|
-
|
|
832
|
+
9
|
|
812
833
|
];
|
|
813
|
-
case
|
|
834
|
+
case 8:
|
|
814
835
|
error = _state.sent();
|
|
815
836
|
console.error("Error in liff.getFriendship():", error);
|
|
816
837
|
return [
|
|
817
838
|
3,
|
|
818
|
-
|
|
839
|
+
9
|
|
819
840
|
];
|
|
820
|
-
case
|
|
841
|
+
case 9:
|
|
821
842
|
console.log("isValid", isValid);
|
|
822
843
|
if (tempFriendship && isValid) return [
|
|
823
844
|
2
|
|
@@ -826,23 +847,23 @@ var LiffProvider = function(param) {
|
|
|
826
847
|
4,
|
|
827
848
|
loginInit(lineToken)
|
|
828
849
|
];
|
|
829
|
-
case
|
|
850
|
+
case 10:
|
|
830
851
|
_state.sent();
|
|
831
|
-
_state.label =
|
|
832
|
-
case
|
|
852
|
+
_state.label = 11;
|
|
853
|
+
case 11:
|
|
833
854
|
return [
|
|
834
855
|
3,
|
|
835
|
-
|
|
856
|
+
13
|
|
836
857
|
];
|
|
837
|
-
case
|
|
858
|
+
case 12:
|
|
838
859
|
err = _state.sent();
|
|
839
860
|
setLiffError(err.toString());
|
|
840
861
|
console.log("LIFF init failed.", err);
|
|
841
862
|
return [
|
|
842
863
|
3,
|
|
843
|
-
|
|
864
|
+
13
|
|
844
865
|
];
|
|
845
|
-
case
|
|
866
|
+
case 13:
|
|
846
867
|
return [
|
|
847
868
|
2
|
|
848
869
|
];
|
|
@@ -853,94 +874,6 @@ var LiffProvider = function(param) {
|
|
|
853
874
|
return _ref.apply(this, arguments);
|
|
854
875
|
};
|
|
855
876
|
}();
|
|
856
|
-
// 確保 LIFF init 只執行一次且在需要時才執行
|
|
857
|
-
var ensureLiffInitialized = useCallback(function() {
|
|
858
|
-
var _ref = _async_to_generator(function(isValid) {
|
|
859
|
-
var customFetch, liff, originalFetch, profile, e;
|
|
860
|
-
return _ts_generator(this, function(_state) {
|
|
861
|
-
switch(_state.label){
|
|
862
|
-
case 0:
|
|
863
|
-
if (!liffId) {
|
|
864
|
-
console.warn("liffId 未提供,跳過 liff.init()。");
|
|
865
|
-
return [
|
|
866
|
-
2
|
|
867
|
-
];
|
|
868
|
-
}
|
|
869
|
-
_state.label = 1;
|
|
870
|
-
case 1:
|
|
871
|
-
_state.trys.push([
|
|
872
|
-
1,
|
|
873
|
-
5,
|
|
874
|
-
,
|
|
875
|
-
6
|
|
876
|
-
]);
|
|
877
|
-
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
878
|
-
// eslint-disable-next-line no-inner-declarations
|
|
879
|
-
function customFetch(url, options) {
|
|
880
|
-
if (url.toString().startsWith("https://liffsdk.line-scdn.net/xlt/") && url.toString().endsWith(".json")) {
|
|
881
|
-
url = "".concat(url, "?ts=").concat(Math.random());
|
|
882
|
-
}
|
|
883
|
-
return originalFetch(url, options);
|
|
884
|
-
};
|
|
885
|
-
return [
|
|
886
|
-
4,
|
|
887
|
-
import('./index.esm3.js')
|
|
888
|
-
];
|
|
889
|
-
case 2:
|
|
890
|
-
liff = _state.sent().liff;
|
|
891
|
-
originalFetch = window.fetch;
|
|
892
|
-
window.fetch = customFetch;
|
|
893
|
-
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);
|
|
894
|
-
if (liff.isLoggedIn() && isValid) {
|
|
895
|
-
console.log("LIFF already initialized.");
|
|
896
|
-
return [
|
|
897
|
-
2
|
|
898
|
-
];
|
|
899
|
-
}
|
|
900
|
-
return [
|
|
901
|
-
4,
|
|
902
|
-
liff.init({
|
|
903
|
-
liffId: liffId,
|
|
904
|
-
withLoginOnExternalBrowser: false
|
|
905
|
-
})
|
|
906
|
-
];
|
|
907
|
-
case 3:
|
|
908
|
-
_state.sent();
|
|
909
|
-
return [
|
|
910
|
-
4,
|
|
911
|
-
liff.getProfile()
|
|
912
|
-
];
|
|
913
|
-
case 4:
|
|
914
|
-
profile = _state.sent();
|
|
915
|
-
setLiffProfile(profile);
|
|
916
|
-
saveLiffProfileToStorage(profile);
|
|
917
|
-
setLiffObject(liff);
|
|
918
|
-
console.log("LIFF initialized.");
|
|
919
|
-
return [
|
|
920
|
-
3,
|
|
921
|
-
6
|
|
922
|
-
];
|
|
923
|
-
case 5:
|
|
924
|
-
e = _state.sent();
|
|
925
|
-
console.error("ensureLiffInitialized failed:", e);
|
|
926
|
-
return [
|
|
927
|
-
3,
|
|
928
|
-
6
|
|
929
|
-
];
|
|
930
|
-
case 6:
|
|
931
|
-
return [
|
|
932
|
-
2
|
|
933
|
-
];
|
|
934
|
-
}
|
|
935
|
-
});
|
|
936
|
-
});
|
|
937
|
-
return function(isValid) {
|
|
938
|
-
return _ref.apply(this, arguments);
|
|
939
|
-
};
|
|
940
|
-
}(), [
|
|
941
|
-
liffId,
|
|
942
|
-
openInApp
|
|
943
|
-
]);
|
|
944
877
|
var accountLogin = function() {
|
|
945
878
|
var _ref = _async_to_generator(function(username, password) {
|
|
946
879
|
var response, token, tokenType, finalToken, err;
|
|
@@ -1107,10 +1040,10 @@ var LiffProvider = function(param) {
|
|
|
1107
1040
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
1108
1041
|
};
|
|
1109
1042
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
1110
|
-
// 初始載入時從 localStorage 載入 userInfo
|
|
1043
|
+
// 初始載入時從 localStorage 載入 userInfo
|
|
1111
1044
|
useEffect(function() {
|
|
1112
1045
|
loadUserInfoFromStorage();
|
|
1113
|
-
|
|
1046
|
+
loadLiffUserInfoFromStorage();
|
|
1114
1047
|
}, []);
|
|
1115
1048
|
// 客戶端初始化 LIFF
|
|
1116
1049
|
useEffect(function() {
|
|
@@ -1188,21 +1121,34 @@ var LiffProvider = function(param) {
|
|
|
1188
1121
|
}();
|
|
1189
1122
|
checkAndInitialize();
|
|
1190
1123
|
}, []);
|
|
1191
|
-
var contextValue = {
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1124
|
+
var contextValue = useMemo(function() {
|
|
1125
|
+
return {
|
|
1126
|
+
liffObject: liffObject,
|
|
1127
|
+
loginData: loginData,
|
|
1128
|
+
userInfo: userInfo,
|
|
1129
|
+
accessToken: accessToken,
|
|
1130
|
+
liffError: liffError,
|
|
1131
|
+
initializeLiff: function() {
|
|
1132
|
+
return initializeLiff(false);
|
|
1133
|
+
},
|
|
1134
|
+
isFriendship: isFriendship,
|
|
1135
|
+
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1136
|
+
accountLogin: accountLogin,
|
|
1137
|
+
loginType: loginType,
|
|
1138
|
+
liffProfile: liffProfile
|
|
1139
|
+
};
|
|
1140
|
+
}, [
|
|
1141
|
+
liffObject,
|
|
1142
|
+
loginData,
|
|
1143
|
+
userInfo,
|
|
1144
|
+
accessToken,
|
|
1145
|
+
liffError,
|
|
1146
|
+
isFriendship,
|
|
1147
|
+
ensureLiffTokenValid,
|
|
1148
|
+
accountLogin,
|
|
1149
|
+
loginType,
|
|
1150
|
+
liffProfile
|
|
1151
|
+
]);
|
|
1206
1152
|
return /*#__PURE__*/ jsx(LiffContext.Provider, {
|
|
1207
1153
|
value: contextValue,
|
|
1208
1154
|
children: children
|
package/package.json
CHANGED
|
@@ -3,11 +3,9 @@ type LiffContextType = {
|
|
|
3
3
|
liffObject: any;
|
|
4
4
|
loginData: any;
|
|
5
5
|
userInfo?: any;
|
|
6
|
-
liffProfile?: any;
|
|
7
6
|
accessToken: string;
|
|
8
7
|
liffError: string | null;
|
|
9
8
|
initializeLiff: () => Promise<void>;
|
|
10
|
-
getLiffProfile: () => Promise<any | null>;
|
|
11
9
|
isFriendship: boolean | null;
|
|
12
10
|
ensureLiffTokenValid: () => Promise<boolean>;
|
|
13
11
|
loginType: string | null;
|