@hono/node-server 2.0.0-rc.2 → 2.0.1
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 +42 -9
- package/dist/index.mjs +42 -9
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -836,10 +836,31 @@ const CloseEvent = globalThis.CloseEvent ?? class extends Event {
|
|
|
836
836
|
const generateConnectionSymbol = () => Symbol("connection");
|
|
837
837
|
const CONNECTION_SYMBOL_KEY = Symbol("CONNECTION_SYMBOL_KEY");
|
|
838
838
|
const WAIT_FOR_WEBSOCKET_SYMBOL = Symbol("WAIT_FOR_WEBSOCKET_SYMBOL");
|
|
839
|
-
const
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
839
|
+
const responseHeadersToSkip = new Set([
|
|
840
|
+
"connection",
|
|
841
|
+
"content-length",
|
|
842
|
+
"keep-alive",
|
|
843
|
+
"proxy-authenticate",
|
|
844
|
+
"proxy-authorization",
|
|
845
|
+
"te",
|
|
846
|
+
"trailer",
|
|
847
|
+
"transfer-encoding",
|
|
848
|
+
"upgrade",
|
|
849
|
+
"sec-websocket-accept",
|
|
850
|
+
"sec-websocket-extensions",
|
|
851
|
+
"sec-websocket-protocol"
|
|
852
|
+
]);
|
|
853
|
+
const appendResponseHeaders = (headers, responseHeaders) => {
|
|
854
|
+
if (!responseHeaders) return;
|
|
855
|
+
responseHeaders.forEach((value, key) => {
|
|
856
|
+
if (responseHeadersToSkip.has(key.toLowerCase())) return;
|
|
857
|
+
headers.push(`${key}: ${value}`);
|
|
858
|
+
});
|
|
859
|
+
};
|
|
860
|
+
const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
861
|
+
const responseLines = ["Connection: close", "Content-Length: 0"];
|
|
862
|
+
appendResponseHeaders(responseLines, responseHeaders);
|
|
863
|
+
socket.end(`HTTP/1.1 ${status.toString()} ${node_http.STATUS_CODES[status] ?? ""}\r\n${responseLines.join("\r\n")}\r\n\r
|
|
843
864
|
`);
|
|
844
865
|
};
|
|
845
866
|
const createUpgradeRequest = (request) => {
|
|
@@ -880,9 +901,13 @@ const setupWebSocket = (options) => {
|
|
|
880
901
|
[WAIT_FOR_WEBSOCKET_SYMBOL]: waitForWebSocket
|
|
881
902
|
};
|
|
882
903
|
let status = 400;
|
|
904
|
+
let responseHeaders;
|
|
883
905
|
try {
|
|
884
906
|
const response = await fetchCallback(createUpgradeRequest(request), env);
|
|
885
|
-
if (response instanceof Response)
|
|
907
|
+
if (response instanceof Response) {
|
|
908
|
+
status = response.status;
|
|
909
|
+
responseHeaders = response.headers;
|
|
910
|
+
}
|
|
886
911
|
} catch {
|
|
887
912
|
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, 500);
|
|
888
913
|
return;
|
|
@@ -890,12 +915,20 @@ const setupWebSocket = (options) => {
|
|
|
890
915
|
const waiter = waiterMap.get(request);
|
|
891
916
|
if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {
|
|
892
917
|
waiterMap.delete(request);
|
|
893
|
-
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status);
|
|
918
|
+
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status, responseHeaders);
|
|
894
919
|
return;
|
|
895
920
|
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
}
|
|
921
|
+
const addResponseHeaders = (headers) => {
|
|
922
|
+
appendResponseHeaders(headers, responseHeaders);
|
|
923
|
+
};
|
|
924
|
+
wss.on("headers", addResponseHeaders);
|
|
925
|
+
try {
|
|
926
|
+
wss.handleUpgrade(request, socket, head, (ws) => {
|
|
927
|
+
wss.emit("connection", ws, request);
|
|
928
|
+
});
|
|
929
|
+
} finally {
|
|
930
|
+
wss.off("headers", addResponseHeaders);
|
|
931
|
+
}
|
|
899
932
|
});
|
|
900
933
|
server.on("close", () => {
|
|
901
934
|
wss.close();
|
package/dist/index.mjs
CHANGED
|
@@ -835,10 +835,31 @@ const CloseEvent = globalThis.CloseEvent ?? class extends Event {
|
|
|
835
835
|
const generateConnectionSymbol = () => Symbol("connection");
|
|
836
836
|
const CONNECTION_SYMBOL_KEY = Symbol("CONNECTION_SYMBOL_KEY");
|
|
837
837
|
const WAIT_FOR_WEBSOCKET_SYMBOL = Symbol("WAIT_FOR_WEBSOCKET_SYMBOL");
|
|
838
|
-
const
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
838
|
+
const responseHeadersToSkip = new Set([
|
|
839
|
+
"connection",
|
|
840
|
+
"content-length",
|
|
841
|
+
"keep-alive",
|
|
842
|
+
"proxy-authenticate",
|
|
843
|
+
"proxy-authorization",
|
|
844
|
+
"te",
|
|
845
|
+
"trailer",
|
|
846
|
+
"transfer-encoding",
|
|
847
|
+
"upgrade",
|
|
848
|
+
"sec-websocket-accept",
|
|
849
|
+
"sec-websocket-extensions",
|
|
850
|
+
"sec-websocket-protocol"
|
|
851
|
+
]);
|
|
852
|
+
const appendResponseHeaders = (headers, responseHeaders) => {
|
|
853
|
+
if (!responseHeaders) return;
|
|
854
|
+
responseHeaders.forEach((value, key) => {
|
|
855
|
+
if (responseHeadersToSkip.has(key.toLowerCase())) return;
|
|
856
|
+
headers.push(`${key}: ${value}`);
|
|
857
|
+
});
|
|
858
|
+
};
|
|
859
|
+
const rejectUpgradeRequest = (socket, status, responseHeaders) => {
|
|
860
|
+
const responseLines = ["Connection: close", "Content-Length: 0"];
|
|
861
|
+
appendResponseHeaders(responseLines, responseHeaders);
|
|
862
|
+
socket.end(`HTTP/1.1 ${status.toString()} ${STATUS_CODES[status] ?? ""}\r\n${responseLines.join("\r\n")}\r\n\r
|
|
842
863
|
`);
|
|
843
864
|
};
|
|
844
865
|
const createUpgradeRequest = (request) => {
|
|
@@ -879,9 +900,13 @@ const setupWebSocket = (options) => {
|
|
|
879
900
|
[WAIT_FOR_WEBSOCKET_SYMBOL]: waitForWebSocket
|
|
880
901
|
};
|
|
881
902
|
let status = 400;
|
|
903
|
+
let responseHeaders;
|
|
882
904
|
try {
|
|
883
905
|
const response = await fetchCallback(createUpgradeRequest(request), env);
|
|
884
|
-
if (response instanceof Response)
|
|
906
|
+
if (response instanceof Response) {
|
|
907
|
+
status = response.status;
|
|
908
|
+
responseHeaders = response.headers;
|
|
909
|
+
}
|
|
885
910
|
} catch {
|
|
886
911
|
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, 500);
|
|
887
912
|
return;
|
|
@@ -889,12 +914,20 @@ const setupWebSocket = (options) => {
|
|
|
889
914
|
const waiter = waiterMap.get(request);
|
|
890
915
|
if (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {
|
|
891
916
|
waiterMap.delete(request);
|
|
892
|
-
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status);
|
|
917
|
+
if (server.listenerCount("upgrade") === 1) rejectUpgradeRequest(socket, status, responseHeaders);
|
|
893
918
|
return;
|
|
894
919
|
}
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
}
|
|
920
|
+
const addResponseHeaders = (headers) => {
|
|
921
|
+
appendResponseHeaders(headers, responseHeaders);
|
|
922
|
+
};
|
|
923
|
+
wss.on("headers", addResponseHeaders);
|
|
924
|
+
try {
|
|
925
|
+
wss.handleUpgrade(request, socket, head, (ws) => {
|
|
926
|
+
wss.emit("connection", ws, request);
|
|
927
|
+
});
|
|
928
|
+
} finally {
|
|
929
|
+
wss.off("headers", addResponseHeaders);
|
|
930
|
+
}
|
|
898
931
|
});
|
|
899
932
|
server.on("close", () => {
|
|
900
933
|
wss.close();
|