From e512fab9f9213d06bd2bb826bcba37a37cdac788 Mon Sep 17 00:00:00 2001 From: rykuno Date: Sat, 31 Aug 2024 13:35:16 -0500 Subject: [PATCH 1/3] moved dto's out of server folder. --- src/lib/dtos/register-email.dto.ts | 18 ---------- src/lib/dtos/signin-email.dto.ts | 18 ---------- src/lib/dtos/update-email.dto.ts | 18 ---------- src/lib/dtos/verify-email.dto.ts | 18 ---------- .../common/inferfaces/controller.interface.ts | 7 ---- .../api/common/inferfaces/email.interface.ts | 3 -- .../server/api/controllers/iam.controller.ts | 8 ++--- src/lib/server/api/dtos/register-email.dto.ts | 7 ---- src/lib/server/api/dtos/signin-email.dto.ts | 8 ----- src/lib/server/api/dtos/update-email.dto.ts | 6 ---- src/lib/server/api/dtos/verify-email.dto.ts | 6 ---- src/lib/server/api/jobs/auth-cleanup.job.ts | 8 ++--- src/lib/server/api/services/iam.service.ts | 4 +-- src/lib/server/api/services/jobs.service.ts | 3 +- src/routes/(auth)/register/+page.server.ts | 6 ++-- src/routes/(auth)/register/+page.svelte | 36 ++++--------------- 16 files changed, 21 insertions(+), 153 deletions(-) delete mode 100644 src/lib/server/api/common/inferfaces/controller.interface.ts delete mode 100644 src/lib/server/api/dtos/register-email.dto.ts delete mode 100644 src/lib/server/api/dtos/signin-email.dto.ts delete mode 100644 src/lib/server/api/dtos/update-email.dto.ts delete mode 100644 src/lib/server/api/dtos/verify-email.dto.ts diff --git a/src/lib/dtos/register-email.dto.ts b/src/lib/dtos/register-email.dto.ts index d73db49..462c82e 100644 --- a/src/lib/dtos/register-email.dto.ts +++ b/src/lib/dtos/register-email.dto.ts @@ -1,23 +1,5 @@ import { z } from 'zod'; -/* -------------------------------------------------------------------------- */ -/* DTO */ -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -/* ---------------------------------- About --------------------------------- */ -/* -Data Transfer Objects (DTOs) are used to define the shape of data that is passed. -They are used to validate data and ensure that the correct data is being passed -to the correct methods. -*/ -/* ---------------------------------- Notes --------------------------------- */ -/* -DTO's are pretty flexible. You can use them anywhere you want in this application to -validate or shape data. They are especially useful in API routes and services to -ensure that the correct data is being passed around. -*/ -/* -------------------------------------------------------------------------- */ - export const registerEmailDto = z.object({ email: z.string().email() }); diff --git a/src/lib/dtos/signin-email.dto.ts b/src/lib/dtos/signin-email.dto.ts index 630f614..e04a046 100644 --- a/src/lib/dtos/signin-email.dto.ts +++ b/src/lib/dtos/signin-email.dto.ts @@ -1,23 +1,5 @@ import { z } from 'zod'; -/* -------------------------------------------------------------------------- */ -/* DTO */ -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -/* ---------------------------------- About --------------------------------- */ -/* -Data Transfer Objects (DTOs) are used to define the shape of data that is passed. -They are used to validate data and ensure that the correct data is being passed -to the correct methods. -*/ -/* ---------------------------------- Notes --------------------------------- */ -/* -DTO's are pretty flexible. You can use them anywhere you want in this application to -validate or shape data. They are especially useful in API routes and services to -ensure that the correct data is being passed around. -*/ -/* -------------------------------------------------------------------------- */ - export const signInEmailDto = z.object({ email: z.string().email(), token: z.string() diff --git a/src/lib/dtos/update-email.dto.ts b/src/lib/dtos/update-email.dto.ts index 94b9101..4ab90a4 100644 --- a/src/lib/dtos/update-email.dto.ts +++ b/src/lib/dtos/update-email.dto.ts @@ -1,23 +1,5 @@ import { z } from 'zod'; -/* -------------------------------------------------------------------------- */ -/* DTO */ -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -/* ---------------------------------- About --------------------------------- */ -/* -Data Transfer Objects (DTOs) are used to define the shape of data that is passed. -They are used to validate data and ensure that the correct data is being passed -to the correct methods. -*/ -/* ---------------------------------- Notes --------------------------------- */ -/* -DTO's are pretty flexible. You can use them anywhere you want in this application to -validate or shape data. They are especially useful in API routes and services to -ensure that the correct data is being passed around. -*/ -/* -------------------------------------------------------------------------- */ - export const updateEmailDto = z.object({ email: z.string().email() }); diff --git a/src/lib/dtos/verify-email.dto.ts b/src/lib/dtos/verify-email.dto.ts index f46f872..0366a20 100644 --- a/src/lib/dtos/verify-email.dto.ts +++ b/src/lib/dtos/verify-email.dto.ts @@ -1,23 +1,5 @@ import { z } from 'zod'; -/* -------------------------------------------------------------------------- */ -/* DTO */ -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ -/* ---------------------------------- About --------------------------------- */ -/* -Data Transfer Objects (DTOs) are used to define the shape of data that is passed. -They are used to validate data and ensure that the correct data is being passed -to the correct methods. -*/ -/* ---------------------------------- Notes --------------------------------- */ -/* -DTO's are pretty flexible. You can use them anywhere you want in this application to -validate or shape data. They are especially useful in API routes and services to -ensure that the correct data is being passed around. -*/ -/* -------------------------------------------------------------------------- */ - export const verifyEmailDto = z.object({ token: z.string() }); diff --git a/src/lib/server/api/common/inferfaces/controller.interface.ts b/src/lib/server/api/common/inferfaces/controller.interface.ts deleted file mode 100644 index 1352a8f..0000000 --- a/src/lib/server/api/common/inferfaces/controller.interface.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Hono } from 'hono'; -import type { BlankSchema } from 'hono/types'; -import type { HonoTypes } from '../types/hono.type'; - -// export interface Controller { -// routes() -// } diff --git a/src/lib/server/api/common/inferfaces/email.interface.ts b/src/lib/server/api/common/inferfaces/email.interface.ts index 876f6e7..520bf17 100644 --- a/src/lib/server/api/common/inferfaces/email.interface.ts +++ b/src/lib/server/api/common/inferfaces/email.interface.ts @@ -1,6 +1,3 @@ - - - export interface Email { subject(): string html(): string; diff --git a/src/lib/server/api/controllers/iam.controller.ts b/src/lib/server/api/controllers/iam.controller.ts index 5df1b94..9fd2b2d 100644 --- a/src/lib/server/api/controllers/iam.controller.ts +++ b/src/lib/server/api/controllers/iam.controller.ts @@ -4,13 +4,13 @@ import { inject, injectable } from 'tsyringe'; import { zValidator } from '@hono/zod-validator'; import { IamService } from '../services/iam.service'; import { LuciaProvider } from '../providers/lucia.provider'; -import { signInEmailDto } from '../../../dtos/signin-email.dto'; -import { updateEmailDto } from '../../../dtos/update-email.dto'; -import { verifyEmailDto } from '../../../dtos/verify-email.dto'; -import { registerEmailDto } from '../../../dtos/register-email.dto'; import { limiter } from '../middlewares/rate-limiter.middlware'; import { requireAuth } from '../middlewares/auth.middleware'; import { Controler } from '../common/classes/controller.class'; +import { registerEmailDto } from '$lib/dtos/register-email.dto'; +import { signInEmailDto } from '$lib/dtos/signin-email.dto'; +import { updateEmailDto } from '$lib/dtos/update-email.dto'; +import { verifyEmailDto } from '$lib/dtos/verify-email.dto'; @injectable() export class IamController extends Controler { diff --git a/src/lib/server/api/dtos/register-email.dto.ts b/src/lib/server/api/dtos/register-email.dto.ts deleted file mode 100644 index 462c82e..0000000 --- a/src/lib/server/api/dtos/register-email.dto.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { z } from 'zod'; - -export const registerEmailDto = z.object({ - email: z.string().email() -}); - -export type RegisterEmailDto = z.infer; diff --git a/src/lib/server/api/dtos/signin-email.dto.ts b/src/lib/server/api/dtos/signin-email.dto.ts deleted file mode 100644 index e04a046..0000000 --- a/src/lib/server/api/dtos/signin-email.dto.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { z } from 'zod'; - -export const signInEmailDto = z.object({ - email: z.string().email(), - token: z.string() -}); - -export type SignInEmailDto = z.infer; diff --git a/src/lib/server/api/dtos/update-email.dto.ts b/src/lib/server/api/dtos/update-email.dto.ts deleted file mode 100644 index 4ab90a4..0000000 --- a/src/lib/server/api/dtos/update-email.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { z } from 'zod'; - -export const updateEmailDto = z.object({ - email: z.string().email() -}); -export type UpdateEmailDto = z.infer; diff --git a/src/lib/server/api/dtos/verify-email.dto.ts b/src/lib/server/api/dtos/verify-email.dto.ts deleted file mode 100644 index 0366a20..0000000 --- a/src/lib/server/api/dtos/verify-email.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { z } from 'zod'; - -export const verifyEmailDto = z.object({ - token: z.string() -}); -export type VerifyEmailDto = z.infer; diff --git a/src/lib/server/api/jobs/auth-cleanup.job.ts b/src/lib/server/api/jobs/auth-cleanup.job.ts index 629cfee..9202eaa 100644 --- a/src/lib/server/api/jobs/auth-cleanup.job.ts +++ b/src/lib/server/api/jobs/auth-cleanup.job.ts @@ -1,15 +1,15 @@ import { inject, injectable } from "tsyringe"; import { JobsService } from "../services/jobs.service"; +// Example on how to create a job that runs once a week at midnight on Sunday + @injectable() export class AuthCleanupJobs { private queue; - constructor( - @inject(JobsService) private jobsService: JobsService, - ) { + constructor(@inject(JobsService) private jobsService: JobsService) { /* ------------------------------ Create Queue ------------------------------ */ - this.queue = this.jobsService.createQueue('test') + this.queue = this.jobsService.createQueue('auth_cleanup') /* ---------------------------- Register Workers ---------------------------- */ this.worker(); diff --git a/src/lib/server/api/services/iam.service.ts b/src/lib/server/api/services/iam.service.ts index 35bce7d..9786f4e 100644 --- a/src/lib/server/api/services/iam.service.ts +++ b/src/lib/server/api/services/iam.service.ts @@ -3,8 +3,8 @@ import { MailerService } from './mailer.service'; import { TokensService } from './tokens.service'; import { LuciaProvider } from '../providers/lucia.provider'; import { UsersRepository } from '../repositories/users.repository'; -import type { SignInEmailDto } from '../dtos/signin-email.dto'; -import type { RegisterEmailDto } from '../dtos/register-email.dto'; +import type { SignInEmailDto } from '../../../dtos/signin-email.dto'; +import type { RegisterEmailDto } from '../../../dtos/register-email.dto'; import { LoginRequestsRepository } from '../repositories/login-requests.repository'; import { LoginVerificationEmail } from '../emails/login-verification.email'; import { DatabaseProvider } from '../providers/database.provider'; diff --git a/src/lib/server/api/services/jobs.service.ts b/src/lib/server/api/services/jobs.service.ts index 15aeaec..3bd5f55 100644 --- a/src/lib/server/api/services/jobs.service.ts +++ b/src/lib/server/api/services/jobs.service.ts @@ -4,8 +4,7 @@ import { RedisProvider } from "../providers/redis.provider"; @injectable() export class JobsService { - constructor(@inject(RedisProvider) private readonly redis: RedisProvider) { - } + constructor(@inject(RedisProvider) private readonly redis: RedisProvider) { } createQueue(name: string) { return new Queue(name, { connection: this.redis }) diff --git a/src/routes/(auth)/register/+page.server.ts b/src/routes/(auth)/register/+page.server.ts index e905a34..a5f00f9 100644 --- a/src/routes/(auth)/register/+page.server.ts +++ b/src/routes/(auth)/register/+page.server.ts @@ -1,9 +1,9 @@ import { fail, redirect } from '@sveltejs/kit'; import { zod } from 'sveltekit-superforms/adapters'; -import { signInEmailDto } from '$lib/dtos/signin-email.dto.js'; -import { setError, superValidate } from 'sveltekit-superforms'; -import { registerEmailDto } from '$lib/dtos/register-email.dto.js'; import { StatusCodes } from '$lib/constants/status-codes'; +import { registerEmailDto } from '$lib/dtos/register-email.dto'; +import { signInEmailDto } from '$lib/dtos/signin-email.dto'; +import { setError, superValidate } from 'sveltekit-superforms'; export const load = async () => { return { diff --git a/src/routes/(auth)/register/+page.svelte b/src/routes/(auth)/register/+page.svelte index 892272b..aaa423e 100644 --- a/src/routes/(auth)/register/+page.svelte +++ b/src/routes/(auth)/register/+page.svelte @@ -1,36 +1,15 @@ - - From 4f38b4a6d0fdc7597b8371499a36e60566c8212f Mon Sep 17 00:00:00 2001 From: rykuno Date: Sun, 1 Sep 2024 16:32:50 -0500 Subject: [PATCH 2/3] moved dtos within api folder --- Dockerfile.minio | 3 + minio-console.conf.template | 41 +++++++++++ render.yaml | 68 +++++++++++++++++++ .../server/api/controllers/iam.controller.ts | 8 +-- .../api}/dtos/register-email.dto.ts | 0 .../{ => server/api}/dtos/signin-email.dto.ts | 0 .../{ => server/api}/dtos/update-email.dto.ts | 0 .../{ => server/api}/dtos/verify-email.dto.ts | 1 + src/lib/server/api/queues.ts | 0 src/lib/server/api/services/iam.service.ts | 4 +- .../(app)/settings/account/+page.server.ts | 11 ++- src/routes/(app)/settings/account/schemas.ts | 9 +++ .../settings/account/update-email-card.svelte | 4 +- src/routes/(auth)/register/+page.server.ts | 11 ++- src/routes/(auth)/register/+page.svelte | 7 +- src/routes/(auth)/register/schemas.ts | 12 ++++ 16 files changed, 155 insertions(+), 24 deletions(-) create mode 100644 Dockerfile.minio create mode 100644 minio-console.conf.template rename src/lib/{ => server/api}/dtos/register-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/signin-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/update-email.dto.ts (100%) rename src/lib/{ => server/api}/dtos/verify-email.dto.ts (99%) delete mode 100644 src/lib/server/api/queues.ts create mode 100644 src/routes/(app)/settings/account/schemas.ts create mode 100644 src/routes/(auth)/register/schemas.ts diff --git a/Dockerfile.minio b/Dockerfile.minio new file mode 100644 index 0000000..78a36b0 --- /dev/null +++ b/Dockerfile.minio @@ -0,0 +1,3 @@ +FROM nginx:stable-alpine-slim +COPY minio-console.conf.template /etc/nginx/templates/ +RUN rm /etc/nginx/conf.d/default.conf /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh \ No newline at end of file diff --git a/minio-console.conf.template b/minio-console.conf.template new file mode 100644 index 0000000..34d022f --- /dev/null +++ b/minio-console.conf.template @@ -0,0 +1,41 @@ +upstream minio_console { + server ${MINIO_HOST}:${MINIO_CONSOLE_PORT}; +} + +server { + listen ${PORT}; + + # Allow special characters in headers + ignore_invalid_headers off; + # Allow any size file to be uploaded. + # Set to a value such as 1000m; to restrict file size to a specific value + client_max_body_size 0; + # Disable buffering + proxy_buffering off; + proxy_request_buffering off; + + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-NginX-Proxy true; + + # This is necessary to pass the correct IP to be hashed + real_ip_header X-Real-IP; + + proxy_connect_timeout 300; + + # To support websockets in MinIO versions released after January 2023 + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress) + # Uncomment the following line to set the Origin request to an empty string + # proxy_set_header Origin ''; + + chunked_transfer_encoding off; + + proxy_pass http://minio_console; # This uses the upstream directive definition to load balance + } +} \ No newline at end of file diff --git a/render.yaml b/render.yaml index fea7eb4..5dcf25f 100644 --- a/render.yaml +++ b/render.yaml @@ -1,4 +1,5 @@ services: + # Web - type: web name: web runtime: node @@ -9,6 +10,21 @@ services: startCommand: npm run db:migrate && node build/index.js healthCheckPath: / envVars: + - key: STORAGE_API_SECRET_KEY + fromService: + name: minio-server + type: web + property: MINIO_ROOT_PASSWORD + - key: STORAGE_ACCESS_KEY + fromService: + name: minio-server + type: web + property: MINIO_ROOT_USER + - key: STORAGE_API_URL + fromService: + name: minio-server + type: web + property: connectionString - key: DATABASE_URL fromDatabase: name: tofustack @@ -23,10 +39,62 @@ services: name: web type: web property: host + # Redis - type: redis name: redis ipAllowList: [] # Only allow internal connections + # MinIO Server + - type: web + name: minio-server + healthCheckPath: /minio/health/liveweb + runtime: image + image: + url: docker.io/minio/minio:latest + dockerCommand: minio server /data --address $HOST:$PORT --console-address $HOST:$CONSOLE_PORT + # Use the following 'dockerCommand' if removing the 'minio-console' + # web service + # dockerCommand: minio server /data --address $HOST:$PORT + autoDeploy: false + disk: + name: data + mountPath: /data + envVars: + - key: MINIO_ROOT_USER + generateValue: true + - key: MINIO_ROOT_PASSWORD + generateValue: true + - key: HOST + value: "0.0.0.0" + - key: PORT + value: 9000 + - key: CONSOLE_PORT + value: 9090 + # Uncomment the following key/value pair if you are removing the + # 'minio-console' web service + # - key: MINIO_BROWSER + # value: "off" + # MinIO Console + - type: web + name: minio-console + runtime: docker + dockerContext: / + dockerfilePath: ./Dockerfile.minio + autoDeploy: false + envVars: + - key: PORT + value: 10000 + - key: MINIO_HOST + fromService: + name: minio-server + type: web + property: host + - key: MINIO_CONSOLE_PORT + fromService: + name: minio-server + type: web + envVarKey: CONSOLE_PORT + databases: - name: db databaseName: tofustack diff --git a/src/lib/server/api/controllers/iam.controller.ts b/src/lib/server/api/controllers/iam.controller.ts index 9fd2b2d..41ec692 100644 --- a/src/lib/server/api/controllers/iam.controller.ts +++ b/src/lib/server/api/controllers/iam.controller.ts @@ -7,10 +7,10 @@ import { LuciaProvider } from '../providers/lucia.provider'; import { limiter } from '../middlewares/rate-limiter.middlware'; import { requireAuth } from '../middlewares/auth.middleware'; import { Controler } from '../common/classes/controller.class'; -import { registerEmailDto } from '$lib/dtos/register-email.dto'; -import { signInEmailDto } from '$lib/dtos/signin-email.dto'; -import { updateEmailDto } from '$lib/dtos/update-email.dto'; -import { verifyEmailDto } from '$lib/dtos/verify-email.dto'; +import { registerEmailDto } from '$lib/server/api/dtos/register-email.dto'; +import { signInEmailDto } from '$lib/server/api/dtos/signin-email.dto'; +import { updateEmailDto } from '$lib/server/api/dtos/update-email.dto'; +import { verifyEmailDto } from '$lib/server/api/dtos/verify-email.dto'; @injectable() export class IamController extends Controler { diff --git a/src/lib/dtos/register-email.dto.ts b/src/lib/server/api/dtos/register-email.dto.ts similarity index 100% rename from src/lib/dtos/register-email.dto.ts rename to src/lib/server/api/dtos/register-email.dto.ts diff --git a/src/lib/dtos/signin-email.dto.ts b/src/lib/server/api/dtos/signin-email.dto.ts similarity index 100% rename from src/lib/dtos/signin-email.dto.ts rename to src/lib/server/api/dtos/signin-email.dto.ts diff --git a/src/lib/dtos/update-email.dto.ts b/src/lib/server/api/dtos/update-email.dto.ts similarity index 100% rename from src/lib/dtos/update-email.dto.ts rename to src/lib/server/api/dtos/update-email.dto.ts diff --git a/src/lib/dtos/verify-email.dto.ts b/src/lib/server/api/dtos/verify-email.dto.ts similarity index 99% rename from src/lib/dtos/verify-email.dto.ts rename to src/lib/server/api/dtos/verify-email.dto.ts index 0366a20..bd1a395 100644 --- a/src/lib/dtos/verify-email.dto.ts +++ b/src/lib/server/api/dtos/verify-email.dto.ts @@ -3,4 +3,5 @@ import { z } from 'zod'; export const verifyEmailDto = z.object({ token: z.string() }); + export type VerifyEmailDto = z.infer; diff --git a/src/lib/server/api/queues.ts b/src/lib/server/api/queues.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/server/api/services/iam.service.ts b/src/lib/server/api/services/iam.service.ts index 9786f4e..35bce7d 100644 --- a/src/lib/server/api/services/iam.service.ts +++ b/src/lib/server/api/services/iam.service.ts @@ -3,8 +3,8 @@ import { MailerService } from './mailer.service'; import { TokensService } from './tokens.service'; import { LuciaProvider } from '../providers/lucia.provider'; import { UsersRepository } from '../repositories/users.repository'; -import type { SignInEmailDto } from '../../../dtos/signin-email.dto'; -import type { RegisterEmailDto } from '../../../dtos/register-email.dto'; +import type { SignInEmailDto } from '../dtos/signin-email.dto'; +import type { RegisterEmailDto } from '../dtos/register-email.dto'; import { LoginRequestsRepository } from '../repositories/login-requests.repository'; import { LoginVerificationEmail } from '../emails/login-verification.email'; import { DatabaseProvider } from '../providers/database.provider'; diff --git a/src/routes/(app)/settings/account/+page.server.ts b/src/routes/(app)/settings/account/+page.server.ts index f5e115a..31f55f1 100644 --- a/src/routes/(app)/settings/account/+page.server.ts +++ b/src/routes/(app)/settings/account/+page.server.ts @@ -1,29 +1,28 @@ import { zod } from "sveltekit-superforms/adapters"; -import { updateEmailDto } from "$lib/dtos/update-email.dto.js"; -import { verifyEmailDto } from "$lib/dtos/verify-email.dto.js"; import { fail, setError, superValidate } from "sveltekit-superforms"; import { StatusCodes } from "$lib/constants/status-codes.js"; +import { updateEmailFormSchema, verifyEmailFormSchema } from "./schemas.js"; export let load = async (event) => { const authedUser = await event.locals.getAuthedUserOrThrow() return { authedUser, - updateEmailForm: await superValidate(authedUser, zod(updateEmailDto)), - verifyEmailForm: await superValidate(zod(verifyEmailDto)) + updateEmailForm: await superValidate(authedUser, zod(updateEmailFormSchema)), + verifyEmailForm: await superValidate(zod(verifyEmailFormSchema)) }; }; export const actions = { updateEmail: async ({ request, locals }) => { - const updateEmailForm = await superValidate(request, zod(updateEmailDto)); + const updateEmailForm = await superValidate(request, zod(updateEmailFormSchema)); if (!updateEmailForm.valid) return fail(StatusCodes.BAD_REQUEST, { updateEmailForm }) const { error } = await locals.api.iam.email.$patch({ json: updateEmailForm.data }).then(locals.parseApiResponse); if (error) return setError(updateEmailForm, 'email', error); return { updateEmailForm } }, verifyEmail: async ({ request, locals }) => { - const verifyEmailForm = await superValidate(request, zod(verifyEmailDto)); + const verifyEmailForm = await superValidate(request, zod(verifyEmailFormSchema)); console.log(verifyEmailForm) if (!verifyEmailForm.valid) return fail(StatusCodes.BAD_REQUEST, { verifyEmailForm }) const { error } = await locals.api.iam.email.verification.$post({ json: verifyEmailForm.data }).then(locals.parseApiResponse); diff --git a/src/routes/(app)/settings/account/schemas.ts b/src/routes/(app)/settings/account/schemas.ts new file mode 100644 index 0000000..793dabd --- /dev/null +++ b/src/routes/(app)/settings/account/schemas.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const verifyEmailFormSchema = z.object({ + token: z.string() +}); + +export const updateEmailFormSchema = z.object({ + email: z.string().email() +}); \ No newline at end of file diff --git a/src/routes/(app)/settings/account/update-email-card.svelte b/src/routes/(app)/settings/account/update-email-card.svelte index a62ca27..2b4c44a 100644 --- a/src/routes/(app)/settings/account/update-email-card.svelte +++ b/src/routes/(app)/settings/account/update-email-card.svelte @@ -1,7 +1,5 @@