···11/* eslint-disable */
22-// Generated by Wrangler by running `wrangler types` (hash: 93851a135272be61ff875ada0ef59f66)
33-// Runtime types generated with workerd@1.20251217.0 2025-11-17 nodejs_compat
22+// Generated by Wrangler by running `wrangler types ./src/generated/worker-configuration.d.ts` (hash: 44d773c330e912effe914121161b2a1b)
33+// Runtime types generated with workerd@1.20260219.0 2025-11-17 nodejs_compat
44declare namespace Cloudflare {
55 interface GlobalProps {
66- mainModule: typeof import('./.svelte-kit/.cloudflare/_worker')
66+ mainModule: typeof import('../../.svelte-kit/.cloudflare/_worker')
77 }
88 interface Env {
99 ASSETS: Fetcher
···589589 | 'oc'
590590 | 'afr'
591591 | 'me'
592592+type DurableObjectRoutingMode = 'primary-only'
592593interface DurableObjectNamespaceGetDurableObjectOptions {
593594 locationHint?: DurableObjectLocationHint
595595+ routingMode?: DurableObjectRoutingMode
594596}
595597interface DurableObjectClass<_T extends Rpc.DurableObjectBranded | undefined = undefined> {}
596598interface DurableObjectState<Props = unknown> {
···15601562 */
15611563declare class FormData {
15621564 constructor()
15651565+ /**
15661566+ * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
15671567+ *
15681568+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append)
15691569+ */
15701570+ append(name: string, value: string | Blob): void
15631571 /**
15641572 * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist.
15651573 *
···16011609 *
16021610 * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
16031611 */
16121612+ set(name: string, value: string | Blob): void
16131613+ /**
16141614+ * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
16151615+ *
16161616+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set)
16171617+ */
16041618 set(name: string, value: string): void
16051619 /**
16061620 * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist.
···19281942 * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/signal)
19291943 */
19301944 signal: AbortSignal
19311931- cf: Cf | undefined
19451945+ cf?: Cf
19321946 /**
19331947 * The **`integrity`** read-only property of the Request interface contains the subresource integrity value of the request.
19341948 *
···23662380 expectedLength?: number
23672381}
23682382interface StreamPipeOptions {
23832383+ preventAbort?: boolean
23842384+ preventCancel?: boolean
23692385 /**
23702386 * Pipes this readable stream to a given writable stream destination. The way in which the piping process behaves under various error conditions can be customized with a number of passed options. It returns a promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered.
23712387 *
···23842400 * The signal option can be set to an AbortSignal to allow aborting an ongoing pipe operation via the corresponding AbortController. In this case, this source readable stream will be canceled, and destination aborted, unless the respective options preventCancel or preventAbort are set.
23852401 */
23862402 preventClose?: boolean
23872387- preventAbort?: boolean
23882388- preventCancel?: boolean
23892403 signal?: AbortSignal
23902404}
23912405type ReadableStreamReadResult<R = any> =
···26712685 terminate(): void
26722686}
26732687interface ReadableWritablePair<R = any, W = any> {
26882688+ readable: ReadableStream<R>
26742689 /**
26752690 * Provides a convenient, chainable way of piping this readable stream through a transform stream (or any other { writable, readable } pair). It simply pipes the stream into the writable side of the supplied pair, and returns the readable side for further use.
26762691 *
26772692 * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.
26782693 */
26792694 writable: WritableStream<W>
26802680- readable: ReadableStream<R>
26812695}
26822696/**
26832697 * The **`WritableStream`** interface of the Streams API provides a standard abstraction for writing streaming data to a destination, known as a sink.
···59605974 }
59615975 )[]
59625976 /**
59635963- * JSON schema that should be fufilled for the response.
59775977+ * JSON schema that should be fulfilled for the response.
59645978 */
59655979 guided_json?: object
59665980 /**
···62346248 }
62356249 )[]
62366250 /**
62376237- * JSON schema that should be fufilled for the response.
62516251+ * JSON schema that should be fulfilled for the response.
62386252 */
62396253 guided_json?: object
62406254 /**
···63276341 */
63286342 prompt: string
63296343 /**
63306330- * JSON schema that should be fufilled for the response.
63446344+ * JSON schema that should be fulfilled for the response.
63316345 */
63326346 guided_json?: object
63336347 /**
···64916505 }
64926506 )[]
64936507 /**
64946494- * JSON schema that should be fufilled for the response.
65086508+ * JSON schema that should be fulfilled for the response.
64956509 */
64966510 guided_json?: object
64976511 /**
···67726786 )[]
67736787 response_format?: Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_JSON_Mode
67746788 /**
67756775- * JSON schema that should be fufilled for the response.
67896789+ * JSON schema that should be fulfilled for the response.
67766790 */
67776791 guided_json?: object
67786792 /**
···70117025 )[]
70127026 response_format?: Ai_Cf_Meta_Llama_4_Scout_17B_16E_Instruct_JSON_Mode
70137027 /**
70147014- * JSON schema that should be fufilled for the response.
70287028+ * JSON schema that should be fulfilled for the response.
70157029 */
70167030 guided_json?: object
70177031 /**
···80888102 */
80898103 text: string | string[]
80908104 /**
80918091- * Target langauge to translate to
81058105+ * Target language to translate to
80928106 */
80938107 target_language:
80948108 | 'asm_Beng'
···1036410378 */
1036510379 served_by_region?: string
1036610380 /**
1038110381+ * The three letters airport code of the colo that executed the query.
1038210382+ */
1038310383+ served_by_colo?: string
1038410384+ /**
1036710385 * True if-and-only-if the database instance that executed the query was the primary.
1036810386 */
1036910387 served_by_primary?: boolean
···1044410462// ignored when `Disposable` is included in the standard lib.
1044510463interface Disposable {}
1044610464/**
1046510465+ * The returned data after sending an email
1046610466+ */
1046710467+interface EmailSendResult {
1046810468+ /**
1046910469+ * The Email Message ID
1047010470+ */
1047110471+ messageId: string
1047210472+}
1047310473+/**
1044710474 * An email message that can be sent from a Worker.
1044810475 */
1044910476interface EmailMessage {
···1048410511 * @param headers A [Headers object](https://developer.mozilla.org/en-US/docs/Web/API/Headers).
1048510512 * @returns A promise that resolves when the email message is forwarded.
1048610513 */
1048710487- forward(rcptTo: string, headers?: Headers): Promise<void>
1051410514+ forward(rcptTo: string, headers?: Headers): Promise<EmailSendResult>
1048810515 /**
1048910516 * Reply to the sender of this email message with a new EmailMessage object.
1049010517 * @param message The reply message.
1049110518 * @returns A promise that resolves when the email message is replied.
1049210519 */
1049310493- reply(message: EmailMessage): Promise<void>
1052010520+ reply(message: EmailMessage): Promise<EmailSendResult>
1052110521+}
1052210522+/** A file attachment for an email message */
1052310523+type EmailAttachment =
1052410524+ | {
1052510525+ disposition: 'inline'
1052610526+ contentId: string
1052710527+ filename: string
1052810528+ type: string
1052910529+ content: string | ArrayBuffer | ArrayBufferView
1053010530+ }
1053110531+ | {
1053210532+ disposition: 'attachment'
1053310533+ contentId?: undefined
1053410534+ filename: string
1053510535+ type: string
1053610536+ content: string | ArrayBuffer | ArrayBufferView
1053710537+ }
1053810538+/** An Email Address */
1053910539+interface EmailAddress {
1054010540+ name: string
1054110541+ email: string
1049410542}
1049510543/**
1049610544 * A binding that allows a Worker to send email messages.
1049710545 */
1049810546interface SendEmail {
1049910499- send(message: EmailMessage): Promise<void>
1054710547+ send(message: EmailMessage): Promise<EmailSendResult>
1054810548+ send(builder: {
1054910549+ from: string | EmailAddress
1055010550+ to: string | string[]
1055110551+ subject: string
1055210552+ replyTo?: string | EmailAddress
1055310553+ cc?: string | string[]
1055410554+ bcc?: string | string[]
1055510555+ headers?: Record<string, string>
1055610556+ text?: string
1055710557+ html?: string
1055810558+ attachments?: EmailAttachment[]
1055910559+ }): Promise<EmailSendResult>
1050010560}
1050110561declare abstract class EmailEvent extends ExtendableEvent {
1050210562 readonly message: ForwardableEmailMessage
···1053310593 /**
1053410594 * Connect directly to Hyperdrive as if it's your database, returning a TCP socket.
1053510595 *
1053610536- * Calling this method returns an idential socket to if you call
1059610596+ * Calling this method returns an identical socket to if you call
1053710597 * `connect("host:port")` using the `host` and `port` fields from this object.
1053810598 * Pick whichever approach works better with your preferred DB client library.
1053910599 *
···1089710957 protected ctx: ExecutionContext
1089810958 constructor(ctx: ExecutionContext, env: Env)
1089910959 /**
1090010900- * run recieves an array of PipelineRecord which can be
1096010960+ * run receives an array of PipelineRecord which can be
1090110961 * transformed and returned to the pipeline
1090210962 * @param records Incoming records from the pipeline to be transformed
1090310963 * @param metadata Information about the specific pipeline calling the transformation entrypoint
···1124511305 },
1124611306 ): Promise<WorkflowStepEvent<T>>
1124711307 }
1130811308+ export type WorkflowInstanceStatus =
1130911309+ | 'queued'
1131011310+ | 'running'
1131111311+ | 'paused'
1131211312+ | 'errored'
1131311313+ | 'terminated'
1131411314+ | 'complete'
1131511315+ | 'waiting'
1131611316+ | 'waitingForPause'
1131711317+ | 'unknown'
1124811318 export abstract class WorkflowEntrypoint<
1124911319 Env = unknown,
1125011320 T extends Rpc.Serializable<T> | unknown = unknown,
···1128811358}
1128911359type ConversionResponse =
1129011360 | {
1136111361+ id: string
1129111362 name: string
1129211363 mimeType: string
1129311364 format: 'markdown'
···1129511366 data: string
1129611367 }
1129711368 | {
1136911369+ id: string
1129811370 name: string
1129911371 mimeType: string
1130011372 format: 'error'
···1131211384 images?: EmbeddedImageConversionOptions & {
1131311385 convertOGImage?: boolean
1131411386 }
1138711387+ hostname?: string
1131511388 }
1131611389 docx?: {
1131711390 images?: EmbeddedImageConversionOptions
···1147811551 readonly level: 'debug' | 'error' | 'info' | 'log' | 'warn'
1147911552 readonly message: object
1148011553 }
1155411554+ interface DroppedEventsDiagnostic {
1155511555+ readonly diagnosticsType: 'droppedEvents'
1155611556+ readonly count: number
1155711557+ }
1155811558+ interface StreamDiagnostic {
1155911559+ readonly type: 'streamDiagnostic'
1156011560+ // To add new diagnostic types, define a new interface and add it to this union type.
1156111561+ readonly diagnostic: DroppedEventsDiagnostic
1156211562+ }
1148111563 // This marks the worker handler return information.
1148211564 // This is separate from Outcome because the worker invocation can live for a long time after
1148311565 // returning. For example - Websockets that return an http upgrade response but then continue
···1150211584 | DiagnosticChannelEvent
1150311585 | Exception
1150411586 | Log
1158711587+ | StreamDiagnostic
1150511588 | Return
1150611589 | Attributes
1150711590 // Context in which this trace event lives.
···1151711600 // For Hibernate and Mark this would be the span under which they were emitted.
1151811601 // spanId is not set ONLY if:
1151911602 // 1. This is an Onset event
1152011520- // 2. We are not inherting any SpanContext. (e.g. this is a cross-account service binding or a new top-level invocation)
1160311603+ // 2. We are not inheriting any SpanContext. (e.g. this is a cross-account service binding or a new top-level invocation)
1152111604 readonly spanId?: string
1152211605 }
1152311606 interface TailEvent<Event extends EventType> {
+11-77
app/src/hooks.server.ts
···11-import { redirect, type Handle } from '@sveltejs/kit'
22-import { sequence } from '@sveltejs/kit/hooks'
33-import { createServerClient } from '@supabase/ssr'
44-import { PUBLIC_SUPABASE_PUBLISHABLE_KEY, PUBLIC_SUPABASE_URL } from '$env/static/public'
55-66-const supabase: Handle = async ({ event, resolve }) => {
77- /**
88- * Creates a Supabase client specific to this server request.
99- * The Supabase client gets the Auth token from the request cookies.
1010- */
1111- event.locals.supabase = createServerClient(PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_PUBLISHABLE_KEY, {
1212- cookies: {
1313- getAll: () => event.cookies.getAll(),
1414- /**
1515- * SvelteKit's cookies API requires `path` to be explicitly set in
1616- * the cookie options. Setting `path` to `/` replicates previous/
1717- * standard behavior.
1818- */
1919- setAll: (cookiesToSet) => {
2020- cookiesToSet.forEach(({ name, value, options }) => {
2121- event.cookies.set(name, value, { ...options, path: '/' })
2222- })
2323- },
2424- },
2525- })
2626-2727- /**
2828- * Unlike `supabase.auth.getSession()`, which returns the session _without_
2929- * validating the JWT, this function also calls `getUser()` to validate the
3030- * JWT before returning the session.
3131- */
3232- event.locals.safeGetSession = async () => {
3333- /** @see https://github.com/supabase/supabase-js/issues/1709#issuecomment-3376176297 */
3434- /** @ts-expect-error: suppressGetSessionWarning is not officially supported */
3535- event.locals.supabase.auth.suppressGetSessionWarning = true
3636-3737- const {
3838- data: { session },
3939- } = await event.locals.supabase.auth.getSession()
4040- if (!session) {
4141- return { session: null, user: null }
4242- }
4343-4444- const {
4545- data: { user },
4646- error,
4747- } = await event.locals.supabase.auth.getUser()
4848- if (error) {
4949- // JWT validation has failed
5050- return { session: null, user: null }
5151- }
5252-5353- return { session, user }
5454- }
5555-5656- return resolve(event, {
5757- filterSerializedResponseHeaders(name) {
5858- /**
5959- * Supabase libraries use the `content-range` and `x-supabase-api-version`
6060- * headers, so we need to tell SvelteKit to pass it through.
6161- */
6262- return name === 'content-range' || name === 'x-supabase-api-version'
6363- },
6464- })
6565-}
6666-6767-const authGuard: Handle = async ({ event, resolve }) => {
6868- const { session, user } = await event.locals.safeGetSession()
6969- event.locals.session = session
7070- event.locals.user = user
11+import type { Handle } from '@sveltejs/kit'
22+import { building } from '$app/environment'
33+import { auth } from '$server/auth'
44+import { svelteKitHandler } from 'better-auth/svelte-kit'
7157272- if (!event.locals.session && event.url.pathname.startsWith('/private')) {
7373- redirect(303, '/auth')
7474- }
66+const handleBetterAuth: Handle = async ({ event, resolve }) => {
77+ const session = await auth.api.getSession({ headers: event.request.headers })
7587676- if (event.locals.session && event.url.pathname === '/auth') {
7777- redirect(303, '/private')
99+ if (session) {
1010+ event.locals.session = session.session
1111+ event.locals.user = session.user
7812 }
79138080- return resolve(event)
1414+ return svelteKitHandler({ event, resolve, auth, building })
8115}
82168383-export const handle: Handle = sequence(supabase, authGuard)
1717+export const handle: Handle = handleBetterAuth
+8
app/src/lib/client/authClient.ts
···11+import { ORIGIN } from '$env/static/private'
22+import { usernameClient } from 'better-auth/client/plugins'
33+import { createAuthClient } from 'better-auth/svelte'
44+55+export const authClient = createAuthClient({
66+ baseURL: ORIGIN,
77+ plugins: [usernameClient()],
88+})
+24
app/src/lib/client/resendClient.ts
···11+import { CONTACT_ADDRESS, CONTACT_NAME, RESEND_KEY } from '$env/static/private'
22+import { Resend } from 'resend'
33+import { dedent } from 'ts-dedent'
44+55+export const resend = new Resend(RESEND_KEY)
66+export function getContactEmail() {
77+ return `${CONTACT_NAME} <${CONTACT_ADDRESS}>` as const
88+}
99+1010+export async function sendVerificationEmail(email: string, url: string) {
1111+ const anchor = `<a href="${url}">${url}</a>`
1212+ const htmlBody = dedent`Hello,
1313+ Please verify your email address for your Drifting Starlight account with the link below:
1414+ ${anchor}
1515+ If you didn't create an account, you can safely ignore this email.
1616+ - Drifting Starlight Team`
1717+1818+ return await resend.emails.send({
1919+ from: getContactEmail(),
2020+ to: [email],
2121+ subject: 'Verify your email address for driftingstarlight.app',
2222+ html: htmlBody,
2323+ })
2424+}
···11-export { default as Profile } from './Profile.svelte'
22-export { default as ProfilePicture } from './ProfilePicture.svelte'
+1-1
app/src/lib/components/Text/Text.ts
···11import type { WithChildren } from 'bits-ui'
22-import { tv, type VariantProps } from 'tailwind-variants'
32import type { SvelteHTMLElements } from 'svelte/elements'
33+import { tv, type VariantProps } from 'tailwind-variants'
4455export const text = tv({
66 variants: {
···11import Field from './Field.svelte'
22import Content from './FieldContent.svelte'
33-import Label from './FieldLabel.svelte'
43import Description from './FieldDescription.svelte'
54import Error from './FieldError.svelte'
55+import Label from './FieldLabel.svelte'
6677export {
88 Field,
+1
app/src/lib/form/NumberInput/NumberInput.svelte
···3030 if (min === undefined) return newValue
3131 return newValue < min ? min : newValue
3232}
3333+3334function increase(oldValue: number, max?: number, step = 1): number {
3435 const newValue = oldValue + step
3536 if (max === undefined) return newValue
···11export { default as CharacterCounter } from './CharacterCounter.svelte'
22export { default as TextAreaInput } from './TextAreaInput.svelte'
33export { default as TextInput } from './TextInput.svelte'
44+export { default as PasswordInput } from './PasswordInput.svelte'
···11+import { DATABASE_URL } from '$env/static/private'
22+import { drizzle } from 'drizzle-orm/mysql2'
33+import mysql from 'mysql2/promise'
44+import * as schema from './schema'
55+66+if (DATABASE_URL === '') throw new Error('DATABASE_URL is not set')
77+88+const client = mysql.createPool(DATABASE_URL)
99+export const db = drizzle(client, { schema, mode: 'default' })
···11+import { type SQL, sql } from 'drizzle-orm'
22+import { mysqlTable, serial, int, text, type AnyMySqlColumn } from 'drizzle-orm/mysql-core'
33+44+export const task = mysqlTable('task', {
55+ id: serial('id').primaryKey(),
66+ title: text('title').notNull(),
77+ priority: int('priority').notNull().default(1),
88+})
99+1010+export function sqlLower(email: AnyMySqlColumn): SQL {
1111+ return sql`lower(${email})`
1212+}
1313+1414+export function sqlBool(bool: boolean): SQL<boolean> {
1515+ return sql<boolean>`${bool ? '1' : '0'}`
1616+}
1717+1818+export * from './schema.auth'
+7
app/src/lib/server/queries/getUserByUsername.ts
···11+import { db } from '$server/db'
22+import { user } from '$server/db/schema.auth'
33+import { eq } from 'drizzle-orm'
44+55+export async function getUserByUsername(username: string) {
66+ return await db.select().from(user).where(eq(user.username, username)).limit(1)
77+}
+17
app/src/lib/server/queries/isEmailAvailable.ts
···11+import { eq } from 'drizzle-orm'
22+import { db } from '../db'
33+import { sqlLower, sqlBool, user } from '../db/schema'
44+55+/**
66+ * Checks if a user has already registered an email address
77+ * within the database.
88+ */
99+export async function isEmailAvailable(email: string): Promise<boolean> {
1010+ const existingEmailQuery = await db
1111+ .select({ exists: sqlBool(true) })
1212+ .from(user)
1313+ .where(eq(sqlLower(user.email), email.toLowerCase()))
1414+ .limit(1)
1515+1616+ return existingEmailQuery.length === 0
1717+}
+7
app/src/lib/server/queries/isUsernameReserved.ts
···11+import reservedUsernamesJson from './reservedUsernames.json' with { type: 'json' }
22+33+const reservedUsernames = new Set(...reservedUsernamesJson)
44+55+export function isUsernameReserved(username: string): boolean {
66+ return !reservedUsernames.has(username)
77+}
···11-import { createClient } from '@supabase/supabase-js'
22-import { PUBLIC_SUPABASE_URL, PUBLIC_SUPABASE_ANON_KEY } from '$env/static/public'
33-import type { Database } from '../database.types.ts'
44-55-const supabaseUrl = PUBLIC_SUPABASE_URL
66-const supabaseKey = PUBLIC_SUPABASE_ANON_KEY
77-88-export const supabase = createClient<Database>(supabaseUrl, supabaseKey)
-7
app/src/lib/utils.ts
···11-import type { SupabaseClient } from '@supabase/supabase-js/dist/index.cjs'
21import { clsx, type ClassValue } from 'clsx'
32import { twMerge } from 'tailwind-merge'
44-import type { Database } from '../database.types'
5364/**
75 * Generates a consistent, human-readable page title
···2523export function cn(...inputs: ClassValue[]) {
2624 return twMerge(clsx(inputs))
2725}
2828-2929-/**
3030- * a postgreSQL table with a strongly typed database schema
3131- */
3232-export type DbClient = SupabaseClient<Database>
+1-1
app/src/params/species.ts
···11-import { SpeciesSchema, type Species } from '@starlight/types/hsr'
21import type { ParamMatcher } from '@sveltejs/kit'
22+import { SpeciesSchema, type Species } from '@starlight/types/hsr'
3344export const match: ParamMatcher = (p): p is Species => SpeciesSchema.safeParse(p).success
···11-# For detailed configuration reference documentation, visit:
22-# https://supabase.com/docs/guides/local-development/cli/config
33-# A string used to distinguish different Supabase projects on the same host. Defaults to the
44-# working directory name when running `supabase init`.
55-project_id = "app"
66-77-[api]
88-enabled = true
99-# Port to use for the API URL.
1010-port = 54321
1111-# Schemas to expose in your API. Tables, views and stored procedures in this schema will get API
1212-# endpoints. `public` and `graphql_public` schemas are included by default.
1313-schemas = ["public", "graphql_public"]
1414-# Extra schemas to add to the search_path of every request.
1515-extra_search_path = ["public", "extensions"]
1616-# The maximum number of rows returns from a view, table, or stored procedure. Limits payload size
1717-# for accidental or malicious requests.
1818-max_rows = 1000
1919-2020-[api.tls]
2121-# Enable HTTPS endpoints locally using a self-signed certificate.
2222-enabled = false
2323-# Paths to self-signed certificate pair.
2424-# cert_path = "../certs/my-cert.pem"
2525-# key_path = "../certs/my-key.pem"
2626-2727-[db]
2828-# Port to use for the local database URL.
2929-port = 54322
3030-# Port used by db diff command to initialize the shadow database.
3131-shadow_port = 54320
3232-# The database major version to use. This has to be the same as your remote database's. Run `SHOW
3333-# server_version;` on the remote database to check.
3434-major_version = 17
3535-3636-[db.pooler]
3737-enabled = false
3838-# Port to use for the local connection pooler.
3939-port = 54329
4040-# Specifies when a server connection can be reused by other clients.
4141-# Configure one of the supported pooler modes: `transaction`, `session`.
4242-pool_mode = "transaction"
4343-# How many server connections to allow per user/database pair.
4444-default_pool_size = 20
4545-# Maximum number of client connections allowed.
4646-max_client_conn = 100
4747-4848-# [db.vault]
4949-# secret_key = "env(SECRET_VALUE)"
5050-5151-[db.migrations]
5252-# If disabled, migrations will be skipped during a db push or reset.
5353-enabled = true
5454-# Specifies an ordered list of schema files that describe your database.
5555-# Supports glob patterns relative to supabase directory: "./schemas/*.sql"
5656-schema_paths = []
5757-5858-[db.seed]
5959-# If enabled, seeds the database after migrations during a db reset.
6060-enabled = true
6161-# Specifies an ordered list of seed files to load during db reset.
6262-# Supports glob patterns relative to supabase directory: "./seeds/*.sql"
6363-sql_paths = ["./seed.sql"]
6464-6565-[db.network_restrictions]
6666-# Enable management of network restrictions.
6767-enabled = false
6868-# List of IPv4 CIDR blocks allowed to connect to the database.
6969-# Defaults to allow all IPv4 connections. Set empty array to block all IPs.
7070-allowed_cidrs = ["0.0.0.0/0"]
7171-# List of IPv6 CIDR blocks allowed to connect to the database.
7272-# Defaults to allow all IPv6 connections. Set empty array to block all IPs.
7373-allowed_cidrs_v6 = ["::/0"]
7474-7575-[realtime]
7676-enabled = true
7777-# Bind realtime via either IPv4 or IPv6. (default: IPv4)
7878-# ip_version = "IPv6"
7979-# The maximum length in bytes of HTTP request headers. (default: 4096)
8080-# max_header_length = 4096
8181-8282-[studio]
8383-enabled = true
8484-# Port to use for Supabase Studio.
8585-port = 54323
8686-# External URL of the API server that frontend connects to.
8787-api_url = "http://127.0.0.1"
8888-# OpenAI API Key to use for Supabase AI in the Supabase Studio.
8989-openai_api_key = "env(OPENAI_API_KEY)"
9090-9191-# Email testing server. Emails sent with the local dev setup are not actually sent - rather, they
9292-# are monitored, and you can view the emails that would have been sent from the web interface.
9393-[inbucket]
9494-enabled = true
9595-# Port to use for the email testing server web interface.
9696-port = 54324
9797-# Uncomment to expose additional ports for testing user applications that send emails.
9898-# smtp_port = 54325
9999-# pop3_port = 54326
100100-# admin_email = "admin@email.com"
101101-# sender_name = "Admin"
102102-103103-[storage]
104104-enabled = true
105105-# The maximum file size allowed (e.g. "5MB", "500KB").
106106-file_size_limit = "50MiB"
107107-108108-# Uncomment to configure local storage buckets
109109-# [storage.buckets.images]
110110-# public = false
111111-# file_size_limit = "50MiB"
112112-# allowed_mime_types = ["image/png", "image/jpeg"]
113113-# objects_path = "./images"
114114-115115-# Allow connections via S3 compatible clients
116116-[storage.s3_protocol]
117117-enabled = true
118118-119119-# Image transformation API is available to Supabase Pro plan.
120120-# [storage.image_transformation]
121121-# enabled = true
122122-123123-# Store analytical data in S3 for running ETL jobs over Iceberg Catalog
124124-# This feature is only available on the hosted platform.
125125-[storage.analytics]
126126-enabled = false
127127-max_namespaces = 5
128128-max_tables = 10
129129-max_catalogs = 2
130130-131131-# Analytics Buckets is available to Supabase Pro plan.
132132-# [storage.analytics.buckets.my-warehouse]
133133-134134-# Store vector embeddings in S3 for large and durable datasets
135135-# This feature is only available on the hosted platform.
136136-[storage.vector]
137137-enabled = false
138138-max_buckets = 10
139139-max_indexes = 5
140140-141141-# Vector Buckets is available to Supabase Pro plan.
142142-# [storage.vector.buckets.documents-openai]
143143-144144-[auth]
145145-enabled = true
146146-# The base URL of your website. Used as an allow-list for redirects and for constructing URLs used
147147-# in emails.
148148-site_url = "http://127.0.0.1:3000"
149149-# A list of *exact* URLs that auth providers are permitted to redirect to post authentication.
150150-additional_redirect_urls = ["https://127.0.0.1:3000"]
151151-# How long tokens are valid for, in seconds. Defaults to 3600 (1 hour), maximum 604,800 (1 week).
152152-jwt_expiry = 3600
153153-# JWT issuer URL. If not set, defaults to the local API URL (http://127.0.0.1:<port>/auth/v1).
154154-# jwt_issuer = ""
155155-# Path to JWT signing key. DO NOT commit your signing keys file to git.
156156-# signing_keys_path = "./signing_keys.json"
157157-# If disabled, the refresh token will never expire.
158158-enable_refresh_token_rotation = true
159159-# Allows refresh tokens to be reused after expiry, up to the specified interval in seconds.
160160-# Requires enable_refresh_token_rotation = true.
161161-refresh_token_reuse_interval = 10
162162-# Allow/disallow new user signups to your project.
163163-enable_signup = true
164164-# Allow/disallow anonymous sign-ins to your project.
165165-enable_anonymous_sign_ins = false
166166-# Allow/disallow testing manual linking of accounts
167167-enable_manual_linking = false
168168-# Passwords shorter than this value will be rejected as weak. Minimum 6, recommended 8 or more.
169169-minimum_password_length = 6
170170-# Passwords that do not meet the following requirements will be rejected as weak. Supported values
171171-# are: `letters_digits`, `lower_upper_letters_digits`, `lower_upper_letters_digits_symbols`
172172-password_requirements = ""
173173-174174-[auth.rate_limit]
175175-# Number of emails that can be sent per hour. Requires auth.email.smtp to be enabled.
176176-email_sent = 2
177177-# Number of SMS messages that can be sent per hour. Requires auth.sms to be enabled.
178178-sms_sent = 30
179179-# Number of anonymous sign-ins that can be made per hour per IP address. Requires enable_anonymous_sign_ins = true.
180180-anonymous_users = 30
181181-# Number of sessions that can be refreshed in a 5 minute interval per IP address.
182182-token_refresh = 150
183183-# Number of sign up and sign-in requests that can be made in a 5 minute interval per IP address (excludes anonymous users).
184184-sign_in_sign_ups = 30
185185-# Number of OTP / Magic link verifications that can be made in a 5 minute interval per IP address.
186186-token_verifications = 30
187187-# Number of Web3 logins that can be made in a 5 minute interval per IP address.
188188-web3 = 30
189189-190190-# Configure one of the supported captcha providers: `hcaptcha`, `turnstile`.
191191-# [auth.captcha]
192192-# enabled = true
193193-# provider = "hcaptcha"
194194-# secret = ""
195195-196196-[auth.email]
197197-# Allow/disallow new user signups via email to your project.
198198-enable_signup = true
199199-# If enabled, a user will be required to confirm any email change on both the old, and new email
200200-# addresses. If disabled, only the new email is required to confirm.
201201-double_confirm_changes = true
202202-# If enabled, users need to confirm their email address before signing in.
203203-enable_confirmations = false
204204-# If enabled, users will need to reauthenticate or have logged in recently to change their password.
205205-secure_password_change = false
206206-# Controls the minimum amount of time that must pass before sending another signup confirmation or password reset email.
207207-max_frequency = "1s"
208208-# Number of characters used in the email OTP.
209209-otp_length = 6
210210-# Number of seconds before the email OTP expires (defaults to 1 hour).
211211-otp_expiry = 3600
212212-213213-# Use a production-ready SMTP server
214214-# [auth.email.smtp]
215215-# enabled = true
216216-# host = "smtp.sendgrid.net"
217217-# port = 587
218218-# user = "apikey"
219219-# pass = "env(SENDGRID_API_KEY)"
220220-# admin_email = "admin@email.com"
221221-# sender_name = "Admin"
222222-223223-# Uncomment to customize email template
224224-# [auth.email.template.invite]
225225-# subject = "You have been invited"
226226-# content_path = "./supabase/templates/invite.html"
227227-228228-# Uncomment to customize notification email template
229229-# [auth.email.notification.password_changed]
230230-# enabled = true
231231-# subject = "Your password has been changed"
232232-# content_path = "./templates/password_changed_notification.html"
233233-234234-[auth.sms]
235235-# Allow/disallow new user signups via SMS to your project.
236236-enable_signup = false
237237-# If enabled, users need to confirm their phone number before signing in.
238238-enable_confirmations = false
239239-# Template for sending OTP to users
240240-template = "Your code is {{ .Code }}"
241241-# Controls the minimum amount of time that must pass before sending another sms otp.
242242-max_frequency = "5s"
243243-244244-# Use pre-defined map of phone number to OTP for testing.
245245-# [auth.sms.test_otp]
246246-# 4152127777 = "123456"
247247-248248-# Configure logged in session timeouts.
249249-# [auth.sessions]
250250-# Force log out after the specified duration.
251251-# timebox = "24h"
252252-# Force log out if the user has been inactive longer than the specified duration.
253253-# inactivity_timeout = "8h"
254254-255255-# This hook runs before a new user is created and allows developers to reject the request based on the incoming user object.
256256-# [auth.hook.before_user_created]
257257-# enabled = true
258258-# uri = "pg-functions://postgres/auth/before-user-created-hook"
259259-260260-# This hook runs before a token is issued and allows you to add additional claims based on the authentication method used.
261261-# [auth.hook.custom_access_token]
262262-# enabled = true
263263-# uri = "pg-functions://<database>/<schema>/<hook_name>"
264264-265265-# Configure one of the supported SMS providers: `twilio`, `twilio_verify`, `messagebird`, `textlocal`, `vonage`.
266266-[auth.sms.twilio]
267267-enabled = false
268268-account_sid = ""
269269-message_service_sid = ""
270270-# DO NOT commit your Twilio auth token to git. Use environment variable substitution instead:
271271-auth_token = "env(SUPABASE_AUTH_SMS_TWILIO_AUTH_TOKEN)"
272272-273273-# Multi-factor-authentication is available to Supabase Pro plan.
274274-[auth.mfa]
275275-# Control how many MFA factors can be enrolled at once per user.
276276-max_enrolled_factors = 10
277277-278278-# Control MFA via App Authenticator (TOTP)
279279-[auth.mfa.totp]
280280-enroll_enabled = false
281281-verify_enabled = false
282282-283283-# Configure MFA via Phone Messaging
284284-[auth.mfa.phone]
285285-enroll_enabled = false
286286-verify_enabled = false
287287-otp_length = 6
288288-template = "Your code is {{ .Code }}"
289289-max_frequency = "5s"
290290-291291-# Configure MFA via WebAuthn
292292-# [auth.mfa.web_authn]
293293-# enroll_enabled = true
294294-# verify_enabled = true
295295-296296-# Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`,
297297-# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin_oidc`, `notion`, `twitch`,
298298-# `twitter`, `slack`, `spotify`, `workos`, `zoom`.
299299-[auth.external.apple]
300300-enabled = false
301301-client_id = ""
302302-# DO NOT commit your OAuth provider secret to git. Use environment variable substitution instead:
303303-secret = "env(SUPABASE_AUTH_EXTERNAL_APPLE_SECRET)"
304304-# Overrides the default auth redirectUrl.
305305-redirect_uri = ""
306306-# Overrides the default auth provider URL. Used to support self-hosted gitlab, single-tenant Azure,
307307-# or any other third-party OIDC providers.
308308-url = ""
309309-# If enabled, the nonce check will be skipped. Required for local sign in with Google auth.
310310-skip_nonce_check = false
311311-# If enabled, it will allow the user to successfully authenticate when the provider does not return an email address.
312312-email_optional = false
313313-314314-# Allow Solana wallet holders to sign in to your project via the Sign in with Solana (SIWS, EIP-4361) standard.
315315-# You can configure "web3" rate limit in the [auth.rate_limit] section and set up [auth.captcha] if self-hosting.
316316-[auth.web3.solana]
317317-enabled = false
318318-319319-# Use Firebase Auth as a third-party provider alongside Supabase Auth.
320320-[auth.third_party.firebase]
321321-enabled = false
322322-# project_id = "my-firebase-project"
323323-324324-# Use Auth0 as a third-party provider alongside Supabase Auth.
325325-[auth.third_party.auth0]
326326-enabled = false
327327-# tenant = "my-auth0-tenant"
328328-# tenant_region = "us"
329329-330330-# Use AWS Cognito (Amplify) as a third-party provider alongside Supabase Auth.
331331-[auth.third_party.aws_cognito]
332332-enabled = false
333333-# user_pool_id = "my-user-pool-id"
334334-# user_pool_region = "us-east-1"
335335-336336-# Use Clerk as a third-party provider alongside Supabase Auth.
337337-[auth.third_party.clerk]
338338-enabled = false
339339-# Obtain from https://clerk.com/setup/supabase
340340-# domain = "example.clerk.accounts.dev"
341341-342342-# OAuth server configuration
343343-[auth.oauth_server]
344344-# Enable OAuth server functionality
345345-enabled = false
346346-# Path for OAuth consent flow UI
347347-authorization_url_path = "/oauth/consent"
348348-# Allow dynamic client registration
349349-allow_dynamic_registration = false
350350-351351-[edge_runtime]
352352-enabled = true
353353-# Supported request policies: `oneshot`, `per_worker`.
354354-# `per_worker` (default) — enables hot reload during local development.
355355-# `oneshot` — fallback mode if hot reload causes issues (e.g. in large repos or with symlinks).
356356-policy = "per_worker"
357357-# Port to attach the Chrome inspector for debugging edge functions.
358358-inspector_port = 8083
359359-# The Deno major version to use.
360360-deno_version = 2
361361-362362-# [edge_runtime.secrets]
363363-# secret_key = "env(SECRET_VALUE)"
364364-365365-[analytics]
366366-enabled = true
367367-port = 54327
368368-# Configure one of the supported backends: `postgres`, `bigquery`.
369369-backend = "postgres"
370370-371371-# Experimental features may be deprecated any time
372372-[experimental]
373373-# Configures Postgres storage engine to use OrioleDB (S3)
374374-orioledb_version = ""
375375-# Configures S3 bucket URL, eg. <bucket_name>.s3-<region>.amazonaws.com
376376-s3_host = "env(S3_HOST)"
377377-# Configures S3 bucket region, eg. us-east-1
378378-s3_region = "env(S3_REGION)"
379379-# Configures AWS_ACCESS_KEY_ID for S3 bucket
380380-s3_access_key = "env(S3_ACCESS_KEY)"
381381-# Configures AWS_SECRET_ACCESS_KEY for S3 bucket
382382-s3_secret_key = "env(S3_SECRET_KEY)"
···11+import type { Element } from '@starlight/types/hsr'
22+import type { Component } from 'svelte'
13import FlameIcon from '@lucide/svelte/icons/flame'
24import SnowflakeIcon from '@lucide/svelte/icons/snowflake'
35import SwordsIcon from '@lucide/svelte/icons/swords'
46import WindIcon from '@lucide/svelte/icons/wind'
57import ZapIcon from '@lucide/svelte/icons/zap'
66-import type { Element } from '@starlight/types/hsr'
77-import type { Component } from 'svelte'
88import UniverseIcon from './UniverseIcon.svelte'
99import WhirlIcon from './WhirlIcon.svelte'
1010
+2-2
packages/icons/src/lib/MechanicIcon.ts
···11+import type { Mechanic } from '@starlight/types/hsr'
22+import type { Component } from 'svelte'
13import BombIcon from '@lucide/svelte/icons/bomb'
24import ChevronsDownIcon from '@lucide/svelte/icons/chevrons-down'
35import CircleDotDashedIcon from '@lucide/svelte/icons/circle-dot-dashed'
···79import ShieldHalfIcon from '@lucide/svelte/icons/shield-half'
810import SparklesIcon from '@lucide/svelte/icons/sparkles'
911import SplitIcon from '@lucide/svelte/icons/split'
1010-import type { Mechanic } from '@starlight/types/hsr'
1111-import type { Component } from 'svelte'
12121313const mechanicMap: Record<Mechanic, Component> = {
1414 'single-target': CrosshairIcon,
+1-1
packages/storybook-utils/src/index.ts
···11-import { ElementArray, MechanicArray } from '@starlight/types/hsr'
21import type { BaseAnnotations, InputType } from 'storybook/internal/csf'
22+import { ElementArray, MechanicArray } from '@starlight/types/hsr'
3344type InputTypeControl = InputType['control']
55type RefinedInputType<T extends keyof InputType> = Omit<InputType, T>
+1-1
packages/tokenizer/tests/utilts.test.ts
···11+import { isAsciiDigit, isAsciiWsp } from '@nc/whatwg-infra/codePoints'
12import { assert, describe, test } from 'vitest'
23import { splitBy } from '../src/utils'
33-import { isAsciiDigit, isAsciiWsp } from '@nc/whatwg-infra/codePoints'
4455describe('splitBy()', () => {
66 test('ascii whitespace', () => {