2025-05-21 16:32:51 +03:00
|
|
|
import electron from "electron";
|
2025-06-07 14:58:07 +03:00
|
|
|
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
|
|
|
|
2025-06-07 14:58:07 +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
|
|
|
|
2025-05-21 16:32:51 +03:00
|
|
|
electron.ipcMain.on("server-request", (event, arg) => {
|
2025-06-07 14:58:07 +03:00
|
|
|
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,
|
2025-06-07 14:58:07 +03:00
|
|
|
session: fakeSession
|
2017-11-30 23:29:21 -05:00
|
|
|
};
|
2017-11-30 20:51:35 -05:00
|
|
|
|
2025-06-07 14:58:07 +03:00
|
|
|
const respHeaders: Record<string, string | string[]> = {};
|
2019-12-09 23:07:45 +01:00
|
|
|
|
2025-06-07 14:58:07 +03:00
|
|
|
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],
|
2019-12-09 23:07:45 +01:00
|
|
|
setHeader: (name, value) => {
|
|
|
|
respHeaders[name] = value.toString();
|
2025-06-07 14:58:07 +03:00
|
|
|
return res as MockedResponse;
|
2022-08-02 18:15:54 +02:00
|
|
|
},
|
2025-06-07 14:58:07 +03:00
|
|
|
header(name: string, value?: string | string[]) {
|
|
|
|
respHeaders[name] = value ?? "";
|
|
|
|
return res as MockedResponse;
|
2019-12-09 23:07:45 +01:00
|
|
|
},
|
2025-01-09 18:07:02 +02:00
|
|
|
status: (statusCode) => {
|
2019-03-31 12:49:42 +02:00
|
|
|
res.statusCode = statusCode;
|
2025-06-07 14:58:07 +03:00
|
|
|
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,
|
2019-12-09 23:07:45 +01:00
|
|
|
headers: respHeaders,
|
2019-03-31 12:49:42 +02:00
|
|
|
body: obj
|
|
|
|
});
|
2025-06-07 14:58:07 +03:00
|
|
|
return res as MockedResponse;
|
|
|
|
},
|
|
|
|
locals: {},
|
|
|
|
json: (obj) => {
|
|
|
|
res.send(JSON.stringify(obj));
|
|
|
|
return res as MockedResponse;
|
2019-03-31 12:49:42 +02:00
|
|
|
}
|
2017-11-30 20:51:35 -05:00
|
|
|
};
|
|
|
|
|
2025-06-07 14:58:07 +03:00
|
|
|
return app.router(req as any, res as any, () => {});
|
2017-11-30 20:51:35 -05:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2024-07-18 21:50:12 +03:00
|
|
|
export default init;
|