Files
speckle-server/packages/frontend-2/server/routes/web-api/cookie-fix.ts
T
Kristaps Fabians Geikins 1d2a594f0a chore: upgrade TS 5.2 -> 5.7.3 & ESLint to 9.20.1 (#4032)
* chore: upgrade TS 5.2 -> 5.7.3

* vite dts fix

* lint fix

* resolutions fix

* ui comp build fix

* precommit fix?

* latest eslint version

* autoloader fix

* undo unnecessary viewer change

* eslint fixes fe2 + trying disabled type linting

* lint fixes
2025-02-20 14:18:18 +02:00

51 lines
1.5 KiB
TypeScript

import type { Optional } from '@speckle/shared'
import { has, isObjectLike } from 'lodash-es'
type TempCookieValue = { expires?: Optional<string>; maxAge?: Optional<number> }
const isValidTempCookieValue = (cookie: unknown): cookie is TempCookieValue => {
if (!isObjectLike(cookie)) return false
return has(cookie, 'expires') || has(cookie, 'maxAge')
}
export default defineEventHandler((event) => {
const cookies = parseCookies(event)
for (const [key, val] of Object.entries(cookies)) {
if (key.startsWith('tmp-')) {
// Try reading in cookie settings
let tempCookieVal: Optional<TempCookieValue> = undefined
try {
const parsedVal = JSON.parse(val) as unknown
if (isValidTempCookieValue(parsedVal)) {
tempCookieVal = parsedVal
}
} catch {
deleteCookie(event, key)
continue
}
if (!tempCookieVal) {
deleteCookie(event, key)
continue
}
// Try finding cookie that we need to fix
const cookieName = key.replace('tmp-', '')
const cookieValue = cookies[cookieName]
if (!cookieValue) {
deleteCookie(event, key)
continue
}
// Create new cookie with the correct settings
setCookie(event, cookieName, cookieValue, {
maxAge: tempCookieVal.maxAge,
expires: tempCookieVal.expires ? new Date(tempCookieVal.expires) : undefined
})
deleteCookie(event, key)
}
}
return { status: 'ok' }
})