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.
@@ -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 isRefreshing = false;
12
- var failedQueue = [];
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
- // Server-side
35
- var cookieStore = (0, headers_1.cookies)();
36
- var cookieHeader = cookieStore
37
- .getAll()
38
- .map(function (_a) {
39
- var name = _a.name, value = _a.value;
40
- return "".concat(name, "=").concat(value);
41
- })
42
- .join('; ');
43
- return {
44
- Cookie: cookieHeader,
45
- hostname: (0, headers_1.headers)().get('origin')
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
- var refreshAccessToken = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
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 currentSession, authTokenCookie, err_2, newToken;
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
- currentSession = (0, getCookieSession_1["default"])();
100
- authTokenCookie = (currentSession === null || currentSession === void 0 ? void 0 : currentSession.access_token) || null;
101
- if (!authTokenCookie) return [3 /*break*/, 7];
102
- config.headers.Authorization = "Bearer ".concat(authTokenCookie);
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
- newToken = _b.sent();
119
- config.headers.Authorization = "Bearer ".concat(newToken);
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
- PHXAxiosInstance.interceptors.response.use(function (response) { return response; }, function (error) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
128
- var originalRequest, newToken, err_3;
136
+ // Response interceptor: bắt lỗi 401, gọi refresh 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*/, 5];
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, 4, 5]);
148
+ _b.trys.push([1, 3, , 4]);
151
149
  return [4 /*yield*/, refreshAccessToken()];
152
150
  case 2:
153
151
  newToken = _b.sent();
154
- processQueue(null, newToken);
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
- err_3 = _b.sent();
159
- processQueue(err_3, null);
160
- return [2 /*return*/, Promise.reject(err_3)];
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":"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"}
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
- var sessionInfo = js_cookie_1["default"].get(constants_1.COOKIE_SESSION_SIGN_IN);
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
- var sessionInfo = (_a = cookieStore.get(constants_1.COOKIE_SESSION_SIGN_IN)) === null || _a === void 0 ? void 0 : _a.value;
17
- return sessionInfo ? (0, helpers_1.decryptCookie)(sessionInfo) : null;
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;AAmCtC,SAAwB,uBAAuB;;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,IAAM,WAAW,GAAG,sBAAO,CAAC,GAAG,CAAC,kCAAsB,CAAC,CAAA;QACvD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,uBAAa,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACvD;SAAM;QACL,IAAM,WAAW,GAAG,IAAA,iBAAO,GAAE,CAAA;QAC7B,IAAM,WAAW,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,kCAAsB,CAAC,0CAAE,KAAK,CAAA;QAClE,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,uBAAa,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACvD;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAVD,6CAUC"}
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
- var encrypted = (0, helpers_1.encryptDataSync)(value);
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,KAAK,CAAC,CAAA;IACxC,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;AAzBD,uCAyBC"}
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,3 @@
1
+ export declare function getSession(): Record<string, any> | null;
2
+ export declare function setSession(newSession: Record<string, any>): void;
3
+ export declare function clearSession(): void;
@@ -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 isRefreshing = false;
9
- var failedQueue = [];
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
- // Server-side
31
- var cookieStore = cookies();
32
- var cookieHeader = cookieStore
33
- .getAll()
34
- .map(function (_a) {
35
- var name = _a.name, value = _a.value;
36
- return "".concat(name, "=").concat(value);
37
- })
38
- .join('; ');
39
- return {
40
- Cookie: cookieHeader,
41
- hostname: headers().get('origin')
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
- var refreshAccessToken = function () { return __awaiter(void 0, void 0, void 0, function () {
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 currentSession, authTokenCookie, err_2, newToken;
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
- currentSession = PHXFuncGetCookieSession();
96
- authTokenCookie = (currentSession === null || currentSession === void 0 ? void 0 : currentSession.access_token) || null;
97
- if (!authTokenCookie) return [3 /*break*/, 7];
98
- config.headers.Authorization = "Bearer ".concat(authTokenCookie);
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
- newToken = _b.sent();
115
- config.headers.Authorization = "Bearer ".concat(newToken);
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
- PHXAxiosInstance.interceptors.response.use(function (response) { return response; }, function (error) { return __awaiter(void 0, void 0, void 0, function () {
124
- var originalRequest, newToken, err_3;
132
+ // Response interceptor: bắt lỗi 401, gọi refresh 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*/, 5];
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, 4, 5]);
144
+ _b.trys.push([1, 3, , 4]);
147
145
  return [4 /*yield*/, refreshAccessToken()];
148
146
  case 2:
149
147
  newToken = _b.sent();
150
- processQueue(null, newToken);
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
- err_3 = _b.sent();
155
- processQueue(err_3, null);
156
- return [2 /*return*/, Promise.reject(err_3)];
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":"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"}
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
- var sessionInfo = Cookies.get(COOKIE_SESSION_SIGN_IN);
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
- var sessionInfo = (_a = cookieStore.get(COOKIE_SESSION_SIGN_IN)) === null || _a === void 0 ? void 0 : _a.value;
14
- return sessionInfo ? decryptCookie(sessionInfo) : null;
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;AAmCtC,MAAM,CAAC,OAAO,UAAU,uBAAuB;;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,IAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACvD,OAAO,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACvD;SAAM;QACL,IAAM,WAAW,GAAG,OAAO,EAAE,CAAA;QAC7B,IAAM,WAAW,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,0CAAE,KAAK,CAAA;QAClE,OAAO,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;KACvD;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
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
- var encrypted = encryptDataSync(value);
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,KAAK,CAAC,CAAA;IACxC,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"}
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,3 @@
1
+ export declare function getSession(): Record<string, any> | null;
2
+ export declare function setSession(newSession: Record<string, any>): void;
3
+ export declare function clearSession(): void;
@@ -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.940",
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",