summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-03-15 13:03:04 -0300
committerEuAndreh <eu@euandre.org>2024-03-15 13:03:04 -0300
commit09083b2bc095b2e33e2a2b3a7f2d9f2ab87d161a (patch)
treeae998764ca42d4b796f0422d3ec181c27ea6c25b /src
parentsrc/hero.mjs: Add support for "WEBSOCKET" type of route (diff)
downloadpapod-09083b2bc095b2e33e2a2b3a7f2d9f2ab87d161a.tar.gz
papod-09083b2bc095b2e33e2a2b3a7f2d9f2ab87d161a.tar.xz
src/hero.mjs: Add handlerForConnection()
Diffstat (limited to 'src')
-rw-r--r--src/hero.mjs16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/hero.mjs b/src/hero.mjs
index 10fa06e..61621af 100644
--- a/src/hero.mjs
+++ b/src/hero.mjs
@@ -309,6 +309,22 @@ export const buildHttpPayload = (code, {
"\r\n\r\n" +
message;
+export const fallback404Handler = (_req, socket) =>
+ socket.end(buildHttpPayload(404)).destroySoon();
+
+export const fallback405Handler = (_req, socket) =>
+ socket.end(buildHttpPayload(405)).destroySoon();
+
+export const handlerForConnection = (table, method, path) => {
+ if (method !== WEBSOCKET_METHOD) {
+ return fallback405Handler;
+ }
+
+ const segments = pathToSegments(path);
+ const handlerFn = u.getIn(table, [WEBSOCKET_KEYWORD, WEBSOCKET_METHOD].concat(segments));
+ return handlerFn || fallback404Handler;
+};
+
export const makeRequestListener = table => async (req, res) => {
const { status, headers, body } = await handleRequest(table, req);
res.writeHead(status, headers);