222 lines
6.6 KiB
TypeScript
222 lines
6.6 KiB
TypeScript
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<string, string> {
|
|
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<string, string>
|
|
) {
|
|
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<string, unknown>
|
|
) {
|
|
return request('POST', `/api/admin/${famId}/${resource}`, data, sessionHeaders(event));
|
|
},
|
|
async update(
|
|
event: RequestEvent,
|
|
resource: string,
|
|
famId: string,
|
|
id: string,
|
|
data: Record<string, unknown>
|
|
) {
|
|
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<string, unknown>
|
|
) {
|
|
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<string, unknown>
|
|
) {
|
|
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<string, unknown>) {
|
|
return request('PATCH', `/api/admin/${famId}/profile`, data, sessionHeaders(event));
|
|
},
|
|
async updateFam(event: RequestEvent, famId: string, data: Record<string, unknown>) {
|
|
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));
|
|
}
|
|
}
|
|
};
|