import { createQuery } from '@tanstack/svelte-query'; import { api } from './client'; import { qk } from './queries'; export type SystemPlaylistsStatus = { in_flight: boolean; last_run_at: string | null; last_error: string | null; }; export async function getSystemPlaylistsStatus(): Promise { return api.get('/api/me/system-playlists-status'); } // Refresh aggressively while a build is in_flight so the building → built // transition appears live on the home page. Stale-time is short; manual // invalidations on the server's POST endpoints are out of scope. export function createSystemPlaylistsStatusQuery() { return createQuery({ queryKey: qk.systemPlaylistsStatus(), queryFn: getSystemPlaylistsStatus, staleTime: 10_000 }); } // Self-service profile / password / API-token endpoints (U3) --------------- export type MyProfile = { id: string; username: string; display_name: string | null; email: string | null; is_admin: boolean; }; export type APITokenResponse = { api_token: string }; export async function changePassword(currentPassword: string, newPassword: string): Promise { await api.put('/api/me/password', { current_password: currentPassword, new_password: newPassword, }); } export async function updateProfile(input: { display_name?: string; email?: string }): Promise { return api.put('/api/me/profile', input); } export async function getAPIToken(): Promise { return api.get('/api/me/api-token'); } export async function regenerateAPIToken(): Promise { return api.post('/api/me/api-token', {}); } // Submits the browser's current IANA timezone for the authenticated // user. Called from the auth store on login + bootstrap + once weekly // (cadence tracked client-side in localStorage). Failures are // non-fatal — the server's UTC fallback keeps the scheduler working // until the next attempt. export async function putMyTimezone(timezone: string): Promise { await api.put('/api/me/timezone', { timezone }); }