import refreshTokenHelper from "../../utils/refreshTokenHelper" import forceLogoutHelper from "../../utils/forceLogoutHelper" import errorHandlingHelper from "../../utils/errorHandlingHelper" import fetchHelper from '../../utils/fetchHelper' import setAuthCookie from '../../utils/setAuthCookie' import { trimUser, trimRole, trimOrganization, trimClient, trimWarehouse } from '../../utils/trimCookieData' import { enforceMobileWorkerGate } from '../../utils/mobileWorkerHelper' const selectRole = async (event: any, body: any, config: any) => { let data: any = {} const logshipSession = getCookie(event, 'logship_session') //@ts-ignore let token: string = getCookie(event, 'logship_it') //await useStorage().getItem('logship_token_'+logshipSession) const resToken: any = await fetchHelper(event, 'auth/tokens', 'PUT', token, { clientId: body.clientId, roleId: body.roleId, organizationId: body.organizationId, warehouseId: body.warehouseId, language: body.language }) if(resToken.token) { setAuthCookie(event, 'logship_it', resToken.token) //await useStorage().setItem('logship_token_'+logshipSession, resToken.token) setAuthCookie(event, 'logship_rt', resToken.refresh_token) data['token'] = resToken.token data['refresh_token'] = resToken.refresh_token } if(resToken.userId) { setAuthCookie(event, 'logship_user_id', resToken.userId) data['userId'] = resToken.userId const fetchOrNull = (url: string) => fetchHelper(event, url, 'GET', resToken.token, null).catch((e: any) => { if (e?.status === 401 || e?.status === 403) throw e return null }) const [resUser, resClient, resRole, resOrg, resWarehouse] = await Promise.all([ fetchOrNull('models/ad_user/' + resToken.userId), body.clientId ? fetchOrNull('models/ad_client/' + body.clientId) : Promise.resolve(null), body.roleId ? fetchOrNull('models/ad_role/' + body.roleId) : Promise.resolve(null), body.organizationId ? fetchOrNull('models/ad_org/' + body.organizationId) : Promise.resolve(null), body.warehouseId ? fetchOrNull('models/m_warehouse/' + body.warehouseId) : Promise.resolve(null) ]) if(resUser) { setAuthCookie(event, 'logship_user', trimUser(resUser)) data['user'] = resUser } if(resClient) { setAuthCookie(event, 'logship_client', trimClient(resClient)) data['client'] = resClient } if(resRole) { setAuthCookie(event, 'logship_role', trimRole(resRole)) data['role'] = resRole } if(resOrg) { setAuthCookie(event, 'logship_organization', trimOrganization(resOrg)) data['organization'] = resOrg } if(resWarehouse) { setAuthCookie(event, 'logship_warehouse', trimWarehouse(resWarehouse)) data['warehouse'] = resWarehouse } // Honor the mobile-worker cookie only when the user record allows it. const wantsMobile = getCookie(event, 'logship_mw') === '1' enforceMobileWorkerGate(event, wantsMobile, resUser, data) } if(resToken.language) { setAuthCookie(event, 'logship_language', resToken.language) data['language'] = resToken.language } setAuthCookie(event, 'logship_client_id', body.clientId) setAuthCookie(event, 'logship_role_id', body.roleId) setAuthCookie(event, 'logship_organization_id', body.organizationId) setAuthCookie(event, 'logship_warehouse_id', body.warehouseId) return data } export default defineEventHandler(async (event) => { const config = useRuntimeConfig() const body = await readBody(event) let data: any = {} try { data = await selectRole(event, body, config) } catch(err: any) { try { await refreshTokenHelper(event) data = await selectRole(event, body, config) } catch(error) { data = { body: { clientId: body.clientId, roleId: body.roleId, organizationId: body.organizationId, warehouseId: body.warehouseId, language: body.language }, //@ts-ignore status: error.status, //@ts-ignore message: error.message } } } return data })