1import { base } from '$app/paths';
 2import { error } from '@sveltejs/kit';
 3import { browser } from '$app/environment';
 4import { config } from '$lib/stores/settings.svelte';
 5
 6/**
 7 * Validates API key by making a request to the server props endpoint
 8 * Throws SvelteKit errors for authentication failures or server issues
 9 */
10export async function validateApiKey(fetch: typeof globalThis.fetch): Promise<void> {
11	if (!browser) {
12		return;
13	}
14
15	try {
16		const apiKey = config().apiKey;
17
18		const headers: Record<string, string> = {
19			'Content-Type': 'application/json'
20		};
21
22		if (apiKey) {
23			headers.Authorization = `Bearer ${apiKey}`;
24		}
25
26		const response = await fetch(`${base}/props`, { headers });
27
28		if (!response.ok) {
29			if (response.status === 401 || response.status === 403) {
30				throw error(401, 'Access denied');
31			}
32
33			console.warn(`Server responded with status ${response.status} during API key validation`);
34			return;
35		}
36	} catch (err) {
37		// If it's already a SvelteKit error, re-throw it
38		if (err && typeof err === 'object' && 'status' in err) {
39			throw err;
40		}
41
42		// Network or other errors
43		console.warn('Cannot connect to server for API key validation:', err);
44	}
45}