zk-Armor/ohmyagent / bonsai.cpp /tools /ui /src /lib /utils /api-key-validation.ts
zk-Armor's picture
download
raw
1.56 kB
import { error } from '@sveltejs/kit';
import { browser } from '$app/environment';
import { base } from '$app/paths';
import { HEADERS } from '$lib/constants';
import { MimeTypeApplication } from '$lib/enums';
import { settingsStore } from '$lib/stores/settings/index.svelte';
/**
* Validates API key by making a request to the server props endpoint
* Throws SvelteKit errors for authentication failures or server issues
*/
export async function validateApiKey(fetch: typeof globalThis.fetch): Promise<void> {
if (!browser) {
return;
}
const apiKey = settingsStore.config.apiKey;
try {
const headers: Record<string, string> = {
[HEADERS.CONTENT_TYPE]: MimeTypeApplication.JSON
};
// Probe /props even without a stored key: on a server started with
// --api-key the unauthenticated request returns 401 and surfaces the
// API key splash, which is the onboarding path for entering the key.
if (apiKey) {
headers[HEADERS.AUTHORIZATION] = `${HEADERS.BEARER}${apiKey}`;
}
const response = await fetch(`${base}/props`, { headers });
if (!response.ok) {
if (response.status === 401 || response.status === 403) {
throw error(401, 'Access denied');
}
console.warn(`Server responded with status ${response.status} during API key validation`);
return;
}
} catch (err) {
// If it's already a SvelteKit error, re-throw it
if (err && typeof err === 'object' && 'status' in err) {
throw err;
}
// Network or other errors
console.warn('Cannot connect to server for API key validation:', err);
}
}

Xet Storage Details

Size:
1.56 kB
·
Xet hash:
b5249a8a7d6efbb7b52108e4212b5d1df4c2c588d2d7ab2b9e8bae14c713437a

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.