@hono/node-server 2.0.9 → 2.0.10

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/dist/index.cjs CHANGED
@@ -1001,10 +1001,18 @@ const setupWebSocket = (options) => {
1001
1001
  waiterMap.delete(request);
1002
1002
  }
1003
1003
  });
1004
+ const rejectWaiter = (request) => {
1005
+ const waiter = waiterMap.get(request);
1006
+ if (waiter) {
1007
+ waiterMap.delete(request);
1008
+ waiter.reject(/* @__PURE__ */ new Error("WebSocket handshake aborted"));
1009
+ }
1010
+ };
1004
1011
  const waitForWebSocket = (request, connectionSymbol) => {
1005
- return new Promise((resolve) => {
1012
+ return new Promise((resolve, reject) => {
1006
1013
  waiterMap.set(request, {
1007
1014
  resolve,
1015
+ reject,
1008
1016
  connectionSymbol
1009
1017
  });
1010
1018
  });
@@ -1031,16 +1039,19 @@ const setupWebSocket = (options) => {
1031
1039
  }
1032
1040
  const waiter = waiterMap.get(request);
1033
1041
  if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {
1034
- waiterMap.delete(request);
1042
+ rejectWaiter(request);
1035
1043
  if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status, responseHeaders);
1036
1044
  return;
1037
1045
  }
1038
1046
  const addResponseHeaders = (headers) => {
1039
1047
  appendResponseHeaders(headers, responseHeaders);
1040
1048
  };
1049
+ const reclaimWaiterOnClose = () => rejectWaiter(request);
1050
+ socket.once("close", reclaimWaiterOnClose);
1041
1051
  wss.on("headers", addResponseHeaders);
1042
1052
  try {
1043
1053
  wss.handleUpgrade(request, socket, head, (ws) => {
1054
+ socket.off("close", reclaimWaiterOnClose);
1044
1055
  wss.emit("connection", ws, request);
1045
1056
  });
1046
1057
  } finally {
@@ -1059,7 +1070,12 @@ const upgradeWebSocket = (0, hono_ws.defineWebSocketHelper)(async (c, events, op
1059
1070
  const connectionSymbol = generateConnectionSymbol();
1060
1071
  env[CONNECTION_SYMBOL_KEY] = connectionSymbol;
1061
1072
  (async () => {
1062
- const ws = await waitForWebSocket(env.incoming, connectionSymbol);
1073
+ let ws;
1074
+ try {
1075
+ ws = await waitForWebSocket(env.incoming, connectionSymbol);
1076
+ } catch {
1077
+ return;
1078
+ }
1063
1079
  const messagesReceivedInStarting = [];
1064
1080
  const bufferMessage = (data, isBinary) => {
1065
1081
  messagesReceivedInStarting.push([data, isBinary]);
package/dist/index.mjs CHANGED
@@ -1000,10 +1000,18 @@ const setupWebSocket = (options) => {
1000
1000
  waiterMap.delete(request);
1001
1001
  }
1002
1002
  });
1003
+ const rejectWaiter = (request) => {
1004
+ const waiter = waiterMap.get(request);
1005
+ if (waiter) {
1006
+ waiterMap.delete(request);
1007
+ waiter.reject(/* @__PURE__ */ new Error("WebSocket handshake aborted"));
1008
+ }
1009
+ };
1003
1010
  const waitForWebSocket = (request, connectionSymbol) => {
1004
- return new Promise((resolve) => {
1011
+ return new Promise((resolve, reject) => {
1005
1012
  waiterMap.set(request, {
1006
1013
  resolve,
1014
+ reject,
1007
1015
  connectionSymbol
1008
1016
  });
1009
1017
  });
@@ -1030,16 +1038,19 @@ const setupWebSocket = (options) => {
1030
1038
  }
1031
1039
  const waiter = waiterMap.get(request);
1032
1040
  if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {
1033
- waiterMap.delete(request);
1041
+ rejectWaiter(request);
1034
1042
  if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status, responseHeaders);
1035
1043
  return;
1036
1044
  }
1037
1045
  const addResponseHeaders = (headers) => {
1038
1046
  appendResponseHeaders(headers, responseHeaders);
1039
1047
  };
1048
+ const reclaimWaiterOnClose = () => rejectWaiter(request);
1049
+ socket.once("close", reclaimWaiterOnClose);
1040
1050
  wss.on("headers", addResponseHeaders);
1041
1051
  try {
1042
1052
  wss.handleUpgrade(request, socket, head, (ws) => {
1053
+ socket.off("close", reclaimWaiterOnClose);
1043
1054
  wss.emit("connection", ws, request);
1044
1055
  });
1045
1056
  } finally {
@@ -1058,7 +1069,12 @@ const upgradeWebSocket = defineWebSocketHelper(async (c, events, options) => {
1058
1069
  const connectionSymbol = generateConnectionSymbol();
1059
1070
  env[CONNECTION_SYMBOL_KEY] = connectionSymbol;
1060
1071
  (async () => {
1061
- const ws = await waitForWebSocket(env.incoming, connectionSymbol);
1072
+ let ws;
1073
+ try {
1074
+ ws = await waitForWebSocket(env.incoming, connectionSymbol);
1075
+ } catch {
1076
+ return;
1077
+ }
1062
1078
  const messagesReceivedInStarting = [];
1063
1079
  const bufferMessage = (data, isBinary) => {
1064
1080
  messagesReceivedInStarting.push([data, isBinary]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hono/node-server",
3
- "version": "2.0.9",
3
+ "version": "2.0.10",
4
4
  "description": "Node.js Adapter for Hono",
5
5
  "main": "dist/index.mjs",
6
6
  "type": "module",