import fetch from "node-fetch";
// Canvas API credentials
let canvasApiToken: string | null = process.env.CANVAS_API_TOKEN || null;
let canvasDomain: string | null = process.env.CANVAS_DOMAIN || null;
// Base URL for Canvas API
export const getBaseUrl = () => {
if (!canvasDomain) {
throw new Error("Canvas domain not set. Please check CANVAS_DOMAIN environment variable.");
}
return `https://${canvasDomain}/api/v1`;
};
// Helper function for API requests with proper typing
export async function canvasApiRequest<T>(path: string, method = 'GET', body?: any): Promise<T> {
if (!canvasApiToken) {
throw new Error("Canvas API token not set. Please check CANVAS_API_TOKEN environment variable.");
}
const url = `${getBaseUrl()}${path}`;
const response = await fetch(url, {
method,
headers: {
'Authorization': `Bearer ${canvasApiToken}`,
'Content-Type': 'application/json',
},
body: body ? JSON.stringify(body) : undefined,
});
if (!response.ok) {
const error = await response.text();
throw new Error(`Canvas API error: ${response.status} - ${error}`);
}
return response.json() as Promise<T>;
}
// Getters for credentials (for validation purposes)
export const getCanvasApiToken = () => canvasApiToken;
export const getCanvasDomain = () => canvasDomain;