diff options
author | EuAndreh <eu@euandre.org> | 2024-03-16 06:27:17 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-03-16 06:27:17 -0300 |
commit | 2246cc9dc5e4d997d45af0855aeec578c1eb297c (patch) | |
tree | bb4c84cb83eafa7d90e855764613686ff2b594b5 /src | |
parent | src/hero.mjs: Remove WEBSOCKET_* constants (diff) | |
download | papod-2246cc9dc5e4d997d45af0855aeec578c1eb297c.tar.gz papod-2246cc9dc5e4d997d45af0855aeec578c1eb297c.tar.xz |
src/hero.mjs: Add interceptors.websocketHandshake()
Diffstat (limited to 'src')
-rw-r--r-- | src/hero.mjs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/hero.mjs b/src/hero.mjs index a4ca217..131b796 100644 --- a/src/hero.mjs +++ b/src/hero.mjs @@ -210,6 +210,29 @@ export const interceptorsFn = ({ }; } }, + websocketHandshake: async (req, next) => { + if (!req.upgrade) { + return await next(req); + } + + const { method, headers} = req; + const { isValid, response } = validateUpgrade(method, headers); + if (!isValid) { + return response; + } + + const _response = await next(req); + const hash = computeHash(headers["sec-websocket-key"]); + + return { + status: 101, + headers: { + "Connection": "Upgrade", + "Upgrade": "websocket", + "Sec-WebSocket-Accept": hash, + }, + }; + }, }); export const interceptors = interceptorsFn(); @@ -219,6 +242,7 @@ export const defaultInterceptors = [ interceptors.contentType, interceptors.requestId, interceptors.logged, + interceptors.websocketHandshake, ]; export const chainInterceptors = arr => |