phx-uikit 1.0.218 → 1.0.219
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.
|
@@ -8,10 +8,33 @@ var constants_1 = require("./utils/constants");
|
|
|
8
8
|
var saveCookiesClient_1 = tslib_1.__importDefault(require("./components/Func/saveCookiesClient"));
|
|
9
9
|
var getCookieSession_1 = tslib_1.__importDefault(require("./components/Func/getCookieSession"));
|
|
10
10
|
var headers_1 = require("next/headers");
|
|
11
|
-
|
|
11
|
+
// ✅ Tạo bộ nhớ dùng chung giữa các SSR requests
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
if (!globalThis.__PHX_REFRESH__) {
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
globalThis.__PHX_REFRESH__ = {
|
|
16
|
+
isRefreshing: false,
|
|
17
|
+
failedQueue: []
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
var getRefreshState = function () { return globalThis.__PHX_REFRESH__; };
|
|
12
22
|
var publicUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
13
|
-
|
|
14
|
-
var
|
|
23
|
+
var internalUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL);
|
|
24
|
+
var isServer = typeof window === 'undefined';
|
|
25
|
+
var processQueue = function (error, token) {
|
|
26
|
+
if (token === void 0) { token = null; }
|
|
27
|
+
var failedQueue = getRefreshState().failedQueue;
|
|
28
|
+
failedQueue.forEach(function (prom) {
|
|
29
|
+
if (error) {
|
|
30
|
+
prom.reject(error);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
prom.resolve(token);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
getRefreshState().failedQueue = [];
|
|
37
|
+
};
|
|
15
38
|
var PHXAxiosInstance = axios_1["default"].create({
|
|
16
39
|
baseURL: publicUrl
|
|
17
40
|
});
|
|
@@ -33,6 +56,34 @@ var getAuthHeaders = function () {
|
|
|
33
56
|
}
|
|
34
57
|
return {};
|
|
35
58
|
};
|
|
59
|
+
var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
60
|
+
var response, newToken, currentSession, err_1;
|
|
61
|
+
return tslib_1.__generator(this, function (_a) {
|
|
62
|
+
switch (_a.label) {
|
|
63
|
+
case 0:
|
|
64
|
+
_a.trys.push([0, 2, , 3]);
|
|
65
|
+
return [4 /*yield*/, axios_1["default"].post("".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
66
|
+
headers: getAuthHeaders()
|
|
67
|
+
})];
|
|
68
|
+
case 1:
|
|
69
|
+
response = _a.sent();
|
|
70
|
+
newToken = response.data.token;
|
|
71
|
+
currentSession = (0, getCookieSession_1["default"])();
|
|
72
|
+
(0, saveCookiesClient_1["default"])({ value: tslib_1.__assign(tslib_1.__assign({}, currentSession), { access_token: newToken }) });
|
|
73
|
+
if (isServer) {
|
|
74
|
+
saveRefreshTokenServer(response);
|
|
75
|
+
}
|
|
76
|
+
return [2 /*return*/, newToken];
|
|
77
|
+
case 2:
|
|
78
|
+
err_1 = _a.sent();
|
|
79
|
+
if (!isServer) {
|
|
80
|
+
window.location.href = constants_1.loginPage;
|
|
81
|
+
}
|
|
82
|
+
throw err_1;
|
|
83
|
+
case 3: return [2 /*return*/];
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}); };
|
|
36
87
|
var saveRefreshTokenServer = function (response) {
|
|
37
88
|
var _a;
|
|
38
89
|
var setCookieHeader = ((_a = response.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
@@ -46,96 +97,79 @@ var saveRefreshTokenServer = function (response) {
|
|
|
46
97
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
47
98
|
});
|
|
48
99
|
};
|
|
49
|
-
var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
50
|
-
return tslib_1.__generator(this, function (_a) {
|
|
51
|
-
if (!refreshPromise) {
|
|
52
|
-
console.log('[REFRESH] 🔁 Bắt đầu refresh token');
|
|
53
|
-
refreshPromise = (function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
54
|
-
var response, newToken, currentSession, err_1;
|
|
55
|
-
return tslib_1.__generator(this, function (_a) {
|
|
56
|
-
switch (_a.label) {
|
|
57
|
-
case 0:
|
|
58
|
-
_a.trys.push([0, 2, 3, 4]);
|
|
59
|
-
return [4 /*yield*/, axios_1["default"].post("".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
60
|
-
headers: getAuthHeaders()
|
|
61
|
-
})];
|
|
62
|
-
case 1:
|
|
63
|
-
response = _a.sent();
|
|
64
|
-
newToken = response.data.token;
|
|
65
|
-
currentSession = (0, getCookieSession_1["default"])();
|
|
66
|
-
(0, saveCookiesClient_1["default"])({ value: tslib_1.__assign(tslib_1.__assign({}, currentSession), { access_token: newToken }) });
|
|
67
|
-
if (isServer) {
|
|
68
|
-
saveRefreshTokenServer(response);
|
|
69
|
-
}
|
|
70
|
-
return [2 /*return*/, newToken];
|
|
71
|
-
case 2:
|
|
72
|
-
err_1 = _a.sent();
|
|
73
|
-
if (!isServer) {
|
|
74
|
-
// Cookies.remove(COOKIE_SESSION_SIGN_IN)
|
|
75
|
-
window.location.href = constants_1.loginPage;
|
|
76
|
-
}
|
|
77
|
-
throw err_1;
|
|
78
|
-
case 3:
|
|
79
|
-
refreshPromise = null;
|
|
80
|
-
console.log('[REFRESH] ✅ Done');
|
|
81
|
-
return [7 /*endfinally*/];
|
|
82
|
-
case 4: return [2 /*return*/];
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}); })();
|
|
86
|
-
}
|
|
87
|
-
return [2 /*return*/, refreshPromise];
|
|
88
|
-
});
|
|
89
|
-
}); };
|
|
90
100
|
PHXAxiosInstance.interceptors.request.use(function (config) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
91
|
-
var
|
|
101
|
+
var currentSession, authTokenCookie, err_2, newToken;
|
|
92
102
|
var _a;
|
|
93
103
|
return tslib_1.__generator(this, function (_b) {
|
|
94
104
|
switch (_b.label) {
|
|
95
105
|
case 0:
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
currentSession = (0, getCookieSession_1["default"])();
|
|
107
|
+
authTokenCookie = (currentSession === null || currentSession === void 0 ? void 0 : currentSession.access_token) || null;
|
|
108
|
+
if (!authTokenCookie) return [3 /*break*/, 7];
|
|
109
|
+
config.headers.Authorization = "Bearer ".concat(authTokenCookie);
|
|
110
|
+
if (!isServer) return [3 /*break*/, 7];
|
|
98
111
|
_b.label = 1;
|
|
99
112
|
case 1:
|
|
100
|
-
_b.trys.push([1, 3, ,
|
|
101
|
-
|
|
102
|
-
|
|
113
|
+
_b.trys.push([1, 3, , 7]);
|
|
114
|
+
return [4 /*yield*/, axios_1["default"].post("".concat(internalUrl, "/authen/authenticate"), {}, {
|
|
115
|
+
headers: tslib_1.__assign({ Authorization: "Bearer ".concat(authTokenCookie) }, getAuthHeaders())
|
|
116
|
+
})];
|
|
103
117
|
case 2:
|
|
104
|
-
|
|
105
|
-
return [3 /*break*/,
|
|
118
|
+
_b.sent();
|
|
119
|
+
return [3 /*break*/, 7];
|
|
106
120
|
case 3:
|
|
107
121
|
err_2 = _b.sent();
|
|
108
|
-
|
|
109
|
-
return [
|
|
122
|
+
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
123
|
+
return [4 /*yield*/, refreshAccessToken()];
|
|
110
124
|
case 4:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
125
|
+
newToken = _b.sent();
|
|
126
|
+
config.headers.Authorization = "Bearer ".concat(newToken);
|
|
127
|
+
return [3 /*break*/, 6];
|
|
128
|
+
case 5: throw err_2;
|
|
129
|
+
case 6: return [3 /*break*/, 7];
|
|
130
|
+
case 7: return [2 /*return*/, config];
|
|
115
131
|
}
|
|
116
132
|
});
|
|
117
133
|
}); });
|
|
118
134
|
PHXAxiosInstance.interceptors.response.use(function (response) { return response; }, function (error) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
119
|
-
var originalRequest, newToken, err_3;
|
|
135
|
+
var originalRequest, refreshState, newToken, err_3;
|
|
120
136
|
var _a;
|
|
121
137
|
return tslib_1.__generator(this, function (_b) {
|
|
122
138
|
switch (_b.label) {
|
|
123
139
|
case 0:
|
|
124
140
|
originalRequest = error.config;
|
|
125
|
-
|
|
141
|
+
refreshState = getRefreshState();
|
|
142
|
+
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 5];
|
|
143
|
+
if (refreshState.isRefreshing) {
|
|
144
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
145
|
+
refreshState.failedQueue.push({
|
|
146
|
+
resolve: function (token) {
|
|
147
|
+
originalRequest.headers.Authorization = 'Bearer ' + token;
|
|
148
|
+
resolve(PHXAxiosInstance(originalRequest));
|
|
149
|
+
},
|
|
150
|
+
reject: function (err) { return reject(err); }
|
|
151
|
+
});
|
|
152
|
+
})];
|
|
153
|
+
}
|
|
126
154
|
originalRequest._retry = true;
|
|
155
|
+
refreshState.isRefreshing = true;
|
|
127
156
|
_b.label = 1;
|
|
128
157
|
case 1:
|
|
129
|
-
_b.trys.push([1, 3, ,
|
|
158
|
+
_b.trys.push([1, 3, 4, 5]);
|
|
130
159
|
return [4 /*yield*/, refreshAccessToken()];
|
|
131
160
|
case 2:
|
|
132
161
|
newToken = _b.sent();
|
|
162
|
+
processQueue(null, newToken);
|
|
133
163
|
originalRequest.headers.Authorization = "Bearer ".concat(newToken);
|
|
134
164
|
return [2 /*return*/, PHXAxiosInstance(originalRequest)];
|
|
135
165
|
case 3:
|
|
136
166
|
err_3 = _b.sent();
|
|
167
|
+
processQueue(err_3, null);
|
|
137
168
|
return [2 /*return*/, Promise.reject(err_3)];
|
|
138
|
-
case 4:
|
|
169
|
+
case 4:
|
|
170
|
+
refreshState.isRefreshing = false;
|
|
171
|
+
return [7 /*endfinally*/];
|
|
172
|
+
case 5: return [2 /*return*/, Promise.reject(error)];
|
|
139
173
|
}
|
|
140
174
|
});
|
|
141
175
|
}); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":";;;;AAAA,wDAAyB;AACzB,qDAA0C;AAC1C,+CAAmE;AACnE,kGAAmE;AACnE,gGAAwE;AACxE,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,40 @@ import { getEnv } from './read-env-config';
|
|
|
4
4
|
import { COOKIE_REFRESH_TOKEN, loginPage } from './utils/constants';
|
|
5
5
|
import saveCookiesClient from './components/Func/saveCookiesClient';
|
|
6
6
|
import PHXFuncGetCookieSession from './components/Func/getCookieSession';
|
|
7
|
-
import { cookies
|
|
8
|
-
|
|
7
|
+
import { cookies, headers } from 'next/headers';
|
|
8
|
+
// ✅ Tạo bộ nhớ dùng chung giữa các SSR requests
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
if (!globalThis.__PHX_REFRESH__) {
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
globalThis.__PHX_REFRESH__ = {
|
|
13
|
+
isRefreshing: false,
|
|
14
|
+
failedQueue: []
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
var getRefreshState = function () { return globalThis.__PHX_REFRESH__; };
|
|
9
19
|
var publicUrl = getEnv('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
10
|
-
|
|
11
|
-
var
|
|
20
|
+
var internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL);
|
|
21
|
+
var isServer = typeof window === 'undefined';
|
|
22
|
+
var processQueue = function (error, token) {
|
|
23
|
+
if (token === void 0) { token = null; }
|
|
24
|
+
var failedQueue = getRefreshState().failedQueue;
|
|
25
|
+
failedQueue.forEach(function (prom) {
|
|
26
|
+
if (error) {
|
|
27
|
+
prom.reject(error);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
prom.resolve(token);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
getRefreshState().failedQueue = [];
|
|
34
|
+
};
|
|
12
35
|
var PHXAxiosInstance = axios.create({
|
|
13
36
|
baseURL: publicUrl
|
|
14
37
|
});
|
|
15
38
|
var getAuthHeaders = function () {
|
|
16
39
|
if (isServer) {
|
|
17
|
-
var cookieStore =
|
|
40
|
+
var cookieStore = cookies();
|
|
18
41
|
var cookieHeader = cookieStore
|
|
19
42
|
.getAll()
|
|
20
43
|
.map(function (_a) {
|
|
@@ -24,17 +47,45 @@ var getAuthHeaders = function () {
|
|
|
24
47
|
.join('; ');
|
|
25
48
|
return {
|
|
26
49
|
Cookie: cookieHeader,
|
|
27
|
-
hostname:
|
|
50
|
+
hostname: headers().get('origin')
|
|
28
51
|
};
|
|
29
52
|
}
|
|
30
53
|
return {};
|
|
31
54
|
};
|
|
55
|
+
var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
56
|
+
var response, newToken, currentSession, err_1;
|
|
57
|
+
return __generator(this, function (_a) {
|
|
58
|
+
switch (_a.label) {
|
|
59
|
+
case 0:
|
|
60
|
+
_a.trys.push([0, 2, , 3]);
|
|
61
|
+
return [4 /*yield*/, axios.post("".concat(isServer ? headers().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
62
|
+
headers: getAuthHeaders()
|
|
63
|
+
})];
|
|
64
|
+
case 1:
|
|
65
|
+
response = _a.sent();
|
|
66
|
+
newToken = response.data.token;
|
|
67
|
+
currentSession = PHXFuncGetCookieSession();
|
|
68
|
+
saveCookiesClient({ value: __assign(__assign({}, currentSession), { access_token: newToken }) });
|
|
69
|
+
if (isServer) {
|
|
70
|
+
saveRefreshTokenServer(response);
|
|
71
|
+
}
|
|
72
|
+
return [2 /*return*/, newToken];
|
|
73
|
+
case 2:
|
|
74
|
+
err_1 = _a.sent();
|
|
75
|
+
if (!isServer) {
|
|
76
|
+
window.location.href = loginPage;
|
|
77
|
+
}
|
|
78
|
+
throw err_1;
|
|
79
|
+
case 3: return [2 /*return*/];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}); };
|
|
32
83
|
var saveRefreshTokenServer = function (response) {
|
|
33
84
|
var _a;
|
|
34
85
|
var setCookieHeader = ((_a = response.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
35
86
|
var match = setCookieHeader.match(/refresh_token=([^;]+)/);
|
|
36
87
|
var refreshToken = (match === null || match === void 0 ? void 0 : match[1]) || '';
|
|
37
|
-
|
|
88
|
+
cookies().set(COOKIE_REFRESH_TOKEN, refreshToken, {
|
|
38
89
|
path: '/',
|
|
39
90
|
httpOnly: true,
|
|
40
91
|
secure: true,
|
|
@@ -42,96 +93,79 @@ var saveRefreshTokenServer = function (response) {
|
|
|
42
93
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
43
94
|
});
|
|
44
95
|
};
|
|
45
|
-
var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
46
|
-
return __generator(this, function (_a) {
|
|
47
|
-
if (!refreshPromise) {
|
|
48
|
-
console.log('[REFRESH] 🔁 Bắt đầu refresh token');
|
|
49
|
-
refreshPromise = (function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
-
var response, newToken, currentSession, err_1;
|
|
51
|
-
return __generator(this, function (_a) {
|
|
52
|
-
switch (_a.label) {
|
|
53
|
-
case 0:
|
|
54
|
-
_a.trys.push([0, 2, 3, 4]);
|
|
55
|
-
return [4 /*yield*/, axios.post("".concat(isServer ? serverHeaders().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
56
|
-
headers: getAuthHeaders()
|
|
57
|
-
})];
|
|
58
|
-
case 1:
|
|
59
|
-
response = _a.sent();
|
|
60
|
-
newToken = response.data.token;
|
|
61
|
-
currentSession = PHXFuncGetCookieSession();
|
|
62
|
-
saveCookiesClient({ value: __assign(__assign({}, currentSession), { access_token: newToken }) });
|
|
63
|
-
if (isServer) {
|
|
64
|
-
saveRefreshTokenServer(response);
|
|
65
|
-
}
|
|
66
|
-
return [2 /*return*/, newToken];
|
|
67
|
-
case 2:
|
|
68
|
-
err_1 = _a.sent();
|
|
69
|
-
if (!isServer) {
|
|
70
|
-
// Cookies.remove(COOKIE_SESSION_SIGN_IN)
|
|
71
|
-
window.location.href = loginPage;
|
|
72
|
-
}
|
|
73
|
-
throw err_1;
|
|
74
|
-
case 3:
|
|
75
|
-
refreshPromise = null;
|
|
76
|
-
console.log('[REFRESH] ✅ Done');
|
|
77
|
-
return [7 /*endfinally*/];
|
|
78
|
-
case 4: return [2 /*return*/];
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}); })();
|
|
82
|
-
}
|
|
83
|
-
return [2 /*return*/, refreshPromise];
|
|
84
|
-
});
|
|
85
|
-
}); };
|
|
86
96
|
PHXAxiosInstance.interceptors.request.use(function (config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
87
|
-
var
|
|
97
|
+
var currentSession, authTokenCookie, err_2, newToken;
|
|
88
98
|
var _a;
|
|
89
99
|
return __generator(this, function (_b) {
|
|
90
100
|
switch (_b.label) {
|
|
91
101
|
case 0:
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
currentSession = PHXFuncGetCookieSession();
|
|
103
|
+
authTokenCookie = (currentSession === null || currentSession === void 0 ? void 0 : currentSession.access_token) || null;
|
|
104
|
+
if (!authTokenCookie) return [3 /*break*/, 7];
|
|
105
|
+
config.headers.Authorization = "Bearer ".concat(authTokenCookie);
|
|
106
|
+
if (!isServer) return [3 /*break*/, 7];
|
|
94
107
|
_b.label = 1;
|
|
95
108
|
case 1:
|
|
96
|
-
_b.trys.push([1, 3, ,
|
|
97
|
-
|
|
98
|
-
|
|
109
|
+
_b.trys.push([1, 3, , 7]);
|
|
110
|
+
return [4 /*yield*/, axios.post("".concat(internalUrl, "/authen/authenticate"), {}, {
|
|
111
|
+
headers: __assign({ Authorization: "Bearer ".concat(authTokenCookie) }, getAuthHeaders())
|
|
112
|
+
})];
|
|
99
113
|
case 2:
|
|
100
|
-
|
|
101
|
-
return [3 /*break*/,
|
|
114
|
+
_b.sent();
|
|
115
|
+
return [3 /*break*/, 7];
|
|
102
116
|
case 3:
|
|
103
117
|
err_2 = _b.sent();
|
|
104
|
-
|
|
105
|
-
return [
|
|
118
|
+
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
119
|
+
return [4 /*yield*/, refreshAccessToken()];
|
|
106
120
|
case 4:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
newToken = _b.sent();
|
|
122
|
+
config.headers.Authorization = "Bearer ".concat(newToken);
|
|
123
|
+
return [3 /*break*/, 6];
|
|
124
|
+
case 5: throw err_2;
|
|
125
|
+
case 6: return [3 /*break*/, 7];
|
|
126
|
+
case 7: return [2 /*return*/, config];
|
|
111
127
|
}
|
|
112
128
|
});
|
|
113
129
|
}); });
|
|
114
130
|
PHXAxiosInstance.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
115
|
-
var originalRequest, newToken, err_3;
|
|
131
|
+
var originalRequest, refreshState, newToken, err_3;
|
|
116
132
|
var _a;
|
|
117
133
|
return __generator(this, function (_b) {
|
|
118
134
|
switch (_b.label) {
|
|
119
135
|
case 0:
|
|
120
136
|
originalRequest = error.config;
|
|
121
|
-
|
|
137
|
+
refreshState = getRefreshState();
|
|
138
|
+
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 5];
|
|
139
|
+
if (refreshState.isRefreshing) {
|
|
140
|
+
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
141
|
+
refreshState.failedQueue.push({
|
|
142
|
+
resolve: function (token) {
|
|
143
|
+
originalRequest.headers.Authorization = 'Bearer ' + token;
|
|
144
|
+
resolve(PHXAxiosInstance(originalRequest));
|
|
145
|
+
},
|
|
146
|
+
reject: function (err) { return reject(err); }
|
|
147
|
+
});
|
|
148
|
+
})];
|
|
149
|
+
}
|
|
122
150
|
originalRequest._retry = true;
|
|
151
|
+
refreshState.isRefreshing = true;
|
|
123
152
|
_b.label = 1;
|
|
124
153
|
case 1:
|
|
125
|
-
_b.trys.push([1, 3, ,
|
|
154
|
+
_b.trys.push([1, 3, 4, 5]);
|
|
126
155
|
return [4 /*yield*/, refreshAccessToken()];
|
|
127
156
|
case 2:
|
|
128
157
|
newToken = _b.sent();
|
|
158
|
+
processQueue(null, newToken);
|
|
129
159
|
originalRequest.headers.Authorization = "Bearer ".concat(newToken);
|
|
130
160
|
return [2 /*return*/, PHXAxiosInstance(originalRequest)];
|
|
131
161
|
case 3:
|
|
132
162
|
err_3 = _b.sent();
|
|
163
|
+
processQueue(err_3, null);
|
|
133
164
|
return [2 /*return*/, Promise.reject(err_3)];
|
|
134
|
-
case 4:
|
|
165
|
+
case 4:
|
|
166
|
+
refreshState.isRefreshing = false;
|
|
167
|
+
return [7 /*endfinally*/];
|
|
168
|
+
case 5: return [2 /*return*/, Promise.reject(error)];
|
|
135
169
|
}
|
|
136
170
|
});
|
|
137
171
|
}); });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,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,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|