48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import {
|
|
createDirectus,
|
|
rest,
|
|
authentication,
|
|
DirectusClient,
|
|
RestClient,
|
|
AuthenticationClient,
|
|
} from "@directus/sdk";
|
|
|
|
export type MintelDirectusClient = DirectusClient<any> &
|
|
RestClient<any> &
|
|
AuthenticationClient<any>;
|
|
|
|
/**
|
|
* Creates a Directus client configured with Mintel standards
|
|
*/
|
|
export function createMintelDirectusClient(url?: string): MintelDirectusClient {
|
|
const directusUrl =
|
|
url || process.env.DIRECTUS_URL || "http://localhost:8055";
|
|
|
|
return createDirectus(directusUrl).with(rest()).with(authentication());
|
|
}
|
|
|
|
/**
|
|
* Ensures the client is authenticated using either a static token or admin credentials
|
|
*/
|
|
export async function ensureDirectusAuthenticated(
|
|
client: MintelDirectusClient,
|
|
) {
|
|
const token = process.env.DIRECTUS_API_TOKEN || process.env.DIRECTUS_TOKEN;
|
|
const email = process.env.DIRECTUS_ADMIN_EMAIL;
|
|
const password = process.env.DIRECTUS_ADMIN_PASSWORD;
|
|
|
|
if (token) {
|
|
client.setToken(token);
|
|
return;
|
|
}
|
|
|
|
if (email && password) {
|
|
try {
|
|
await client.login({ email, password });
|
|
} catch (e) {
|
|
console.error("Failed to authenticate with Directus:", e);
|
|
throw e;
|
|
}
|
|
}
|
|
}
|