diff options
Diffstat (limited to 'src/routes')
59 files changed, 1737 insertions, 546 deletions
diff --git a/src/routes/__error.svelte b/src/routes/+error.svelte index 3057f19..83b4407 100644 --- a/src/routes/__error.svelte +++ b/src/routes/+error.svelte @@ -1,22 +1,12 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - - export const load: Load = async ({ error, status }) => { - return { - props: { - error, - status, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' - export let status: number - export let error: Error + import { page } from '$app/stores' + + // sveltekit bug: types of error and status say they can be null but they can't + let error = $page.error! + let status = $page.status! </script> <Head title={error.message} /> @@ -26,7 +16,7 @@ <div> <h1>{status}</h1> <p>{error.message}</p> - <a href="/" sveltekit:prefetch>Home</a> + <a href="/" data-sveltekit-preload-data="hover">Home</a> </div> </main> diff --git a/src/routes/__layout.svelte b/src/routes/+layout.svelte index 74e29b9..74e29b9 100644 --- a/src/routes/__layout.svelte +++ b/src/routes/+layout.svelte diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..4596c1b --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,7 @@ +import type { ServerLoad } from '@sveltejs/kit' + +export const load = (({ locals }) => { + return { + loggedIn: locals.sid !== undefined, + } +}) satisfies ServerLoad diff --git a/src/routes/index.svelte b/src/routes/+page.svelte index 851f70e..3c518fb 100644 --- a/src/routes/index.svelte +++ b/src/routes/+page.svelte @@ -1,15 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - - export const load: Load = async ({ params, fetch, session }) => { - return { - props: { - loggedIn: session.sid !== undefined, - }, - } - } -</script> - <script lang="ts"> import Username from '$lib/minecraft/Username.svelte' import SearchUser from '$lib/SearchUser.svelte' @@ -17,10 +5,12 @@ import Head from '$lib/Head.svelte' import Emoji from '$lib/Emoji.svelte' import LoginButton from '$lib/LoginButton.svelte' + import type { PageData } from './$types' export const hydrate = false - export let loggedIn: boolean + export let data: PageData + export let loggedIn: boolean = data.loggedIn </script> <svelte:head> diff --git a/src/routes/[player=username]/+page.ts b/src/routes/[player=username]/+page.ts new file mode 100644 index 0000000..289cd48 --- /dev/null +++ b/src/routes/[player=username]/+page.ts @@ -0,0 +1,6 @@ +import { redirect } from '@sveltejs/kit' +import type { PageLoad } from './$types' + +export const load = (({ params }) => { + throw redirect(303, `/player/${params.player}`) +}) satisfies PageLoad
\ No newline at end of file diff --git a/src/routes/[player].ts b/src/routes/[player].ts deleted file mode 100644 index 3f79368..0000000 --- a/src/routes/[player].ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { ParamMatcher, RequestHandler } from '@sveltejs/kit' - -export const match: ParamMatcher = (param) => { - return /^\w{2,16}$/.test(param) -} - -export const get: RequestHandler = async ({ params }) => { - return { - status: 303, - headers: { - location: `/player/${params.player}` - } - } -}
\ No newline at end of file diff --git a/src/routes/auctionprices.svelte b/src/routes/auctionprices/+page.svelte index ac75c86..844af04 100644 --- a/src/routes/auctionprices.svelte +++ b/src/routes/auctionprices/+page.svelte @@ -1,21 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const auctionItemsPromise = fetchApi(`auctionitems`, fetch).then(r => r.json()) - const data = await fetchApi(`auctionprices`, fetch).then(r => r.json()) - const auctionItems = await auctionItemsPromise - - return { - props: { - data, - auctionItems, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' @@ -23,12 +5,15 @@ import type { ItemAuctionsSchema } from '$lib/APITypes' import AuctionPriceScatterplot from '$lib/AuctionPriceScatterplot.svelte' import AuctionPreviewTooltip from '$lib/AuctionPreviewTooltip.svelte' - import { browser } from '$app/env' + import { browser } from '$app/environment' import Item from '$lib/minecraft/Item.svelte' import furfskyReborn from 'skyblock-assets/matchers/furfsky_reborn.json' + import type { PageData } from './$types' + import { fetchApi } from '$lib/api' - export let data: ItemAuctionsSchema[] - export let auctionItems: Record<string, { display: { name: string }; vanillaId?: string }> + export let data: PageData + let auctionPrices: ItemAuctionsSchema[] = data.prices + let auctionItems: Record<string, { display: { name: string }; vanillaId?: string }> = data.items let currentlyPreviewedAuction: PreviewedAuctionData | null = null diff --git a/src/routes/auctionprices/+page.ts b/src/routes/auctionprices/+page.ts new file mode 100644 index 0000000..31af8e3 --- /dev/null +++ b/src/routes/auctionprices/+page.ts @@ -0,0 +1,13 @@ +import type { PageLoad } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ fetch }) => { + const auctionItemsPromise = fetchApi(`auctionitems`, fetch).then(r => r.json()) + const prices = await fetchApi(`auctionprices`, fetch).then(r => r.json()) + const items = await auctionItemsPromise + + return { + prices, + items, + } +}) satisfies PageLoad diff --git a/src/routes/chat.svelte b/src/routes/chat/+page.svelte index df7aeee..df7aeee 100644 --- a/src/routes/chat.svelte +++ b/src/routes/chat/+page.svelte diff --git a/src/routes/election.svelte b/src/routes/election/+page.svelte index ad869a1..d270425 100644 --- a/src/routes/election.svelte +++ b/src/routes/election/+page.svelte @@ -1,29 +1,12 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const data = await fetchApi(`election?t=${Math.floor(Date.now() / 1000)}`, fetch).then(r => - r.json() - ) - - return { - props: { - data, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' import { colorCodes, formattingCodeToHtml, millisecondsToTime, skyblockTime } from '$lib/utils' import type { ElectionData } from '$lib/APITypes' import { onDestroy, onMount } from 'svelte' - import MayorSkin from '$lib/MayorSkin.svelte' + import MayorSkin from '../../lib/MayorSkin.svelte' import { invalidate } from '$app/navigation' - import { browser } from '$app/env' + import { browser } from '$app/environment' export let data: ElectionData @@ -73,16 +56,9 @@ <b>Last API update:</b> {millisecondsToTime(currentTime - data.lastUpdated, { smallestUnit: 1, - parts: 1, + parts: 3, })} ago </p> - <p> - <b>Next API update:</b> - {millisecondsToTime(10 * 60 * 1000 - (currentTime - data.lastUpdated), { - smallestUnit: 1, - parts: 1, - })} - </p> </div> {/if} <h1>SkyBlock Mayor Election Status</h1> diff --git a/src/routes/election/+page.ts b/src/routes/election/+page.ts new file mode 100644 index 0000000..e41087d --- /dev/null +++ b/src/routes/election/+page.ts @@ -0,0 +1,8 @@ +import { fetchApi } from '$lib/api' +import type { PageLoad } from './$types' + +export const load = (async ({ fetch }) => { + return await fetchApi(`election?t=${Math.floor(Date.now() / 1000)}`, fetch).then(r => + r.json() + ) +}) satisfies PageLoad diff --git a/src/routes/items.svelte b/src/routes/items/+page.svelte index 82b3ee3..e378bdf 100644 --- a/src/routes/items.svelte +++ b/src/routes/items/+page.svelte @@ -1,18 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const data = await fetchApi(`items`, fetch).then(r => r.json()) - - return { - props: { - data, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' diff --git a/src/routes/items/+page.ts b/src/routes/items/+page.ts new file mode 100644 index 0000000..e5bb249 --- /dev/null +++ b/src/routes/items/+page.ts @@ -0,0 +1,6 @@ +import { fetchApi } from '$lib/api' +import type { PageLoad } from './$types' + +export const load = (async ({ fetch }) => { + return await fetchApi(`items`, fetch).then(r => r.json()) +}) satisfies PageLoad diff --git a/src/routes/leaderboard/+page.ts b/src/routes/leaderboard/+page.ts new file mode 100644 index 0000000..68f69ac --- /dev/null +++ b/src/routes/leaderboard/+page.ts @@ -0,0 +1,6 @@ +import { redirect } from '@sveltejs/kit' +import type { PageLoad } from './$types' + +export const load = (() => { + throw redirect(303, '/leaderboards') +}) satisfies PageLoad diff --git a/src/routes/leaderboard/[name].ts b/src/routes/leaderboard/[name].ts deleted file mode 100644 index 11f3468..0000000 --- a/src/routes/leaderboard/[name].ts +++ /dev/null @@ -1,12 +0,0 @@ -import type { RequestHandler } from '@sveltejs/kit' - -// The route /leaderboard/<name> was moved to /leaderboards/<name> for -// consistency. -export const get: RequestHandler = ({ params }) => { - return { - status: 303, - headers: { - location: `/leaderboards/${params.name}` - } - } -} diff --git a/src/routes/leaderboard/[name]/+server.ts b/src/routes/leaderboard/[name]/+server.ts new file mode 100644 index 0000000..2a1dd38 --- /dev/null +++ b/src/routes/leaderboard/[name]/+server.ts @@ -0,0 +1,7 @@ +import { redirect, type RequestHandler } from '@sveltejs/kit' + +// The route /leaderboard/<name> was moved to /leaderboards/<name> for +// consistency. +export const GET = (({ params }) => { + throw redirect(303, `/leaderboards/${params.name}`) +}) satisfies RequestHandler diff --git a/src/routes/leaderboard/index.ts b/src/routes/leaderboard/index.ts deleted file mode 100644 index e904469..0000000 --- a/src/routes/leaderboard/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { RequestHandler } from '@sveltejs/kit' - - -export const get: RequestHandler = () => { - return { - status: 303, - headers: { - location: '/leaderboards' - } - } -} diff --git a/src/routes/leaderboards/index.svelte b/src/routes/leaderboards/+page.svelte index 50687c8..1d66ef5 100644 --- a/src/routes/leaderboards/index.svelte +++ b/src/routes/leaderboards/+page.svelte @@ -1,18 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ fetch }) => { - const data = await fetchApi(`leaderboards`, fetch).then(r => r.json()) - - return { - props: { - data, - }, - } - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' diff --git a/src/routes/leaderboards/+page.ts b/src/routes/leaderboards/+page.ts new file mode 100644 index 0000000..f28ac79 --- /dev/null +++ b/src/routes/leaderboards/+page.ts @@ -0,0 +1,6 @@ +import type { PageLoad } from './$types' +import { fetchApi } from '$lib/api' + +export const load = (async ({ fetch }) => { + return await fetchApi(`leaderboards`, fetch).then(r => r.json()) +}) satisfies PageLoad diff --git a/src/routes/leaderboards/[name].svelte b/src/routes/leaderboards/[name]/+page.svelte index 75000a9..cfb7311 100644 --- a/src/routes/leaderboards/[name].svelte +++ b/src/routes/leaderboards/[name]/+page.svelte @@ -1,22 +1,3 @@ -<script lang="ts" context="module"> - import type { Load } from '@sveltejs/kit' - import { fetchApi } from '$lib/api' - - export const load: Load = async ({ params, fetch }) => { - const dataText = await fetchApi(`leaderboards/${params.name}`, fetch).then(r => r.text()) - - const data = JSON.parse(dataText) - - if (data.list.length === 0) return { status: 404, error: 'Unknown leaderboard' } - - return { - props: { - data, - }, - } as any - } -</script> - <script lang="ts"> import Header from '$lib/Header.svelte' import Head from '$lib/Head.svelte' diff --git a/src/routes/leaderboards/[name]/+page.ts b/src/routes/leaderboards/[name]/+page.ts new file mode 100644 index 0000000..735be61 --- /dev/null +++ b/src/routes/leaderboards/[name]/+page.ts @@ -0,0 +1,13 @@ +import type { PageLoad } from './$types' +import { fetchApi } from '$lib/api' +import { error } from '@sveltejs/kit' + +export const load = (async ({ params, fetch }) => { + const dataText = await fetchApi(`leaderboards/${params.name}`, fetch).then(r => r.text()) + + const data = JSON.parse(dataText) + + if (data.list.length === 0) throw error(404, 'Unknown leaderboard') + + return data +}) satisfies PageLoad diff --git a/src/routes/loggedin.ts b/src/routes/loggedin/+server.ts index 9ae28ef..4772cf6 100644 --- a/src/routes/loggedin.ts +++ b/src/routes/loggedin/+server.ts @@ -1,7 +1,7 @@ import { fetchApi } from '$lib/api' -import type { RequestHandler } from '@sveltejs/kit' +import { redirect, type RequestHandler, } from '@sveltejs/kit' -export const get: RequestHandler = async ({ url }) => { +export const GET = (async ({ url, cookies }) => { const code = url.searchParams.get('code') const redirectUri = `${url.protocol}//${url.host}/loggedin` const response = await fetchApi(`accounts/createsession`, fetch, { @@ -20,18 +20,11 @@ export const get: RequestHandler = async ({ url }) => { }) if (response.ok) { - return { - status: 303, - headers: { - location: '/verify', - 'Set-Cookie': `sid=${response.session_id}; Max-Age=31536000000; Path=/; HttpOnly` - } - } + cookies.set('sid', response.session_id, { + maxAge: 31536000000, + httpOnly: true, + }) + throw redirect(303, '/verify') } - return { - status: 303, - headers: { - location: '/login', - } - } -} + throw redirect(303, '/login') +}) satisfies RequestHandler diff --git a/src/routes/login.ts b/src/routes/login.ts deleted file mode 100644 index 1cd9b23..0000000 --- a/src/routes/login.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { RequestHandler } from '@sveltejs/kit' -import env from '$lib/env' - - -export const get: RequestHandler = async ({ request, platform }) => { - const host = request.headers.get('host') - - const clientId = env(platform).DISCORD_CLIENT_ID - - if (!clientId) - return { - status: 500, - headers: { - 'content-type': 'text/plain', - }, - body: 'DISCORD_CLIENT_ID is not set as an environment variable. Please contact the owner of the website if this was expected to work.', - } - - if (!host) - return { - status: 400, - headers: { - 'content-type': 'text/plain', - }, - body: 'Host header is required.', - } - - const protocol = request.url.startsWith('https') ? 'https' : 'http' - - return { - status: 303, - headers: { - location: `https://discord.com/oauth2/authorize?client_id=${clientId}&redirect_uri=${protocol}://${host}%2Floggedin&response_type=code&scope=identify` - } - } -} diff --git a/src/routes/login/+server.ts b/src/routes/login/+server.ts new file mode 100644 index 0000000..684f11e --- /dev/null +++ b/src/routes/login/+server.ts @@ -0,0 +1,18 @@ +import env from '$lib/env' +import { error, redirect, type RequestHandler } from '@sveltejs/kit' + +export const GET = (async ({ request, platform }) => { + const host = request.headers.get('host') + + const clientId = env(platform).DISCORD_CLIENT_ID + + if (!clientId) + throw error(500, 'DISCORD_CLIENT_ID is not set as an environment variable. Please contact the owner of the website if this was expected to work.') + + if (!host) + throw error(400, 'Host header is required.') + + const protocol = request.url.startsWith('https') ? 'https' : 'http' + + throw redirect(303, `https://discord.com/oauth2/authorize?client_id=${clientId}&redirect_uri=${protocol}://${host}%2Floggedin&response_type=code&scope=identify`) +}) satisfies RequestHandler diff --git a/src/routes/logout.ts b/src/routes/logout/+server.ts index 25be86c..2e0f40d 100644 --- a/src/routes/logout.ts +++ b/src/routes/logout/+server.ts @@ -1,7 +1,7 @@ import { fetchApi } from '$lib/api' -import type { RequestHandler } from '@sveltejs/kit' +import { redirect, type RequestHandler } from '@sveltejs/kit' -export const get: RequestHandler = async ({ locals, url }) => { +export const GET = (async ({ url, cookies, locals }) => { // if the sid is wrong, nothing to do if (url.searchParams.has('sid') && url.searchParams.get('sid') === locals.sid) { await fetchApi(`accounts/session`, fetch, { @@ -17,12 +17,7 @@ export const get: RequestHandler = async ({ locals, url }) => { throw new Error(res.statusText) }) } - return { - status: 303, - headers: { - location: '/', - 'Set-Cookie': 'sid=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/;' - } - } -} |
