socket-function 0.7.12 → 0.7.15

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "socket-function",
3
- "version": "0.7.12",
3
+ "version": "0.7.15",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -83,10 +83,10 @@ export interface SenderInterface {
83
83
 
84
84
  send(data: string | Buffer): void;
85
85
 
86
- on(event: "open", listener: () => void): this;
87
- on(event: "close", listener: (code: number, reason: Buffer) => void): this;
88
- on(event: "error", listener: (err: Error) => void): this;
89
- on(event: "message", listener: (data: ws.RawData, isBinary: boolean) => void): this;
86
+ addEventListener(event: "open", listener: () => void): void;
87
+ addEventListener(event: "close", listener: () => void): void;
88
+ addEventListener(event: "error", listener: (err: { message: string }) => void): void;
89
+ addEventListener(event: "message", listener: (data: ws.RawData | ws.MessageEvent | string) => void): void;
90
90
  }
91
91
 
92
92
  async function createCallFactory(
@@ -205,20 +205,20 @@ async function createCallFactory(
205
205
  let port = ports[reconnectAttempts % ports.length];
206
206
  let newWebSocket = createWebsocket(location.address, port);
207
207
 
208
- setupWebsocket(newWebSocket);
209
-
210
208
  let connectError = await new Promise<string | undefined>(resolve => {
211
- newWebSocket.on("open", () => {
209
+ newWebSocket.addEventListener("open", () => {
212
210
  resolve(undefined);
213
211
  });
214
- newWebSocket.on("close", () => {
212
+ newWebSocket.addEventListener("close", () => {
215
213
  resolve("Connection closed for non-error reason?");
216
214
  });
217
- newWebSocket.on("error", e => {
218
- resolve(String(e.stack));
215
+ newWebSocket.addEventListener("error", e => {
216
+ resolve(String(e.message));
219
217
  });
220
218
  });
221
219
 
220
+ setupWebsocket(newWebSocket);
221
+
222
222
  if (!connectError) {
223
223
  console.log(`Reconnected to ${location.address}:${port}`);
224
224
 
@@ -266,27 +266,27 @@ async function createCallFactory(
266
266
  }
267
267
 
268
268
  function setupWebsocket(webSocket: SenderInterface) {
269
- webSocket.on("error", e => {
269
+ webSocket.addEventListener("error", e => {
270
270
  console.log(`Websocket error for ${niceConnectionName}`, e);
271
271
  });
272
272
 
273
- webSocket.on("close", async () => {
273
+ webSocket.addEventListener("close", async () => {
274
274
  console.log(`Websocket closed ${niceConnectionName}`);
275
275
  if (retriesEnabled) {
276
276
  await tryToReconnect();
277
277
  }
278
278
  });
279
279
 
280
- webSocket.on("message", onMessage);
280
+ webSocket.addEventListener("message", onMessage);
281
281
  }
282
282
 
283
283
 
284
- async function onMessage(message: ws.RawData | MessageEvent | string) {
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
  }
@@ -90,14 +90,7 @@ export function createWebsocket(address: string, port: number): SenderInterface
90
90
  // NOTE: We assume an HTTP request has already been made, which will setup a nodeId cookie
91
91
  // (And as this point we can't even use peer certificates if we wanted to, as this must be done
92
92
  // directly in the browser)
93
- let webSocket = new WebSocket(`wss://${address}:${port}`);
94
- return Object.assign(webSocket, {
95
- on(event: string, callback: any) {
96
- // TODO: Use better type safety here
97
- (webSocket as any)["on" + event] = callback;
98
- return this as any;
99
- },
100
- });
93
+ return new WebSocket(`wss://${address}:${port}`);
101
94
  } else {
102
95
  let { key, cert } = getCertKeyPair();
103
96
  return new ws.WebSocket(`wss://${address}:${port}`, {
@@ -73,20 +73,6 @@ export async function startSocketServer(
73
73
  res.end();
74
74
  });
75
75
 
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
76
  let realServer = net.createServer(socket => {
91
77
  // NOTE: ONCE is used, so we only look at the first buffer, and then after that
92
78
  // we pipe. This should be very efficient, as pipe has insane throughput
@@ -94,21 +80,11 @@ export async function startSocketServer(
94
80
  socket.once("data", buffer => {
95
81
  // All HTTPS requests start with 22, and no HTTP requests start with 22,
96
82
  // so we just need to read the first byte.
97
- let byte = buffer[0];
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);
108
-
109
- baseSocket.on("error", (e) => {
110
- console.error(`Base socket error, ${e.stack}`);
111
- });
83
+ let server = buffer[0] === 22 ? httpsServer : httpServer;
84
+
85
+ // NOTE: Messages aren't dequeued until the current handler finishes, so we don't need to pause the socket or anything.
86
+ server.emit("connection", socket);
87
+ socket.unshift(buffer);
112
88
  });
113
89
  socket.on("error", (e) => {
114
90
  console.error(`Exposed socket error, ${e.stack}`);