From df582f15340116e4ab8706b36c265a0d9e00f54b Mon Sep 17 00:00:00 2001 From: Bradley Shellnut Date: Thu, 29 Aug 2024 16:12:40 -0700 Subject: [PATCH] Adding mfa page instead of 2FA, starting controller based password verification and totp generation. --- .../cleanupSessions/+server.ts | 0 .../api => oldApis}/collection/+server.ts | 0 .../collection}/[id]/items/+server.ts | 12 +- .../collection/[id]/search/+server.ts | 6 +- .../external/game/[id]/+server.ts | 0 .../external/search/+server.ts | 0 .../api => oldApis}/games/[id]/+server.ts | 0 .../api => oldApis}/games/random/+server.ts | 0 .../api => oldApis}/games/search/+server.ts | 0 .../api => oldApis}/publisher/+server.ts | 0 .../api => oldApis}/publisher/[id]/+server.ts | 0 .../reset-password/+server.ts | 4 +- .../reset-password/[token]/+server.ts | 19 +- .../api => oldApis}/wishlist/+server.ts | 0 .../wishlist}/[id]/items/+server.ts | 12 +- .../wishlist/[id]/search/+server.ts | 0 package.json | 6 +- pnpm-lock.yaml | 78 +++---- src/lib/components/Header.svelte | 2 +- src/lib/components/signup.svelte | 2 +- src/lib/dtos/verify-password.dto.ts | 7 + .../server/api/controllers/iam.controller.ts | 10 + .../server/api/controllers/mfa.controller.ts | 39 ++++ src/lib/server/api/index.ts | 2 + .../api/infrastructure/database/seed.ts | 2 +- .../infrastructure/database/tables/index.ts | 2 +- ...coveryCodes.ts => recovery-codes.table.ts} | 4 +- .../repositories/credentials.repository.ts | 21 ++ src/lib/server/api/services/iam.service.ts | 9 + src/lib/server/api/services/totp.service.ts | 36 ++++ src/lib/server/api/services/users.service.ts | 13 ++ .../(app)/(protected)/list/+layout.server.ts | 14 +- .../(app)/(protected)/profile/+page.server.ts | 198 +++++++++--------- .../(app)/(protected)/profile/+page.svelte | 12 +- .../{two-factor => mfa}/+page.server.ts | 198 ++++++++---------- .../security/{two-factor => mfa}/+page.svelte | 4 +- .../recovery-codes/+page.server.ts | 23 +- .../recovery-codes/+page.svelte | 0 .../security/password/change/+page.server.ts | 29 +-- src/routes/(app)/game/[id]/+page.svelte | 2 +- src/routes/(auth)/+layout.svelte | 4 +- .../{sign-up => signup}/+page.server.ts | 0 .../(auth)/{sign-up => signup}/+page.svelte | 2 +- svelte.config.js | 3 +- 44 files changed, 443 insertions(+), 332 deletions(-) rename {src/routes/api/crons => oldApis}/cleanupSessions/+server.ts (100%) rename {src/routes/api => oldApis}/collection/+server.ts (100%) rename {src/routes/api/wishlist => oldApis/collection}/[id]/items/+server.ts (96%) rename {src/routes/api => oldApis}/collection/[id]/search/+server.ts (89%) rename {src/routes/api => oldApis}/external/game/[id]/+server.ts (100%) rename {src/routes/api => oldApis}/external/search/+server.ts (100%) rename {src/routes/api => oldApis}/games/[id]/+server.ts (100%) rename {src/routes/api => oldApis}/games/random/+server.ts (100%) rename {src/routes/api => oldApis}/games/search/+server.ts (100%) rename {src/routes/api => oldApis}/publisher/+server.ts (100%) rename {src/routes/api => oldApis}/publisher/[id]/+server.ts (100%) rename {src/routes/api/auth => oldApis}/reset-password/+server.ts (86%) rename {src/routes/api/auth => oldApis}/reset-password/[token]/+server.ts (61%) rename {src/routes/api => oldApis}/wishlist/+server.ts (100%) rename {src/routes/api/collection => oldApis/wishlist}/[id]/items/+server.ts (96%) rename {src/routes/api => oldApis}/wishlist/[id]/search/+server.ts (100%) create mode 100644 src/lib/dtos/verify-password.dto.ts create mode 100644 src/lib/server/api/controllers/mfa.controller.ts rename src/lib/server/api/infrastructure/database/tables/{recoveryCodes.ts => recovery-codes.table.ts} (74%) create mode 100644 src/lib/server/api/services/totp.service.ts rename src/routes/(app)/(protected)/profile/security/{two-factor => mfa}/+page.server.ts (53%) rename src/routes/(app)/(protected)/profile/security/{two-factor => mfa}/+page.svelte (93%) rename src/routes/(app)/(protected)/profile/security/{two-factor => mfa}/recovery-codes/+page.server.ts (72%) rename src/routes/(app)/(protected)/profile/security/{two-factor => mfa}/recovery-codes/+page.svelte (100%) rename src/routes/(auth)/{sign-up => signup}/+page.server.ts (100%) rename src/routes/(auth)/{sign-up => signup}/+page.svelte (98%) diff --git a/src/routes/api/crons/cleanupSessions/+server.ts b/oldApis/cleanupSessions/+server.ts similarity index 100% rename from src/routes/api/crons/cleanupSessions/+server.ts rename to oldApis/cleanupSessions/+server.ts diff --git a/src/routes/api/collection/+server.ts b/oldApis/collection/+server.ts similarity index 100% rename from src/routes/api/collection/+server.ts rename to oldApis/collection/+server.ts diff --git a/src/routes/api/wishlist/[id]/items/+server.ts b/oldApis/collection/[id]/items/+server.ts similarity index 96% rename from src/routes/api/wishlist/[id]/items/+server.ts rename to oldApis/collection/[id]/items/+server.ts index fc7727d..4d9ebe1 100644 --- a/src/routes/api/wishlist/[id]/items/+server.ts +++ b/oldApis/collection/[id]/items/+server.ts @@ -1,6 +1,6 @@ -import { error, json } from '@sveltejs/kit'; - -export async function GET({ url, locals, params }) { - const searchParams = Object.fromEntries(url.searchParams); - return json({}); -} +import { error, json } from '@sveltejs/kit'; + +export async function GET({ url, locals, params }) { + const searchParams = Object.fromEntries(url.searchParams); + return json({}); +} diff --git a/src/routes/api/collection/[id]/search/+server.ts b/oldApis/collection/[id]/search/+server.ts similarity index 89% rename from src/routes/api/collection/[id]/search/+server.ts rename to oldApis/collection/[id]/search/+server.ts index 046f107..528c6f6 100644 --- a/src/routes/api/collection/[id]/search/+server.ts +++ b/oldApis/collection/[id]/search/+server.ts @@ -1,14 +1,14 @@ import { error, json } from '@sveltejs/kit'; import { eq } from 'drizzle-orm'; -import db from '../../../../../db'; +import {db} from '$lib/server/api/infrastructure/database'; import { collection_items, usersTable } from '$db/schema'; // Search a user's collection export async function GET({ url, locals, params }) { const searchParams = Object.fromEntries(url.searchParams); const q = searchParams?.q || ''; - const limit = parseInt(searchParams?.limit) || 10; - const skip = parseInt(searchParams?.skip) || 0; + const limit = Number.parseInt(searchParams?.limit) || 10; + const skip = Number.parseInt(searchParams?.skip) || 0; const order = searchParams?.order || 'asc'; const sort = searchParams?.sort || 'name'; const collection_id = params.id; diff --git a/src/routes/api/external/game/[id]/+server.ts b/oldApis/external/game/[id]/+server.ts similarity index 100% rename from src/routes/api/external/game/[id]/+server.ts rename to oldApis/external/game/[id]/+server.ts diff --git a/src/routes/api/external/search/+server.ts b/oldApis/external/search/+server.ts similarity index 100% rename from src/routes/api/external/search/+server.ts rename to oldApis/external/search/+server.ts diff --git a/src/routes/api/games/[id]/+server.ts b/oldApis/games/[id]/+server.ts similarity index 100% rename from src/routes/api/games/[id]/+server.ts rename to oldApis/games/[id]/+server.ts diff --git a/src/routes/api/games/random/+server.ts b/oldApis/games/random/+server.ts similarity index 100% rename from src/routes/api/games/random/+server.ts rename to oldApis/games/random/+server.ts diff --git a/src/routes/api/games/search/+server.ts b/oldApis/games/search/+server.ts similarity index 100% rename from src/routes/api/games/search/+server.ts rename to oldApis/games/search/+server.ts diff --git a/src/routes/api/publisher/+server.ts b/oldApis/publisher/+server.ts similarity index 100% rename from src/routes/api/publisher/+server.ts rename to oldApis/publisher/+server.ts diff --git a/src/routes/api/publisher/[id]/+server.ts b/oldApis/publisher/[id]/+server.ts similarity index 100% rename from src/routes/api/publisher/[id]/+server.ts rename to oldApis/publisher/[id]/+server.ts diff --git a/src/routes/api/auth/reset-password/+server.ts b/oldApis/reset-password/+server.ts similarity index 86% rename from src/routes/api/auth/reset-password/+server.ts rename to oldApis/reset-password/+server.ts index d793b58..c661f15 100644 --- a/src/routes/api/auth/reset-password/+server.ts +++ b/oldApis/reset-password/+server.ts @@ -1,7 +1,7 @@ -import db from '../../../../db'; +import { db } from '$lib/server/api/infrastructure/database'; import { error } from '@sveltejs/kit'; import { eq } from 'drizzle-orm'; -import { usersTable } from '$db/schema'; +import { usersTable } from '$lib/server/api/infrastructure/database/tables'; import { createPasswordResetToken } from '$lib/server/auth-utils.js'; import { PUBLIC_SITE_URL } from '$env/static/public'; diff --git a/src/routes/api/auth/reset-password/[token]/+server.ts b/oldApis/reset-password/[token]/+server.ts similarity index 61% rename from src/routes/api/auth/reset-password/[token]/+server.ts rename to oldApis/reset-password/[token]/+server.ts index 938137d..2b50676 100644 --- a/src/routes/api/auth/reset-password/[token]/+server.ts +++ b/oldApis/reset-password/[token]/+server.ts @@ -1,9 +1,8 @@ import { eq } from 'drizzle-orm'; -import { password_reset_tokens, usersTable } from '$db/schema'; +import { password_reset_tokens } from '$lib/server/api/infrastructure/database/tables'; import { isWithinExpirationDate } from 'oslo'; -import { lucia } from '$lib/server/auth.js'; -import { Argon2id } from 'oslo/password'; -import db from '$db'; +// import { lucia } from '$lib/server/lucia'; +import {db} from '$lib/server/api/infrastructure/database'; export async function POST({ request, params }) { const { password } = await request.json(); @@ -32,12 +31,12 @@ export async function POST({ request, params }) { }); } - await lucia.invalidateUserSessions(token.user_id); - const hashPassword = await new Argon2id().hash(password); - // await db.update(usersTable).set({ hashed_password: hashPassword }).where(eq(usersTable.id, token.user_id)); - - const session = await lucia.createSession(token.user_id, {}); - const sessionCookie = lucia.createSessionCookie(session.id); + // await lucia.invalidateUserSessions(token.user_id); + // const hashPassword = await new Argon2id().hash(password); + // // await db.update(usersTable).set({ hashed_password: hashPassword }).where(eq(usersTable.id, token.user_id)); + // + // const session = await lucia.createSession(token.user_id, {}); + // const sessionCookie = lucia.createSessionCookie(session.id); return new Response(null, { status: 302, diff --git a/src/routes/api/wishlist/+server.ts b/oldApis/wishlist/+server.ts similarity index 100% rename from src/routes/api/wishlist/+server.ts rename to oldApis/wishlist/+server.ts diff --git a/src/routes/api/collection/[id]/items/+server.ts b/oldApis/wishlist/[id]/items/+server.ts similarity index 96% rename from src/routes/api/collection/[id]/items/+server.ts rename to oldApis/wishlist/[id]/items/+server.ts index fc7727d..4d9ebe1 100644 --- a/src/routes/api/collection/[id]/items/+server.ts +++ b/oldApis/wishlist/[id]/items/+server.ts @@ -1,6 +1,6 @@ -import { error, json } from '@sveltejs/kit'; - -export async function GET({ url, locals, params }) { - const searchParams = Object.fromEntries(url.searchParams); - return json({}); -} +import { error, json } from '@sveltejs/kit'; + +export async function GET({ url, locals, params }) { + const searchParams = Object.fromEntries(url.searchParams); + return json({}); +} diff --git a/src/routes/api/wishlist/[id]/search/+server.ts b/oldApis/wishlist/[id]/search/+server.ts similarity index 100% rename from src/routes/api/wishlist/[id]/search/+server.ts rename to oldApis/wishlist/[id]/search/+server.ts diff --git a/package.json b/package.json index 5d4c785..c00a9a0 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "svelte": "5.0.0-next.175", "svelte-check": "^3.8.6", "svelte-headless-table": "^0.18.2", - "svelte-meta-tags": "^3.1.3", + "svelte-meta-tags": "^3.1.4", "svelte-preprocess": "^6.0.2", "svelte-sequential-preprocessor": "^2.0.1", "sveltekit-flash-message": "^2.4.4", @@ -68,7 +68,7 @@ "tailwindcss": "^3.4.10", "ts-node": "^10.9.2", "tslib": "^2.7.0", - "tsx": "^4.18.0", + "tsx": "^4.19.0", "typescript": "^5.5.4", "vite": "^5.4.2", "vitest": "^1.6.0", @@ -106,7 +106,7 @@ "feather-icons": "^4.29.2", "formsnap": "^1.0.1", "handlebars": "^4.7.8", - "hono": "^4.5.8", + "hono": "^4.5.9", "hono-rate-limiter": "^0.4.0", "html-entities": "^2.5.2", "iconify-icon": "^2.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 739aaed..88491f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: version: 5.0.14 '@hono/swagger-ui': specifier: ^0.4.1 - version: 0.4.1(hono@4.5.8) + version: 0.4.1(hono@4.5.9) '@hono/zod-openapi': specifier: ^0.15.3 - version: 0.15.3(hono@4.5.8)(zod@3.23.8) + version: 0.15.3(hono@4.5.9)(zod@3.23.8) '@hono/zod-validator': specifier: ^0.2.2 - version: 0.2.2(hono@4.5.8)(zod@3.23.8) + version: 0.2.2(hono@4.5.9)(zod@3.23.8) '@iconify-icons/line-md': specifier: ^1.2.30 version: 1.2.30 @@ -99,11 +99,11 @@ importers: specifier: ^4.7.8 version: 4.7.8 hono: - specifier: ^4.5.8 - version: 4.5.8 + specifier: ^4.5.9 + version: 4.5.9 hono-rate-limiter: specifier: ^0.4.0 - version: 0.4.0(hono@4.5.8) + version: 0.4.0(hono@4.5.9) html-entities: specifier: ^2.5.2 version: 2.5.2 @@ -248,7 +248,7 @@ importers: version: 16.1.0(postcss@8.4.41) postcss-load-config: specifier: ^5.1.0 - version: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0) + version: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0) postcss-preset-env: specifier: ^9.6.0 version: 9.6.0(postcss@8.4.41) @@ -272,16 +272,16 @@ importers: version: 5.0.0-next.175 svelte-check: specifier: ^3.8.6 - version: 3.8.6(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175) + version: 3.8.6(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175) svelte-headless-table: specifier: ^0.18.2 version: 0.18.2(svelte@5.0.0-next.175) svelte-meta-tags: - specifier: ^3.1.3 - version: 3.1.3(svelte@5.0.0-next.175)(typescript@5.5.4) + specifier: ^3.1.4 + version: 3.1.4(svelte@5.0.0-next.175)(typescript@5.5.4) svelte-preprocess: specifier: ^6.0.2 - version: 6.0.2(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4) + version: 6.0.2(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4) svelte-sequential-preprocessor: specifier: ^2.0.1 version: 2.0.1 @@ -304,8 +304,8 @@ importers: specifier: ^2.7.0 version: 2.7.0 tsx: - specifier: ^4.18.0 - version: 4.18.0 + specifier: ^4.19.0 + version: 4.19.0 typescript: specifier: ^5.5.4 version: 5.5.4 @@ -3178,8 +3178,8 @@ packages: peerDependencies: hono: ^4.1.1 - hono@4.5.8: - resolution: {integrity: sha512-pqpSlcdqGkpTTRpLYU1PnCz52gVr0zVR9H5GzMyJWuKQLLEBQxh96q45QizJ2PPX8NATtz2mu31/PKW/Jt+90Q==} + hono@4.5.9: + resolution: {integrity: sha512-zz8ktqMDRrZETjxBrv8C5PQRFbrTRCLNVAjD1SNQyOzv4VjmX68Uxw83xQ6oxdAB60HiWnGEatiKA8V3SZLDkQ==} engines: {node: '>=16.0.0'} html-entities@2.5.2: @@ -4493,8 +4493,8 @@ packages: svelte-lazy-loader@1.0.0: resolution: {integrity: sha512-AZD6R60vksyojn21FgXLglmBiBB9K5Dkdu0hdGrLbCaRCYT68IsWkZfRUqKhMx1IfzqWcZQ8X9y/f+Ih0oNQkQ==} - svelte-meta-tags@3.1.3: - resolution: {integrity: sha512-iIdJgxKdMUqFGR4m88jBE9KTSO2jdKE5CRjyRtAjdevW51jL4TtDZwL7GOtr5Fd2dw/+jyQIPD7APATP191qIA==} + svelte-meta-tags@3.1.4: + resolution: {integrity: sha512-TUIfhut0iVeTm7f5v/ZuU/tZ9XsNig9bNN8yK0t2x2WL9qw6AxAVRe9i5XddYJE0SuVwkoDCzjoSg5hXv7oWbQ==} peerDependencies: svelte: ^3.55.0 || ^4.0.0 @@ -4737,8 +4737,8 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsx@4.18.0: - resolution: {integrity: sha512-a1jaKBSVQkd6yEc1/NI7G6yHFfefIcuf3QJST7ZEyn4oQnxLYrZR5uZAM8UrwUa3Ge8suiZHcNS1gNrEvmobqg==} + tsx@4.19.0: + resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==} engines: {node: '>=18.0.0'} hasBin: true @@ -5695,20 +5695,20 @@ snapshots: '@hapi/hoek': 9.3.0 optional: true - '@hono/swagger-ui@0.4.1(hono@4.5.8)': + '@hono/swagger-ui@0.4.1(hono@4.5.9)': dependencies: - hono: 4.5.8 + hono: 4.5.9 - '@hono/zod-openapi@0.15.3(hono@4.5.8)(zod@3.23.8)': + '@hono/zod-openapi@0.15.3(hono@4.5.9)(zod@3.23.8)': dependencies: '@asteasolutions/zod-to-openapi': 7.1.1(zod@3.23.8) - '@hono/zod-validator': 0.2.2(hono@4.5.8)(zod@3.23.8) - hono: 4.5.8 + '@hono/zod-validator': 0.2.2(hono@4.5.9)(zod@3.23.8) + hono: 4.5.9 zod: 3.23.8 - '@hono/zod-validator@0.2.2(hono@4.5.8)(zod@3.23.8)': + '@hono/zod-validator@0.2.2(hono@4.5.9)(zod@3.23.8)': dependencies: - hono: 4.5.8 + hono: 4.5.9 zod: 3.23.8 '@humanwhocodes/config-array@0.11.14': @@ -7562,11 +7562,11 @@ snapshots: hex-rgb@4.3.0: {} - hono-rate-limiter@0.4.0(hono@4.5.8): + hono-rate-limiter@0.4.0(hono@4.5.9): dependencies: - hono: 4.5.8 + hono: 4.5.9 - hono@4.5.8: {} + hono@4.5.9: {} html-entities@2.5.2: {} @@ -8301,14 +8301,14 @@ snapshots: postcss: 8.4.41 ts-node: 10.9.2(@types/node@20.16.1)(typescript@5.5.4) - postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0): + postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0): dependencies: lilconfig: 3.1.1 yaml: 2.4.2 optionalDependencies: jiti: 1.21.6 postcss: 8.4.41 - tsx: 4.18.0 + tsx: 4.19.0 postcss-logical@7.0.1(postcss@8.4.41): dependencies: @@ -8878,14 +8878,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.6(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175): + svelte-check@3.8.6(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 3.6.0 picocolors: 1.0.0 sade: 1.8.1 svelte: 5.0.0-next.175 - svelte-preprocess: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4) + svelte-preprocess: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - '@babel/core' @@ -8930,7 +8930,7 @@ snapshots: svelte-lazy-loader@1.0.0: {} - svelte-meta-tags@3.1.3(svelte@5.0.0-next.175)(typescript@5.5.4): + svelte-meta-tags@3.1.4(svelte@5.0.0-next.175)(typescript@5.5.4): dependencies: schema-dts: 1.1.2(typescript@5.5.4) svelte: 5.0.0-next.175 @@ -8941,7 +8941,7 @@ snapshots: dependencies: svelte: 5.0.0-next.175 - svelte-preprocess@5.1.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4): + svelte-preprocess@5.1.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4): dependencies: '@types/pug': 2.0.10 detect-indent: 6.1.0 @@ -8951,16 +8951,16 @@ snapshots: svelte: 5.0.0-next.175 optionalDependencies: postcss: 8.4.41 - postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0) + postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0) sass: 1.77.8 typescript: 5.5.4 - svelte-preprocess@6.0.2(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4): + svelte-preprocess@6.0.2(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0))(postcss@8.4.41)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4): dependencies: svelte: 5.0.0-next.175 optionalDependencies: postcss: 8.4.41 - postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.18.0) + postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.41)(tsx@4.19.0) sass: 1.77.8 typescript: 5.5.4 @@ -9174,7 +9174,7 @@ snapshots: tslib@2.7.0: {} - tsx@4.18.0: + tsx@4.19.0: dependencies: esbuild: 0.23.0 get-tsconfig: 4.7.5 diff --git a/src/lib/components/Header.svelte b/src/lib/components/Header.svelte index d632423..5768ad5 100644 --- a/src/lib/components/Header.svelte +++ b/src/lib/components/Header.svelte @@ -92,7 +92,7 @@ {:else} Login - Sign Up + Sign Up {/if} diff --git a/src/lib/components/signup.svelte b/src/lib/components/signup.svelte index d3ee0d9..ca5db91 100644 --- a/src/lib/components/signup.svelte +++ b/src/lib/components/signup.svelte @@ -13,7 +13,7 @@ // $: termsValue = $form.terms as Writable; -
+

Signup user