phx-uikit 1.0.224 → 1.0.225
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.
|
@@ -9,10 +9,10 @@ var constants_1 = require("./utils/constants");
|
|
|
9
9
|
var saveCookiesClient_1 = tslib_1.__importDefault(require("./components/Func/saveCookiesClient"));
|
|
10
10
|
var getCookieSession_1 = tslib_1.__importDefault(require("./components/Func/getCookieSession"));
|
|
11
11
|
var headers_1 = require("next/headers");
|
|
12
|
-
// 2) Biến toàn cục giữ promise
|
|
12
|
+
// 2) Biến toàn cục giữ promise đang chờ của /refresh-token
|
|
13
13
|
var refreshTokenPromise = null;
|
|
14
14
|
var publicUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
15
|
-
|
|
15
|
+
// const internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL)
|
|
16
16
|
var isServer = typeof window === 'undefined';
|
|
17
17
|
var PHXAxiosInstance = axios_1["default"].create({
|
|
18
18
|
baseURL: publicUrl
|
|
@@ -35,7 +35,7 @@ var getAuthHeaders = function () {
|
|
|
35
35
|
hostname: (0, headers_1.headers)().get('origin') || undefined
|
|
36
36
|
};
|
|
37
37
|
};
|
|
38
|
-
// Lưu refresh_token vào cookie
|
|
38
|
+
// Lưu refresh_token vào cookie SSR
|
|
39
39
|
var saveRefreshTokenServer = function (res) {
|
|
40
40
|
var _a;
|
|
41
41
|
var setCookieHeader = ((_a = res.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
@@ -49,11 +49,11 @@ var saveRefreshTokenServer = function (res) {
|
|
|
49
49
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
50
50
|
});
|
|
51
51
|
};
|
|
52
|
-
// Hàm
|
|
52
|
+
// Hàm refresh-token với promise-caching
|
|
53
53
|
var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
54
54
|
return tslib_1.__generator(this, function (_a) {
|
|
55
55
|
if (refreshTokenPromise) {
|
|
56
|
-
// Nếu
|
|
56
|
+
// Nếu đang có 1 lần gọi chưa xong, chờ nó và return kết quả
|
|
57
57
|
return [2 /*return*/, refreshTokenPromise];
|
|
58
58
|
}
|
|
59
59
|
refreshTokenPromise = (function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
@@ -68,21 +68,18 @@ var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0,
|
|
|
68
68
|
response = _a.sent();
|
|
69
69
|
newToken = response.data.token;
|
|
70
70
|
updatedSession = (0, getCookieSession_1["default"])();
|
|
71
|
-
(0, saveCookiesClient_1["default"])({
|
|
72
|
-
|
|
73
|
-
});
|
|
74
|
-
// Lưu refresh_token nếu chạy SSR
|
|
71
|
+
(0, saveCookiesClient_1["default"])({ value: tslib_1.__assign(tslib_1.__assign({}, updatedSession), { access_token: newToken }) });
|
|
72
|
+
// Lưu refresh_token SSR nếu cần
|
|
75
73
|
if (isServer)
|
|
76
74
|
saveRefreshTokenServer(response);
|
|
77
75
|
return [2 /*return*/, newToken];
|
|
78
76
|
case 2:
|
|
79
77
|
err_1 = _a.sent();
|
|
80
|
-
// redirect về login nếu client-side
|
|
81
78
|
if (!isServer)
|
|
82
79
|
window.location.href = constants_1.loginPage;
|
|
83
80
|
throw err_1;
|
|
84
81
|
case 3:
|
|
85
|
-
// Clear để lần sau
|
|
82
|
+
// Clear để lần sau có thể gọi lại khi token expire thêm
|
|
86
83
|
refreshTokenPromise = null;
|
|
87
84
|
return [7 /*endfinally*/];
|
|
88
85
|
case 4: return [2 /*return*/];
|
|
@@ -92,41 +89,17 @@ var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0,
|
|
|
92
89
|
return [2 /*return*/, refreshTokenPromise];
|
|
93
90
|
});
|
|
94
91
|
}); };
|
|
95
|
-
//
|
|
96
|
-
PHXAxiosInstance.interceptors.request.use(function (config) {
|
|
97
|
-
var session
|
|
98
|
-
var
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
config.headers.Authorization = "Bearer ".concat(token);
|
|
107
|
-
if (!isServer) return [3 /*break*/, 7];
|
|
108
|
-
_b.label = 1;
|
|
109
|
-
case 1:
|
|
110
|
-
_b.trys.push([1, 3, , 7]);
|
|
111
|
-
return [4 /*yield*/, axios_1["default"].post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: tslib_1.__assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
112
|
-
case 2:
|
|
113
|
-
_b.sent();
|
|
114
|
-
return [3 /*break*/, 7];
|
|
115
|
-
case 3:
|
|
116
|
-
err_2 = _b.sent();
|
|
117
|
-
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
118
|
-
return [4 /*yield*/, refreshAccessToken()];
|
|
119
|
-
case 4:
|
|
120
|
-
fresh = _b.sent();
|
|
121
|
-
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
122
|
-
return [3 /*break*/, 6];
|
|
123
|
-
case 5: throw err_2;
|
|
124
|
-
case 6: return [3 /*break*/, 7];
|
|
125
|
-
case 7: return [2 /*return*/, config];
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}); });
|
|
129
|
-
// Response interceptor: bắt 401 lần đầu, refresh và retry
|
|
92
|
+
// --- CHỈ request interceptor: chỉ add header, không catch 401 ---
|
|
93
|
+
PHXAxiosInstance.interceptors.request.use(function (config) {
|
|
94
|
+
var session = (0, getCookieSession_1["default"])();
|
|
95
|
+
var token = session === null || session === void 0 ? void 0 : session.access_token;
|
|
96
|
+
if (token) {
|
|
97
|
+
config.headers = config.headers || {};
|
|
98
|
+
config.headers.Authorization = "Bearer ".concat(token);
|
|
99
|
+
}
|
|
100
|
+
return config;
|
|
101
|
+
});
|
|
102
|
+
// --- Response interceptor: bắt 401, refresh, retry với token mới ---
|
|
130
103
|
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
131
104
|
var originalRequest, newToken, e_1;
|
|
132
105
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":";AAAA,WAAW;;;;AAEX,wDAAgE;AAChE,qDAA0C;AAC1C,+CAAmE;AACnE,kGAAmE;AACnE,gGAAwE;AACxE,wCAA+C;AAS/C,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ import { COOKIE_REFRESH_TOKEN, loginPage } from './utils/constants';
|
|
|
6
6
|
import saveCookiesClient from './components/Func/saveCookiesClient';
|
|
7
7
|
import PHXFuncGetCookieSession from './components/Func/getCookieSession';
|
|
8
8
|
import { cookies, headers } from 'next/headers';
|
|
9
|
-
// 2) Biến toàn cục giữ promise
|
|
9
|
+
// 2) Biến toàn cục giữ promise đang chờ của /refresh-token
|
|
10
10
|
var refreshTokenPromise = null;
|
|
11
11
|
var publicUrl = getEnv('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
12
|
-
|
|
12
|
+
// const internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL)
|
|
13
13
|
var isServer = typeof window === 'undefined';
|
|
14
14
|
var PHXAxiosInstance = axios.create({
|
|
15
15
|
baseURL: publicUrl
|
|
@@ -31,7 +31,7 @@ var getAuthHeaders = function () {
|
|
|
31
31
|
hostname: headers().get('origin') || undefined
|
|
32
32
|
};
|
|
33
33
|
};
|
|
34
|
-
// Lưu refresh_token vào cookie
|
|
34
|
+
// Lưu refresh_token vào cookie SSR
|
|
35
35
|
var saveRefreshTokenServer = function (res) {
|
|
36
36
|
var _a;
|
|
37
37
|
var setCookieHeader = ((_a = res.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
@@ -45,11 +45,11 @@ var saveRefreshTokenServer = function (res) {
|
|
|
45
45
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
46
46
|
});
|
|
47
47
|
};
|
|
48
|
-
// Hàm
|
|
48
|
+
// Hàm refresh-token với promise-caching
|
|
49
49
|
var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
50
|
return __generator(this, function (_a) {
|
|
51
51
|
if (refreshTokenPromise) {
|
|
52
|
-
// Nếu
|
|
52
|
+
// Nếu đang có 1 lần gọi chưa xong, chờ nó và return kết quả
|
|
53
53
|
return [2 /*return*/, refreshTokenPromise];
|
|
54
54
|
}
|
|
55
55
|
refreshTokenPromise = (function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
@@ -64,21 +64,18 @@ var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0,
|
|
|
64
64
|
response = _a.sent();
|
|
65
65
|
newToken = response.data.token;
|
|
66
66
|
updatedSession = PHXFuncGetCookieSession();
|
|
67
|
-
saveCookiesClient({
|
|
68
|
-
|
|
69
|
-
});
|
|
70
|
-
// Lưu refresh_token nếu chạy SSR
|
|
67
|
+
saveCookiesClient({ value: __assign(__assign({}, updatedSession), { access_token: newToken }) });
|
|
68
|
+
// Lưu refresh_token SSR nếu cần
|
|
71
69
|
if (isServer)
|
|
72
70
|
saveRefreshTokenServer(response);
|
|
73
71
|
return [2 /*return*/, newToken];
|
|
74
72
|
case 2:
|
|
75
73
|
err_1 = _a.sent();
|
|
76
|
-
// redirect về login nếu client-side
|
|
77
74
|
if (!isServer)
|
|
78
75
|
window.location.href = loginPage;
|
|
79
76
|
throw err_1;
|
|
80
77
|
case 3:
|
|
81
|
-
// Clear để lần sau
|
|
78
|
+
// Clear để lần sau có thể gọi lại khi token expire thêm
|
|
82
79
|
refreshTokenPromise = null;
|
|
83
80
|
return [7 /*endfinally*/];
|
|
84
81
|
case 4: return [2 /*return*/];
|
|
@@ -88,41 +85,17 @@ var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0,
|
|
|
88
85
|
return [2 /*return*/, refreshTokenPromise];
|
|
89
86
|
});
|
|
90
87
|
}); };
|
|
91
|
-
//
|
|
92
|
-
PHXAxiosInstance.interceptors.request.use(function (config) {
|
|
93
|
-
var session
|
|
94
|
-
var
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
config.headers.Authorization = "Bearer ".concat(token);
|
|
103
|
-
if (!isServer) return [3 /*break*/, 7];
|
|
104
|
-
_b.label = 1;
|
|
105
|
-
case 1:
|
|
106
|
-
_b.trys.push([1, 3, , 7]);
|
|
107
|
-
return [4 /*yield*/, axios.post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: __assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
108
|
-
case 2:
|
|
109
|
-
_b.sent();
|
|
110
|
-
return [3 /*break*/, 7];
|
|
111
|
-
case 3:
|
|
112
|
-
err_2 = _b.sent();
|
|
113
|
-
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
114
|
-
return [4 /*yield*/, refreshAccessToken()];
|
|
115
|
-
case 4:
|
|
116
|
-
fresh = _b.sent();
|
|
117
|
-
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
118
|
-
return [3 /*break*/, 6];
|
|
119
|
-
case 5: throw err_2;
|
|
120
|
-
case 6: return [3 /*break*/, 7];
|
|
121
|
-
case 7: return [2 /*return*/, config];
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}); });
|
|
125
|
-
// Response interceptor: bắt 401 lần đầu, refresh và retry
|
|
88
|
+
// --- CHỈ request interceptor: chỉ add header, không catch 401 ---
|
|
89
|
+
PHXAxiosInstance.interceptors.request.use(function (config) {
|
|
90
|
+
var session = PHXFuncGetCookieSession();
|
|
91
|
+
var token = session === null || session === void 0 ? void 0 : session.access_token;
|
|
92
|
+
if (token) {
|
|
93
|
+
config.headers = config.headers || {};
|
|
94
|
+
config.headers.Authorization = "Bearer ".concat(token);
|
|
95
|
+
}
|
|
96
|
+
return config;
|
|
97
|
+
});
|
|
98
|
+
// --- Response interceptor: bắt 401, refresh, retry với token mới ---
|
|
126
99
|
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
127
100
|
var originalRequest, newToken, e_1;
|
|
128
101
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"AAAA,WAAW;;AAEX,OAAO,KAA4C,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,iBAAiB,MAAM,qCAAqC,CAAA;AACnE,OAAO,uBAAuB,MAAM,oCAAoC,CAAA;AACxE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAS/C,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|