vormiaqueryjs
Version:
Vormia Query Js - A npm package for query management with VormiaPHP laravel Backend application
140 lines (139 loc) • 3.59 kB
JavaScript
import { useQuery, useMutation } from "@tanstack/react-query";
import { getGlobalVormiaClient } from "../client/createVormiaClient.mjs";
const useVormiaQueryAuth = (options) => {
const client = getGlobalVormiaClient();
const {
endpoint,
method = "GET",
params,
data,
headers = {},
transform,
encryptData = false,
storeToken = true,
...queryOptions
} = options;
const queryKey = [endpoint, method, params, data];
const queryFn = async () => {
var _a;
try {
const config = {
method,
url: endpoint,
params: method === "GET" ? params : void 0,
data: method !== "GET" ? data : void 0,
headers: {
"Content-Type": "application/json",
...headers
},
encryptData
};
const response = await client.request(config);
if (storeToken && ((_a = response.data) == null ? void 0 : _a.token)) {
client.setAuthToken(response.data.token);
}
if (transform && typeof transform === "function") {
return {
...response,
data: transform(response.data)
};
}
return response;
} catch (error) {
if (error.status === 401) {
client.removeAuthToken();
}
throw error instanceof Error ? error : new Error("Authentication query failed");
}
};
return useQuery({
queryKey,
queryFn,
retry: (failureCount, error) => {
if (error.status === 401) return false;
return failureCount < 3;
},
...queryOptions
});
};
const useVormiaQueryAuthMutation = (options) => {
const client = getGlobalVormiaClient();
const {
endpoint,
method = "POST",
headers = {},
transform,
encryptData = false,
storeToken = true,
onLoginSuccess,
onSuccess,
onError,
...mutationOptions
} = options;
const mutation = useMutation({
mutationFn: async (variables) => {
var _a;
try {
const config = {
method,
url: endpoint,
data: variables,
headers: {
"Content-Type": "application/json",
...headers
},
encryptData
};
const response = await client.request(config);
if (storeToken && ((_a = response.data) == null ? void 0 : _a.token)) {
client.setAuthToken(response.data.token);
}
if (transform && typeof transform === "function") {
return {
...response,
data: transform(response.data)
};
}
return response;
} catch (error) {
if (error.status === 401) {
client.removeAuthToken();
}
throw error instanceof Error ? error : new Error("Authentication failed");
}
},
onSuccess: (data, variables, context) => {
var _a;
if (onSuccess) {
onSuccess(data, variables, context);
}
if (onLoginSuccess && ((_a = data.data) == null ? void 0 : _a.token)) {
onLoginSuccess(data);
}
},
onError: (error, variables, context) => {
if (onError) {
onError(error, variables, context);
}
},
...mutationOptions
});
const login = async (credentials) => {
return mutation.mutateAsync(credentials);
};
const logout = () => {
client.removeAuthToken();
};
const isAuthenticated = !!client.getAuthToken();
return {
...mutation,
login,
logout,
isAuthenticated
};
};
export {
useVormiaQueryAuth,
useVormiaQueryAuthMutation
};
//# sourceMappingURL=useVrmAuth.mjs.map