Add graphql request to back end

This commit is contained in:
Patrick Fic
2025-03-20 14:54:13 -07:00
parent 4310b3779a
commit 6345b5a9a8
8 changed files with 90 additions and 6 deletions

View File

@@ -0,0 +1,42 @@
import { BrowserWindow, ipcMain } from "electron";
import log from "electron-log/main";
import { GraphQLClient, RequestMiddleware } from "graphql-request";
import errorTypeCheck from "../../util/errorTypeCheck.js";
import ipcTypes from "../../util/ipcTypes.json";
const requestMiddleware: RequestMiddleware = async (request) => {
const token = await getTokenFromRenderer();
return {
...request,
headers: { ...request.headers, Authorization: `Bearer ${token}` },
};
};
const client: GraphQLClient = new GraphQLClient(
import.meta.env.VITE_GRAPHQL_ENDPOINT,
{
requestMiddleware,
}
);
export async function getTokenFromRenderer(): Promise<string> {
return new Promise((resolve) => {
try {
const mainWindow = BrowserWindow.getAllWindows()[0]; //TODO: Filter to only main window once a proper key has been set.
//TODO: Verify that this will work if the app is minimized/closed.
mainWindow.webContents.send(ipcTypes.toRenderer.user.getToken);
} catch (error) {
log.error(
"Unable to send request to renderer process for token",
errorTypeCheck(error)
);
}
// Set up one-time listener for the response
ipcMain.once(ipcTypes.toMain.user.getTokenResponse, (_, token: string) => {
resolve(token);
});
});
}
export default client;