diff --git a/src/lib/auth.ts b/src/lib/auth.ts new file mode 100644 index 0000000..68c1f60 --- /dev/null +++ b/src/lib/auth.ts @@ -0,0 +1,31 @@ +import { user } from '$lib/stores'; + +const API_KEY_STORAGE = 'nsct-api-key'; + +export function login(apiKey: string): Promise<{ userId: string; username: string }> { + setApiKey(apiKey); + // Set a minimal user object; real identity is fetched from the backend later + user.set({ apiKey }); + return Promise.resolve({ userId: apiKey, username: apiKey.substring(0, 8) }); +} + +export function logout(): void { + removeApiKey(); + user.set(null); +} + +export function isAuthenticated(): boolean { + return getApiKey() !== null; +} + +export function getApiKey(): string | null { + return localStorage.getItem(API_KEY_STORAGE); +} + +export function setApiKey(key: string): void { + localStorage.setItem(API_KEY_STORAGE, key); +} + +export function removeApiKey(): void { + localStorage.removeItem(API_KEY_STORAGE); +} \ No newline at end of file diff --git a/src/lib/components/ResearchListItem.svelte b/src/lib/components/ResearchListItem.svelte new file mode 100644 index 0000000..96a792f --- /dev/null +++ b/src/lib/components/ResearchListItem.svelte @@ -0,0 +1,44 @@ + + +
+ {item.id.slice(0, 8)}
+
+ {formatDate(item.created_at)}
+ + {item.query} +
+Neutral Search Crawler Tool
- -Neutral Search Crawler Tool
+{error}
+{error}
{/if}+ Noch keinen Account? API-Key vom Admin anfordern +
+ + +{error}
+⚠ {error}
+Fehler: {status.error}
+Status wird geladen…
+ {/if} +{source.title}
+{source.url}
+ {#if source.domain} + {source.domain} + {/if} +Noch keine Quellen gefunden.
+ {/if} +{claim.claim}
+Noch keine Claims extrahiert.
+ {/if} +Score {i + 1}
+Noch keine Evidence-Scores berechnet.
+ {/if} +{detail.report}
+ {:else}
+ Bericht wird generiert, sobald die Recherche abgeschlossen ist.
+ {/if} +{detail.methodology}
+ {:else}
+ Methodik wird nach Abschluss der Recherche verfügbar sein.
+ {/if} +