import refreshTokenHelper from '../../utils/refreshTokenHelper' import getTokenHelper from '../../utils/getTokenHelper' import fetchHelper from '../../utils/fetchHelper' /** * Session refresh endpoint for PWA resume. * Validates the current token against iDempiere and refreshes if expired. * Returns { valid: true } if session is active, or refreshes and returns the new state. */ const handleFunc = async (event: any, authToken: string | null = null) => { const token = authToken ?? await getTokenHelper(event) // Make a lightweight call to iDempiere to validate the token. // NB: query columns must be real DB columns — '$select=id' is rejected // ("id is not a valid column of table AD_User"). const res = await fetchHelper(event, 'models/ad_user?$top=1&$select=AD_User_ID', 'GET', token, null) return { valid: true } } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch (err: any) { const status = err?.statusCode ?? err?.status ?? err?.data?.status if (status === 401 || status === 403) { try { // Token expired — refresh it (this sets new cookies via setAuthCookie) let authToken = await refreshTokenHelper(event) data = { valid: true, refreshed: true } } catch (error: any) { data = { valid: false } } } else { // Transient/non-auth error — don't burn a refresh (and don't log the // user out); the session can't be disproven invalid. data = { valid: true } } } return data })