fix(node-ws): ws wasn't created when upgrade process is async (#959)
* fix(node-ws): ws wasn't created when upgrade process is async * chore: add changeset * add test * Update big-pillows-shave.mdpull/966/head
parent
4f927dfaa8
commit
c24efa6b8a
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@hono/node-ws': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix a bug of upgrading
|
|
@ -25,6 +25,32 @@ describe('WebSocket helper', () => {
|
||||||
server.close()
|
server.close()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should be inited WebSocket Context even if upgrading process is asynchronous', async () => {
|
||||||
|
const mainPromise = new Promise<boolean>((resolve) =>
|
||||||
|
app.get(
|
||||||
|
'/',
|
||||||
|
upgradeWebSocket(
|
||||||
|
() =>
|
||||||
|
new Promise((resolveWS) =>
|
||||||
|
setTimeout(
|
||||||
|
() =>
|
||||||
|
resolveWS({
|
||||||
|
onOpen() {
|
||||||
|
resolve(true)
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
100
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
new WebSocket('ws://localhost:3030/')
|
||||||
|
|
||||||
|
expect(await mainPromise).toBe(true)
|
||||||
|
})
|
||||||
|
|
||||||
it('Should be able to connect', async () => {
|
it('Should be able to connect', async () => {
|
||||||
const mainPromise = new Promise<boolean>((resolve) =>
|
const mainPromise = new Promise<boolean>((resolve) =>
|
||||||
app.get(
|
app.get(
|
||||||
|
|
|
@ -71,8 +71,8 @@ export const createNodeWebSocket = (init: NodeWebSocketInit): NodeWebSocket => {
|
||||||
}
|
}
|
||||||
|
|
||||||
;(async () => {
|
;(async () => {
|
||||||
const events = await createEvents(c)
|
|
||||||
const ws = await nodeUpgradeWebSocket(c.env.incoming)
|
const ws = await nodeUpgradeWebSocket(c.env.incoming)
|
||||||
|
const events = await createEvents(c)
|
||||||
|
|
||||||
const ctx: WSContext<WebSocket> = {
|
const ctx: WSContext<WebSocket> = {
|
||||||
binaryType: 'arraybuffer',
|
binaryType: 'arraybuffer',
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
"extends": "../../tsconfig.json",
|
"extends": "../../tsconfig.json",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"rootDir": "./src",
|
"rootDir": "./src",
|
||||||
"outDir": "./dist"
|
"outDir": "./dist",
|
||||||
|
"types": [
|
||||||
|
"vitest/globals"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src/**/*.ts"
|
"src/**/*.ts"
|
||||||
|
|
|
@ -89,7 +89,9 @@ const getOidcAuthEnv = (c: Context) => {
|
||||||
try {
|
try {
|
||||||
new URL(oidcAuthEnv.OIDC_REDIRECT_URI)
|
new URL(oidcAuthEnv.OIDC_REDIRECT_URI)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
throw new HTTPException(500, { message: 'The OIDC redirect URI is invalid. It must be a full URL or an absolute path' })
|
throw new HTTPException(500, {
|
||||||
|
message: 'The OIDC redirect URI is invalid. It must be a full URL or an absolute path',
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
oidcAuthEnv.OIDC_COOKIE_PATH = oidcAuthEnv.OIDC_COOKIE_PATH ?? defaultOidcAuthCookiePath
|
oidcAuthEnv.OIDC_COOKIE_PATH = oidcAuthEnv.OIDC_COOKIE_PATH ?? defaultOidcAuthCookiePath
|
||||||
|
@ -149,7 +151,7 @@ export const getAuth = async (c: Context): Promise<OidcAuth | null> => {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
auth = await verify(session_jwt, env.OIDC_AUTH_SECRET) as OidcAuth
|
auth = (await verify(session_jwt, env.OIDC_AUTH_SECRET)) as OidcAuth
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
deleteCookie(c, env.OIDC_COOKIE_NAME, { path: env.OIDC_COOKIE_PATH })
|
deleteCookie(c, env.OIDC_COOKIE_NAME, { path: env.OIDC_COOKIE_PATH })
|
||||||
return null
|
return null
|
||||||
|
@ -239,7 +241,7 @@ export const revokeSession = async (c: Context): Promise<void> => {
|
||||||
const session_jwt = getCookie(c, env.OIDC_COOKIE_NAME)
|
const session_jwt = getCookie(c, env.OIDC_COOKIE_NAME)
|
||||||
if (session_jwt !== undefined) {
|
if (session_jwt !== undefined) {
|
||||||
deleteCookie(c, env.OIDC_COOKIE_NAME, { path: env.OIDC_COOKIE_PATH })
|
deleteCookie(c, env.OIDC_COOKIE_NAME, { path: env.OIDC_COOKIE_PATH })
|
||||||
const auth = await verify(session_jwt, env.OIDC_AUTH_SECRET) as OidcAuth
|
const auth = (await verify(session_jwt, env.OIDC_AUTH_SECRET)) as OidcAuth
|
||||||
if (auth.rtk !== undefined && auth.rtk !== '') {
|
if (auth.rtk !== undefined && auth.rtk !== '') {
|
||||||
// revoke refresh token
|
// revoke refresh token
|
||||||
const as = await getAuthorizationServer(c)
|
const as = await getAuthorizationServer(c)
|
||||||
|
|
Loading…
Reference in New Issue