Skip to content

Commit 9575b0e

Browse files
authored
Merge pull request #300 from oslabs-beta/master
Swell Update v.0.9.0
2 parents ed852fb + f4d693d commit 9575b0e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1611
-802
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@ Swell is a one-stop shop for sending and monitoring your API requests
120120
- **Miguel Gonzalez** - [MigGonzalez](https://github.com/MigGonzalez)
121121
- **Jason Liggayu** - [jasonligg](https://github.com/jasonligg)
122122
- **Warren Tait** - [whtait](https://github.com/whtait)
123+
- **Nathan Fleming** - [njfleming](https://github.com/njfleming)
124+
- **Konrad Kopko** - [konradkop](https://github.com/konradkop)
125+
- **Andrea Li** - [Andrea-gli](https://github.com/Andrea-gli)
126+
- **Paul Ramirez** - [pauleramirez](https://github.com/pauleramirez)
127+
- **TJ Wetmore** - [TWetmore](https://github.com/TWetmore)
123128

124129
## License
125130

main.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ process.env.NODE_TLS_REJECT_UNAUTHORIZED = 1;
1414
// npm libraries
1515
// debugger
1616
const { app, BrowserWindow, ipcMain, dialog } = require("electron");
17+
//require("react-devtools-electron");
1718
const {
1819
default: installExtension,
1920
REACT_DEVELOPER_TOOLS,
@@ -101,7 +102,7 @@ function createWindow() {
101102
// allowRunningInsecureContent: true,
102103
webPreferences: {
103104
nodeIntegration: false,
104-
contextIsolation: process.env.NODE_ENV !== "test",
105+
contextIsolation: process.env.NODE_ENV !== "test", //true if in dev mode
105106
// enableRemoteModule: false,
106107
sandbox: process.env.NODE_ENV !== "test",
107108
webSecurity: true,
@@ -203,6 +204,7 @@ const sendStatusToWindow = (text) => {
203204

204205
ipcMain.on("check-for-update", () => {
205206
//listens to ipcRenderer in UpdatePopUpContainer.jsx
207+
console.log("check for update");
206208
if (!isDev) {
207209
autoUpdater.checkForUpdates();
208210
}
@@ -350,7 +352,6 @@ ipcMain.on("import-collection", (event, args) => {
350352
event.sender.send("add-collection", JSON.stringify(JSON.parse(data)));
351353
});
352354
});
353-
//.catch( err => console.log('error in import-collection', err));
354355
});
355356

356357
// ============ CONFIRM CLEAR HISTORY / RESPONSE COMMUNICATION ===============

main_process/main_httpController.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const httpController = {
1717
// ----------------------------------------------------------------------------
1818

1919
openHTTPconnection(event, reqResObj) {
20+
//console.log("event=>", event);
2021
// HTTP2 currently only on HTTPS
2122
if (reqResObj.protocol === "https://") {
2223
httpController.establishHTTP2Connection(event, reqResObj);
@@ -266,14 +267,19 @@ const httpController = {
266267
// ----------------------------------------------------------------------------
267268

268269
makeFetch(args, event, reqResObj) {
270+
console.log("args===>", args);
271+
console.log("event===>", event);
272+
console.log("reqRESSSSOBJ===>", reqResObj);
269273
return new Promise((resolve) => {
270274
const { method, headers, body } = args.options;
275+
271276
fetch2(headers.url, { method, headers, body })
272277
.then((response) => {
278+
console.log("responsefromendpoint====>", response);
273279
const headers = response.headers.raw();
274-
280+
console.log("headersfromfetch==>", headers);
275281
// check if the endpoint sends SSE
276-
// add status code for regular http requests in the response header
282+
// add status-==== code for regular http requests in the response header
277283
if (headers["content-type"][0].includes("stream")) {
278284
// invoke another func that fetches to SSE and reads stream
279285
// params: method, headers, body
@@ -285,13 +291,17 @@ const httpController = {
285291
headers[":status"] = response.status;
286292

287293
const receivedCookie = headers["set-cookie"];
294+
console.log("receivedCookie===>", receivedCookie);
288295
headers.cookies = receivedCookie;
289-
296+
console.log("newheaders==>", headers);
290297
const contents = /json/.test(response.headers.get("content-type"))
291298
? response.json()
292299
: response.text();
300+
293301
contents
294302
.then((body) => {
303+
console.log("bodyyyy====>", body);
304+
295305
resolve({
296306
headers,
297307
body,
@@ -333,6 +343,7 @@ const httpController = {
333343
} else {
334344
this.makeFetch({ options }, event, reqResObj)
335345
.then((response) => {
346+
console.log("makefetchResponse===>", response);
336347
// Parse response headers now to decide if SSE or not.
337348
const heads = response.headers;
338349
reqResObj.response.headers = heads;
@@ -354,6 +365,7 @@ const httpController = {
354365
}
355366
// update reqres object to include new event
356367
reqResObj = this.addSingleEvent(body, reqResObj);
368+
console.log("latest REQRESOBJ=>", reqResObj);
357369
// check if there is a test script to run
358370
if (reqResObj.request.testContent) {
359371
reqResObj.response.testResult = testingController.runTest(
@@ -376,6 +388,8 @@ const httpController = {
376388

377389
parseFetchOptionsFromReqRes(reqResObject) {
378390
const { headers, body, cookies } = reqResObject.request;
391+
console.log("reqresOBJJJ=>", reqResObject);
392+
379393
let { method } = reqResObject.request;
380394

381395
method = method.toUpperCase();

main_process/main_testingController.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ testHttpController.runTest = (
5252
if (/^let|^const|^var/.test(script)) {
5353
variables = script;
5454
}
55+
56+
//assert.strictEqual(response.status, 200, 'response is 200')
5557
return `
5658
${variables}
5759
try {

main_process/main_wsController.js

Lines changed: 166 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,173 @@
11
const { ipcMain } = require("electron");
2+
const { dialog } = require("electron");
23
// const store = require('./src/client/store.js')
3-
const WebSocketClient = require('websocket').client
4+
const WebSocketClient = require("websocket").client;
5+
const fs = require("fs");
6+
const path = require("path");
7+
const testingController = require("./main_testingController");
48

59
const wsController = {
6-
wsConnect: null,
10+
wsConnect: null,
711
openWSconnection(event, reqResObj, connectionArray) {
8-
//set reqResObj for WS
9-
reqResObj.response.messages = [];
10-
reqResObj.request.messages = [];
11-
reqResObj.connection = 'pending';
12-
reqResObj.closeCode = 0;
13-
reqResObj.timeSent = Date.now();
14-
15-
//update frontend its pending
16-
event.sender.send("reqResUpdate", reqResObj);
17-
18-
//create socket
19-
let socket;
20-
try {
21-
socket = new WebSocketClient()
22-
}
23-
catch (err) {
24-
reqResObj.connection = 'error';
25-
event.sender.send("reqResUpdate", reqResObj);
26-
return;
27-
}
28-
29-
//when it connects, update connectionArray
30-
socket.on('connect', (connection) => {
31-
this.wsConnect = connection;
32-
reqResObj.connection = 'open';
33-
const openConnectionObj = {
34-
connection,
35-
protocol: 'WS',
36-
id: reqResObj.id,
37-
};
38-
connectionArray.push(openConnectionObj);
39-
event.sender.send("update-connectionArray", connectionArray);
40-
event.sender.send("reqResUpdate", reqResObj);
41-
this.wsConnect.on('close', () => {
42-
console.log('closed WS');
43-
});
44-
});
45-
46-
//listener for failed socket connection,
47-
socket.on('connectFailed', (error) => {
48-
console.log('WS Connect Error: ' + error.toString());
49-
reqResObj.connection = "error";
50-
reqResObj.timeReceived = Date.now();
51-
// reqResObj.response.events.push(JSON.stringify(errorsObj));
52-
event.sender.send("reqResUpdate", reqResObj);
53-
});
54-
55-
//connect socket
56-
socket.connect(reqResObj.url);
57-
},
58-
59-
closeWs(event) {
60-
this.wsConnect.close();
61-
},
62-
63-
sendWebSocketMessage(event, reqResObj, inputMessage) {
64-
//send message to ws server
65-
this.wsConnect.send(inputMessage);
66-
67-
//push sent message to reqResObj message array as a request message
68-
reqResObj.request.messages.push({
69-
data: inputMessage,
70-
timeReceived: Date.now(),
71-
});
72-
73-
//update store
74-
event.sender.send("reqResUpdate", reqResObj);
75-
76-
//listener for return message from ws server
77-
//push into message array under responses
78-
this.wsConnect.on('message', (e) => {
79-
reqResObj.response.messages.push({
80-
data: e.utf8Data,
81-
timeReceived: Date.now(),
82-
});
83-
//update store
84-
event.sender.send("reqResUpdate", reqResObj);
85-
});
86-
},
12+
//set reqResObj for WS
13+
reqResObj.response.messages = [];
14+
reqResObj.request.messages = [];
15+
reqResObj.connection = "pending";
16+
reqResObj.closeCode = 0;
17+
reqResObj.timeSent = Date.now();
18+
19+
//update frontend its pending
20+
event.sender.send("reqResUpdate", reqResObj);
21+
22+
//create socket
23+
//check websocket npm package doc
24+
let socket;
25+
try {
26+
socket = new WebSocketClient();
27+
} catch (err) {
28+
reqResObj.connection = "error";
29+
event.sender.send("reqResUpdate", reqResObj);
30+
return;
31+
}
32+
33+
//when it connects, update connectionArray
34+
//connection here means a single connection being established
35+
socket.on("connect", (connection) => {
36+
console.log("websocket client connected");
37+
this.wsConnect = connection;
38+
reqResObj.connection = "open";
39+
reqResObj.response.connection = "open";
40+
// testingController.runTest(reqResObj.request.testContent, reqResObj);
41+
const openConnectionObj = {
42+
connection,
43+
protocol: "WS",
44+
id: reqResObj.id,
45+
};
46+
connectionArray.push(openConnectionObj);
47+
event.sender.send("update-connectionArray", connectionArray);
48+
event.sender.send("reqResUpdate", reqResObj);
49+
//connection.on
50+
this.wsConnect.on("close", () => {
51+
console.log("closed WS");
52+
});
53+
});
54+
55+
//listener for failed socket connection,
56+
socket.on("connectFailed", (error) => {
57+
console.log("WS Connect Error: " + error.toString());
58+
reqResObj.connection = "error";
59+
reqResObj.timeReceived = Date.now();
60+
// reqResObj.response.events.push(JSON.stringify(errorsObj)); need to move
61+
event.sender.send("reqResUpdate", reqResObj);
62+
});
63+
64+
//connect socket
65+
socket.connect(reqResObj.url);
66+
},
67+
68+
closeWs(event) {
69+
//connection.close
70+
this.wsConnect.close();
71+
},
72+
73+
sendWebSocketMessage(event, reqResObj, inputMessage) {
74+
//send message to ws server
75+
//connection.send
76+
77+
//check datatype
78+
79+
if (inputMessage.includes("data:image/")) {
80+
const buffer = Buffer.from(inputMessage, "utf8");
81+
console.log("sending as buffer");
82+
this.wsConnect.sendBytes(buffer);
83+
reqResObj.request.messages.push({
84+
data: buffer,
85+
timeReceived: Date.now(),
86+
});
87+
} else {
88+
this.wsConnect.send(inputMessage);
89+
console.log("sending as string");
90+
reqResObj.request.messages.push({
91+
data: inputMessage,
92+
timeReceived: Date.now(),
93+
});
94+
}
95+
96+
//update store
97+
event.sender.send("reqResUpdate", reqResObj);
98+
99+
//listener for return message from ws server
100+
//push into message array under responses
101+
//connection.on
102+
this.wsConnect.on("message", (e) => {
103+
e.binaryData
104+
? reqResObj.response.messages.push({
105+
data: e.binaryData,
106+
timeReceived: Date.now(),
107+
})
108+
: reqResObj.response.messages.push({
109+
data: e.utf8Data,
110+
timeReceived: Date.now(),
111+
});
112+
113+
if (reqResObj.request.testContent) {
114+
reqResObj.response.testResult = testingController.runTest(
115+
reqResObj.request.testContent,
116+
reqResObj
117+
);
118+
console.log("the test result", reqResObj.response.testResult);
119+
}
120+
121+
//update store
122+
event.sender.send("reqResUpdate", reqResObj);
123+
});
124+
},
87125
};
88126
module.exports = () => {
89-
// we pass the event object into these controller functions so that we can invoke event.sender.send when we need to make response to renderer process
90-
// listener to open wsconnection
91-
ipcMain.on("open-ws", (event, reqResObj, connectionArray) => {
92-
wsController.openWSconnection(event, reqResObj, connectionArray);
93-
});
94-
//listener for sending messages to server
95-
ipcMain.on("send-ws", (event, reqResObj, inputMessage) => {
96-
wsController.sendWebSocketMessage(event, reqResObj, inputMessage);
97-
});
98-
//listerner to close socket connection
99-
ipcMain.on("close-ws", (event) => {
100-
wsController.closeWs(event);
101-
})
102-
};
127+
// we pass the event object into these controller functions so that we can invoke event.sender.send when we need to make response to renderer process
128+
// listener to open wsconnection
129+
ipcMain.on("open-ws", (event, reqResObj, connectionArray) => {
130+
wsController.openWSconnection(event, reqResObj, connectionArray);
131+
});
132+
//listener for sending messages to server
133+
ipcMain.on("send-ws", (event, reqResObj, inputMessage) => {
134+
wsController.sendWebSocketMessage(event, reqResObj, inputMessage);
135+
});
136+
//listerner to close socket connection
137+
ipcMain.on("close-ws", (event) => {
138+
wsController.closeWs(event);
139+
});
140+
ipcMain.on("exportChatLog", (event, outgoingMessages, incomingMessages) => {
141+
//making sure the messages are in order
142+
let result = outgoingMessages
143+
.map((message) => {
144+
message.source = "client";
145+
return message;
146+
})
147+
.concat(
148+
incomingMessages.map((message) => {
149+
message.source = "server";
150+
return message;
151+
})
152+
)
153+
.sort((a, b) => a.timeReceived - b.timeReceived)
154+
.map((message, index) => ({
155+
index: index,
156+
source: message.source,
157+
data: message.data,
158+
timeReceived: message.timeReceived,
159+
}));
160+
161+
const data = new Uint8Array(Buffer.from(JSON.stringify(result)));
162+
163+
//showSaveDialog is the windowexplorer that appears
164+
dialog
165+
.showSaveDialog({ defaultPath: "websocketLog.txt" })
166+
.then((file_path) => {
167+
fs.writeFile(file_path.filePath, data, (err) => {
168+
if (err) throw err;
169+
console.log("File saved to: ", file_path.filePath);
170+
});
171+
});
172+
});
173+
};

0 commit comments

Comments
 (0)