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;
|
||||
@@ -4,6 +4,7 @@ import log from "electron-log/main";
|
||||
import path, { join } from "path";
|
||||
import icon from "../../resources/icon.png?asset";
|
||||
import ErrorTypeCheck from "../util/errorTypeCheck";
|
||||
import client from "./graphql/graphql-client";
|
||||
import store from "./store/store";
|
||||
|
||||
log.initialize();
|
||||
@@ -32,7 +33,7 @@ function createWindow(): void {
|
||||
},
|
||||
});
|
||||
|
||||
const template = [
|
||||
const template: Electron.MenuItemConstructorOptions[] = [
|
||||
// { role: 'appMenu' }
|
||||
...(isMac
|
||||
? [
|
||||
@@ -117,13 +118,14 @@ function createWindow(): void {
|
||||
submenu: [
|
||||
{
|
||||
label: "Learn More",
|
||||
click: async () => {
|
||||
click: async (): Promise<void> => {
|
||||
const { shell } = require("electron");
|
||||
await shell.openExternal("https://electronjs.org");
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
...(import.meta.env.DEV
|
||||
? [
|
||||
{
|
||||
@@ -148,6 +150,26 @@ function createWindow(): void {
|
||||
shell.openPath(path.dirname(store.path));
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "separator",
|
||||
},
|
||||
{
|
||||
label: "Temp Test Action - Get Token from Renderer",
|
||||
click: (): void => {
|
||||
client
|
||||
.request(
|
||||
`
|
||||
query jobs{
|
||||
jobs
|
||||
{
|
||||
id}}
|
||||
`
|
||||
)
|
||||
.then((data) => {
|
||||
log.info("Data from graffle", data);
|
||||
});
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -2,6 +2,7 @@ import React from "react";
|
||||
import ReactDOM from "react-dom/client";
|
||||
import App from "./App";
|
||||
import "./util/i18n";
|
||||
import "./util/ipcRendererHandler";
|
||||
|
||||
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
||||
<React.StrictMode>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//Set up all of the IPC handlers.
|
||||
import ipcTypes from "../../../util/ipcTypes.json";
|
||||
import { auth } from "./firebase";
|
||||
|
||||
const ipcRenderer = window.electron.ipcRenderer;
|
||||
|
||||
@@ -10,3 +11,11 @@ ipcRenderer.on(
|
||||
console.log(arg);
|
||||
}
|
||||
);
|
||||
|
||||
ipcRenderer.on(
|
||||
ipcTypes.toRenderer.user.getToken,
|
||||
async (event: Electron.IpcRendererEvent, arg) => {
|
||||
const token = await auth.currentUser?.getIdToken();
|
||||
ipcRenderer.send(ipcTypes.toMain.user.getTokenResponse, token);
|
||||
}
|
||||
);
|
||||
|
||||
@@ -15,9 +15,15 @@
|
||||
"add": "toMain_settings_filepaths_add",
|
||||
"remove": "toMain_settings_filepaths_remove"
|
||||
}
|
||||
},
|
||||
"user": {
|
||||
"getTokenResponse": "toMain_user_getTokenResponse"
|
||||
}
|
||||
},
|
||||
"toRenderer": {
|
||||
"test": "toRenderer_test"
|
||||
"test": "toRenderer_test",
|
||||
"user": {
|
||||
"getToken": "toRenderer_user_getToken"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user