socket-function 0.7.13 → 0.7.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/CallFactory.ts +3 -3
- package/src/webSocketServer.ts +14 -28
package/package.json
CHANGED
package/src/CallFactory.ts
CHANGED
|
@@ -283,10 +283,10 @@ async function createCallFactory(
|
|
|
283
283
|
|
|
284
284
|
async function onMessage(message: ws.RawData | ws.MessageEvent | string) {
|
|
285
285
|
try {
|
|
286
|
+
if (typeof message === "object" && "data" in message) {
|
|
287
|
+
message = message.data;
|
|
288
|
+
}
|
|
286
289
|
if (!isNode()) {
|
|
287
|
-
if (typeof message === "object" && "data" in message) {
|
|
288
|
-
message = message.data;
|
|
289
|
-
}
|
|
290
290
|
if (message instanceof Blob) {
|
|
291
291
|
message = Buffer.from(await message.arrayBuffer());
|
|
292
292
|
}
|
package/src/webSocketServer.ts
CHANGED
|
@@ -52,6 +52,16 @@ export async function startSocketServer(
|
|
|
52
52
|
noServer: true,
|
|
53
53
|
});
|
|
54
54
|
httpsServer.on("upgrade", (request, socket, upgradeHead) => {
|
|
55
|
+
try {
|
|
56
|
+
let host = new URL("ws://" + request.headers["host"]).hostname;
|
|
57
|
+
let origin = new URL(request.headers["origin"] ?? "").hostname;
|
|
58
|
+
console.log({ host, origin });
|
|
59
|
+
if (host !== origin) {
|
|
60
|
+
throw new Error(`Invalid cross thread request, ${JSON.stringify(host)} !== ${JSON.stringify(origin)}`);
|
|
61
|
+
}
|
|
62
|
+
} catch (e) {
|
|
63
|
+
console.error(e);
|
|
64
|
+
}
|
|
55
65
|
webSocketServer.handleUpgrade(request, socket, upgradeHead, async (ws) => {
|
|
56
66
|
// NOTE: For the browser, the request will likely have a nodeId, from making an HTTP request.
|
|
57
67
|
// We would prefer peer certificates, so this isn't the default (in getNodeId), but it will
|
|
@@ -73,20 +83,6 @@ export async function startSocketServer(
|
|
|
73
83
|
res.end();
|
|
74
84
|
});
|
|
75
85
|
|
|
76
|
-
httpServer.listen(0, "127.0.0.1");
|
|
77
|
-
httpsServer.listen(0, "127.0.0.1");
|
|
78
|
-
|
|
79
|
-
// TODO: We should really add error handling here, but... we should always be able to listen
|
|
80
|
-
// on ANY port on localhost, as why couldn't we?
|
|
81
|
-
let httpServerReady = new Promise(resolve => httpServer.once("listening", resolve));
|
|
82
|
-
let httpsServerReady = new Promise(resolve => httpsServer.once("listening", resolve));
|
|
83
|
-
await httpServerReady;
|
|
84
|
-
await httpsServerReady;
|
|
85
|
-
|
|
86
|
-
let httpAddress = httpServer.address() as net.AddressInfo;
|
|
87
|
-
let httpsAddress = httpsServer.address() as net.AddressInfo;
|
|
88
|
-
|
|
89
|
-
|
|
90
86
|
let realServer = net.createServer(socket => {
|
|
91
87
|
// NOTE: ONCE is used, so we only look at the first buffer, and then after that
|
|
92
88
|
// we pipe. This should be very efficient, as pipe has insane throughput
|
|
@@ -94,21 +90,11 @@ export async function startSocketServer(
|
|
|
94
90
|
socket.once("data", buffer => {
|
|
95
91
|
// All HTTPS requests start with 22, and no HTTP requests start with 22,
|
|
96
92
|
// so we just need to read the first byte.
|
|
97
|
-
let
|
|
98
|
-
let isHTTPS = byte === 22;
|
|
99
|
-
let address = httpAddress;
|
|
100
|
-
if (isHTTPS) {
|
|
101
|
-
address = httpsAddress;
|
|
102
|
-
}
|
|
103
|
-
let baseSocket = net.connect(address.port);
|
|
104
|
-
|
|
105
|
-
baseSocket.write(buffer);
|
|
106
|
-
socket.pipe(baseSocket);
|
|
107
|
-
baseSocket.pipe(socket);
|
|
93
|
+
let server = buffer[0] === 22 ? httpsServer : httpServer;
|
|
108
94
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
95
|
+
// NOTE: Messages aren't dequeued until the current handler finishes, so we don't need to pause the socket or anything.
|
|
96
|
+
server.emit("connection", socket);
|
|
97
|
+
socket.unshift(buffer);
|
|
112
98
|
});
|
|
113
99
|
socket.on("error", (e) => {
|
|
114
100
|
console.error(`Exposed socket error, ${e.stack}`);
|