@fctc/interface-logic 1.0.5 → 1.0.7
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/config.js +35 -5
- package/dist/config.mjs +35 -5
- package/dist/constants.d.mts +4 -1
- package/dist/constants.d.ts +4 -1
- package/dist/constants.js +3 -0
- package/dist/constants.mjs +3 -0
- package/dist/environment.d.mts +1 -0
- package/dist/environment.d.ts +1 -0
- package/dist/environment.js +37 -5
- package/dist/environment.mjs +37 -5
- package/dist/hook.d.mts +43 -1
- package/dist/hook.d.ts +43 -1
- package/dist/hook.js +429 -105
- package/dist/hook.mjs +380 -64
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +434 -108
- package/dist/index.mjs +380 -63
- package/dist/model.js +40 -5
- package/dist/model.mjs +40 -5
- package/dist/provider.js +150 -5
- package/dist/provider.mjs +150 -5
- package/dist/services.d.mts +32 -0
- package/dist/services.d.ts +32 -0
- package/dist/services.js +183 -5
- package/dist/services.mjs +183 -5
- package/dist/utils.d.mts +4 -1
- package/dist/utils.d.ts +4 -1
- package/dist/utils.js +21 -0
- package/dist/utils.mjs +20 -0
- package/package.json +2 -5
package/dist/config.js
CHANGED
@@ -2146,6 +2146,27 @@ function matchDomain(record, domain) {
|
|
2146
2146
|
return matchCondition(record, condStack.pop());
|
2147
2147
|
}
|
2148
2148
|
|
2149
|
+
// src/utils/function.ts
|
2150
|
+
var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
|
2151
|
+
if (!originalRequest.data) return originalRequest.data;
|
2152
|
+
if (typeof originalRequest.data === "string") {
|
2153
|
+
try {
|
2154
|
+
const parsedData = JSON.parse(originalRequest.data);
|
2155
|
+
if (parsedData.with_context && typeof parsedData.with_context === "object") {
|
2156
|
+
parsedData.with_context.token = newAccessToken;
|
2157
|
+
}
|
2158
|
+
return JSON.stringify(parsedData);
|
2159
|
+
} catch (e) {
|
2160
|
+
console.warn("Failed to parse originalRequest.data", e);
|
2161
|
+
return originalRequest.data;
|
2162
|
+
}
|
2163
|
+
}
|
2164
|
+
if (typeof originalRequest.data === "object" && originalRequest.data.with_context) {
|
2165
|
+
originalRequest.data.with_context.token = newAccessToken;
|
2166
|
+
}
|
2167
|
+
return originalRequest.data;
|
2168
|
+
};
|
2169
|
+
|
2149
2170
|
// src/utils/storage/local-storage.ts
|
2150
2171
|
var localStorageUtils = () => {
|
2151
2172
|
const setToken = async (access_token) => {
|
@@ -2209,7 +2230,8 @@ var axiosClient = {
|
|
2209
2230
|
});
|
2210
2231
|
instance.interceptors.request.use(
|
2211
2232
|
async (config2) => {
|
2212
|
-
const
|
2233
|
+
const useRefreshToken = config2.useRefreshToken;
|
2234
|
+
const token = useRefreshToken ? await localStorage2.getRefreshToken() : await localStorage2.getAccessToken();
|
2213
2235
|
if (token) {
|
2214
2236
|
config2.headers["Authorization"] = "Bearer " + token;
|
2215
2237
|
}
|
@@ -2235,7 +2257,7 @@ var axiosClient = {
|
|
2235
2257
|
return data;
|
2236
2258
|
};
|
2237
2259
|
const originalRequest = error.config;
|
2238
|
-
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401].includes(
|
2260
|
+
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
|
2239
2261
|
error.response.data.code
|
2240
2262
|
)) {
|
2241
2263
|
if (isRefreshing) {
|
@@ -2243,6 +2265,10 @@ var axiosClient = {
|
|
2243
2265
|
failedQueue.push({ resolve, reject });
|
2244
2266
|
}).then((token) => {
|
2245
2267
|
originalRequest.headers["Authorization"] = "Bearer " + token;
|
2268
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2269
|
+
originalRequest,
|
2270
|
+
token
|
2271
|
+
);
|
2246
2272
|
return instance.request(originalRequest);
|
2247
2273
|
}).catch(async (err) => {
|
2248
2274
|
if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
|
@@ -2267,11 +2293,11 @@ var axiosClient = {
|
|
2267
2293
|
);
|
2268
2294
|
return new Promise(function(resolve) {
|
2269
2295
|
import_axios.default.post(
|
2270
|
-
`${config.baseUrl}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2296
|
+
`${config.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2271
2297
|
payload,
|
2272
2298
|
{
|
2273
2299
|
headers: {
|
2274
|
-
"Content-Type": "multipart/form-data",
|
2300
|
+
"Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
|
2275
2301
|
Authorization: `Bearer ${accessTokenExp}`
|
2276
2302
|
}
|
2277
2303
|
}
|
@@ -2281,10 +2307,14 @@ var axiosClient = {
|
|
2281
2307
|
await localStorage2.setRefreshToken(data.refresh_token);
|
2282
2308
|
import_axios.default.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
|
2283
2309
|
originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
|
2310
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2311
|
+
originalRequest,
|
2312
|
+
data.access_token
|
2313
|
+
);
|
2284
2314
|
processQueue(null, data.access_token);
|
2285
2315
|
resolve(instance.request(originalRequest));
|
2286
2316
|
}).catch(async (err) => {
|
2287
|
-
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST")) {
|
2317
|
+
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST") || err?.error_code === "ERR_2FA_006") {
|
2288
2318
|
await clearAuthToken();
|
2289
2319
|
}
|
2290
2320
|
if (err && err.response) {
|
package/dist/config.mjs
CHANGED
@@ -2110,6 +2110,27 @@ function matchDomain(record, domain) {
|
|
2110
2110
|
return matchCondition(record, condStack.pop());
|
2111
2111
|
}
|
2112
2112
|
|
2113
|
+
// src/utils/function.ts
|
2114
|
+
var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
|
2115
|
+
if (!originalRequest.data) return originalRequest.data;
|
2116
|
+
if (typeof originalRequest.data === "string") {
|
2117
|
+
try {
|
2118
|
+
const parsedData = JSON.parse(originalRequest.data);
|
2119
|
+
if (parsedData.with_context && typeof parsedData.with_context === "object") {
|
2120
|
+
parsedData.with_context.token = newAccessToken;
|
2121
|
+
}
|
2122
|
+
return JSON.stringify(parsedData);
|
2123
|
+
} catch (e) {
|
2124
|
+
console.warn("Failed to parse originalRequest.data", e);
|
2125
|
+
return originalRequest.data;
|
2126
|
+
}
|
2127
|
+
}
|
2128
|
+
if (typeof originalRequest.data === "object" && originalRequest.data.with_context) {
|
2129
|
+
originalRequest.data.with_context.token = newAccessToken;
|
2130
|
+
}
|
2131
|
+
return originalRequest.data;
|
2132
|
+
};
|
2133
|
+
|
2113
2134
|
// src/utils/storage/local-storage.ts
|
2114
2135
|
var localStorageUtils = () => {
|
2115
2136
|
const setToken = async (access_token) => {
|
@@ -2173,7 +2194,8 @@ var axiosClient = {
|
|
2173
2194
|
});
|
2174
2195
|
instance.interceptors.request.use(
|
2175
2196
|
async (config2) => {
|
2176
|
-
const
|
2197
|
+
const useRefreshToken = config2.useRefreshToken;
|
2198
|
+
const token = useRefreshToken ? await localStorage2.getRefreshToken() : await localStorage2.getAccessToken();
|
2177
2199
|
if (token) {
|
2178
2200
|
config2.headers["Authorization"] = "Bearer " + token;
|
2179
2201
|
}
|
@@ -2199,7 +2221,7 @@ var axiosClient = {
|
|
2199
2221
|
return data;
|
2200
2222
|
};
|
2201
2223
|
const originalRequest = error.config;
|
2202
|
-
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401].includes(
|
2224
|
+
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
|
2203
2225
|
error.response.data.code
|
2204
2226
|
)) {
|
2205
2227
|
if (isRefreshing) {
|
@@ -2207,6 +2229,10 @@ var axiosClient = {
|
|
2207
2229
|
failedQueue.push({ resolve, reject });
|
2208
2230
|
}).then((token) => {
|
2209
2231
|
originalRequest.headers["Authorization"] = "Bearer " + token;
|
2232
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2233
|
+
originalRequest,
|
2234
|
+
token
|
2235
|
+
);
|
2210
2236
|
return instance.request(originalRequest);
|
2211
2237
|
}).catch(async (err) => {
|
2212
2238
|
if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
|
@@ -2231,11 +2257,11 @@ var axiosClient = {
|
|
2231
2257
|
);
|
2232
2258
|
return new Promise(function(resolve) {
|
2233
2259
|
axios.post(
|
2234
|
-
`${config.baseUrl}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2260
|
+
`${config.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2235
2261
|
payload,
|
2236
2262
|
{
|
2237
2263
|
headers: {
|
2238
|
-
"Content-Type": "multipart/form-data",
|
2264
|
+
"Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
|
2239
2265
|
Authorization: `Bearer ${accessTokenExp}`
|
2240
2266
|
}
|
2241
2267
|
}
|
@@ -2245,10 +2271,14 @@ var axiosClient = {
|
|
2245
2271
|
await localStorage2.setRefreshToken(data.refresh_token);
|
2246
2272
|
axios.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
|
2247
2273
|
originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
|
2274
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2275
|
+
originalRequest,
|
2276
|
+
data.access_token
|
2277
|
+
);
|
2248
2278
|
processQueue(null, data.access_token);
|
2249
2279
|
resolve(instance.request(originalRequest));
|
2250
2280
|
}).catch(async (err) => {
|
2251
|
-
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST")) {
|
2281
|
+
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST") || err?.error_code === "ERR_2FA_006") {
|
2252
2282
|
await clearAuthToken();
|
2253
2283
|
}
|
2254
2284
|
if (err && err.response) {
|
package/dist/constants.d.mts
CHANGED
@@ -45,7 +45,10 @@ declare enum UriConstants {
|
|
45
45
|
TOKEN = "/check_token",
|
46
46
|
CREATE_UPDATE_PATH = "/create_update",
|
47
47
|
TWOFA_METHOD_PATH = "/id/api/v2/call",
|
48
|
-
SIGNIN_SSO = "/signin-sso/oauth"
|
48
|
+
SIGNIN_SSO = "/signin-sso/oauth",
|
49
|
+
GRANT_ACCESS = "/grant-access",
|
50
|
+
TOKEN_BY_CODE = "/token",
|
51
|
+
LOGOUT = "/logout"
|
49
52
|
}
|
50
53
|
|
51
54
|
declare enum FieldTypeConstants {
|
package/dist/constants.d.ts
CHANGED
@@ -45,7 +45,10 @@ declare enum UriConstants {
|
|
45
45
|
TOKEN = "/check_token",
|
46
46
|
CREATE_UPDATE_PATH = "/create_update",
|
47
47
|
TWOFA_METHOD_PATH = "/id/api/v2/call",
|
48
|
-
SIGNIN_SSO = "/signin-sso/oauth"
|
48
|
+
SIGNIN_SSO = "/signin-sso/oauth",
|
49
|
+
GRANT_ACCESS = "/grant-access",
|
50
|
+
TOKEN_BY_CODE = "/token",
|
51
|
+
LOGOUT = "/logout"
|
49
52
|
}
|
50
53
|
|
51
54
|
declare enum FieldTypeConstants {
|
package/dist/constants.js
CHANGED
@@ -89,6 +89,9 @@ var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
|
|
89
89
|
UriConstants2["CREATE_UPDATE_PATH"] = `/create_update`;
|
90
90
|
UriConstants2["TWOFA_METHOD_PATH"] = `/id/api/v2/call`;
|
91
91
|
UriConstants2["SIGNIN_SSO"] = `/signin-sso/oauth`;
|
92
|
+
UriConstants2["GRANT_ACCESS"] = "/grant-access";
|
93
|
+
UriConstants2["TOKEN_BY_CODE"] = "/token";
|
94
|
+
UriConstants2["LOGOUT"] = "/logout";
|
92
95
|
return UriConstants2;
|
93
96
|
})(UriConstants || {});
|
94
97
|
|
package/dist/constants.mjs
CHANGED
@@ -51,6 +51,9 @@ var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
|
|
51
51
|
UriConstants2["CREATE_UPDATE_PATH"] = `/create_update`;
|
52
52
|
UriConstants2["TWOFA_METHOD_PATH"] = `/id/api/v2/call`;
|
53
53
|
UriConstants2["SIGNIN_SSO"] = `/signin-sso/oauth`;
|
54
|
+
UriConstants2["GRANT_ACCESS"] = "/grant-access";
|
55
|
+
UriConstants2["TOKEN_BY_CODE"] = "/token";
|
56
|
+
UriConstants2["LOGOUT"] = "/logout";
|
54
57
|
return UriConstants2;
|
55
58
|
})(UriConstants || {});
|
56
59
|
|
package/dist/environment.d.mts
CHANGED
@@ -21,6 +21,7 @@ declare class EnvStore {
|
|
21
21
|
db?: string;
|
22
22
|
localStorageUtils?: any;
|
23
23
|
sessionStorageUtils?: any;
|
24
|
+
refreshTokenEndpoint?: string;
|
24
25
|
constructor(envStore: EnhancedStore, localStorageUtils?: any, sessionStorageUtils?: any);
|
25
26
|
setup(): void;
|
26
27
|
setupEnv(envConfig: EnvStore): void;
|
package/dist/environment.d.ts
CHANGED
@@ -21,6 +21,7 @@ declare class EnvStore {
|
|
21
21
|
db?: string;
|
22
22
|
localStorageUtils?: any;
|
23
23
|
sessionStorageUtils?: any;
|
24
|
+
refreshTokenEndpoint?: string;
|
24
25
|
constructor(envStore: EnhancedStore, localStorageUtils?: any, sessionStorageUtils?: any);
|
25
26
|
setup(): void;
|
26
27
|
setupEnv(envConfig: EnvStore): void;
|
package/dist/environment.js
CHANGED
@@ -2149,6 +2149,27 @@ function matchDomain(record, domain) {
|
|
2149
2149
|
return matchCondition(record, condStack.pop());
|
2150
2150
|
}
|
2151
2151
|
|
2152
|
+
// src/utils/function.ts
|
2153
|
+
var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
|
2154
|
+
if (!originalRequest.data) return originalRequest.data;
|
2155
|
+
if (typeof originalRequest.data === "string") {
|
2156
|
+
try {
|
2157
|
+
const parsedData = JSON.parse(originalRequest.data);
|
2158
|
+
if (parsedData.with_context && typeof parsedData.with_context === "object") {
|
2159
|
+
parsedData.with_context.token = newAccessToken;
|
2160
|
+
}
|
2161
|
+
return JSON.stringify(parsedData);
|
2162
|
+
} catch (e) {
|
2163
|
+
console.warn("Failed to parse originalRequest.data", e);
|
2164
|
+
return originalRequest.data;
|
2165
|
+
}
|
2166
|
+
}
|
2167
|
+
if (typeof originalRequest.data === "object" && originalRequest.data.with_context) {
|
2168
|
+
originalRequest.data.with_context.token = newAccessToken;
|
2169
|
+
}
|
2170
|
+
return originalRequest.data;
|
2171
|
+
};
|
2172
|
+
|
2152
2173
|
// src/utils/storage/local-storage.ts
|
2153
2174
|
var localStorageUtils = () => {
|
2154
2175
|
const setToken = async (access_token) => {
|
@@ -2212,7 +2233,8 @@ var axiosClient = {
|
|
2212
2233
|
});
|
2213
2234
|
instance.interceptors.request.use(
|
2214
2235
|
async (config2) => {
|
2215
|
-
const
|
2236
|
+
const useRefreshToken = config2.useRefreshToken;
|
2237
|
+
const token = useRefreshToken ? await localStorage2.getRefreshToken() : await localStorage2.getAccessToken();
|
2216
2238
|
if (token) {
|
2217
2239
|
config2.headers["Authorization"] = "Bearer " + token;
|
2218
2240
|
}
|
@@ -2238,7 +2260,7 @@ var axiosClient = {
|
|
2238
2260
|
return data;
|
2239
2261
|
};
|
2240
2262
|
const originalRequest = error.config;
|
2241
|
-
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401].includes(
|
2263
|
+
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
|
2242
2264
|
error.response.data.code
|
2243
2265
|
)) {
|
2244
2266
|
if (isRefreshing) {
|
@@ -2246,6 +2268,10 @@ var axiosClient = {
|
|
2246
2268
|
failedQueue.push({ resolve, reject });
|
2247
2269
|
}).then((token) => {
|
2248
2270
|
originalRequest.headers["Authorization"] = "Bearer " + token;
|
2271
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2272
|
+
originalRequest,
|
2273
|
+
token
|
2274
|
+
);
|
2249
2275
|
return instance.request(originalRequest);
|
2250
2276
|
}).catch(async (err) => {
|
2251
2277
|
if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
|
@@ -2270,11 +2296,11 @@ var axiosClient = {
|
|
2270
2296
|
);
|
2271
2297
|
return new Promise(function(resolve) {
|
2272
2298
|
import_axios.default.post(
|
2273
|
-
`${config.baseUrl}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2299
|
+
`${config.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2274
2300
|
payload,
|
2275
2301
|
{
|
2276
2302
|
headers: {
|
2277
|
-
"Content-Type": "multipart/form-data",
|
2303
|
+
"Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
|
2278
2304
|
Authorization: `Bearer ${accessTokenExp}`
|
2279
2305
|
}
|
2280
2306
|
}
|
@@ -2284,10 +2310,14 @@ var axiosClient = {
|
|
2284
2310
|
await localStorage2.setRefreshToken(data.refresh_token);
|
2285
2311
|
import_axios.default.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
|
2286
2312
|
originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
|
2313
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2314
|
+
originalRequest,
|
2315
|
+
data.access_token
|
2316
|
+
);
|
2287
2317
|
processQueue(null, data.access_token);
|
2288
2318
|
resolve(instance.request(originalRequest));
|
2289
2319
|
}).catch(async (err) => {
|
2290
|
-
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST")) {
|
2320
|
+
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST") || err?.error_code === "ERR_2FA_006") {
|
2291
2321
|
await clearAuthToken();
|
2292
2322
|
}
|
2293
2323
|
if (err && err.response) {
|
@@ -2980,6 +3010,7 @@ var EnvStore = class {
|
|
2980
3010
|
db;
|
2981
3011
|
localStorageUtils;
|
2982
3012
|
sessionStorageUtils;
|
3013
|
+
refreshTokenEndpoint;
|
2983
3014
|
constructor(envStore2, localStorageUtils2, sessionStorageUtils2) {
|
2984
3015
|
this.envStore = envStore2;
|
2985
3016
|
this.localStorageUtils = localStorageUtils2;
|
@@ -2996,6 +3027,7 @@ var EnvStore = class {
|
|
2996
3027
|
this.companies = env2?.companies || [];
|
2997
3028
|
this.user = env2?.user;
|
2998
3029
|
this.db = env2?.db;
|
3030
|
+
this.refreshTokenEndpoint = env2?.refreshTokenEndpoint;
|
2999
3031
|
}
|
3000
3032
|
setupEnv(envConfig) {
|
3001
3033
|
const dispatch = this.envStore.dispatch;
|
package/dist/environment.mjs
CHANGED
@@ -2110,6 +2110,27 @@ function matchDomain(record, domain) {
|
|
2110
2110
|
return matchCondition(record, condStack.pop());
|
2111
2111
|
}
|
2112
2112
|
|
2113
|
+
// src/utils/function.ts
|
2114
|
+
var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
|
2115
|
+
if (!originalRequest.data) return originalRequest.data;
|
2116
|
+
if (typeof originalRequest.data === "string") {
|
2117
|
+
try {
|
2118
|
+
const parsedData = JSON.parse(originalRequest.data);
|
2119
|
+
if (parsedData.with_context && typeof parsedData.with_context === "object") {
|
2120
|
+
parsedData.with_context.token = newAccessToken;
|
2121
|
+
}
|
2122
|
+
return JSON.stringify(parsedData);
|
2123
|
+
} catch (e) {
|
2124
|
+
console.warn("Failed to parse originalRequest.data", e);
|
2125
|
+
return originalRequest.data;
|
2126
|
+
}
|
2127
|
+
}
|
2128
|
+
if (typeof originalRequest.data === "object" && originalRequest.data.with_context) {
|
2129
|
+
originalRequest.data.with_context.token = newAccessToken;
|
2130
|
+
}
|
2131
|
+
return originalRequest.data;
|
2132
|
+
};
|
2133
|
+
|
2113
2134
|
// src/utils/storage/local-storage.ts
|
2114
2135
|
var localStorageUtils = () => {
|
2115
2136
|
const setToken = async (access_token) => {
|
@@ -2173,7 +2194,8 @@ var axiosClient = {
|
|
2173
2194
|
});
|
2174
2195
|
instance.interceptors.request.use(
|
2175
2196
|
async (config2) => {
|
2176
|
-
const
|
2197
|
+
const useRefreshToken = config2.useRefreshToken;
|
2198
|
+
const token = useRefreshToken ? await localStorage2.getRefreshToken() : await localStorage2.getAccessToken();
|
2177
2199
|
if (token) {
|
2178
2200
|
config2.headers["Authorization"] = "Bearer " + token;
|
2179
2201
|
}
|
@@ -2199,7 +2221,7 @@ var axiosClient = {
|
|
2199
2221
|
return data;
|
2200
2222
|
};
|
2201
2223
|
const originalRequest = error.config;
|
2202
|
-
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401].includes(
|
2224
|
+
if ((error.response?.status === 403 || error.response?.status === 401 || error.response?.status === 404) && ["TOKEN_EXPIRED", "AUTHEN_FAIL", 401, "ERR_2FA_006"].includes(
|
2203
2225
|
error.response.data.code
|
2204
2226
|
)) {
|
2205
2227
|
if (isRefreshing) {
|
@@ -2207,6 +2229,10 @@ var axiosClient = {
|
|
2207
2229
|
failedQueue.push({ resolve, reject });
|
2208
2230
|
}).then((token) => {
|
2209
2231
|
originalRequest.headers["Authorization"] = "Bearer " + token;
|
2232
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2233
|
+
originalRequest,
|
2234
|
+
token
|
2235
|
+
);
|
2210
2236
|
return instance.request(originalRequest);
|
2211
2237
|
}).catch(async (err) => {
|
2212
2238
|
if ((err.response?.status === 400 || err.response?.status === 401) && ["invalid_grant"].includes(err.response.data.error)) {
|
@@ -2231,11 +2257,11 @@ var axiosClient = {
|
|
2231
2257
|
);
|
2232
2258
|
return new Promise(function(resolve) {
|
2233
2259
|
axios.post(
|
2234
|
-
`${config.baseUrl}${"/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2260
|
+
`${config.baseUrl}${config.refreshTokenEndpoint ?? "/authentication/oauth2/token" /* AUTH_TOKEN_PATH */}`,
|
2235
2261
|
payload,
|
2236
2262
|
{
|
2237
2263
|
headers: {
|
2238
|
-
"Content-Type": "multipart/form-data",
|
2264
|
+
"Content-Type": config.refreshTokenEndpoint ? "application/x-www-form-urlencoded" : "multipart/form-data",
|
2239
2265
|
Authorization: `Bearer ${accessTokenExp}`
|
2240
2266
|
}
|
2241
2267
|
}
|
@@ -2245,10 +2271,14 @@ var axiosClient = {
|
|
2245
2271
|
await localStorage2.setRefreshToken(data.refresh_token);
|
2246
2272
|
axios.defaults.headers.common["Authorization"] = "Bearer " + data.access_token;
|
2247
2273
|
originalRequest.headers["Authorization"] = "Bearer " + data.access_token;
|
2274
|
+
originalRequest.data = updateTokenParamInOriginalRequest(
|
2275
|
+
originalRequest,
|
2276
|
+
data.access_token
|
2277
|
+
);
|
2248
2278
|
processQueue(null, data.access_token);
|
2249
2279
|
resolve(instance.request(originalRequest));
|
2250
2280
|
}).catch(async (err) => {
|
2251
|
-
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST")) {
|
2281
|
+
if (err && (err?.error_code === "AUTHEN_FAIL" || err?.error_code === "TOKEN_EXPIRED" || err?.error_code === "TOKEN_INCORRECT" || err?.code === "ERR_BAD_REQUEST") || err?.error_code === "ERR_2FA_006") {
|
2252
2282
|
await clearAuthToken();
|
2253
2283
|
}
|
2254
2284
|
if (err && err.response) {
|
@@ -2941,6 +2971,7 @@ var EnvStore = class {
|
|
2941
2971
|
db;
|
2942
2972
|
localStorageUtils;
|
2943
2973
|
sessionStorageUtils;
|
2974
|
+
refreshTokenEndpoint;
|
2944
2975
|
constructor(envStore2, localStorageUtils2, sessionStorageUtils2) {
|
2945
2976
|
this.envStore = envStore2;
|
2946
2977
|
this.localStorageUtils = localStorageUtils2;
|
@@ -2957,6 +2988,7 @@ var EnvStore = class {
|
|
2957
2988
|
this.companies = env2?.companies || [];
|
2958
2989
|
this.user = env2?.user;
|
2959
2990
|
this.db = env2?.db;
|
2991
|
+
this.refreshTokenEndpoint = env2?.refreshTokenEndpoint;
|
2960
2992
|
}
|
2961
2993
|
setupEnv(envConfig) {
|
2962
2994
|
const dispatch = this.envStore.dispatch;
|
package/dist/hook.d.mts
CHANGED
@@ -36,6 +36,12 @@ declare const useResetPasswordSSO: () => _tanstack_react_query.UseMutationResult
|
|
36
36
|
|
37
37
|
declare const useUpdatePassword: () => _tanstack_react_query.UseMutationResult<any, Error, updatePasswordBody, unknown>;
|
38
38
|
|
39
|
+
declare const useLogout: () => _tanstack_react_query.UseMutationResult<any, Error, string, unknown>;
|
40
|
+
|
41
|
+
declare const useGetAccessByCode: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
42
|
+
code: string;
|
43
|
+
}, unknown>;
|
44
|
+
|
39
45
|
declare const useGetCompanyInfo: () => _tanstack_react_query.UseMutationResult<any, Error, number, unknown>;
|
40
46
|
|
41
47
|
declare const useGetCurrentCompany: () => _tanstack_react_query.UseMutationResult<any, Error, void, unknown>;
|
@@ -292,4 +298,40 @@ declare const useGet2FAMethods: () => _tanstack_react_query.UseMutationResult<an
|
|
292
298
|
with_context: any;
|
293
299
|
}, unknown>;
|
294
300
|
|
295
|
-
|
301
|
+
declare const useGetFieldsViewSecurity: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
302
|
+
method: string;
|
303
|
+
token: string;
|
304
|
+
views: any;
|
305
|
+
}, unknown>;
|
306
|
+
|
307
|
+
declare const useGrantAccess: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
308
|
+
redirect_uri: string;
|
309
|
+
state: string;
|
310
|
+
client_id: string;
|
311
|
+
scopes: string[];
|
312
|
+
}, unknown>;
|
313
|
+
|
314
|
+
declare const useRemoveTotpSetup: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
315
|
+
method: string;
|
316
|
+
token: string;
|
317
|
+
}, unknown>;
|
318
|
+
|
319
|
+
declare const useRequestSetupTotp: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
320
|
+
method: string;
|
321
|
+
token: string;
|
322
|
+
}, unknown>;
|
323
|
+
|
324
|
+
declare const useSettingsWebRead2fa: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
325
|
+
method: string;
|
326
|
+
model: string;
|
327
|
+
kwargs: any;
|
328
|
+
token: string;
|
329
|
+
}, unknown>;
|
330
|
+
|
331
|
+
declare const useVerifyTotp: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
332
|
+
method: string;
|
333
|
+
action_token: string;
|
334
|
+
code: string;
|
335
|
+
}, unknown>;
|
336
|
+
|
337
|
+
export { useButton, useChangeStatus, useDelete, useDeleteComment, useDuplicateRecord, useExecuteImport, useExportExcel, useForgotPassword, useForgotPasswordSSO, useGet2FAMethods, useGetAccessByCode, useGetActionDetail, useGetAll, useGetCalendar, useGetComment, useGetCompanyInfo, useGetConversionRate, useGetCurrency, useGetCurrentCompany, useGetDetail, useGetFieldExport, useGetFieldOnChange, useGetFieldsViewSecurity, useGetFileExcel, useGetFormView, useGetGroups, useGetImage, useGetListCompany, useGetListData, useGetListMyBankAccount, useGetMenu, useGetPrintReport, useGetProGressBar, useGetProfile, useGetProvider, useGetResequence, useGetUser, useGetView, useGrantAccess, useIsValidToken, useLoadAction, useLoadMessage, useLoginCredential, useLoginSocial, useLogout, useModel, useOdooDataTransform, useOnChangeForm, useParsePreview, usePrint, useRemoveRow, useRemoveTotpSetup, useRequestSetupTotp, useResetPassword, useResetPasswordSSO, useRunAction, useSave, useSendComment, useSettingsWebRead2fa, useSignInSSO, useSwitchLocale, useUpdatePassword, useUploadFile, useUploadIdFile, useUploadImage, useVerify2FA, useVerifyTotp };
|
package/dist/hook.d.ts
CHANGED
@@ -36,6 +36,12 @@ declare const useResetPasswordSSO: () => _tanstack_react_query.UseMutationResult
|
|
36
36
|
|
37
37
|
declare const useUpdatePassword: () => _tanstack_react_query.UseMutationResult<any, Error, updatePasswordBody, unknown>;
|
38
38
|
|
39
|
+
declare const useLogout: () => _tanstack_react_query.UseMutationResult<any, Error, string, unknown>;
|
40
|
+
|
41
|
+
declare const useGetAccessByCode: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
42
|
+
code: string;
|
43
|
+
}, unknown>;
|
44
|
+
|
39
45
|
declare const useGetCompanyInfo: () => _tanstack_react_query.UseMutationResult<any, Error, number, unknown>;
|
40
46
|
|
41
47
|
declare const useGetCurrentCompany: () => _tanstack_react_query.UseMutationResult<any, Error, void, unknown>;
|
@@ -292,4 +298,40 @@ declare const useGet2FAMethods: () => _tanstack_react_query.UseMutationResult<an
|
|
292
298
|
with_context: any;
|
293
299
|
}, unknown>;
|
294
300
|
|
295
|
-
|
301
|
+
declare const useGetFieldsViewSecurity: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
302
|
+
method: string;
|
303
|
+
token: string;
|
304
|
+
views: any;
|
305
|
+
}, unknown>;
|
306
|
+
|
307
|
+
declare const useGrantAccess: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
308
|
+
redirect_uri: string;
|
309
|
+
state: string;
|
310
|
+
client_id: string;
|
311
|
+
scopes: string[];
|
312
|
+
}, unknown>;
|
313
|
+
|
314
|
+
declare const useRemoveTotpSetup: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
315
|
+
method: string;
|
316
|
+
token: string;
|
317
|
+
}, unknown>;
|
318
|
+
|
319
|
+
declare const useRequestSetupTotp: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
320
|
+
method: string;
|
321
|
+
token: string;
|
322
|
+
}, unknown>;
|
323
|
+
|
324
|
+
declare const useSettingsWebRead2fa: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
325
|
+
method: string;
|
326
|
+
model: string;
|
327
|
+
kwargs: any;
|
328
|
+
token: string;
|
329
|
+
}, unknown>;
|
330
|
+
|
331
|
+
declare const useVerifyTotp: () => _tanstack_react_query.UseMutationResult<any, Error, {
|
332
|
+
method: string;
|
333
|
+
action_token: string;
|
334
|
+
code: string;
|
335
|
+
}, unknown>;
|
336
|
+
|
337
|
+
export { useButton, useChangeStatus, useDelete, useDeleteComment, useDuplicateRecord, useExecuteImport, useExportExcel, useForgotPassword, useForgotPasswordSSO, useGet2FAMethods, useGetAccessByCode, useGetActionDetail, useGetAll, useGetCalendar, useGetComment, useGetCompanyInfo, useGetConversionRate, useGetCurrency, useGetCurrentCompany, useGetDetail, useGetFieldExport, useGetFieldOnChange, useGetFieldsViewSecurity, useGetFileExcel, useGetFormView, useGetGroups, useGetImage, useGetListCompany, useGetListData, useGetListMyBankAccount, useGetMenu, useGetPrintReport, useGetProGressBar, useGetProfile, useGetProvider, useGetResequence, useGetUser, useGetView, useGrantAccess, useIsValidToken, useLoadAction, useLoadMessage, useLoginCredential, useLoginSocial, useLogout, useModel, useOdooDataTransform, useOnChangeForm, useParsePreview, usePrint, useRemoveRow, useRemoveTotpSetup, useRequestSetupTotp, useResetPassword, useResetPasswordSSO, useRunAction, useSave, useSendComment, useSettingsWebRead2fa, useSignInSSO, useSwitchLocale, useUpdatePassword, useUploadFile, useUploadIdFile, useUploadImage, useVerify2FA, useVerifyTotp };
|