import path from 'path'; import { fileURLToPath } from 'url'; import dotenv from 'dotenv'; import { createDirectus, staticToken, rest } from '@directus/sdk'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: path.resolve(__dirname, '..', '..', '..', '.env') }); let directus; let API_URL; export const initDirectusClient = (config) => { API_URL = config.directus?.apiUrl; const token = process.env.DIRECTUS_API_TOKEN; if (!API_URL || !token) throw new Error('Missing Directus API URL or token.'); directus = createDirectus(API_URL).with(staticToken(process.env.DIRECTUS_API_TOKEN)).with(rest()); }; export const getDirectusClient = () => { if (!directus) throw new Error('Directus client not initialized.'); return directus; }; const request = async (method, endpoint, body = null) => { const API_TOKEN = process.env.DIRECTUS_API_TOKEN; const res = await fetch(`${API_URL}/items/${endpoint}`, { method, headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${API_TOKEN}` }, body: body ? JSON.stringify(body) : null }); if (!res.ok) { const errorText = await res.text(); throw new Error(`Directus API error: ${res.status} ${errorText}`); } return await res.json(); }; export const searchItems = async (collection, query = '', filters = {}) => { const API_TOKEN = process.env.DIRECTUS_API_TOKEN; const params = new URLSearchParams(); if (query) params.append('search', query); params.append('limit', '50'); for (const [field, value] of Object.entries(filters)) { params.append(`filter[${field}][_eq]`, value); } try { const res = await fetch(`${API_URL}/items/${collection}?${params.toString()}`, { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${API_TOKEN}` } }); const data = await res.json(); return data?.data ?? []; } catch (err) { console.error(`❌ Failed to search ${collection}:`, err.message); return []; } }; export const updateItem = async (collection, id, values) => await request('PATCH', `${collection}/${id}`, values); export const createItem = async (collection, values) => await request('POST', collection, values);