phx-react 1.3.940 → 1.3.942
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/dist/cjs/axiosInstance.js +89 -95
- package/dist/cjs/axiosInstance.js.map +1 -1
- package/dist/cjs/components/Func/getCookieSession.js +12 -4
- package/dist/cjs/components/Func/getCookieSession.js.map +1 -1
- package/dist/cjs/components/Func/saveCookiesClient.js +6 -1
- package/dist/cjs/components/Func/saveCookiesClient.js.map +1 -1
- package/dist/cjs/components/Func/sessionStore.d.ts +3 -0
- package/dist/cjs/components/Func/sessionStore.js +17 -0
- package/dist/cjs/components/Func/sessionStore.js.map +1 -0
- package/dist/esm/axiosInstance.js +89 -95
- package/dist/esm/axiosInstance.js.map +1 -1
- package/dist/esm/components/Func/getCookieSession.js +12 -4
- package/dist/esm/components/Func/getCookieSession.js.map +1 -1
- package/dist/esm/components/Func/saveCookiesClient.js +7 -1
- package/dist/esm/components/Func/saveCookiesClient.js.map +1 -1
- package/dist/esm/components/Func/sessionStore.d.ts +3 -0
- package/dist/esm/components/Func/sessionStore.js +11 -0
- package/dist/esm/components/Func/sessionStore.js.map +1 -0
- package/package.json +3 -1
|
@@ -3,80 +3,41 @@ exports.__esModule = true;
|
|
|
3
3
|
exports.PHXAxiosInstance = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var axios_1 = tslib_1.__importDefault(require("axios"));
|
|
6
|
+
var async_lock_1 = tslib_1.__importDefault(require("async-lock"));
|
|
6
7
|
var read_env_config_1 = require("./read-env-config");
|
|
7
8
|
var constants_1 = require("./utils/constants");
|
|
8
9
|
var saveCookiesClient_1 = tslib_1.__importDefault(require("./components/Func/saveCookiesClient"));
|
|
9
10
|
var getCookieSession_1 = tslib_1.__importDefault(require("./components/Func/getCookieSession"));
|
|
10
11
|
var headers_1 = require("next/headers");
|
|
11
|
-
var
|
|
12
|
-
var
|
|
12
|
+
var lock = new async_lock_1["default"]();
|
|
13
|
+
var isServer = typeof window === 'undefined';
|
|
13
14
|
var publicUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
14
15
|
var internalUrl = (0, read_env_config_1.getEnv)('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL);
|
|
15
|
-
var isServer = typeof window === 'undefined';
|
|
16
|
-
var processQueue = function (error, token) {
|
|
17
|
-
if (token === void 0) { token = null; }
|
|
18
|
-
failedQueue.forEach(function (prom) {
|
|
19
|
-
if (error) {
|
|
20
|
-
prom.reject(error);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
prom.resolve(token);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
failedQueue = [];
|
|
27
|
-
};
|
|
28
16
|
var PHXAxiosInstance = axios_1["default"].create({
|
|
29
17
|
baseURL: publicUrl
|
|
30
18
|
});
|
|
31
19
|
exports.PHXAxiosInstance = PHXAxiosInstance;
|
|
20
|
+
// === GLOBAL CACHE ===
|
|
21
|
+
var accessTokenCache = null;
|
|
22
|
+
var refreshingPromise = null;
|
|
23
|
+
// Lấy header (cookie + origin) khi chạy SSR
|
|
32
24
|
var getAuthHeaders = function () {
|
|
33
|
-
if (isServer)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
return {};
|
|
25
|
+
if (!isServer)
|
|
26
|
+
return {};
|
|
27
|
+
var cookieStore = (0, headers_1.cookies)();
|
|
28
|
+
var cookieHeader = cookieStore
|
|
29
|
+
.getAll()
|
|
30
|
+
.map(function (_a) {
|
|
31
|
+
var name = _a.name, value = _a.value;
|
|
32
|
+
return "".concat(name, "=").concat(value);
|
|
33
|
+
})
|
|
34
|
+
.join('; ');
|
|
35
|
+
return {
|
|
36
|
+
Cookie: cookieHeader,
|
|
37
|
+
hostname: (0, headers_1.headers)().get('origin') || undefined
|
|
38
|
+
};
|
|
49
39
|
};
|
|
50
|
-
|
|
51
|
-
var response, newToken, currentSession, err_1;
|
|
52
|
-
return tslib_1.__generator(this, function (_a) {
|
|
53
|
-
switch (_a.label) {
|
|
54
|
-
case 0:
|
|
55
|
-
_a.trys.push([0, 2, , 3]);
|
|
56
|
-
return [4 /*yield*/, axios_1["default"].post("".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
57
|
-
headers: getAuthHeaders()
|
|
58
|
-
})];
|
|
59
|
-
case 1:
|
|
60
|
-
response = _a.sent();
|
|
61
|
-
newToken = response.data.token;
|
|
62
|
-
currentSession = (0, getCookieSession_1["default"])();
|
|
63
|
-
(0, saveCookiesClient_1["default"])({ value: tslib_1.__assign(tslib_1.__assign({}, currentSession), { access_token: newToken }) });
|
|
64
|
-
if (isServer) {
|
|
65
|
-
// save refresh token from server site
|
|
66
|
-
saveRefreshTokenServer(response);
|
|
67
|
-
}
|
|
68
|
-
return [2 /*return*/, newToken];
|
|
69
|
-
case 2:
|
|
70
|
-
err_1 = _a.sent();
|
|
71
|
-
if (!isServer) {
|
|
72
|
-
// Cookies.remove(COOKIE_SESSION_SIGN_IN)
|
|
73
|
-
window.location.href = constants_1.loginPage;
|
|
74
|
-
}
|
|
75
|
-
throw err_1;
|
|
76
|
-
case 3: return [2 /*return*/];
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}); };
|
|
40
|
+
// Lưu lại refresh token từ header của response (chỉ SSR)
|
|
80
41
|
var saveRefreshTokenServer = function (response) {
|
|
81
42
|
var _a;
|
|
82
43
|
var setCookieHeader = ((_a = response.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
@@ -90,23 +51,71 @@ var saveRefreshTokenServer = function (response) {
|
|
|
90
51
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
91
52
|
});
|
|
92
53
|
};
|
|
54
|
+
// Hàm refresh access token, chỉ gọi 1 lần duy nhất tại một thời điểm
|
|
55
|
+
var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
56
|
+
return tslib_1.__generator(this, function (_a) {
|
|
57
|
+
if (!refreshingPromise) {
|
|
58
|
+
refreshingPromise = lock.acquire(constants_1.COOKIE_REFRESH_TOKEN, function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
59
|
+
var url, response, newToken, currentSession, err_1;
|
|
60
|
+
return tslib_1.__generator(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
64
|
+
url = "".concat(isServer ? (0, headers_1.headers)().get('origin') : '', "/api/authenticate/refresh-token");
|
|
65
|
+
return [4 /*yield*/, axios_1["default"].post(url, {}, { headers: getAuthHeaders() })];
|
|
66
|
+
case 1:
|
|
67
|
+
response = _a.sent();
|
|
68
|
+
newToken = response.data.token;
|
|
69
|
+
currentSession = (0, getCookieSession_1["default"])();
|
|
70
|
+
// Lưu lại vào cookie phía client
|
|
71
|
+
currentSession === null || currentSession === void 0 ? true : delete currentSession.access_token;
|
|
72
|
+
(0, saveCookiesClient_1["default"])({ value: tslib_1.__assign(tslib_1.__assign({}, currentSession), { access_token: newToken }) });
|
|
73
|
+
// Cập nhật cache
|
|
74
|
+
accessTokenCache = newToken;
|
|
75
|
+
// Lưu refresh token phía server nếu SSR
|
|
76
|
+
if (isServer) {
|
|
77
|
+
saveRefreshTokenServer(response);
|
|
78
|
+
}
|
|
79
|
+
return [2 /*return*/, newToken];
|
|
80
|
+
case 2:
|
|
81
|
+
err_1 = _a.sent();
|
|
82
|
+
if (!isServer) {
|
|
83
|
+
window.location.href = constants_1.loginPage;
|
|
84
|
+
}
|
|
85
|
+
throw err_1;
|
|
86
|
+
case 3:
|
|
87
|
+
refreshingPromise = null;
|
|
88
|
+
return [7 /*endfinally*/];
|
|
89
|
+
case 4: return [2 /*return*/];
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}); });
|
|
93
|
+
}
|
|
94
|
+
return [2 /*return*/, refreshingPromise];
|
|
95
|
+
});
|
|
96
|
+
}); };
|
|
97
|
+
// Request interceptor: luôn thêm Authorization nếu có access_token
|
|
93
98
|
PHXAxiosInstance.interceptors.request.use(function (config) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
94
|
-
var
|
|
99
|
+
var token, session, err_2, fresh;
|
|
95
100
|
var _a;
|
|
96
101
|
return tslib_1.__generator(this, function (_b) {
|
|
97
102
|
switch (_b.label) {
|
|
98
103
|
case 0:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!
|
|
102
|
-
|
|
104
|
+
config.headers = config.headers || {};
|
|
105
|
+
token = accessTokenCache;
|
|
106
|
+
if (!token) {
|
|
107
|
+
session = (0, getCookieSession_1["default"])();
|
|
108
|
+
token = (session === null || session === void 0 ? void 0 : session.access_token) || null;
|
|
109
|
+
if (token)
|
|
110
|
+
accessTokenCache = token;
|
|
111
|
+
}
|
|
112
|
+
if (!token) return [3 /*break*/, 7];
|
|
113
|
+
config.headers.Authorization = "Bearer ".concat(token);
|
|
103
114
|
if (!isServer) return [3 /*break*/, 7];
|
|
104
115
|
_b.label = 1;
|
|
105
116
|
case 1:
|
|
106
117
|
_b.trys.push([1, 3, , 7]);
|
|
107
|
-
return [4 /*yield*/, axios_1["default"].post("".concat(internalUrl, "/authen/authenticate"), {}, {
|
|
108
|
-
headers: tslib_1.__assign({ Authorization: "Bearer ".concat(authTokenCookie) }, getAuthHeaders())
|
|
109
|
-
})];
|
|
118
|
+
return [4 /*yield*/, axios_1["default"].post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: tslib_1.__assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
110
119
|
case 2:
|
|
111
120
|
_b.sent();
|
|
112
121
|
return [3 /*break*/, 7];
|
|
@@ -115,8 +124,8 @@ PHXAxiosInstance.interceptors.request.use(function (config) { return tslib_1.__a
|
|
|
115
124
|
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
116
125
|
return [4 /*yield*/, refreshAccessToken()];
|
|
117
126
|
case 4:
|
|
118
|
-
|
|
119
|
-
config.headers.Authorization = "Bearer ".concat(
|
|
127
|
+
fresh = _b.sent();
|
|
128
|
+
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
120
129
|
return [3 /*break*/, 6];
|
|
121
130
|
case 5: throw err_2;
|
|
122
131
|
case 6: return [3 /*break*/, 7];
|
|
@@ -124,44 +133,29 @@ PHXAxiosInstance.interceptors.request.use(function (config) { return tslib_1.__a
|
|
|
124
133
|
}
|
|
125
134
|
});
|
|
126
135
|
}); });
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
// Response interceptor: bắt lỗi 401, gọi refresh và retry
|
|
137
|
+
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
138
|
+
var originalRequest, newToken, e_1;
|
|
129
139
|
var _a;
|
|
130
140
|
return tslib_1.__generator(this, function (_b) {
|
|
131
141
|
switch (_b.label) {
|
|
132
142
|
case 0:
|
|
133
143
|
originalRequest = error.config;
|
|
134
|
-
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/,
|
|
135
|
-
if (isRefreshing) {
|
|
136
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
137
|
-
failedQueue.push({
|
|
138
|
-
resolve: function (token) {
|
|
139
|
-
originalRequest.headers.Authorization = 'Bearer ' + token;
|
|
140
|
-
resolve(PHXAxiosInstance(originalRequest));
|
|
141
|
-
},
|
|
142
|
-
reject: function (err) { return reject(err); }
|
|
143
|
-
});
|
|
144
|
-
})];
|
|
145
|
-
}
|
|
144
|
+
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 4];
|
|
146
145
|
originalRequest._retry = true;
|
|
147
|
-
isRefreshing = true;
|
|
148
146
|
_b.label = 1;
|
|
149
147
|
case 1:
|
|
150
|
-
_b.trys.push([1, 3,
|
|
148
|
+
_b.trys.push([1, 3, , 4]);
|
|
151
149
|
return [4 /*yield*/, refreshAccessToken()];
|
|
152
150
|
case 2:
|
|
153
151
|
newToken = _b.sent();
|
|
154
|
-
|
|
152
|
+
originalRequest.headers = originalRequest.headers || {};
|
|
155
153
|
originalRequest.headers.Authorization = "Bearer ".concat(newToken);
|
|
156
154
|
return [2 /*return*/, PHXAxiosInstance(originalRequest)];
|
|
157
155
|
case 3:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
case 4:
|
|
162
|
-
isRefreshing = false;
|
|
163
|
-
return [7 /*endfinally*/];
|
|
164
|
-
case 5: return [2 /*return*/, Promise.reject(error)];
|
|
156
|
+
e_1 = _b.sent();
|
|
157
|
+
return [2 /*return*/, Promise.reject(e_1)];
|
|
158
|
+
case 4: return [2 /*return*/, Promise.reject(error)];
|
|
165
159
|
}
|
|
166
160
|
});
|
|
167
161
|
}); });
|
|
@@ -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,wCAA+C;AAE/C,IAAI,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,16 +5,24 @@ var constants_1 = require("../../utils/constants");
|
|
|
5
5
|
var js_cookie_1 = tslib_1.__importDefault(require("js-cookie"));
|
|
6
6
|
var helpers_1 = require("../../helpers/helpers");
|
|
7
7
|
var headers_1 = require("next/headers");
|
|
8
|
+
var sessionStore_1 = require("./sessionStore");
|
|
8
9
|
function PHXFuncGetCookieSession() {
|
|
9
10
|
var _a;
|
|
11
|
+
var sessionInfo;
|
|
12
|
+
var cachedSession = (0, sessionStore_1.getSession)();
|
|
13
|
+
if (cachedSession)
|
|
14
|
+
return cachedSession;
|
|
10
15
|
if (typeof window !== 'undefined') {
|
|
11
|
-
|
|
12
|
-
return sessionInfo ? (0, helpers_1.decryptCookie)(sessionInfo) : null;
|
|
16
|
+
sessionInfo = js_cookie_1["default"].get(constants_1.COOKIE_SESSION_SIGN_IN);
|
|
13
17
|
}
|
|
14
18
|
else {
|
|
15
19
|
var cookieStore = (0, headers_1.cookies)();
|
|
16
|
-
|
|
17
|
-
|
|
20
|
+
sessionInfo = (_a = cookieStore.get(constants_1.COOKIE_SESSION_SIGN_IN)) === null || _a === void 0 ? void 0 : _a.value;
|
|
21
|
+
}
|
|
22
|
+
if (sessionInfo) {
|
|
23
|
+
var sessionInfoDecrypt = (0, helpers_1.decryptCookie)(sessionInfo);
|
|
24
|
+
(0, sessionStore_1.setSession)(sessionInfoDecrypt);
|
|
25
|
+
return sessionInfoDecrypt;
|
|
18
26
|
}
|
|
19
27
|
return null;
|
|
20
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCookieSession.js","sourceRoot":"","sources":["../../../../src/components/Func/getCookieSession.ts"],"names":[],"mappings":";;;AAAA,mDAA8D;AAC9D,gEAA+B;AAC/B,iDAAqD;AACrD,wCAAsC;
|
|
1
|
+
{"version":3,"file":"getCookieSession.js","sourceRoot":"","sources":["../../../../src/components/Func/getCookieSession.ts"],"names":[],"mappings":";;;AAAA,mDAA8D;AAC9D,gEAA+B;AAC/B,iDAAqD;AACrD,wCAAsC;AACtC,+CAAuD;AAmCvD,SAAwB,uBAAuB;;IAC7C,IAAI,WAAW,CAAA;IACf,IAAM,aAAa,GAAG,IAAA,yBAAU,GAAE,CAAA;IAClC,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IAEvC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,WAAW,GAAG,sBAAO,CAAC,GAAG,CAAC,kCAAsB,CAAC,CAAA;KAClD;SAAM;QACL,IAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAA;QAC7B,WAAW,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,kCAAsB,CAAC,0CAAE,KAAK,CAAA;KAC7D;IACD,IAAI,WAAW,EAAE;QACf,IAAM,kBAAkB,GAAG,IAAA,uBAAa,EAAC,WAAW,CAAC,CAAA;QACrD,IAAA,yBAAU,EAAC,kBAAkB,CAAC,CAAA;QAC9B,OAAO,kBAAkB,CAAA;KAC1B;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAjBD,6CAiBC"}
|
|
@@ -5,9 +5,14 @@ var headers_1 = require("next/headers");
|
|
|
5
5
|
var js_cookie_1 = tslib_1.__importDefault(require("js-cookie"));
|
|
6
6
|
var constants_1 = require("../../utils/constants");
|
|
7
7
|
var helpers_1 = require("../../helpers/helpers");
|
|
8
|
+
var sessionStore_1 = require("./sessionStore");
|
|
8
9
|
function saveCookiesClient(_a) {
|
|
9
10
|
var value = _a.value, _b = _a.remember, remember = _b === void 0 ? true : _b;
|
|
10
|
-
|
|
11
|
+
// update data session
|
|
12
|
+
var current = (0, sessionStore_1.getSession)() || {};
|
|
13
|
+
var newSession = tslib_1.__assign(tslib_1.__assign({}, current), value);
|
|
14
|
+
(0, sessionStore_1.setSession)(newSession);
|
|
15
|
+
var encrypted = (0, helpers_1.encryptDataSync)(newSession);
|
|
11
16
|
var isServer = typeof window === 'undefined';
|
|
12
17
|
if (isServer) {
|
|
13
18
|
// Server-side
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveCookiesClient.js","sourceRoot":"","sources":["../../../../src/components/Func/saveCookiesClient.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AACtC,gEAA+B;AAC/B,mDAA8D;AAE9D,iDAAuD;AAEvD,SAAwB,iBAAiB,CAAC,EAAwE;QAAtE,KAAK,WAAA,EAAE,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA;IAChE,IAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,
|
|
1
|
+
{"version":3,"file":"saveCookiesClient.js","sourceRoot":"","sources":["../../../../src/components/Func/saveCookiesClient.ts"],"names":[],"mappings":";;;AAAA,wCAAsC;AACtC,gEAA+B;AAC/B,mDAA8D;AAE9D,iDAAuD;AACvD,+CAAuD;AAEvD,SAAwB,iBAAiB,CAAC,EAAwE;QAAtE,KAAK,WAAA,EAAE,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA;IAChE,sBAAsB;IACtB,IAAM,OAAO,GAAG,IAAA,yBAAU,GAAE,IAAI,EAAE,CAAA;IAClC,IAAM,UAAU,yCAAQ,OAAO,GAAK,KAAK,CAAE,CAAA;IAC3C,IAAA,yBAAU,EAAC,UAAU,CAAC,CAAA;IAEtB,IAAM,SAAS,GAAG,IAAA,yBAAe,EAAC,UAAU,CAAC,CAAA;IAC7C,IAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;IAE9C,IAAI,QAAQ,EAAE;QACZ,cAAc;QACd,IAAI;YACF,IAAA,iBAAO,GAAE,CAAC,GAAG,CAAC,kCAAsB,EAAE,SAAS,EAAE;gBAC/C,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC,CAAA;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;SACvE;KACF;SAAM;QACL,cAAc;QACd,sBAAO,CAAC,GAAG,CAAC,kCAAsB,EAAE,SAAS,EAAE;YAC7C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACnC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;KACH;AACH,CAAC;AA9BD,uCA8BC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
exports.clearSession = exports.setSession = exports.getSession = void 0;
|
|
4
|
+
var sessionCache = null;
|
|
5
|
+
function getSession() {
|
|
6
|
+
return sessionCache;
|
|
7
|
+
}
|
|
8
|
+
exports.getSession = getSession;
|
|
9
|
+
function setSession(newSession) {
|
|
10
|
+
sessionCache = newSession;
|
|
11
|
+
}
|
|
12
|
+
exports.setSession = setSession;
|
|
13
|
+
function clearSession() {
|
|
14
|
+
sessionCache = null;
|
|
15
|
+
}
|
|
16
|
+
exports.clearSession = clearSession;
|
|
17
|
+
//# sourceMappingURL=sessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../../../src/components/Func/sessionStore.ts"],"names":[],"mappings":";;;AAAA,IAAI,YAAY,GAA+B,IAAI,CAAA;AAEnD,SAAgB,UAAU;IACxB,OAAO,YAAY,CAAA;AACrB,CAAC;AAFD,gCAEC;AAED,SAAgB,UAAU,CAAC,UAA+B;IACxD,YAAY,GAAG,UAAU,CAAA;AAC3B,CAAC;AAFD,gCAEC;AAED,SAAgB,YAAY;IAC1B,YAAY,GAAG,IAAI,CAAA;AACrB,CAAC;AAFD,oCAEC"}
|
|
@@ -1,78 +1,39 @@
|
|
|
1
1
|
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
2
|
import axios from 'axios';
|
|
3
|
+
import AsyncLock from 'async-lock';
|
|
3
4
|
import { getEnv } from './read-env-config';
|
|
4
5
|
import { COOKIE_REFRESH_TOKEN, loginPage } from './utils/constants';
|
|
5
6
|
import saveCookiesClient from './components/Func/saveCookiesClient';
|
|
6
7
|
import PHXFuncGetCookieSession from './components/Func/getCookieSession';
|
|
7
8
|
import { cookies, headers } from 'next/headers';
|
|
8
|
-
var
|
|
9
|
-
var
|
|
9
|
+
var lock = new AsyncLock();
|
|
10
|
+
var isServer = typeof window === 'undefined';
|
|
10
11
|
var publicUrl = getEnv('NEXT_PUBLIC_API_GATEWAY', process.env.NEXT_PUBLIC_API_GATEWAY);
|
|
11
12
|
var internalUrl = getEnv('NEXT_PUBLIC_API_GATEWAY_INTERNAL', process.env.NEXT_PUBLIC_API_GATEWAY_INTERNAL);
|
|
12
|
-
var isServer = typeof window === 'undefined';
|
|
13
|
-
var processQueue = function (error, token) {
|
|
14
|
-
if (token === void 0) { token = null; }
|
|
15
|
-
failedQueue.forEach(function (prom) {
|
|
16
|
-
if (error) {
|
|
17
|
-
prom.reject(error);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
prom.resolve(token);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
failedQueue = [];
|
|
24
|
-
};
|
|
25
13
|
var PHXAxiosInstance = axios.create({
|
|
26
14
|
baseURL: publicUrl
|
|
27
15
|
});
|
|
16
|
+
// === GLOBAL CACHE ===
|
|
17
|
+
var accessTokenCache = null;
|
|
18
|
+
var refreshingPromise = null;
|
|
19
|
+
// Lấy header (cookie + origin) khi chạy SSR
|
|
28
20
|
var getAuthHeaders = function () {
|
|
29
|
-
if (isServer)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
return {};
|
|
21
|
+
if (!isServer)
|
|
22
|
+
return {};
|
|
23
|
+
var cookieStore = cookies();
|
|
24
|
+
var cookieHeader = cookieStore
|
|
25
|
+
.getAll()
|
|
26
|
+
.map(function (_a) {
|
|
27
|
+
var name = _a.name, value = _a.value;
|
|
28
|
+
return "".concat(name, "=").concat(value);
|
|
29
|
+
})
|
|
30
|
+
.join('; ');
|
|
31
|
+
return {
|
|
32
|
+
Cookie: cookieHeader,
|
|
33
|
+
hostname: headers().get('origin') || undefined
|
|
34
|
+
};
|
|
45
35
|
};
|
|
46
|
-
|
|
47
|
-
var response, newToken, currentSession, err_1;
|
|
48
|
-
return __generator(this, function (_a) {
|
|
49
|
-
switch (_a.label) {
|
|
50
|
-
case 0:
|
|
51
|
-
_a.trys.push([0, 2, , 3]);
|
|
52
|
-
return [4 /*yield*/, axios.post("".concat(isServer ? headers().get('origin') : '', "/api/authenticate/refresh-token"), {}, {
|
|
53
|
-
headers: getAuthHeaders()
|
|
54
|
-
})];
|
|
55
|
-
case 1:
|
|
56
|
-
response = _a.sent();
|
|
57
|
-
newToken = response.data.token;
|
|
58
|
-
currentSession = PHXFuncGetCookieSession();
|
|
59
|
-
saveCookiesClient({ value: __assign(__assign({}, currentSession), { access_token: newToken }) });
|
|
60
|
-
if (isServer) {
|
|
61
|
-
// save refresh token from server site
|
|
62
|
-
saveRefreshTokenServer(response);
|
|
63
|
-
}
|
|
64
|
-
return [2 /*return*/, newToken];
|
|
65
|
-
case 2:
|
|
66
|
-
err_1 = _a.sent();
|
|
67
|
-
if (!isServer) {
|
|
68
|
-
// Cookies.remove(COOKIE_SESSION_SIGN_IN)
|
|
69
|
-
window.location.href = loginPage;
|
|
70
|
-
}
|
|
71
|
-
throw err_1;
|
|
72
|
-
case 3: return [2 /*return*/];
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
}); };
|
|
36
|
+
// Lưu lại refresh token từ header của response (chỉ SSR)
|
|
76
37
|
var saveRefreshTokenServer = function (response) {
|
|
77
38
|
var _a;
|
|
78
39
|
var setCookieHeader = ((_a = response.headers['set-cookie']) === null || _a === void 0 ? void 0 : _a[0]) || '';
|
|
@@ -86,23 +47,71 @@ var saveRefreshTokenServer = function (response) {
|
|
|
86
47
|
expires: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)
|
|
87
48
|
});
|
|
88
49
|
};
|
|
50
|
+
// Hàm refresh access token, chỉ gọi 1 lần duy nhất tại một thời điểm
|
|
51
|
+
var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
52
|
+
return __generator(this, function (_a) {
|
|
53
|
+
if (!refreshingPromise) {
|
|
54
|
+
refreshingPromise = lock.acquire(COOKIE_REFRESH_TOKEN, function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
55
|
+
var url, response, newToken, currentSession, err_1;
|
|
56
|
+
return __generator(this, function (_a) {
|
|
57
|
+
switch (_a.label) {
|
|
58
|
+
case 0:
|
|
59
|
+
_a.trys.push([0, 2, 3, 4]);
|
|
60
|
+
url = "".concat(isServer ? headers().get('origin') : '', "/api/authenticate/refresh-token");
|
|
61
|
+
return [4 /*yield*/, axios.post(url, {}, { headers: getAuthHeaders() })];
|
|
62
|
+
case 1:
|
|
63
|
+
response = _a.sent();
|
|
64
|
+
newToken = response.data.token;
|
|
65
|
+
currentSession = PHXFuncGetCookieSession();
|
|
66
|
+
// Lưu lại vào cookie phía client
|
|
67
|
+
currentSession === null || currentSession === void 0 ? true : delete currentSession.access_token;
|
|
68
|
+
saveCookiesClient({ value: __assign(__assign({}, currentSession), { access_token: newToken }) });
|
|
69
|
+
// Cập nhật cache
|
|
70
|
+
accessTokenCache = newToken;
|
|
71
|
+
// Lưu refresh token phía server nếu SSR
|
|
72
|
+
if (isServer) {
|
|
73
|
+
saveRefreshTokenServer(response);
|
|
74
|
+
}
|
|
75
|
+
return [2 /*return*/, newToken];
|
|
76
|
+
case 2:
|
|
77
|
+
err_1 = _a.sent();
|
|
78
|
+
if (!isServer) {
|
|
79
|
+
window.location.href = loginPage;
|
|
80
|
+
}
|
|
81
|
+
throw err_1;
|
|
82
|
+
case 3:
|
|
83
|
+
refreshingPromise = null;
|
|
84
|
+
return [7 /*endfinally*/];
|
|
85
|
+
case 4: return [2 /*return*/];
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}); });
|
|
89
|
+
}
|
|
90
|
+
return [2 /*return*/, refreshingPromise];
|
|
91
|
+
});
|
|
92
|
+
}); };
|
|
93
|
+
// Request interceptor: luôn thêm Authorization nếu có access_token
|
|
89
94
|
PHXAxiosInstance.interceptors.request.use(function (config) { return __awaiter(void 0, void 0, void 0, function () {
|
|
90
|
-
var
|
|
95
|
+
var token, session, err_2, fresh;
|
|
91
96
|
var _a;
|
|
92
97
|
return __generator(this, function (_b) {
|
|
93
98
|
switch (_b.label) {
|
|
94
99
|
case 0:
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (!
|
|
98
|
-
|
|
100
|
+
config.headers = config.headers || {};
|
|
101
|
+
token = accessTokenCache;
|
|
102
|
+
if (!token) {
|
|
103
|
+
session = PHXFuncGetCookieSession();
|
|
104
|
+
token = (session === null || session === void 0 ? void 0 : session.access_token) || null;
|
|
105
|
+
if (token)
|
|
106
|
+
accessTokenCache = token;
|
|
107
|
+
}
|
|
108
|
+
if (!token) return [3 /*break*/, 7];
|
|
109
|
+
config.headers.Authorization = "Bearer ".concat(token);
|
|
99
110
|
if (!isServer) return [3 /*break*/, 7];
|
|
100
111
|
_b.label = 1;
|
|
101
112
|
case 1:
|
|
102
113
|
_b.trys.push([1, 3, , 7]);
|
|
103
|
-
return [4 /*yield*/, axios.post("".concat(internalUrl, "/authen/authenticate"), {}, {
|
|
104
|
-
headers: __assign({ Authorization: "Bearer ".concat(authTokenCookie) }, getAuthHeaders())
|
|
105
|
-
})];
|
|
114
|
+
return [4 /*yield*/, axios.post("".concat(internalUrl, "/authen/authenticate"), {}, { headers: __assign({ Authorization: "Bearer ".concat(token) }, getAuthHeaders()) })];
|
|
106
115
|
case 2:
|
|
107
116
|
_b.sent();
|
|
108
117
|
return [3 /*break*/, 7];
|
|
@@ -111,8 +120,8 @@ PHXAxiosInstance.interceptors.request.use(function (config) { return __awaiter(v
|
|
|
111
120
|
if (!(((_a = err_2.response) === null || _a === void 0 ? void 0 : _a.status) === 401)) return [3 /*break*/, 5];
|
|
112
121
|
return [4 /*yield*/, refreshAccessToken()];
|
|
113
122
|
case 4:
|
|
114
|
-
|
|
115
|
-
config.headers.Authorization = "Bearer ".concat(
|
|
123
|
+
fresh = _b.sent();
|
|
124
|
+
config.headers.Authorization = "Bearer ".concat(fresh);
|
|
116
125
|
return [3 /*break*/, 6];
|
|
117
126
|
case 5: throw err_2;
|
|
118
127
|
case 6: return [3 /*break*/, 7];
|
|
@@ -120,44 +129,29 @@ PHXAxiosInstance.interceptors.request.use(function (config) { return __awaiter(v
|
|
|
120
129
|
}
|
|
121
130
|
});
|
|
122
131
|
}); });
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
// Response interceptor: bắt lỗi 401, gọi refresh và retry
|
|
133
|
+
PHXAxiosInstance.interceptors.response.use(function (res) { return res; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
|
|
134
|
+
var originalRequest, newToken, e_1;
|
|
125
135
|
var _a;
|
|
126
136
|
return __generator(this, function (_b) {
|
|
127
137
|
switch (_b.label) {
|
|
128
138
|
case 0:
|
|
129
139
|
originalRequest = error.config;
|
|
130
|
-
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/,
|
|
131
|
-
if (isRefreshing) {
|
|
132
|
-
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
133
|
-
failedQueue.push({
|
|
134
|
-
resolve: function (token) {
|
|
135
|
-
originalRequest.headers.Authorization = 'Bearer ' + token;
|
|
136
|
-
resolve(PHXAxiosInstance(originalRequest));
|
|
137
|
-
},
|
|
138
|
-
reject: function (err) { return reject(err); }
|
|
139
|
-
});
|
|
140
|
-
})];
|
|
141
|
-
}
|
|
140
|
+
if (!(((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 401 && !originalRequest._retry)) return [3 /*break*/, 4];
|
|
142
141
|
originalRequest._retry = true;
|
|
143
|
-
isRefreshing = true;
|
|
144
142
|
_b.label = 1;
|
|
145
143
|
case 1:
|
|
146
|
-
_b.trys.push([1, 3,
|
|
144
|
+
_b.trys.push([1, 3, , 4]);
|
|
147
145
|
return [4 /*yield*/, refreshAccessToken()];
|
|
148
146
|
case 2:
|
|
149
147
|
newToken = _b.sent();
|
|
150
|
-
|
|
148
|
+
originalRequest.headers = originalRequest.headers || {};
|
|
151
149
|
originalRequest.headers.Authorization = "Bearer ".concat(newToken);
|
|
152
150
|
return [2 /*return*/, PHXAxiosInstance(originalRequest)];
|
|
153
151
|
case 3:
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
case 4:
|
|
158
|
-
isRefreshing = false;
|
|
159
|
-
return [7 /*endfinally*/];
|
|
160
|
-
case 5: return [2 /*return*/, Promise.reject(error)];
|
|
152
|
+
e_1 = _b.sent();
|
|
153
|
+
return [2 /*return*/, Promise.reject(e_1)];
|
|
154
|
+
case 4: return [2 /*return*/, Promise.reject(error)];
|
|
161
155
|
}
|
|
162
156
|
});
|
|
163
157
|
}); });
|
|
@@ -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,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE/C,IAAI,
|
|
1
|
+
{"version":3,"file":"axiosInstance.js","sourceRoot":"","sources":["../../src/axiosInstance.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,16 +2,24 @@ import { COOKIE_SESSION_SIGN_IN } from '../../utils/constants';
|
|
|
2
2
|
import Cookies from 'js-cookie';
|
|
3
3
|
import { decryptCookie } from '../../helpers/helpers';
|
|
4
4
|
import { cookies } from 'next/headers';
|
|
5
|
+
import { getSession, setSession } from './sessionStore';
|
|
5
6
|
export default function PHXFuncGetCookieSession() {
|
|
6
7
|
var _a;
|
|
8
|
+
var sessionInfo;
|
|
9
|
+
var cachedSession = getSession();
|
|
10
|
+
if (cachedSession)
|
|
11
|
+
return cachedSession;
|
|
7
12
|
if (typeof window !== 'undefined') {
|
|
8
|
-
|
|
9
|
-
return sessionInfo ? decryptCookie(sessionInfo) : null;
|
|
13
|
+
sessionInfo = Cookies.get(COOKIE_SESSION_SIGN_IN);
|
|
10
14
|
}
|
|
11
15
|
else {
|
|
12
16
|
var cookieStore = cookies();
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
sessionInfo = (_a = cookieStore.get(COOKIE_SESSION_SIGN_IN)) === null || _a === void 0 ? void 0 : _a.value;
|
|
18
|
+
}
|
|
19
|
+
if (sessionInfo) {
|
|
20
|
+
var sessionInfoDecrypt = decryptCookie(sessionInfo);
|
|
21
|
+
setSession(sessionInfoDecrypt);
|
|
22
|
+
return sessionInfoDecrypt;
|
|
15
23
|
}
|
|
16
24
|
return null;
|
|
17
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCookieSession.js","sourceRoot":"","sources":["../../../../src/components/Func/getCookieSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"getCookieSession.js","sourceRoot":"","sources":["../../../../src/components/Func/getCookieSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAC9D,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAmCvD,MAAM,CAAC,OAAO,UAAU,uBAAuB;;IAC7C,IAAI,WAAW,CAAA;IACf,IAAM,aAAa,GAAG,UAAU,EAAE,CAAA;IAClC,IAAI,aAAa;QAAE,OAAO,aAAa,CAAA;IAEvC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;KAClD;SAAM;QACL,IAAM,WAAW,GAAG,OAAO,EAAE,CAAA;QAC7B,WAAW,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,0CAAE,KAAK,CAAA;KAC7D;IACD,IAAI,WAAW,EAAE;QACf,IAAM,kBAAkB,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;QACrD,UAAU,CAAC,kBAAkB,CAAC,CAAA;QAC9B,OAAO,kBAAkB,CAAA;KAC1B;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { __assign } from "tslib";
|
|
1
2
|
import { cookies } from 'next/headers';
|
|
2
3
|
import Cookies from 'js-cookie';
|
|
3
4
|
import { COOKIE_SESSION_SIGN_IN } from '../../utils/constants';
|
|
4
5
|
import { encryptDataSync } from '../../helpers/helpers';
|
|
6
|
+
import { getSession, setSession } from './sessionStore';
|
|
5
7
|
export default function saveCookiesClient(_a) {
|
|
6
8
|
var value = _a.value, _b = _a.remember, remember = _b === void 0 ? true : _b;
|
|
7
|
-
|
|
9
|
+
// update data session
|
|
10
|
+
var current = getSession() || {};
|
|
11
|
+
var newSession = __assign(__assign({}, current), value);
|
|
12
|
+
setSession(newSession);
|
|
13
|
+
var encrypted = encryptDataSync(newSession);
|
|
8
14
|
var isServer = typeof window === 'undefined';
|
|
9
15
|
if (isServer) {
|
|
10
16
|
// Server-side
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"saveCookiesClient.js","sourceRoot":"","sources":["../../../../src/components/Func/saveCookiesClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAwE;QAAtE,KAAK,WAAA,EAAE,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA;IAChE,IAAM,SAAS,GAAG,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"saveCookiesClient.js","sourceRoot":"","sources":["../../../../src/components/Func/saveCookiesClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEvD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAwE;QAAtE,KAAK,WAAA,EAAE,gBAAe,EAAf,QAAQ,mBAAG,IAAI,KAAA;IAChE,sBAAsB;IACtB,IAAM,OAAO,GAAG,UAAU,EAAE,IAAI,EAAE,CAAA;IAClC,IAAM,UAAU,yBAAQ,OAAO,GAAK,KAAK,CAAE,CAAA;IAC3C,UAAU,CAAC,UAAU,CAAC,CAAA;IAEtB,IAAM,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IAC7C,IAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,CAAA;IAE9C,IAAI,QAAQ,EAAE;QACZ,cAAc;QACd,IAAI;YACF,OAAO,EAAE,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,EAAE;gBAC/C,IAAI,EAAE,GAAG;gBACT,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,CAAC,CAAA;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;SACvE;KACF;SAAM;QACL,cAAc;QACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,EAAE;YAC7C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;YACnC,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;KACH;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
var sessionCache = null;
|
|
2
|
+
export function getSession() {
|
|
3
|
+
return sessionCache;
|
|
4
|
+
}
|
|
5
|
+
export function setSession(newSession) {
|
|
6
|
+
sessionCache = newSession;
|
|
7
|
+
}
|
|
8
|
+
export function clearSession() {
|
|
9
|
+
sessionCache = null;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=sessionStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionStore.js","sourceRoot":"","sources":["../../../../src/components/Func/sessionStore.ts"],"names":[],"mappings":"AAAA,IAAI,YAAY,GAA+B,IAAI,CAAA;AAEnD,MAAM,UAAU,UAAU;IACxB,OAAO,YAAY,CAAA;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAA+B;IACxD,YAAY,GAAG,UAAU,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,YAAY,GAAG,IAAI,CAAA;AACrB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "phx-react",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.942",
|
|
4
4
|
"description": "PHX REACT",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"@storybook/testing-library": "^0.0.14-next.2",
|
|
56
56
|
"@tailwindcss/forms": "^0.5.3",
|
|
57
57
|
"@testing-library/react": "^15.0.6",
|
|
58
|
+
"@types/async-lock": "^1.4.2",
|
|
58
59
|
"@types/crypto-js": "^4.2.2",
|
|
59
60
|
"@types/jest": "^29.5.11",
|
|
60
61
|
"@types/js-cookie": "^3.0.3",
|
|
@@ -95,6 +96,7 @@
|
|
|
95
96
|
]
|
|
96
97
|
},
|
|
97
98
|
"dependencies": {
|
|
99
|
+
"async-lock": "^1.4.1",
|
|
98
100
|
"axios": "^1.5.0",
|
|
99
101
|
"crypto-js": "^4.2.0",
|
|
100
102
|
"date-fns": "^2.30.0",
|