import { string } from 'alga-js' import refreshTokenHelper from '../../utils/refreshTokenHelper' import forceLogoutHelper from '../../utils/forceLogoutHelper' import errorHandlingHelper from '../../utils/errorHandlingHelper' import getTokenHelper from '../../utils/getTokenHelper' // iDempiere already scopes ad_org reads to whatever the bearer token's role // can access — no AD_Role_ID join needed. Return a trimmed list (id + name) // so the mobile org pickers can render it directly. const handleFunc = async (event: any, authToken: any = null) => { const token = authToken ?? await getTokenHelper(event) const filter = 'IsActive eq true' const orderby = 'Name asc' const select = 'AD_Org_ID,Name' const url = `models/ad_org?$filter=${string.urlEncode(filter)}&$orderby=${string.urlEncode(orderby)}&$select=${select}&$top=500` const res: any = await event.context.fetch(url, 'GET', token, null) const records: any[] = Array.isArray(res?.records) ? res.records : [] return records .map((r: any) => ({ id: r.id ?? r.AD_Org_ID, name: r.Name || '' })) .filter((o: any) => o.id !== undefined && o.id !== null && o.name) } export default defineEventHandler(async (event) => { let data: any[] = [] try { data = await handleFunc(event) } catch (err: any) { try { const authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch (error: any) { const errData = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, errData) throw createError({ statusCode: err?.statusCode || 500, statusMessage: err?.statusMessage || 'Error loading organizations', data: errData }) } } return data })