@fctc/interface-logic 3.8.8 → 3.8.10

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/configs.js CHANGED
@@ -2276,10 +2276,10 @@ var axiosClient = {
2276
2276
  timeout: 5e4,
2277
2277
  paramsSerializer: (params) => new URLSearchParams(params).toString()
2278
2278
  });
2279
- instance.interceptors.request.use(async (config2) => {
2280
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
2281
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
2282
- const actionToken = config2.headers["X-Action-Token"];
2279
+ instance.interceptors.request.use(async (configReq) => {
2280
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
2281
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
2282
+ const actionToken = configReq.headers["X-Action-Token"];
2283
2283
  let token = null;
2284
2284
  if (useActionToken && actionToken) {
2285
2285
  token = actionToken;
@@ -2288,20 +2288,115 @@ var axiosClient = {
2288
2288
  token = await getToken?.();
2289
2289
  }
2290
2290
  if (token) {
2291
- config2.headers["Authorization"] = `Bearer ${token}`;
2291
+ configReq.headers["Authorization"] = `Bearer ${token}`;
2292
2292
  }
2293
2293
  if (database) {
2294
- config2.headers["DATABASE"] = database;
2294
+ configReq.headers["DATABASE"] = database;
2295
2295
  }
2296
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
2297
- return config2;
2296
+ return configReq;
2298
2297
  }, Promise.reject);
2298
+ const buildRefreshUrl = () => {
2299
+ if (!config.refreshTokenEndpoint) {
2300
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2301
+ }
2302
+ const ep = String(config.refreshTokenEndpoint);
2303
+ if (/^https?:\/\//i.test(ep)) return ep;
2304
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
2305
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
2306
+ return `${cleanBase}${cleanEp}`;
2307
+ };
2308
+ instance.interceptors.response.use(
2309
+ (response) => handleResponse(response),
2310
+ async (error) => {
2311
+ const handleError3 = async (err) => {
2312
+ if (!err.response) return err;
2313
+ const { data } = err.response;
2314
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
2315
+ await clearAuthToken();
2316
+ }
2317
+ return data;
2318
+ };
2319
+ const originalRequest = error.config;
2320
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
2321
+ error.response.data.code
2322
+ )) {
2323
+ if (isRefreshing) {
2324
+ return new Promise(function(resolve, reject) {
2325
+ failedQueue.push({ resolve, reject });
2326
+ }).then((newToken) => {
2327
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
2328
+ originalRequest.data = updateTokenParamInOriginalRequest(
2329
+ originalRequest,
2330
+ newToken
2331
+ );
2332
+ return instance.request(originalRequest);
2333
+ }).catch(async (err) => {
2334
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
2335
+ await clearAuthToken();
2336
+ }
2337
+ });
2338
+ }
2339
+ const browserSession = await sessionStorage2.getBrowserSession();
2340
+ const refreshToken = await localStorage2.getRefreshToken();
2341
+ const accessTokenExp = await localStorage2.getAccessToken();
2342
+ isRefreshing = true;
2343
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
2344
+ await clearAuthToken();
2345
+ } else {
2346
+ const payload = Object.fromEntries(
2347
+ Object.entries({
2348
+ refresh_token: refreshToken,
2349
+ grant_type: "refresh_token",
2350
+ client_id: config.config.clientId,
2351
+ client_secret: config.config.clientSecret
2352
+ }).filter(([_, v]) => !!v)
2353
+ );
2354
+ const refreshUrl = buildRefreshUrl();
2355
+ return new Promise(function(resolve) {
2356
+ import_axios.default.post(refreshUrl, payload, {
2357
+ headers: {
2358
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2359
+ Authorization: `Bearer ${accessTokenExp}`
2360
+ }
2361
+ }).then(async (res) => {
2362
+ const data = res.data;
2363
+ await localStorage2.setToken(data.access_token);
2364
+ await localStorage2.setRefreshToken(data.refresh_token);
2365
+ import_axios.default.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
2366
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
2367
+ originalRequest.data = updateTokenParamInOriginalRequest(
2368
+ originalRequest,
2369
+ data.access_token
2370
+ );
2371
+ processQueue(null, data.access_token);
2372
+ resolve(instance.request(originalRequest));
2373
+ }).catch(async (err) => {
2374
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
2375
+ await clearAuthToken();
2376
+ }
2377
+ if (err && err.response) {
2378
+ const { error_code } = err.response?.data || {};
2379
+ const { code } = err;
2380
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
2381
+ await clearAuthToken();
2382
+ }
2383
+ }
2384
+ processQueue(err, null);
2385
+ }).finally(() => {
2386
+ isRefreshing = false;
2387
+ });
2388
+ });
2389
+ }
2390
+ }
2391
+ return Promise.reject(await handleError3(error));
2392
+ }
2393
+ );
2299
2394
  instance.interceptors.response.use(
2300
2395
  (response) => {
2301
2396
  return handleResponse(response);
2302
2397
  },
2303
2398
  async (error) => {
2304
- const handleError2 = async (error2) => {
2399
+ const handleError3 = async (error2) => {
2305
2400
  if (!error2.response) {
2306
2401
  return error2;
2307
2402
  }
@@ -2347,13 +2442,16 @@ var axiosClient = {
2347
2442
  }).filter(([_, value]) => !!value)
2348
2443
  );
2349
2444
  return new Promise(function(resolve) {
2350
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2351
- import_axios.default.post(`${config?.baseUrl}${refreshPath}`, payload, {
2352
- headers: {
2353
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2354
- Authorization: `Bearer ${accessTokenExp}`
2445
+ import_axios.default.post(
2446
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
2447
+ payload,
2448
+ {
2449
+ headers: {
2450
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2451
+ Authorization: `Bearer ${accessTokenExp}`
2452
+ }
2355
2453
  }
2356
- }).then(async (res) => {
2454
+ ).then(async (res) => {
2357
2455
  const data = res.data;
2358
2456
  await localStorage2.setToken(data.access_token);
2359
2457
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -2386,7 +2484,7 @@ var axiosClient = {
2386
2484
  });
2387
2485
  }
2388
2486
  }
2389
- return Promise.reject(await handleError2(error));
2487
+ return Promise.reject(await handleError3(error));
2390
2488
  }
2391
2489
  );
2392
2490
  const handleResponse = (res) => {
@@ -2395,6 +2493,19 @@ var axiosClient = {
2395
2493
  }
2396
2494
  return res;
2397
2495
  };
2496
+ const handleError2 = (error) => {
2497
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
2498
+ console.error("Request Timeout Error:", error);
2499
+ return "Request Timeout Error";
2500
+ } else if (error.isAxiosError && !error.response) {
2501
+ console.error("Network Error:", error);
2502
+ return "Network Error";
2503
+ } else {
2504
+ console.error("Other Error:", error?.response);
2505
+ const errorMessage = error?.response?.data?.message || "An error occurred";
2506
+ return { message: errorMessage, status: error?.response?.status };
2507
+ }
2508
+ };
2398
2509
  const clearAuthToken = async () => {
2399
2510
  await localStorage2.clearToken();
2400
2511
  if (typeof window !== "undefined") {
package/dist/configs.mjs CHANGED
@@ -2240,10 +2240,10 @@ var axiosClient = {
2240
2240
  timeout: 5e4,
2241
2241
  paramsSerializer: (params) => new URLSearchParams(params).toString()
2242
2242
  });
2243
- instance.interceptors.request.use(async (config2) => {
2244
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
2245
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
2246
- const actionToken = config2.headers["X-Action-Token"];
2243
+ instance.interceptors.request.use(async (configReq) => {
2244
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
2245
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
2246
+ const actionToken = configReq.headers["X-Action-Token"];
2247
2247
  let token = null;
2248
2248
  if (useActionToken && actionToken) {
2249
2249
  token = actionToken;
@@ -2252,20 +2252,115 @@ var axiosClient = {
2252
2252
  token = await getToken?.();
2253
2253
  }
2254
2254
  if (token) {
2255
- config2.headers["Authorization"] = `Bearer ${token}`;
2255
+ configReq.headers["Authorization"] = `Bearer ${token}`;
2256
2256
  }
2257
2257
  if (database) {
2258
- config2.headers["DATABASE"] = database;
2258
+ configReq.headers["DATABASE"] = database;
2259
2259
  }
2260
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
2261
- return config2;
2260
+ return configReq;
2262
2261
  }, Promise.reject);
2262
+ const buildRefreshUrl = () => {
2263
+ if (!config.refreshTokenEndpoint) {
2264
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2265
+ }
2266
+ const ep = String(config.refreshTokenEndpoint);
2267
+ if (/^https?:\/\//i.test(ep)) return ep;
2268
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
2269
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
2270
+ return `${cleanBase}${cleanEp}`;
2271
+ };
2272
+ instance.interceptors.response.use(
2273
+ (response) => handleResponse(response),
2274
+ async (error) => {
2275
+ const handleError3 = async (err) => {
2276
+ if (!err.response) return err;
2277
+ const { data } = err.response;
2278
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
2279
+ await clearAuthToken();
2280
+ }
2281
+ return data;
2282
+ };
2283
+ const originalRequest = error.config;
2284
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
2285
+ error.response.data.code
2286
+ )) {
2287
+ if (isRefreshing) {
2288
+ return new Promise(function(resolve, reject) {
2289
+ failedQueue.push({ resolve, reject });
2290
+ }).then((newToken) => {
2291
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
2292
+ originalRequest.data = updateTokenParamInOriginalRequest(
2293
+ originalRequest,
2294
+ newToken
2295
+ );
2296
+ return instance.request(originalRequest);
2297
+ }).catch(async (err) => {
2298
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
2299
+ await clearAuthToken();
2300
+ }
2301
+ });
2302
+ }
2303
+ const browserSession = await sessionStorage2.getBrowserSession();
2304
+ const refreshToken = await localStorage2.getRefreshToken();
2305
+ const accessTokenExp = await localStorage2.getAccessToken();
2306
+ isRefreshing = true;
2307
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
2308
+ await clearAuthToken();
2309
+ } else {
2310
+ const payload = Object.fromEntries(
2311
+ Object.entries({
2312
+ refresh_token: refreshToken,
2313
+ grant_type: "refresh_token",
2314
+ client_id: config.config.clientId,
2315
+ client_secret: config.config.clientSecret
2316
+ }).filter(([_, v]) => !!v)
2317
+ );
2318
+ const refreshUrl = buildRefreshUrl();
2319
+ return new Promise(function(resolve) {
2320
+ axios.post(refreshUrl, payload, {
2321
+ headers: {
2322
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2323
+ Authorization: `Bearer ${accessTokenExp}`
2324
+ }
2325
+ }).then(async (res) => {
2326
+ const data = res.data;
2327
+ await localStorage2.setToken(data.access_token);
2328
+ await localStorage2.setRefreshToken(data.refresh_token);
2329
+ axios.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
2330
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
2331
+ originalRequest.data = updateTokenParamInOriginalRequest(
2332
+ originalRequest,
2333
+ data.access_token
2334
+ );
2335
+ processQueue(null, data.access_token);
2336
+ resolve(instance.request(originalRequest));
2337
+ }).catch(async (err) => {
2338
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
2339
+ await clearAuthToken();
2340
+ }
2341
+ if (err && err.response) {
2342
+ const { error_code } = err.response?.data || {};
2343
+ const { code } = err;
2344
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
2345
+ await clearAuthToken();
2346
+ }
2347
+ }
2348
+ processQueue(err, null);
2349
+ }).finally(() => {
2350
+ isRefreshing = false;
2351
+ });
2352
+ });
2353
+ }
2354
+ }
2355
+ return Promise.reject(await handleError3(error));
2356
+ }
2357
+ );
2263
2358
  instance.interceptors.response.use(
2264
2359
  (response) => {
2265
2360
  return handleResponse(response);
2266
2361
  },
2267
2362
  async (error) => {
2268
- const handleError2 = async (error2) => {
2363
+ const handleError3 = async (error2) => {
2269
2364
  if (!error2.response) {
2270
2365
  return error2;
2271
2366
  }
@@ -2311,13 +2406,16 @@ var axiosClient = {
2311
2406
  }).filter(([_, value]) => !!value)
2312
2407
  );
2313
2408
  return new Promise(function(resolve) {
2314
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2315
- axios.post(`${config?.baseUrl}${refreshPath}`, payload, {
2316
- headers: {
2317
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2318
- Authorization: `Bearer ${accessTokenExp}`
2409
+ axios.post(
2410
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
2411
+ payload,
2412
+ {
2413
+ headers: {
2414
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2415
+ Authorization: `Bearer ${accessTokenExp}`
2416
+ }
2319
2417
  }
2320
- }).then(async (res) => {
2418
+ ).then(async (res) => {
2321
2419
  const data = res.data;
2322
2420
  await localStorage2.setToken(data.access_token);
2323
2421
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -2350,7 +2448,7 @@ var axiosClient = {
2350
2448
  });
2351
2449
  }
2352
2450
  }
2353
- return Promise.reject(await handleError2(error));
2451
+ return Promise.reject(await handleError3(error));
2354
2452
  }
2355
2453
  );
2356
2454
  const handleResponse = (res) => {
@@ -2359,6 +2457,19 @@ var axiosClient = {
2359
2457
  }
2360
2458
  return res;
2361
2459
  };
2460
+ const handleError2 = (error) => {
2461
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
2462
+ console.error("Request Timeout Error:", error);
2463
+ return "Request Timeout Error";
2464
+ } else if (error.isAxiosError && !error.response) {
2465
+ console.error("Network Error:", error);
2466
+ return "Network Error";
2467
+ } else {
2468
+ console.error("Other Error:", error?.response);
2469
+ const errorMessage = error?.response?.data?.message || "An error occurred";
2470
+ return { message: errorMessage, status: error?.response?.status };
2471
+ }
2472
+ };
2362
2473
  const clearAuthToken = async () => {
2363
2474
  await localStorage2.clearToken();
2364
2475
  if (typeof window !== "undefined") {
@@ -2278,10 +2278,10 @@ var axiosClient = {
2278
2278
  timeout: 5e4,
2279
2279
  paramsSerializer: (params) => new URLSearchParams(params).toString()
2280
2280
  });
2281
- instance.interceptors.request.use(async (config2) => {
2282
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
2283
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
2284
- const actionToken = config2.headers["X-Action-Token"];
2281
+ instance.interceptors.request.use(async (configReq) => {
2282
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
2283
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
2284
+ const actionToken = configReq.headers["X-Action-Token"];
2285
2285
  let token = null;
2286
2286
  if (useActionToken && actionToken) {
2287
2287
  token = actionToken;
@@ -2290,20 +2290,115 @@ var axiosClient = {
2290
2290
  token = await getToken?.();
2291
2291
  }
2292
2292
  if (token) {
2293
- config2.headers["Authorization"] = `Bearer ${token}`;
2293
+ configReq.headers["Authorization"] = `Bearer ${token}`;
2294
2294
  }
2295
2295
  if (database) {
2296
- config2.headers["DATABASE"] = database;
2296
+ configReq.headers["DATABASE"] = database;
2297
2297
  }
2298
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
2299
- return config2;
2298
+ return configReq;
2300
2299
  }, Promise.reject);
2300
+ const buildRefreshUrl = () => {
2301
+ if (!config.refreshTokenEndpoint) {
2302
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2303
+ }
2304
+ const ep = String(config.refreshTokenEndpoint);
2305
+ if (/^https?:\/\//i.test(ep)) return ep;
2306
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
2307
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
2308
+ return `${cleanBase}${cleanEp}`;
2309
+ };
2310
+ instance.interceptors.response.use(
2311
+ (response) => handleResponse(response),
2312
+ async (error) => {
2313
+ const handleError3 = async (err) => {
2314
+ if (!err.response) return err;
2315
+ const { data } = err.response;
2316
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
2317
+ await clearAuthToken();
2318
+ }
2319
+ return data;
2320
+ };
2321
+ const originalRequest = error.config;
2322
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
2323
+ error.response.data.code
2324
+ )) {
2325
+ if (isRefreshing) {
2326
+ return new Promise(function(resolve, reject) {
2327
+ failedQueue.push({ resolve, reject });
2328
+ }).then((newToken) => {
2329
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
2330
+ originalRequest.data = updateTokenParamInOriginalRequest(
2331
+ originalRequest,
2332
+ newToken
2333
+ );
2334
+ return instance.request(originalRequest);
2335
+ }).catch(async (err) => {
2336
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
2337
+ await clearAuthToken();
2338
+ }
2339
+ });
2340
+ }
2341
+ const browserSession = await sessionStorage2.getBrowserSession();
2342
+ const refreshToken = await localStorage2.getRefreshToken();
2343
+ const accessTokenExp = await localStorage2.getAccessToken();
2344
+ isRefreshing = true;
2345
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
2346
+ await clearAuthToken();
2347
+ } else {
2348
+ const payload = Object.fromEntries(
2349
+ Object.entries({
2350
+ refresh_token: refreshToken,
2351
+ grant_type: "refresh_token",
2352
+ client_id: config.config.clientId,
2353
+ client_secret: config.config.clientSecret
2354
+ }).filter(([_, v]) => !!v)
2355
+ );
2356
+ const refreshUrl = buildRefreshUrl();
2357
+ return new Promise(function(resolve) {
2358
+ import_axios.default.post(refreshUrl, payload, {
2359
+ headers: {
2360
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2361
+ Authorization: `Bearer ${accessTokenExp}`
2362
+ }
2363
+ }).then(async (res) => {
2364
+ const data = res.data;
2365
+ await localStorage2.setToken(data.access_token);
2366
+ await localStorage2.setRefreshToken(data.refresh_token);
2367
+ import_axios.default.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
2368
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
2369
+ originalRequest.data = updateTokenParamInOriginalRequest(
2370
+ originalRequest,
2371
+ data.access_token
2372
+ );
2373
+ processQueue(null, data.access_token);
2374
+ resolve(instance.request(originalRequest));
2375
+ }).catch(async (err) => {
2376
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
2377
+ await clearAuthToken();
2378
+ }
2379
+ if (err && err.response) {
2380
+ const { error_code } = err.response?.data || {};
2381
+ const { code } = err;
2382
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
2383
+ await clearAuthToken();
2384
+ }
2385
+ }
2386
+ processQueue(err, null);
2387
+ }).finally(() => {
2388
+ isRefreshing = false;
2389
+ });
2390
+ });
2391
+ }
2392
+ }
2393
+ return Promise.reject(await handleError3(error));
2394
+ }
2395
+ );
2301
2396
  instance.interceptors.response.use(
2302
2397
  (response) => {
2303
2398
  return handleResponse(response);
2304
2399
  },
2305
2400
  async (error) => {
2306
- const handleError2 = async (error2) => {
2401
+ const handleError3 = async (error2) => {
2307
2402
  if (!error2.response) {
2308
2403
  return error2;
2309
2404
  }
@@ -2349,13 +2444,16 @@ var axiosClient = {
2349
2444
  }).filter(([_, value]) => !!value)
2350
2445
  );
2351
2446
  return new Promise(function(resolve) {
2352
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2353
- import_axios.default.post(`${config?.baseUrl}${refreshPath}`, payload, {
2354
- headers: {
2355
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2356
- Authorization: `Bearer ${accessTokenExp}`
2447
+ import_axios.default.post(
2448
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
2449
+ payload,
2450
+ {
2451
+ headers: {
2452
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2453
+ Authorization: `Bearer ${accessTokenExp}`
2454
+ }
2357
2455
  }
2358
- }).then(async (res) => {
2456
+ ).then(async (res) => {
2359
2457
  const data = res.data;
2360
2458
  await localStorage2.setToken(data.access_token);
2361
2459
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -2388,7 +2486,7 @@ var axiosClient = {
2388
2486
  });
2389
2487
  }
2390
2488
  }
2391
- return Promise.reject(await handleError2(error));
2489
+ return Promise.reject(await handleError3(error));
2392
2490
  }
2393
2491
  );
2394
2492
  const handleResponse = (res) => {
@@ -2397,6 +2495,19 @@ var axiosClient = {
2397
2495
  }
2398
2496
  return res;
2399
2497
  };
2498
+ const handleError2 = (error) => {
2499
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
2500
+ console.error("Request Timeout Error:", error);
2501
+ return "Request Timeout Error";
2502
+ } else if (error.isAxiosError && !error.response) {
2503
+ console.error("Network Error:", error);
2504
+ return "Network Error";
2505
+ } else {
2506
+ console.error("Other Error:", error?.response);
2507
+ const errorMessage = error?.response?.data?.message || "An error occurred";
2508
+ return { message: errorMessage, status: error?.response?.status };
2509
+ }
2510
+ };
2400
2511
  const clearAuthToken = async () => {
2401
2512
  await localStorage2.clearToken();
2402
2513
  if (typeof window !== "undefined") {
@@ -2240,10 +2240,10 @@ var axiosClient = {
2240
2240
  timeout: 5e4,
2241
2241
  paramsSerializer: (params) => new URLSearchParams(params).toString()
2242
2242
  });
2243
- instance.interceptors.request.use(async (config2) => {
2244
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
2245
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
2246
- const actionToken = config2.headers["X-Action-Token"];
2243
+ instance.interceptors.request.use(async (configReq) => {
2244
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
2245
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
2246
+ const actionToken = configReq.headers["X-Action-Token"];
2247
2247
  let token = null;
2248
2248
  if (useActionToken && actionToken) {
2249
2249
  token = actionToken;
@@ -2252,20 +2252,115 @@ var axiosClient = {
2252
2252
  token = await getToken?.();
2253
2253
  }
2254
2254
  if (token) {
2255
- config2.headers["Authorization"] = `Bearer ${token}`;
2255
+ configReq.headers["Authorization"] = `Bearer ${token}`;
2256
2256
  }
2257
2257
  if (database) {
2258
- config2.headers["DATABASE"] = database;
2258
+ configReq.headers["DATABASE"] = database;
2259
2259
  }
2260
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
2261
- return config2;
2260
+ return configReq;
2262
2261
  }, Promise.reject);
2262
+ const buildRefreshUrl = () => {
2263
+ if (!config.refreshTokenEndpoint) {
2264
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2265
+ }
2266
+ const ep = String(config.refreshTokenEndpoint);
2267
+ if (/^https?:\/\//i.test(ep)) return ep;
2268
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
2269
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
2270
+ return `${cleanBase}${cleanEp}`;
2271
+ };
2272
+ instance.interceptors.response.use(
2273
+ (response) => handleResponse(response),
2274
+ async (error) => {
2275
+ const handleError3 = async (err) => {
2276
+ if (!err.response) return err;
2277
+ const { data } = err.response;
2278
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
2279
+ await clearAuthToken();
2280
+ }
2281
+ return data;
2282
+ };
2283
+ const originalRequest = error.config;
2284
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
2285
+ error.response.data.code
2286
+ )) {
2287
+ if (isRefreshing) {
2288
+ return new Promise(function(resolve, reject) {
2289
+ failedQueue.push({ resolve, reject });
2290
+ }).then((newToken) => {
2291
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
2292
+ originalRequest.data = updateTokenParamInOriginalRequest(
2293
+ originalRequest,
2294
+ newToken
2295
+ );
2296
+ return instance.request(originalRequest);
2297
+ }).catch(async (err) => {
2298
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
2299
+ await clearAuthToken();
2300
+ }
2301
+ });
2302
+ }
2303
+ const browserSession = await sessionStorage2.getBrowserSession();
2304
+ const refreshToken = await localStorage2.getRefreshToken();
2305
+ const accessTokenExp = await localStorage2.getAccessToken();
2306
+ isRefreshing = true;
2307
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
2308
+ await clearAuthToken();
2309
+ } else {
2310
+ const payload = Object.fromEntries(
2311
+ Object.entries({
2312
+ refresh_token: refreshToken,
2313
+ grant_type: "refresh_token",
2314
+ client_id: config.config.clientId,
2315
+ client_secret: config.config.clientSecret
2316
+ }).filter(([_, v]) => !!v)
2317
+ );
2318
+ const refreshUrl = buildRefreshUrl();
2319
+ return new Promise(function(resolve) {
2320
+ axios.post(refreshUrl, payload, {
2321
+ headers: {
2322
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2323
+ Authorization: `Bearer ${accessTokenExp}`
2324
+ }
2325
+ }).then(async (res) => {
2326
+ const data = res.data;
2327
+ await localStorage2.setToken(data.access_token);
2328
+ await localStorage2.setRefreshToken(data.refresh_token);
2329
+ axios.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
2330
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
2331
+ originalRequest.data = updateTokenParamInOriginalRequest(
2332
+ originalRequest,
2333
+ data.access_token
2334
+ );
2335
+ processQueue(null, data.access_token);
2336
+ resolve(instance.request(originalRequest));
2337
+ }).catch(async (err) => {
2338
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
2339
+ await clearAuthToken();
2340
+ }
2341
+ if (err && err.response) {
2342
+ const { error_code } = err.response?.data || {};
2343
+ const { code } = err;
2344
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
2345
+ await clearAuthToken();
2346
+ }
2347
+ }
2348
+ processQueue(err, null);
2349
+ }).finally(() => {
2350
+ isRefreshing = false;
2351
+ });
2352
+ });
2353
+ }
2354
+ }
2355
+ return Promise.reject(await handleError3(error));
2356
+ }
2357
+ );
2263
2358
  instance.interceptors.response.use(
2264
2359
  (response) => {
2265
2360
  return handleResponse(response);
2266
2361
  },
2267
2362
  async (error) => {
2268
- const handleError2 = async (error2) => {
2363
+ const handleError3 = async (error2) => {
2269
2364
  if (!error2.response) {
2270
2365
  return error2;
2271
2366
  }
@@ -2311,13 +2406,16 @@ var axiosClient = {
2311
2406
  }).filter(([_, value]) => !!value)
2312
2407
  );
2313
2408
  return new Promise(function(resolve) {
2314
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
2315
- axios.post(`${config?.baseUrl}${refreshPath}`, payload, {
2316
- headers: {
2317
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2318
- Authorization: `Bearer ${accessTokenExp}`
2409
+ axios.post(
2410
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
2411
+ payload,
2412
+ {
2413
+ headers: {
2414
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
2415
+ Authorization: `Bearer ${accessTokenExp}`
2416
+ }
2319
2417
  }
2320
- }).then(async (res) => {
2418
+ ).then(async (res) => {
2321
2419
  const data = res.data;
2322
2420
  await localStorage2.setToken(data.access_token);
2323
2421
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -2350,7 +2448,7 @@ var axiosClient = {
2350
2448
  });
2351
2449
  }
2352
2450
  }
2353
- return Promise.reject(await handleError2(error));
2451
+ return Promise.reject(await handleError3(error));
2354
2452
  }
2355
2453
  );
2356
2454
  const handleResponse = (res) => {
@@ -2359,6 +2457,19 @@ var axiosClient = {
2359
2457
  }
2360
2458
  return res;
2361
2459
  };
2460
+ const handleError2 = (error) => {
2461
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
2462
+ console.error("Request Timeout Error:", error);
2463
+ return "Request Timeout Error";
2464
+ } else if (error.isAxiosError && !error.response) {
2465
+ console.error("Network Error:", error);
2466
+ return "Network Error";
2467
+ } else {
2468
+ console.error("Other Error:", error?.response);
2469
+ const errorMessage = error?.response?.data?.message || "An error occurred";
2470
+ return { message: errorMessage, status: error?.response?.status };
2471
+ }
2472
+ };
2362
2473
  const clearAuthToken = async () => {
2363
2474
  await localStorage2.clearToken();
2364
2475
  if (typeof window !== "undefined") {
package/dist/provider.js CHANGED
@@ -5915,10 +5915,10 @@ var axiosClient = {
5915
5915
  timeout: 5e4,
5916
5916
  paramsSerializer: (params) => new URLSearchParams(params).toString()
5917
5917
  });
5918
- instance.interceptors.request.use(async (config2) => {
5919
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
5920
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
5921
- const actionToken = config2.headers["X-Action-Token"];
5918
+ instance.interceptors.request.use(async (configReq) => {
5919
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
5920
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
5921
+ const actionToken = configReq.headers["X-Action-Token"];
5922
5922
  let token = null;
5923
5923
  if (useActionToken && actionToken) {
5924
5924
  token = actionToken;
@@ -5927,20 +5927,115 @@ var axiosClient = {
5927
5927
  token = await getToken?.();
5928
5928
  }
5929
5929
  if (token) {
5930
- config2.headers["Authorization"] = `Bearer ${token}`;
5930
+ configReq.headers["Authorization"] = `Bearer ${token}`;
5931
5931
  }
5932
5932
  if (database) {
5933
- config2.headers["DATABASE"] = database;
5933
+ configReq.headers["DATABASE"] = database;
5934
5934
  }
5935
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
5936
- return config2;
5935
+ return configReq;
5937
5936
  }, Promise.reject);
5937
+ const buildRefreshUrl = () => {
5938
+ if (!config.refreshTokenEndpoint) {
5939
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
5940
+ }
5941
+ const ep = String(config.refreshTokenEndpoint);
5942
+ if (/^https?:\/\//i.test(ep)) return ep;
5943
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
5944
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
5945
+ return `${cleanBase}${cleanEp}`;
5946
+ };
5947
+ instance.interceptors.response.use(
5948
+ (response) => handleResponse(response),
5949
+ async (error) => {
5950
+ const handleError3 = async (err) => {
5951
+ if (!err.response) return err;
5952
+ const { data } = err.response;
5953
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
5954
+ await clearAuthToken();
5955
+ }
5956
+ return data;
5957
+ };
5958
+ const originalRequest = error.config;
5959
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
5960
+ error.response.data.code
5961
+ )) {
5962
+ if (isRefreshing) {
5963
+ return new Promise(function(resolve, reject) {
5964
+ failedQueue.push({ resolve, reject });
5965
+ }).then((newToken) => {
5966
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
5967
+ originalRequest.data = updateTokenParamInOriginalRequest(
5968
+ originalRequest,
5969
+ newToken
5970
+ );
5971
+ return instance.request(originalRequest);
5972
+ }).catch(async (err) => {
5973
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
5974
+ await clearAuthToken();
5975
+ }
5976
+ });
5977
+ }
5978
+ const browserSession = await sessionStorage2.getBrowserSession();
5979
+ const refreshToken = await localStorage2.getRefreshToken();
5980
+ const accessTokenExp = await localStorage2.getAccessToken();
5981
+ isRefreshing = true;
5982
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
5983
+ await clearAuthToken();
5984
+ } else {
5985
+ const payload = Object.fromEntries(
5986
+ Object.entries({
5987
+ refresh_token: refreshToken,
5988
+ grant_type: "refresh_token",
5989
+ client_id: config.config.clientId,
5990
+ client_secret: config.config.clientSecret
5991
+ }).filter(([_, v]) => !!v)
5992
+ );
5993
+ const refreshUrl = buildRefreshUrl();
5994
+ return new Promise(function(resolve) {
5995
+ import_axios.default.post(refreshUrl, payload, {
5996
+ headers: {
5997
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
5998
+ Authorization: `Bearer ${accessTokenExp}`
5999
+ }
6000
+ }).then(async (res) => {
6001
+ const data = res.data;
6002
+ await localStorage2.setToken(data.access_token);
6003
+ await localStorage2.setRefreshToken(data.refresh_token);
6004
+ import_axios.default.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
6005
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
6006
+ originalRequest.data = updateTokenParamInOriginalRequest(
6007
+ originalRequest,
6008
+ data.access_token
6009
+ );
6010
+ processQueue(null, data.access_token);
6011
+ resolve(instance.request(originalRequest));
6012
+ }).catch(async (err) => {
6013
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
6014
+ await clearAuthToken();
6015
+ }
6016
+ if (err && err.response) {
6017
+ const { error_code } = err.response?.data || {};
6018
+ const { code } = err;
6019
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
6020
+ await clearAuthToken();
6021
+ }
6022
+ }
6023
+ processQueue(err, null);
6024
+ }).finally(() => {
6025
+ isRefreshing = false;
6026
+ });
6027
+ });
6028
+ }
6029
+ }
6030
+ return Promise.reject(await handleError3(error));
6031
+ }
6032
+ );
5938
6033
  instance.interceptors.response.use(
5939
6034
  (response) => {
5940
6035
  return handleResponse(response);
5941
6036
  },
5942
6037
  async (error) => {
5943
- const handleError2 = async (error2) => {
6038
+ const handleError3 = async (error2) => {
5944
6039
  if (!error2.response) {
5945
6040
  return error2;
5946
6041
  }
@@ -5986,13 +6081,16 @@ var axiosClient = {
5986
6081
  }).filter(([_, value]) => !!value)
5987
6082
  );
5988
6083
  return new Promise(function(resolve) {
5989
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
5990
- import_axios.default.post(`${config?.baseUrl}${refreshPath}`, payload, {
5991
- headers: {
5992
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
5993
- Authorization: `Bearer ${accessTokenExp}`
6084
+ import_axios.default.post(
6085
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
6086
+ payload,
6087
+ {
6088
+ headers: {
6089
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
6090
+ Authorization: `Bearer ${accessTokenExp}`
6091
+ }
5994
6092
  }
5995
- }).then(async (res) => {
6093
+ ).then(async (res) => {
5996
6094
  const data = res.data;
5997
6095
  await localStorage2.setToken(data.access_token);
5998
6096
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -6025,7 +6123,7 @@ var axiosClient = {
6025
6123
  });
6026
6124
  }
6027
6125
  }
6028
- return Promise.reject(await handleError2(error));
6126
+ return Promise.reject(await handleError3(error));
6029
6127
  }
6030
6128
  );
6031
6129
  const handleResponse = (res) => {
@@ -6034,6 +6132,19 @@ var axiosClient = {
6034
6132
  }
6035
6133
  return res;
6036
6134
  };
6135
+ const handleError2 = (error) => {
6136
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
6137
+ console.error("Request Timeout Error:", error);
6138
+ return "Request Timeout Error";
6139
+ } else if (error.isAxiosError && !error.response) {
6140
+ console.error("Network Error:", error);
6141
+ return "Network Error";
6142
+ } else {
6143
+ console.error("Other Error:", error?.response);
6144
+ const errorMessage = error?.response?.data?.message || "An error occurred";
6145
+ return { message: errorMessage, status: error?.response?.status };
6146
+ }
6147
+ };
6037
6148
  const clearAuthToken = async () => {
6038
6149
  await localStorage2.clearToken();
6039
6150
  if (typeof window !== "undefined") {
package/dist/provider.mjs CHANGED
@@ -5872,10 +5872,10 @@ var axiosClient = {
5872
5872
  timeout: 5e4,
5873
5873
  paramsSerializer: (params) => new URLSearchParams(params).toString()
5874
5874
  });
5875
- instance.interceptors.request.use(async (config2) => {
5876
- const useRefreshToken = config2.headers["X-Use-Refresh-Token"] === "true";
5877
- const useActionToken = config2.headers["X-Use-Action-Token"] === "true";
5878
- const actionToken = config2.headers["X-Action-Token"];
5875
+ instance.interceptors.request.use(async (configReq) => {
5876
+ const useRefreshToken = configReq.headers["X-Use-Refresh-Token"] === "true";
5877
+ const useActionToken = configReq.headers["X-Use-Action-Token"] === "true";
5878
+ const actionToken = configReq.headers["X-Action-Token"];
5879
5879
  let token = null;
5880
5880
  if (useActionToken && actionToken) {
5881
5881
  token = actionToken;
@@ -5884,20 +5884,115 @@ var axiosClient = {
5884
5884
  token = await getToken?.();
5885
5885
  }
5886
5886
  if (token) {
5887
- config2.headers["Authorization"] = `Bearer ${token}`;
5887
+ configReq.headers["Authorization"] = `Bearer ${token}`;
5888
5888
  }
5889
5889
  if (database) {
5890
- config2.headers["DATABASE"] = database;
5890
+ configReq.headers["DATABASE"] = database;
5891
5891
  }
5892
- if (token) config2.headers["Authorization"] = `Bearer ${token}`;
5893
- return config2;
5892
+ return configReq;
5894
5893
  }, Promise.reject);
5894
+ const buildRefreshUrl = () => {
5895
+ if (!config.refreshTokenEndpoint) {
5896
+ return `${getBaseUrl(config?.baseUrl)}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
5897
+ }
5898
+ const ep = String(config.refreshTokenEndpoint);
5899
+ if (/^https?:\/\//i.test(ep)) return ep;
5900
+ const cleanBase = String(config?.baseUrl || "").replace(/\/$/, "");
5901
+ const cleanEp = ep.startsWith("/") ? ep : `/${ep}`;
5902
+ return `${cleanBase}${cleanEp}`;
5903
+ };
5904
+ instance.interceptors.response.use(
5905
+ (response) => handleResponse(response),
5906
+ async (error) => {
5907
+ const handleError3 = async (err) => {
5908
+ if (!err.response) return err;
5909
+ const { data } = err.response;
5910
+ if (data && data.code === 400 && ["invalid_grant"].includes(data.data?.error)) {
5911
+ await clearAuthToken();
5912
+ }
5913
+ return data;
5914
+ };
5915
+ const originalRequest = error.config;
5916
+ if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
5917
+ error.response.data.code
5918
+ )) {
5919
+ if (isRefreshing) {
5920
+ return new Promise(function(resolve, reject) {
5921
+ failedQueue.push({ resolve, reject });
5922
+ }).then((newToken) => {
5923
+ originalRequest.headers["Authorization"] = "Bearer " + newToken;
5924
+ originalRequest.data = updateTokenParamInOriginalRequest(
5925
+ originalRequest,
5926
+ newToken
5927
+ );
5928
+ return instance.request(originalRequest);
5929
+ }).catch(async (err) => {
5930
+ if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
5931
+ await clearAuthToken();
5932
+ }
5933
+ });
5934
+ }
5935
+ const browserSession = await sessionStorage2.getBrowserSession();
5936
+ const refreshToken = await localStorage2.getRefreshToken();
5937
+ const accessTokenExp = await localStorage2.getAccessToken();
5938
+ isRefreshing = true;
5939
+ if (!refreshToken && (!browserSession || browserSession == "unActive")) {
5940
+ await clearAuthToken();
5941
+ } else {
5942
+ const payload = Object.fromEntries(
5943
+ Object.entries({
5944
+ refresh_token: refreshToken,
5945
+ grant_type: "refresh_token",
5946
+ client_id: config.config.clientId,
5947
+ client_secret: config.config.clientSecret
5948
+ }).filter(([_, v]) => !!v)
5949
+ );
5950
+ const refreshUrl = buildRefreshUrl();
5951
+ return new Promise(function(resolve) {
5952
+ axios.post(refreshUrl, payload, {
5953
+ headers: {
5954
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
5955
+ Authorization: `Bearer ${accessTokenExp}`
5956
+ }
5957
+ }).then(async (res) => {
5958
+ const data = res.data;
5959
+ await localStorage2.setToken(data.access_token);
5960
+ await localStorage2.setRefreshToken(data.refresh_token);
5961
+ axios.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
5962
+ originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
5963
+ originalRequest.data = updateTokenParamInOriginalRequest(
5964
+ originalRequest,
5965
+ data.access_token
5966
+ );
5967
+ processQueue(null, data.access_token);
5968
+ resolve(instance.request(originalRequest));
5969
+ }).catch(async (err) => {
5970
+ if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_2FA_006")) {
5971
+ await clearAuthToken();
5972
+ }
5973
+ if (err && err.response) {
5974
+ const { error_code } = err.response?.data || {};
5975
+ const { code } = err;
5976
+ if (error_code === "AUTHEN_FAIL" || code === "ERR_2FA_006") {
5977
+ await clearAuthToken();
5978
+ }
5979
+ }
5980
+ processQueue(err, null);
5981
+ }).finally(() => {
5982
+ isRefreshing = false;
5983
+ });
5984
+ });
5985
+ }
5986
+ }
5987
+ return Promise.reject(await handleError3(error));
5988
+ }
5989
+ );
5895
5990
  instance.interceptors.response.use(
5896
5991
  (response) => {
5897
5992
  return handleResponse(response);
5898
5993
  },
5899
5994
  async (error) => {
5900
- const handleError2 = async (error2) => {
5995
+ const handleError3 = async (error2) => {
5901
5996
  if (!error2.response) {
5902
5997
  return error2;
5903
5998
  }
@@ -5943,13 +6038,16 @@ var axiosClient = {
5943
6038
  }).filter(([_, value]) => !!value)
5944
6039
  );
5945
6040
  return new Promise(function(resolve) {
5946
- const refreshPath = config.refreshTokenEndpoint ? config.refreshTokenEndpoint : `/api/v2${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`;
5947
- axios.post(`${config?.baseUrl}${refreshPath}`, payload, {
5948
- headers: {
5949
- "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
5950
- Authorization: `Bearer ${accessTokenExp}`
6041
+ axios.post(
6042
+ `${config?.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
6043
+ payload,
6044
+ {
6045
+ headers: {
6046
+ "Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
6047
+ Authorization: `Bearer ${accessTokenExp}`
6048
+ }
5951
6049
  }
5952
- }).then(async (res) => {
6050
+ ).then(async (res) => {
5953
6051
  const data = res.data;
5954
6052
  await localStorage2.setToken(data.access_token);
5955
6053
  await localStorage2.setRefreshToken(data.refresh_token);
@@ -5982,7 +6080,7 @@ var axiosClient = {
5982
6080
  });
5983
6081
  }
5984
6082
  }
5985
- return Promise.reject(await handleError2(error));
6083
+ return Promise.reject(await handleError3(error));
5986
6084
  }
5987
6085
  );
5988
6086
  const handleResponse = (res) => {
@@ -5991,6 +6089,19 @@ var axiosClient = {
5991
6089
  }
5992
6090
  return res;
5993
6091
  };
6092
+ const handleError2 = (error) => {
6093
+ if (error.isAxiosError && error.code === "ECONNABORTED") {
6094
+ console.error("Request Timeout Error:", error);
6095
+ return "Request Timeout Error";
6096
+ } else if (error.isAxiosError && !error.response) {
6097
+ console.error("Network Error:", error);
6098
+ return "Network Error";
6099
+ } else {
6100
+ console.error("Other Error:", error?.response);
6101
+ const errorMessage = error?.response?.data?.message || "An error occurred";
6102
+ return { message: errorMessage, status: error?.response?.status };
6103
+ }
6104
+ };
5994
6105
  const clearAuthToken = async () => {
5995
6106
  await localStorage2.clearToken();
5996
6107
  if (typeof window !== "undefined") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fctc/interface-logic",
3
- "version": "3.8.8",
3
+ "version": "3.8.10",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",