81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
/**
|
|
* Directus Client Configuration
|
|
* Provides a configured Directus SDK client for interacting with the Directus API
|
|
*/
|
|
|
|
const { createDirectus, rest, authentication } = require('@directus/sdk');
|
|
const dotenv = require('dotenv');
|
|
const path = require('path');
|
|
|
|
// Load environment variables from project root
|
|
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
|
|
|
|
// Directus configuration from environment or defaults
|
|
const DIRECTUS_CONFIG = {
|
|
url: process.env.DIRECTUS_URL || 'https://enias.zeabur.app',
|
|
token: process.env.DIRECTUS_TOKEN || '1frxUfw1TY_OUSHNPmQWDAeAAU0l2kxu',
|
|
email: process.env.DIRECTUS_EMAIL,
|
|
password: process.env.DIRECTUS_PASSWORD
|
|
};
|
|
|
|
/**
|
|
* Create and configure Directus client
|
|
* @returns {Object} Configured Directus client instance
|
|
*/
|
|
function createDirectusClient() {
|
|
const client = createDirectus(DIRECTUS_CONFIG.url)
|
|
.with(rest())
|
|
.with(authentication());
|
|
|
|
// Add authentication method
|
|
client.authenticate = async () => {
|
|
if (DIRECTUS_CONFIG.token) {
|
|
// Use static token
|
|
await client.setToken(DIRECTUS_CONFIG.token);
|
|
console.log('✅ Authenticated with static token');
|
|
} else if (DIRECTUS_CONFIG.email && DIRECTUS_CONFIG.password) {
|
|
// Use email/password authentication
|
|
await client.login(DIRECTUS_CONFIG.email, DIRECTUS_CONFIG.password);
|
|
console.log('✅ Authenticated with email/password');
|
|
} else {
|
|
throw new Error('No authentication credentials provided. Set DIRECTUS_TOKEN or DIRECTUS_EMAIL/DIRECTUS_PASSWORD');
|
|
}
|
|
};
|
|
|
|
return client;
|
|
}
|
|
|
|
/**
|
|
* Get authenticated Directus client
|
|
* @returns {Promise<Object>} Authenticated Directus client
|
|
*/
|
|
async function getAuthenticatedClient() {
|
|
const client = createDirectusClient();
|
|
await client.authenticate();
|
|
return client;
|
|
}
|
|
|
|
/**
|
|
* Test connection to Directus
|
|
* @returns {Promise<boolean>} True if connection successful
|
|
*/
|
|
async function testConnection() {
|
|
try {
|
|
const client = await getAuthenticatedClient();
|
|
// Use readMe from SDK
|
|
const { readMe } = require('@directus/sdk');
|
|
const response = await client.request(readMe());
|
|
console.log('✅ Connected to Directus as:', response.email || 'API User');
|
|
return true;
|
|
} catch (error) {
|
|
console.error('❌ Failed to connect to Directus:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createDirectusClient,
|
|
getAuthenticatedClient,
|
|
testConnection,
|
|
DIRECTUS_CONFIG
|
|
}; |