Add graphql request to back end
This commit is contained in:
42
src/main/graphql/graphql-client.ts
Normal file
42
src/main/graphql/graphql-client.ts
Normal 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;
|
||||
Reference in New Issue
Block a user