import { SERVER_IP, PROXY_PORT } from '../../../../config.ts'; import type { RequestEvent } from '@sveltejs/kit'; const HONO_URL = `http://${SERVER_IP}:${PROXY_PORT}`; function sessionHeaders(event: RequestEvent): Record { const s = event.locals.session; if (!s) return {}; return { 'x-session-famid': s.famId, 'x-session-userid': s.userId, 'Content-Type': 'application/json' }; } async function request( method: string, path: string, body?: unknown, headers?: Record ) { const res = await fetch(`${HONO_URL}${path}`, { method, headers: headers || { 'Content-Type': 'application/json' }, body: body ? JSON.stringify(body) : undefined }); const data = await res.json(); if (!res.ok) throw new Error(data.error || `${method} ${path} failed`); return data; } export const hono = { admin: { async list(event: RequestEvent, resource: string, famId: string) { return request('GET', `/api/admin/${famId}/${resource}`, undefined, sessionHeaders(event)); }, async create( event: RequestEvent, resource: string, famId: string, data: Record ) { return request('POST', `/api/admin/${famId}/${resource}`, data, sessionHeaders(event)); }, async update( event: RequestEvent, resource: string, famId: string, id: string, data: Record ) { return request('PATCH', `/api/admin/${famId}/${resource}/${id}`, data, sessionHeaders(event)); }, async remove(event: RequestEvent, resource: string, famId: string, id: string) { return request( 'DELETE', `/api/admin/${famId}/${resource}/${id}`, undefined, sessionHeaders(event) ); }, async renameFam(event: RequestEvent, famId: string, name: string) { return request('PATCH', `/api/admin/${famId}/fam`, { name }, sessionHeaders(event)); }, async updatePayday(event: RequestEvent, famId: string, payday: number) { return request('PATCH', `/api/admin/${famId}/fam`, { payday }, sessionHeaders(event)); }, async fam(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/fam`, undefined, sessionHeaders(event)); }, async verify(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/verify`, undefined, sessionHeaders(event)); }, async regenInvite(event: RequestEvent, famId: string) { return request('POST', `/api/admin/${famId}/regen-invite`, undefined, sessionHeaders(event)); }, async weeklySummary(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/weekly-summary`, undefined, sessionHeaders(event)); }, async completions(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/completions`, undefined, sessionHeaders(event)); }, async rewards(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/rewards`, undefined, sessionHeaders(event)); }, async claimReward(event: RequestEvent, famId: string, rewardId: string) { return request( 'POST', `/api/admin/${famId}/rewards/${rewardId}/claim`, undefined, sessionHeaders(event) ); }, async issueAllRewards(event: RequestEvent, famId: string, memberId: string, message?: string) { return request( 'POST', `/api/admin/${famId}/rewards/issue-all`, { memberId, message }, sessionHeaders(event) ); }, async bonusConfigs(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/bonus-configs`, undefined, sessionHeaders(event)); }, async bonusConfigProgress(event: RequestEvent, famId: string) { return request( 'GET', `/api/admin/${famId}/bonus-configs/progress`, undefined, sessionHeaders(event) ); }, async evaluateBonusConfig(event: RequestEvent, famId: string, configId?: string) { return request( 'POST', `/api/admin/${famId}/bonus-configs/evaluate`, { configId }, sessionHeaders(event) ); }, async triggerBonusConfig( event: RequestEvent, famId: string, configId: string, memberId?: string ) { return request( 'POST', `/api/admin/${famId}/bonus-configs/${configId}/trigger`, { memberId }, sessionHeaders(event) ); }, async assignBonusConfig( event: RequestEvent, famId: string, configId: string, data: Record ) { return request( 'POST', `/api/admin/${famId}/bonus-configs/${configId}/assign`, data, sessionHeaders(event) ); }, async completeBonusConfig(event: RequestEvent, famId: string, configId: string) { return request( 'POST', `/api/admin/${famId}/bonus-configs/${configId}/complete`, undefined, sessionHeaders(event) ); }, async destroyBonusConfig(event: RequestEvent, famId: string, configId: string) { return request( 'POST', `/api/admin/${famId}/bonus-configs/${configId}/destroy`, undefined, sessionHeaders(event) ); }, async bonusConfigTallies(event: RequestEvent, famId: string) { return request( 'GET', `/api/admin/${famId}/bonus-configs/tallies`, undefined, sessionHeaders(event) ); }, async revokeCompletion(event: RequestEvent, famId: string, completionId: string) { return request( 'POST', `/api/admin/${famId}/completions/${completionId}/revoke`, undefined, sessionHeaders(event) ); }, async sendMessage(event: RequestEvent, famId: string, memberId: string, message: string) { return request( 'POST', `/api/admin/${famId}/send-message`, { memberId, message }, sessionHeaders(event) ); }, async memberChores(event: RequestEvent, famId: string, memberId: string) { return request( 'GET', `/api/admin/${famId}/members/${memberId}/chores`, undefined, sessionHeaders(event) ); }, async updateMember( event: RequestEvent, famId: string, memberId: string, data: Record ) { return request( 'PATCH', `/api/admin/${famId}/members/${memberId}`, data, sessionHeaders(event) ); }, async getProfile(event: RequestEvent, famId: string) { return request('GET', `/api/admin/${famId}/profile`, undefined, sessionHeaders(event)); }, async updateProfile(event: RequestEvent, famId: string, data: Record) { return request('PATCH', `/api/admin/${famId}/profile`, data, sessionHeaders(event)); }, async updateFam(event: RequestEvent, famId: string, data: Record) { return request('PATCH', `/api/admin/${famId}/fam`, data, sessionHeaders(event)); }, async request(event: RequestEvent, method: string, path: string, body?: unknown) { return request(method, path, body, sessionHeaders(event)); } } };