Skip to content

Commit 2b82fe3

Browse files
committed
trpc main composer finished, jsut needs cleaning up
1 parent c1164e1 commit 2b82fe3

File tree

8 files changed

+299
-295
lines changed

8 files changed

+299
-295
lines changed

main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ require('./main_process/main_graphqlController')();
5959
require('./main_process/main_grpcController.js')();
6060
require('./main_process/main_wsController.js')();
6161
require('./main_process/main_mockController.js')();
62+
require('./main_process/main_trpcController.js')();
6263

6364
// require mac touchbar
6465
const { touchBar } = require('./main_process/main_touchbar.js');

main_process/main_httpController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ const httpController = {
305305
headersResponse[':status'] = response.status;
306306
const receivedCookie = headersResponse['set-cookie'];
307307
headersResponse.cookies = receivedCookie;
308-
console.log(receivedCookie);
308+
309309
const contentType = response.headers.get('content-type');
310310
const contents = /json/.test(contentType)
311311
? await response.json()
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
const fetch = require('cross-fetch');
2+
const setCookie = require('set-cookie-parser');
3+
const { ipcMain } = require('electron');
4+
5+
const trpcController = {
6+
makeFetch: async function (event, reqRes, get, post) {
7+
reqRes.timeSent = Date.now();
8+
//[{name:"cookie"}]
9+
// const cookies = [
10+
// { name: "POSTCOOKIE", value: "POSTCOOKIEVAL" },
11+
// { name: "GETCOOKIE", value: "GETCOOKIEVAL" },
12+
// ];
13+
const cookies = [];
14+
const getHeaders = {};
15+
const postHeaders = {};
16+
const events = [];
17+
18+
const reqArr = [get, post];
19+
const resArr = await Promise.all(
20+
reqArr.map((req) => {
21+
if (req) {
22+
return fetch(req.url, {
23+
// credentials: req.credentials,
24+
// mode: req.mode,
25+
cache: req.cache,
26+
headers: req.headers,
27+
method: req.method,
28+
redirect: req.redirect,
29+
referrer: req.referrer,
30+
...(req.body && { body: JSON.stringify(req.body) }),
31+
});
32+
} else {
33+
return Promise.resolve(false);
34+
}
35+
})
36+
);
37+
reqRes.timeReceived = Date.now();
38+
resArr.forEach((res, index) => {
39+
if (res) {
40+
const headersResponse = res.headers.raw();
41+
if (headersResponse['set-cookie']) {
42+
cookies.push(
43+
...this.cookieFormatter(
44+
setCookie.parse(headersResponse['set-cookie'])
45+
)
46+
);
47+
}
48+
if (index === 0) {
49+
res.headers.forEach((value, key) => {
50+
getHeaders[key] = value;
51+
});
52+
} else {
53+
res.headers.forEach((value, key) => {
54+
postHeaders[key] = value;
55+
});
56+
}
57+
}
58+
});
59+
60+
const resData = await Promise.all(
61+
resArr.map((res) => {
62+
return res ? res.json() : res;
63+
})
64+
);
65+
console.dir(resData, { depth: null });
66+
resData.forEach((res) => events.push(res));
67+
reqRes.response.cookies = cookies;
68+
reqRes.response.events = events;
69+
reqRes.response.headers = [getHeaders, postHeaders];
70+
reqRes.connection = 'closed';
71+
reqRes.connectionType = 'plain';
72+
event.sender.send('reqResUpdate', reqRes);
73+
},
74+
parseOptionForFetch(reqResObject, method, procedures) {
75+
function parseString(str) {
76+
if (str === 'true') {
77+
return true;
78+
}
79+
80+
if (str === 'false') {
81+
return false;
82+
}
83+
84+
if (!isNaN(str)) {
85+
return parseFloat(str);
86+
}
87+
88+
try {
89+
const parsedJson = JSON.parse(str.replace(/\s/g, ''));
90+
91+
if (typeof parsedJson === 'object' && parsedJson !== null) {
92+
return parsedJson;
93+
} else {
94+
throw 'is String';
95+
}
96+
} catch (error) {
97+
return JSON.parse(str);
98+
}
99+
}
100+
const { headers, cookie } = reqResObject.request;
101+
102+
const formattedHeaders = {};
103+
headers.forEach((head) => {
104+
if (head.active) {
105+
formattedHeaders[head.key] = head.value;
106+
}
107+
});
108+
if (cookie) {
109+
cookie.forEach((cookie) => {
110+
const cookieString = `${cookie.key}=${cookie.value}`;
111+
// attach to formattedHeaders so options object includes this
112+
113+
formattedHeaders.cookie = formattedHeaders.cookie
114+
? formattedHeaders.cookie + ';' + cookieString
115+
: cookieString;
116+
});
117+
}
118+
119+
const outputObj = {
120+
method,
121+
mode: 'cors', // no-cors, cors, *same-origin
122+
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
123+
credentials: 'include', // include, *same-origin, omit
124+
headers: formattedHeaders,
125+
redirect: 'follow', // manual, *follow, error
126+
referrer: 'no-referrer', // no-referrer, *client
127+
};
128+
let url = '';
129+
const body = {};
130+
procedures.forEach((procedure, index) => {
131+
if (procedure.variable) {
132+
body[index] = parseString(procedure.variable);
133+
} else {
134+
body[index] = {};
135+
}
136+
url = url ? url + ',' + procedure.endpoint : procedure.endpoint;
137+
});
138+
if (method === 'POST') {
139+
url = reqResObject.url + '/' + url + '?batch=1';
140+
outputObj.body = body;
141+
} else {
142+
url =
143+
reqResObject.url +
144+
'/' +
145+
url +
146+
'?batch=1' +
147+
`&input=${encodeURIComponent(JSON.stringify(body))}`;
148+
}
149+
outputObj.url = url;
150+
return outputObj;
151+
},
152+
153+
openRequest: async function (event, reqRes) {
154+
// const reqRes = Object.assign({}, reqResOriginal);
155+
// reqRes.response = Object.assign({}, reqRes.response);
156+
const procedures = reqRes.request.procedures;
157+
const getReq = procedures.filter(
158+
(procedure) => procedure.method === 'QUERY'
159+
);
160+
const postReq = procedures.filter(
161+
(procedure) => procedure.method === 'MUTATE'
162+
);
163+
164+
const getOption = getReq.length
165+
? this.parseOptionForFetch(reqRes, 'GET', getReq)
166+
: false;
167+
const postOption = postReq.length
168+
? this.parseOptionForFetch(reqRes, 'POST', postReq)
169+
: false;
170+
171+
const updatedReqRes = await this.makeFetch(
172+
event,
173+
reqRes,
174+
getOption,
175+
postOption
176+
);
177+
},
178+
cookieFormatter(cookieArray) {
179+
return cookieArray.map((eachCookie) => {
180+
const cookieFormat = {
181+
name: eachCookie.name,
182+
value: eachCookie.value,
183+
domain: eachCookie.domain,
184+
hostOnly: eachCookie.hostOnly ? eachCookie.hostOnly : false,
185+
path: eachCookie.path,
186+
secure: eachCookie.secure ? eachCookie.secure : false,
187+
httpOnly: eachCookie.httpOnly ? eachCookie.httpOnly : false,
188+
session: eachCookie.session ? eachCookie.session : false,
189+
expirationDate: eachCookie.expires ? eachCookie.expires : '',
190+
};
191+
return cookieFormat;
192+
});
193+
},
194+
};
195+
196+
module.exports = () => {
197+
// create event listeners for IPC events
198+
ipcMain.on('open-trpc', (event, reqResObj) => {
199+
trpcController.openRequest(event, reqResObj);
200+
});
201+
};

preload.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const apiObj = {
2929
'start-mock-server',
3030
'stop-mock-server',
3131
'submit-mock-request',
32+
'open-trpc',
3233
];
3334
if (allowedChannels.includes(channel)) {
3435
ipcRenderer.send(channel, ...data);

0 commit comments

Comments
 (0)