Notes/apps/server/src/routes/electron.ts

85 lines
2.8 KiB
TypeScript
Raw Normal View History

import electron from "electron";
import type { Application } from "express";
import type { ParamsDictionary, Request, Response } from "express-serve-static-core";
import type QueryString from "qs";
import { Session, SessionData } from "express-session";
2024-04-07 14:09:37 +03:00
type MockedResponse = Response<any, Record<string, any>, number>;
function init(app: Application) {
const fakeSession: Session & Partial<SessionData> = {
id: "session-id", // Placeholder for session ID
cookie: {
originalMaxAge: 3600000, // 1 hour
},
loggedIn: true,
regenerate(callback) {
callback?.(null);
return fakeSession;
},
destroy(callback) {
callback?.(null);
return fakeSession;
},
reload(callback) {
callback?.(null);
return fakeSession;
},
save(callback) {
callback?.(null);
return fakeSession;
},
resetMaxAge: () => fakeSession,
touch: () => fakeSession
};
2024-04-07 14:09:37 +03:00
electron.ipcMain.on("server-request", (event, arg) => {
const req: Pick<Request<ParamsDictionary, any, any, QueryString.ParsedQs, Record<string, any>>, "url" | "method" | "body" | "headers" | "session"> = {
2019-03-31 12:49:42 +02:00
url: arg.url,
method: arg.method,
body: arg.data,
headers: arg.headers,
session: fakeSession
};
const respHeaders: Record<string, string | string[]> = {};
const res: Pick<Response<any, Record<string, any>, number>, "statusCode" | "getHeader" | "setHeader" | "header" | "status" | "send" | "locals" | "json"> = {
2019-03-31 12:49:42 +02:00
statusCode: 200,
2025-01-09 18:07:02 +02:00
getHeader: (name) => respHeaders[name],
setHeader: (name, value) => {
respHeaders[name] = value.toString();
return res as MockedResponse;
},
header(name: string, value?: string | string[]) {
respHeaders[name] = value ?? "";
return res as MockedResponse;
},
2025-01-09 18:07:02 +02:00
status: (statusCode) => {
2019-03-31 12:49:42 +02:00
res.statusCode = statusCode;
return res as MockedResponse;
2019-03-31 12:49:42 +02:00
},
2025-01-09 18:07:02 +02:00
send: (obj) => {
event.sender.send("server-response", {
2021-02-14 11:43:31 +01:00
url: arg.url,
method: arg.method,
2019-03-31 12:49:42 +02:00
requestId: arg.requestId,
statusCode: res.statusCode,
headers: respHeaders,
2019-03-31 12:49:42 +02:00
body: obj
});
return res as MockedResponse;
},
locals: {},
json: (obj) => {
res.send(JSON.stringify(obj));
return res as MockedResponse;
2019-03-31 12:49:42 +02:00
}
};
return app.router(req as any, res as any, () => {});
});
}
export default init;