0e7890a465
Run gofmt -w across the backend, normalising the manually-aligned := blocks to the gofmt standard. No code behaviour changes. Add Prettier (+ prettier-plugin-svelte) to the frontend with the SvelteKit default config (tabs, single quotes) so formatting is reproducible, then run it over the whole tree. Add format / format:check npm scripts and a .prettierignore (build output, generated schema.ts, static assets). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { get } from 'svelte/store';
|
|
import { authStore } from '$lib/stores/auth';
|
|
import { api } from './client';
|
|
import type { TokenPair, SessionList } from './types';
|
|
|
|
export async function login(name: string, password: string): Promise<void> {
|
|
const tokens = await api.post<TokenPair>('/auth/login', { name, password });
|
|
authStore.update((s) => ({
|
|
...s,
|
|
accessToken: tokens.access_token ?? null,
|
|
refreshToken: tokens.refresh_token ?? null
|
|
}));
|
|
}
|
|
|
|
export async function logout(): Promise<void> {
|
|
try {
|
|
await api.post('/auth/logout');
|
|
} finally {
|
|
authStore.set({ accessToken: null, refreshToken: null, user: null });
|
|
}
|
|
}
|
|
|
|
export async function refresh(): Promise<void> {
|
|
const { refreshToken } = get(authStore);
|
|
if (!refreshToken) throw new Error('No refresh token');
|
|
|
|
const tokens = await api.post<TokenPair>('/auth/refresh', { refresh_token: refreshToken });
|
|
authStore.update((s) => ({
|
|
...s,
|
|
accessToken: tokens.access_token ?? null,
|
|
refreshToken: tokens.refresh_token ?? null
|
|
}));
|
|
}
|
|
|
|
export function listSessions(params?: { offset?: number; limit?: number }): Promise<SessionList> {
|
|
const entries = Object.entries(params ?? {})
|
|
.filter(([, v]) => v !== undefined)
|
|
.map(([k, v]) => [k, String(v)]);
|
|
const qs = entries.length ? '?' + new URLSearchParams(entries).toString() : '';
|
|
return api.get<SessionList>(`/auth/sessions${qs}`);
|
|
}
|
|
|
|
export function terminateSession(sessionId: number): Promise<void> {
|
|
return api.delete<void>(`/auth/sessions/${sessionId}`);
|
|
}
|