Files
front/netcode/index.ts
T

96 lines
2.4 KiB
TypeScript

import type { Game, User } from "./interfaces";
export function subscribe(endpoint: string) {
const config = useRuntimeConfig();
const evtSource = new EventSource(new URL(endpoint, config.public.endpoint), {
withCredentials: true,
});
return evtSource;
}
export async function getLobby() {
const config = useRuntimeConfig();
const req = await useFetch<Array<Game>>(
new URL("/games", config.public.endpoint).href,
{
credentials: "include",
}
);
if (req.data.value == null) {
throw new Error("Lobby answer is empty");
}
return req.data as Ref<Game[]>;
}
export async function whoami() {
const config = useRuntimeConfig();
const { data, pending, error, refresh } = await useFetch<User>(
new URL("/whoami", config.public.endpoint).href,
{
credentials: "include",
}
);
if (error.value?.statusCode && [401].includes(error.value.statusCode)) {
// await navigateTo(config.public.discordLoginEndpoint, {
// external: true,
// });
throw new Error("You are not logged in");
}
if (error.value) {
throw new Error(
"Something went wrong while trying to get user information"
);
}
return data;
}
export async function createGame() {
const config = useRuntimeConfig();
const res = await $fetch<Game>(new URL("/games", config.public.endpoint).href, {
method: "POST",
credentials: "include",
});
console.log(res)
navigateTo("/game/" + res._id)
}
export async function startGame(game: string) {
const config = useRuntimeConfig();
const res = await $fetch<Game>(new URL(`games/${game}/start`, config.public.endpoint).href, {
method: "POST",
credentials: "include",
});
}
export async function joinGame(game: string) {
const config = useRuntimeConfig();
const res = await $fetch<Game>(new URL(`games/${game}/join`, config.public.endpoint).href, {
method: "POST",
credentials: "include",
});
}
export async function endTurn(game: string) {
const config = useRuntimeConfig();
await $fetch(
new URL(`games/${game}/endTurn`, config.public.endpoint).href,
{
method: "POST",
credentials: "include",
}
);
}
export async function lockCard(game: string, cardId: string) {
const config = useRuntimeConfig();
await $fetch(
new URL(`games/${game}/turn/lockCard/${cardId}`, config.public.endpoint).href,
{
method: "POST",
credentials: "include",
}
);
}