Improve error handling by creating a function handler for connections on servers that use KY, and use the status key in the response as the key to success instead of catch. Use catch if an error occurs between the client and server, not between the server and backend.
37 lines
1.0 KiB
TypeScript
37 lines
1.0 KiB
TypeScript
"use server";
|
|
|
|
import { api } from "@/shared/lib/ky/connector";
|
|
import { redirect } from "next/navigation";
|
|
import { ResponseRequestOauthUrl } from "../types/responseRequestOauthUrl";
|
|
|
|
const requestOauthUrl = async (providerData: {
|
|
name: string;
|
|
endpoint: string;
|
|
}) => {
|
|
// Check if requestEndpoint is provided, if not throw an error
|
|
if (!providerData.endpoint)
|
|
throw new Error("oAuth endpoint request not found");
|
|
|
|
// Define a variable to hold the OAuth data
|
|
let oauthData: Promise<ResponseRequestOauthUrl>;
|
|
|
|
// Fetch OAuth data from the API
|
|
try {
|
|
const response = await api.get(providerData.endpoint, {
|
|
searchParams: {
|
|
callback: `${
|
|
process.env.APP_DOMAIN
|
|
}/auth/callback/${providerData.name.toLocaleLowerCase()}`,
|
|
},
|
|
});
|
|
oauthData = response.json<ResponseRequestOauthUrl>();
|
|
} catch (error) {
|
|
throw new Error(JSON.stringify(error));
|
|
}
|
|
|
|
// Redirect to the OAuth provider's authorization page
|
|
redirect((await oauthData).data);
|
|
};
|
|
|
|
export default requestOauthUrl;
|