Something went wrong. Try again.
Game sync and live services for independent game developers (targeting itch.io)
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889import { createQuery, createMutation } from '@tanstack/svelte-query';
export function createDeveloperQuery() { return createQuery({ queryKey: ['auth', 'developer'], queryFn: async () => { const res = await fetch(`/auth/developer`); if (!res.ok) throw new Error('Not authenticated as developer'); return res.json(); }, staleTime: 1000 * 60 * 5, });}
export function createAuthorizeMutation() { return createMutation({ mutationFn: async ({ handle }: { handle: string }) => { const res = await fetch(`/api/atproto/auth/authorize`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ handle }), }); if (!res.ok) { const text = await res.text(); let errMsg = 'Authorization failed'; try { const errJson = JSON.parse(text); errMsg = errJson.message || errMsg; } catch {} throw new Error(errMsg); } return res.json(); }, });}
export function createLogoutMutation() { return createMutation({ mutationFn: async () => { const res = await fetch(`/auth/logout`, { method: 'POST' }); return res.ok; }, });}
export interface CreatePlayerRequest { playerId: string; displayName?: string;}
export interface CreatePlayerResponse { user: string; player_id: string; developer_id: string | null; created_at: string;}
export function createPlayerQuery() { return createQuery({ queryKey: ['auth', 'player'], queryFn: async () => { const res = await fetch(`/auth/player`); if (!res.ok) throw new Error('Not authenticated as player'); return res.json(); }, staleTime: 1000 * 60 * 5, });}
export function createPlayerMutation() { return createMutation({ mutationFn: async ({ playerId, displayName }: CreatePlayerRequest) => { const res = await fetch(`/auth/player`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ player_id: playerId, display_name: displayName ?? `Player ${playerId.slice(0, 8)}`, }), }); if (!res.ok) { const err = await res.json(); throw new Error(err.message || 'Failed to create player session'); } return res.json() as Promise<CreatePlayerResponse>; }, });}