oh no
This commit is contained in:
parent
8c1db3fadb
commit
72aea7e07c
49 changed files with 5559 additions and 5497 deletions
|
@ -1,32 +1,32 @@
|
|||
export type User = {
|
||||
id: string;
|
||||
name: string;
|
||||
display_name: string | null;
|
||||
bio: string | null;
|
||||
avatar: string | null;
|
||||
|
||||
names: FieldEntry[];
|
||||
pronouns: PronounEntry[];
|
||||
fields: ProfileField[];
|
||||
};
|
||||
|
||||
export type FieldEntry = {
|
||||
value: string;
|
||||
status: string;
|
||||
};
|
||||
|
||||
export type ProfileField = {
|
||||
name: string;
|
||||
entries: FieldEntry[];
|
||||
};
|
||||
|
||||
export type PronounEntry = {
|
||||
value: string;
|
||||
status: string;
|
||||
display: string | null;
|
||||
};
|
||||
|
||||
export type Meta = {
|
||||
users: number;
|
||||
members: number;
|
||||
};
|
||||
export type User = {
|
||||
id: string;
|
||||
name: string;
|
||||
display_name: string | null;
|
||||
bio: string | null;
|
||||
avatar: string | null;
|
||||
|
||||
names: FieldEntry[];
|
||||
pronouns: PronounEntry[];
|
||||
fields: ProfileField[];
|
||||
};
|
||||
|
||||
export type FieldEntry = {
|
||||
value: string;
|
||||
status: string;
|
||||
};
|
||||
|
||||
export type ProfileField = {
|
||||
name: string;
|
||||
entries: FieldEntry[];
|
||||
};
|
||||
|
||||
export type PronounEntry = {
|
||||
value: string;
|
||||
status: string;
|
||||
display: string | null;
|
||||
};
|
||||
|
||||
export type Meta = {
|
||||
users: number;
|
||||
members: number;
|
||||
};
|
||||
|
|
|
@ -1,83 +1,83 @@
|
|||
import type { Cookies, ServerLoadEvent } from "@sveltejs/kit";
|
||||
|
||||
export type FetchOptions = {
|
||||
fetchFn?: typeof fetch;
|
||||
token?: string;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
data?: any;
|
||||
version?: number;
|
||||
extraHeaders?: Record<string, string>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetch a path from the API and parse the response.
|
||||
* To make sure the request is authenticated in load functions,
|
||||
* pass `fetch` from the request object into opts.
|
||||
*
|
||||
* @param method The HTTP method, i.e. GET, POST, PATCH
|
||||
* @param path The path to request, minus the leading `/api/v2`
|
||||
* @param opts Extra options for this request
|
||||
* @returns T
|
||||
* @throws APIError
|
||||
*/
|
||||
export default async function request<T>(
|
||||
method: string,
|
||||
path: string,
|
||||
opts: FetchOptions = {},
|
||||
): Promise<T> {
|
||||
const { token, data, version, extraHeaders } = opts;
|
||||
const fetchFn = opts.fetchFn ?? fetch;
|
||||
|
||||
const resp = await fetchFn(`/api/v${version ?? 2}${path}`, {
|
||||
method,
|
||||
body: data ? JSON.stringify(data) : undefined,
|
||||
headers: {
|
||||
...extraHeaders,
|
||||
...(token ? { Authorization: token } : {}),
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
if (resp.status < 200 || resp.status >= 400) throw await resp.json();
|
||||
return (await resp.json()) as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch a path from the API and discard the response.
|
||||
* To make sure the request is authenticated in load functions,
|
||||
* pass `fetch` from the request object into opts.
|
||||
*
|
||||
* @param method The HTTP method, i.e. GET, POST, PATCH
|
||||
* @param path The path to request, minus the leading `/api/v2`
|
||||
* @param opts Extra options for this request
|
||||
* @throws APIError
|
||||
*/
|
||||
export async function fastRequest(
|
||||
method: string,
|
||||
path: string,
|
||||
opts: FetchOptions = {},
|
||||
): Promise<void> {
|
||||
const { token, data, version, extraHeaders } = opts;
|
||||
const fetchFn = opts.fetchFn ?? fetch;
|
||||
|
||||
const resp = await fetchFn(`/api/v2${version ?? 2}${path}`, {
|
||||
method,
|
||||
body: data ? JSON.stringify(data) : undefined,
|
||||
headers: {
|
||||
...extraHeaders,
|
||||
...(token ? { Authorization: token } : {}),
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
if (resp.status < 200 || resp.status >= 400) throw await resp.json();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get a token from a request cookie.
|
||||
* Accepts both a cookie object ({ cookies }) or a request object (req).
|
||||
* @param s A Cookies or ServerLoadEvent object
|
||||
* @returns A token, or `undefined` if no token is set.
|
||||
*/
|
||||
export const getToken = (s: Cookies | ServerLoadEvent) =>
|
||||
"cookies" in s ? s.cookies.get("pronounscc-token") : s.get("pronounscc-token");
|
||||
import type { Cookies, ServerLoadEvent } from "@sveltejs/kit";
|
||||
|
||||
export type FetchOptions = {
|
||||
fetchFn?: typeof fetch;
|
||||
token?: string;
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
data?: any;
|
||||
version?: number;
|
||||
extraHeaders?: Record<string, string>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Fetch a path from the API and parse the response.
|
||||
* To make sure the request is authenticated in load functions,
|
||||
* pass `fetch` from the request object into opts.
|
||||
*
|
||||
* @param method The HTTP method, i.e. GET, POST, PATCH
|
||||
* @param path The path to request, minus the leading `/api/v2`
|
||||
* @param opts Extra options for this request
|
||||
* @returns T
|
||||
* @throws APIError
|
||||
*/
|
||||
export default async function request<T>(
|
||||
method: string,
|
||||
path: string,
|
||||
opts: FetchOptions = {},
|
||||
): Promise<T> {
|
||||
const { token, data, version, extraHeaders } = opts;
|
||||
const fetchFn = opts.fetchFn ?? fetch;
|
||||
|
||||
const resp = await fetchFn(`/api/v${version ?? 2}${path}`, {
|
||||
method,
|
||||
body: data ? JSON.stringify(data) : undefined,
|
||||
headers: {
|
||||
...extraHeaders,
|
||||
...(token ? { Authorization: token } : {}),
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
if (resp.status < 200 || resp.status >= 400) throw await resp.json();
|
||||
return (await resp.json()) as T;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch a path from the API and discard the response.
|
||||
* To make sure the request is authenticated in load functions,
|
||||
* pass `fetch` from the request object into opts.
|
||||
*
|
||||
* @param method The HTTP method, i.e. GET, POST, PATCH
|
||||
* @param path The path to request, minus the leading `/api/v2`
|
||||
* @param opts Extra options for this request
|
||||
* @throws APIError
|
||||
*/
|
||||
export async function fastRequest(
|
||||
method: string,
|
||||
path: string,
|
||||
opts: FetchOptions = {},
|
||||
): Promise<void> {
|
||||
const { token, data, version, extraHeaders } = opts;
|
||||
const fetchFn = opts.fetchFn ?? fetch;
|
||||
|
||||
const resp = await fetchFn(`/api/v2${version ?? 2}${path}`, {
|
||||
method,
|
||||
body: data ? JSON.stringify(data) : undefined,
|
||||
headers: {
|
||||
...extraHeaders,
|
||||
...(token ? { Authorization: token } : {}),
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
if (resp.status < 200 || resp.status >= 400) throw await resp.json();
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function to get a token from a request cookie.
|
||||
* Accepts both a cookie object ({ cookies }) or a request object (req).
|
||||
* @param s A Cookies or ServerLoadEvent object
|
||||
* @returns A token, or `undefined` if no token is set.
|
||||
*/
|
||||
export const getToken = (s: Cookies | ServerLoadEvent) =>
|
||||
"cookies" in s ? s.cookies.get("pronounscc-token") : s.get("pronounscc-token");
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import request, { getToken } from "$lib/request";
|
||||
import type { User, Meta } from "$lib/entities";
|
||||
|
||||
export async function load({ fetch, cookies }) {
|
||||
const meta = await request<Meta>("GET", "/meta", { fetchFn: fetch });
|
||||
|
||||
let user;
|
||||
if (cookies.get("pronounscc-token")) {
|
||||
user = await request<User>("GET", "/users/@me", { fetchFn: fetch, token: getToken(cookies) });
|
||||
}
|
||||
|
||||
return { meta, user, token: getToken(cookies) };
|
||||
}
|
||||
import request, { getToken } from "$lib/request";
|
||||
import type { User, Meta } from "$lib/entities";
|
||||
|
||||
export async function load({ fetch, cookies }) {
|
||||
const meta = await request<Meta>("GET", "/meta", { fetchFn: fetch });
|
||||
|
||||
let user;
|
||||
if (cookies.get("pronounscc-token")) {
|
||||
user = await request<User>("GET", "/users/@me", { fetchFn: fetch, token: getToken(cookies) });
|
||||
}
|
||||
|
||||
return { meta, user, token: getToken(cookies) };
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<script lang="ts">
|
||||
import "bootstrap/scss/bootstrap.scss";
|
||||
import "bootstrap-icons/font/bootstrap-icons.scss";
|
||||
import type { LayoutData } from "./$types";
|
||||
|
||||
export let data: LayoutData;
|
||||
</script>
|
||||
|
||||
{JSON.stringify(data.meta)}
|
||||
|
||||
{#if data.user}
|
||||
{JSON.stringify(data.user)}
|
||||
{/if}
|
||||
|
||||
<slot />
|
||||
<script lang="ts">
|
||||
import "bootstrap/scss/bootstrap.scss";
|
||||
import "bootstrap-icons/font/bootstrap-icons.scss";
|
||||
import type { LayoutData } from "./$types";
|
||||
|
||||
export let data: LayoutData;
|
||||
</script>
|
||||
|
||||
{JSON.stringify(data.meta)}
|
||||
|
||||
{#if data.user}
|
||||
{JSON.stringify(data.user)}
|
||||
{/if}
|
||||
|
||||
<slot />
|
||||
|
|
3520
frontend/yarn.lock
3520
frontend/yarn.lock
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue