phx-uikit 1.0.223 → 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.
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// axios.ts
|
|
2
3
|
exports.__esModule = true;
|
|
3
4
|
exports.PHXAxiosInstance = void 0;
|
|
4
5
|
var tslib_1 = require("tslib");
|
|
5
6
|
var axios_1 = tslib_1.__importDefault(require("axios"));
|
|
6
|
-
var async_lock_1 = tslib_1.__importDefault(require("async-lock"));
|
|
7
7
|
var read_env_config_1 = require("./read-env-config");
|
|
8
8
|
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
|
-
|
|
12
|
+
// 2) Biến toàn cục giữ promise đang chờ của /refresh-token
|
|
13
|
+
var refreshTokenPromise = null;
|
|
13
14
|
var publicUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
14
|
-
|
|
15
|
+
// const internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL)
|
|
15
16
|
var isServer = typeof window === 'undefined';
|
|
16
17
|
var PHXAxiosInstance = axios_1["default"].create({
|
|
17
18
|
baseURL: publicUrl
|
|
18
19
|
});
|
|
19
20
|
exports.PHXAxiosInstance = PHXAxiosInstance;
|
|
20
|
-
// Lấy
|
|
21
|
+
// Lấy đủ headers (cookie + origin) khi SSR
|
|
21
22
|
var getAuthHeaders = function () {
|
|
22
23
|
if (!isServer)
|
|
23
24
|
return {};
|
|
@@ -34,10 +35,10 @@ var getAuthHeaders = function () {
|
|
|
34
35
|
hostname: (0, headers_1.headers)().get('origin') || undefined
|
|
35
36
|
};
|
|
36
37
|
};
|
|
37
|
-
// Lưu
|
|
38
|
-
var saveRefreshTokenServer = function (
|
|
38
|
+
// Lưu refresh_token vào cookie SSR
|
|
39
|
+
var saveRefreshTokenServer = function (res) {
|
|
39
40
|
var _a;
|
|
40
|
-
var setCookieHeader = ((_a =
|
|
41
|
+
var setCookieHeader = ((_a = res.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
41
42
|
var match = setCookieHeader.match(/refresh_token=([^;]+)/);
|
|
42
43
|
var refreshToken = (match === null || match === void 0 ? void 0 : match[1]) || '';
|
|
43
44
|
(0, headers_1.cookies)().set(constants_1.COOKIE_REFRESH_TOKEN, refreshToken, {
|
|
@@ -48,82 +49,63 @@ var saveRefreshTokenServer = function (response) {
|
|
|
48
49
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
49
50
|
});
|
|
50
51
|
};
|
|
51
|
-
//
|
|
52
|
+
// Hàm refresh-token với promise-caching
|
|
52
53
|
var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
53
54
|
return tslib_1.__generator(this, function (_a) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
switch (_a.label) {
|
|
58
|
-
case 0:
|
|
59
|
-
_a.trys.push([0, 2, , 3]);
|
|
60
|
-
url = "".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token");
|
|
61
|
-
return [4 /*yield*/, axios_1["default"].post(url, {}, { headers: getAuthHeaders() })];
|
|
62
|
-
case 1:
|
|
63
|
-
response = _a.sent();
|
|
64
|
-
newToken = response.data.token;
|
|
65
|
-
updatedSession = (0, getCookieSession_1["default"])();
|
|
66
|
-
(0, saveCookiesClient_1["default"])({
|
|
67
|
-
value: tslib_1.__assign(tslib_1.__assign({}, updatedSession), { access_token: newToken })
|
|
68
|
-
});
|
|
69
|
-
// Lưu refresh token SSR nếu cần
|
|
70
|
-
if (isServer)
|
|
71
|
-
saveRefreshTokenServer(response);
|
|
72
|
-
return [2 /*return*/, newToken];
|
|
73
|
-
case 2:
|
|
74
|
-
err_1 = _a.sent();
|
|
75
|
-
if (!isServer) {
|
|
76
|
-
window.location.href = constants_1.loginPage;
|
|
77
|
-
}
|
|
78
|
-
throw err_1;
|
|
79
|
-
case 3: return [2 /*return*/];
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
}); })];
|
|
83
|
-
});
|
|
84
|
-
}); };
|
|
85
|
-
// Request interceptor: luôn thêm Authorization nếu có access_token
|
|
86
|
-
PHXAxiosInstance.interceptors.request.use(function (config) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
87
|
-
var session, token, err_2, fresh;
|
|
88
|
-
var _a;
|
|
89
|
-
return tslib_1.__generator(this, function (_b) {
|
|
90
|
-
switch (_b.label) {
|
|
91
|
-
case 0:
|
|
92
|
-
session = (0, getCookieSession_1["default"])();
|
|
93
|
-
token = session === null || session === void 0 ? void 0 : session.access_token;
|
|
94
|
-
if (!token) return [3 /*break*/, 7];
|
|
95
|
-
config.headers = config.headers || {};
|
|
96
|
-
config.headers.Authorization = "Bearer ".concat(token);
|
|
97
|
-
if (!isServer) return [3 /*break*/, 7];
|
|
98
|
-
_b.label = 1;
|
|
99
|
-
case 1:
|
|
100
|
-
_b.trys.push([1, 3, , 7]);
|
|
101
|
-
return [4 /*yield*/, axios_1["default"].post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: tslib_1.__assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
102
|
-
case 2:
|
|
103
|
-
_b.sent();
|
|
104
|
-
return [3 /*break*/, 7];
|
|
105
|
-
case 3:
|
|
106
|
-
err_2 = _b.sent();
|
|
107
|
-
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
108
|
-
return [4 /*yield*/, refreshAccessToken()];
|
|
109
|
-
case 4:
|
|
110
|
-
fresh = _b.sent();
|
|
111
|
-
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
112
|
-
return [3 /*break*/, 6];
|
|
113
|
-
case 5: throw err_2;
|
|
114
|
-
case 6: return [3 /*break*/, 7];
|
|
115
|
-
case 7: return [2 /*return*/, config];
|
|
55
|
+
if (refreshTokenPromise) {
|
|
56
|
+
// Nếu đang có 1 lần gọi chưa xong, chờ nó và return kết quả
|
|
57
|
+
return [2 /*return*/, refreshTokenPromise];
|
|
116
58
|
}
|
|
59
|
+
refreshTokenPromise = (function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
60
|
+
var url, response, newToken, updatedSession, err_1;
|
|
61
|
+
return tslib_1.__generator(this, function (_a) {
|
|
62
|
+
switch (_a.label) {
|
|
63
|
+
case 0:
|
|
64
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
65
|
+
url = "".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token");
|
|
66
|
+
return [4 /*yield*/, axios_1["default"].post(url, {}, { headers: getAuthHeaders() })];
|
|
67
|
+
case 1:
|
|
68
|
+
response = _a.sent();
|
|
69
|
+
newToken = response.data.token;
|
|
70
|
+
updatedSession = (0, getCookieSession_1["default"])();
|
|
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
|
|
73
|
+
if (isServer)
|
|
74
|
+
saveRefreshTokenServer(response);
|
|
75
|
+
return [2 /*return*/, newToken];
|
|
76
|
+
case 2:
|
|
77
|
+
err_1 = _a.sent();
|
|
78
|
+
if (!isServer)
|
|
79
|
+
window.location.href = constants_1.loginPage;
|
|
80
|
+
throw err_1;
|
|
81
|
+
case 3:
|
|
82
|
+
// Clear để lần sau có thể gọi lại khi token expire thêm
|
|
83
|
+
refreshTokenPromise = null;
|
|
84
|
+
return [7 /*endfinally*/];
|
|
85
|
+
case 4: return [2 /*return*/];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}); })();
|
|
89
|
+
return [2 /*return*/, refreshTokenPromise];
|
|
117
90
|
});
|
|
118
|
-
}); }
|
|
119
|
-
//
|
|
91
|
+
}); };
|
|
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 ---
|
|
120
103
|
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
121
104
|
var originalRequest, newToken, e_1;
|
|
122
105
|
var _a;
|
|
123
106
|
return tslib_1.__generator(this, function (_b) {
|
|
124
107
|
switch (_b.label) {
|
|
125
108
|
case 0:
|
|
126
|
-
console.log('errorerror', error);
|
|
127
109
|
originalRequest = error.config;
|
|
128
110
|
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 4];
|
|
129
111
|
originalRequest._retry = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
// axios.ts
|
|
1
2
|
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
3
|
import axios from 'axios';
|
|
3
|
-
import AsyncLock from 'async-lock';
|
|
4
4
|
import { getEnv } from './read-env-config';
|
|
5
5
|
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
|
-
|
|
9
|
+
// 2) Biến toàn cục giữ promise đang chờ của /refresh-token
|
|
10
|
+
var refreshTokenPromise = null;
|
|
10
11
|
var publicUrl = getEnv('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
11
|
-
|
|
12
|
+
// const internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL)
|
|
12
13
|
var isServer = typeof window === 'undefined';
|
|
13
14
|
var PHXAxiosInstance = axios.create({
|
|
14
15
|
baseURL: publicUrl
|
|
15
16
|
});
|
|
16
|
-
// Lấy
|
|
17
|
+
// Lấy đủ headers (cookie + origin) khi SSR
|
|
17
18
|
var getAuthHeaders = function () {
|
|
18
19
|
if (!isServer)
|
|
19
20
|
return {};
|
|
@@ -30,10 +31,10 @@ var getAuthHeaders = function () {
|
|
|
30
31
|
hostname: headers().get('origin') || undefined
|
|
31
32
|
};
|
|
32
33
|
};
|
|
33
|
-
// Lưu
|
|
34
|
-
var saveRefreshTokenServer = function (
|
|
34
|
+
// Lưu refresh_token vào cookie SSR
|
|
35
|
+
var saveRefreshTokenServer = function (res) {
|
|
35
36
|
var _a;
|
|
36
|
-
var setCookieHeader = ((_a =
|
|
37
|
+
var setCookieHeader = ((_a = res.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
37
38
|
var match = setCookieHeader.match(/refresh_token=([^;]+)/);
|
|
38
39
|
var refreshToken = (match === null || match === void 0 ? void 0 : match[1]) || '';
|
|
39
40
|
cookies().set(COOKIE_REFRESH_TOKEN, refreshToken, {
|
|
@@ -44,82 +45,63 @@ var saveRefreshTokenServer = function (response) {
|
|
|
44
45
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
45
46
|
});
|
|
46
47
|
};
|
|
47
|
-
//
|
|
48
|
+
// Hàm refresh-token với promise-caching
|
|
48
49
|
var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
49
50
|
return __generator(this, function (_a) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
switch (_a.label) {
|
|
54
|
-
case 0:
|
|
55
|
-
_a.trys.push([0, 2, , 3]);
|
|
56
|
-
url = "".concat(isServer ? headers().get('origin') : '', "/api/authenticate/refresh-token");
|
|
57
|
-
return [4 /*yield*/, axios.post(url, {}, { headers: getAuthHeaders() })];
|
|
58
|
-
case 1:
|
|
59
|
-
response = _a.sent();
|
|
60
|
-
newToken = response.data.token;
|
|
61
|
-
updatedSession = PHXFuncGetCookieSession();
|
|
62
|
-
saveCookiesClient({
|
|
63
|
-
value: __assign(__assign({}, updatedSession), { access_token: newToken })
|
|
64
|
-
});
|
|
65
|
-
// Lưu refresh token SSR nếu cần
|
|
66
|
-
if (isServer)
|
|
67
|
-
saveRefreshTokenServer(response);
|
|
68
|
-
return [2 /*return*/, newToken];
|
|
69
|
-
case 2:
|
|
70
|
-
err_1 = _a.sent();
|
|
71
|
-
if (!isServer) {
|
|
72
|
-
window.location.href = loginPage;
|
|
73
|
-
}
|
|
74
|
-
throw err_1;
|
|
75
|
-
case 3: return [2 /*return*/];
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}); })];
|
|
79
|
-
});
|
|
80
|
-
}); };
|
|
81
|
-
// Request interceptor: luôn thêm Authorization nếu có access_token
|
|
82
|
-
PHXAxiosInstance.interceptors.request.use(function (config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
83
|
-
var session, token, err_2, fresh;
|
|
84
|
-
var _a;
|
|
85
|
-
return __generator(this, function (_b) {
|
|
86
|
-
switch (_b.label) {
|
|
87
|
-
case 0:
|
|
88
|
-
session = PHXFuncGetCookieSession();
|
|
89
|
-
token = session === null || session === void 0 ? void 0 : session.access_token;
|
|
90
|
-
if (!token) return [3 /*break*/, 7];
|
|
91
|
-
config.headers = config.headers || {};
|
|
92
|
-
config.headers.Authorization = "Bearer ".concat(token);
|
|
93
|
-
if (!isServer) return [3 /*break*/, 7];
|
|
94
|
-
_b.label = 1;
|
|
95
|
-
case 1:
|
|
96
|
-
_b.trys.push([1, 3, , 7]);
|
|
97
|
-
return [4 /*yield*/, axios.post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: __assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
98
|
-
case 2:
|
|
99
|
-
_b.sent();
|
|
100
|
-
return [3 /*break*/, 7];
|
|
101
|
-
case 3:
|
|
102
|
-
err_2 = _b.sent();
|
|
103
|
-
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
104
|
-
return [4 /*yield*/, refreshAccessToken()];
|
|
105
|
-
case 4:
|
|
106
|
-
fresh = _b.sent();
|
|
107
|
-
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
108
|
-
return [3 /*break*/, 6];
|
|
109
|
-
case 5: throw err_2;
|
|
110
|
-
case 6: return [3 /*break*/, 7];
|
|
111
|
-
case 7: return [2 /*return*/, config];
|
|
51
|
+
if (refreshTokenPromise) {
|
|
52
|
+
// Nếu đang có 1 lần gọi chưa xong, chờ nó và return kết quả
|
|
53
|
+
return [2 /*return*/, refreshTokenPromise];
|
|
112
54
|
}
|
|
55
|
+
refreshTokenPromise = (function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
56
|
+
var url, response, newToken, updatedSession, err_1;
|
|
57
|
+
return __generator(this, function (_a) {
|
|
58
|
+
switch (_a.label) {
|
|
59
|
+
case 0:
|
|
60
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
61
|
+
url = "".concat(isServer ? headers().get('origin') : '', "/api/authenticate/refresh-token");
|
|
62
|
+
return [4 /*yield*/, axios.post(url, {}, { headers: getAuthHeaders() })];
|
|
63
|
+
case 1:
|
|
64
|
+
response = _a.sent();
|
|
65
|
+
newToken = response.data.token;
|
|
66
|
+
updatedSession = PHXFuncGetCookieSession();
|
|
67
|
+
saveCookiesClient({ value: __assign(__assign({}, updatedSession), { access_token: newToken }) });
|
|
68
|
+
// Lưu refresh_token SSR nếu cần
|
|
69
|
+
if (isServer)
|
|
70
|
+
saveRefreshTokenServer(response);
|
|
71
|
+
return [2 /*return*/, newToken];
|
|
72
|
+
case 2:
|
|
73
|
+
err_1 = _a.sent();
|
|
74
|
+
if (!isServer)
|
|
75
|
+
window.location.href = loginPage;
|
|
76
|
+
throw err_1;
|
|
77
|
+
case 3:
|
|
78
|
+
// Clear để lần sau có thể gọi lại khi token expire thêm
|
|
79
|
+
refreshTokenPromise = null;
|
|
80
|
+
return [7 /*endfinally*/];
|
|
81
|
+
case 4: return [2 /*return*/];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}); })();
|
|
85
|
+
return [2 /*return*/, refreshTokenPromise];
|
|
113
86
|
});
|
|
114
|
-
}); }
|
|
115
|
-
//
|
|
87
|
+
}); };
|
|
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 ---
|
|
116
99
|
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
117
100
|
var originalRequest, newToken, e_1;
|
|
118
101
|
var _a;
|
|
119
102
|
return __generator(this, function (_b) {
|
|
120
103
|
switch (_b.label) {
|
|
121
104
|
case 0:
|
|
122
|
-
console.log('errorerror', error);
|
|
123
105
|
originalRequest = error.config;
|
|
124
106
|
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 4];
|
|
125
107
|
originalRequest._retry = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|