Slowly reverting tsyringe to test it that works better.

This commit is contained in:
Bradley Shellnut 2024-08-02 17:49:08 -07:00
parent 4dbc93f819
commit e655c0d319
26 changed files with 358 additions and 406 deletions

View file

@ -1 +1 @@
22.1.0
20.16.0

View file

@ -22,24 +22,21 @@
"site:update": "pnpm update -i -L",
"test:unit": "vitest"
},
"engines": {
"node": "22.x"
},
"devDependencies": {
"@melt-ui/pp": "^0.3.2",
"@melt-ui/svelte": "^0.83.0",
"@playwright/test": "^1.45.3",
"@sveltejs/adapter-auto": "^3.2.2",
"@sveltejs/enhanced-img": "^0.3.1",
"@sveltejs/kit": "^2.5.18",
"@sveltejs/kit": "^2.5.20",
"@sveltejs/vite-plugin-svelte": "^3.1.1",
"@types/cookie": "^0.6.0",
"@types/node": "^20.14.13",
"@types/node": "^20.14.14",
"@types/pg": "^8.11.6",
"@typescript-eslint/eslint-plugin": "^7.17.0",
"@typescript-eslint/parser": "^7.17.0",
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@typescript-eslint/parser": "^7.18.0",
"autoprefixer": "^10.4.19",
"drizzle-kit": "^0.23.0",
"drizzle-kit": "^0.23.1",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.43.0",
@ -58,7 +55,7 @@
"satori": "^0.10.14",
"satori-html": "^0.3.2",
"svelte": "5.0.0-next.175",
"svelte-check": "^3.8.4",
"svelte-check": "^3.8.5",
"svelte-headless-table": "^0.18.2",
"svelte-meta-tags": "^3.1.2",
"svelte-preprocess": "^6.0.2",
@ -69,7 +66,7 @@
"tailwindcss": "^3.4.7",
"ts-node": "^10.9.2",
"tslib": "^2.6.3",
"tsx": "^4.16.2",
"tsx": "^4.16.5",
"typescript": "^5.5.4",
"vite": "^5.3.5",
"vitest": "^1.6.0",
@ -86,14 +83,15 @@
"@lukeed/uuid": "^2.0.1",
"@neondatabase/serverless": "^0.9.4",
"@paralleldrive/cuid2": "^2.2.2",
"@resvg/resvg-js": "^2.6.2",
"@sveltejs/adapter-node": "^5.2.0",
"@sveltejs/adapter-vercel": "^5.4.1",
"@types/feather-icons": "^4.29.4",
"@vercel/og": "^0.5.20",
"arctic": "^1.9.2",
"bits-ui": "^0.21.12",
"bits-ui": "^0.21.13",
"boardgamegeekclient": "^1.9.1",
"bullmq": "^5.11.0",
"bullmq": "^5.12.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"cookie": "^0.6.0",
@ -103,7 +101,7 @@
"feather-icons": "^4.29.2",
"formsnap": "^1.0.1",
"handlebars": "^4.7.8",
"hono": "^4.5.2",
"hono": "^4.5.3",
"hono-rate-limiter": "^0.4.0",
"html-entities": "^2.5.2",
"iconify-icon": "^2.1.0",
@ -118,8 +116,6 @@
"qrcode": "^1.5.3",
"radix-svelte": "^0.9.0",
"rate-limit-redis": "^4.2.0",
"reflect-metadata": "^0.2.2",
"@resvg/resvg-js": "^2.6.2",
"svelte-french-toast": "^1.2.0",
"svelte-lazy-loader": "^1.0.0",
"tailwind-merge": "^2.4.0",

View file

@ -13,7 +13,7 @@ importers:
version: 5.0.13
'@hono/zod-validator':
specifier: ^0.2.2
version: 0.2.2(hono@4.5.2)(zod@3.23.8)
version: 0.2.2(hono@4.5.3)(zod@3.23.8)
'@iconify-icons/line-md':
specifier: ^1.2.30
version: 1.2.30
@ -40,10 +40,10 @@ importers:
version: 2.6.2
'@sveltejs/adapter-node':
specifier: ^5.2.0
version: 5.2.0(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))
version: 5.2.0(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))
'@sveltejs/adapter-vercel':
specifier: ^5.4.1
version: 5.4.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))
version: 5.4.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))
'@types/feather-icons':
specifier: ^4.29.4
version: 4.29.4
@ -54,14 +54,14 @@ importers:
specifier: ^1.9.2
version: 1.9.2
bits-ui:
specifier: ^0.21.12
version: 0.21.12(svelte@5.0.0-next.175)
specifier: ^0.21.13
version: 0.21.13(svelte@5.0.0-next.175)
boardgamegeekclient:
specifier: ^1.9.1
version: 1.9.1
bullmq:
specifier: ^5.11.0
version: 5.11.0
specifier: ^5.12.0
version: 5.12.0
class-variance-authority:
specifier: ^0.7.0
version: 0.7.0
@ -85,16 +85,16 @@ importers:
version: 4.29.2
formsnap:
specifier: ^1.0.1
version: 1.0.1(svelte@5.0.0-next.175)(sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175))
version: 1.0.1(svelte@5.0.0-next.175)(sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175))
handlebars:
specifier: ^4.7.8
version: 4.7.8
hono:
specifier: ^4.5.2
version: 4.5.2
specifier: ^4.5.3
version: 4.5.3
hono-rate-limiter:
specifier: ^0.4.0
version: 0.4.0(hono@4.5.2)
version: 0.4.0(hono@4.5.3)
html-entities:
specifier: ^2.5.2
version: 2.5.2
@ -148,10 +148,10 @@ importers:
version: 2.4.0
tailwind-variants:
specifier: ^0.2.1
version: 0.2.1(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)))
version: 0.2.1(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)))
tailwindcss-animate:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)))
version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)))
zod-to-json-schema:
specifier: ^3.23.2
version: 3.23.2(zod@3.23.8)
@ -167,37 +167,37 @@ importers:
version: 1.45.3
'@sveltejs/adapter-auto':
specifier: ^3.2.2
version: 3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))
version: 3.2.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))
'@sveltejs/enhanced-img':
specifier: ^0.3.1
version: 0.3.1(rollup@4.18.1)(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
version: 0.3.1(rollup@4.18.1)(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
'@sveltejs/kit':
specifier: ^2.5.18
version: 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
specifier: ^2.5.20
version: 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
'@sveltejs/vite-plugin-svelte':
specifier: ^3.1.1
version: 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
version: 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
'@types/cookie':
specifier: ^0.6.0
version: 0.6.0
'@types/node':
specifier: ^20.14.13
version: 20.14.13
specifier: ^20.14.14
version: 20.14.14
'@types/pg':
specifier: ^8.11.6
version: 8.11.6
'@typescript-eslint/eslint-plugin':
specifier: ^7.17.0
version: 7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
specifier: ^7.18.0
version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/parser':
specifier: ^7.17.0
version: 7.17.0(eslint@8.57.0)(typescript@5.5.4)
specifier: ^7.18.0
version: 7.18.0(eslint@8.57.0)(typescript@5.5.4)
autoprefixer:
specifier: ^10.4.19
version: 10.4.19(postcss@8.4.40)
drizzle-kit:
specifier: ^0.23.0
version: 0.23.0
specifier: ^0.23.1
version: 0.23.1
eslint:
specifier: ^8.57.0
version: 8.57.0
@ -206,7 +206,7 @@ importers:
version: 9.1.0(eslint@8.57.0)
eslint-plugin-svelte:
specifier: ^2.43.0
version: 2.43.0(eslint@8.57.0)(svelte@5.0.0-next.175)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
version: 2.43.0(eslint@8.57.0)(svelte@5.0.0-next.175)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
just-clone:
specifier: ^6.2.0
version: 6.2.0
@ -230,7 +230,7 @@ importers:
version: 16.1.0(postcss@8.4.40)
postcss-load-config:
specifier: ^5.1.0
version: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2)
version: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5)
postcss-preset-env:
specifier: ^9.6.0
version: 9.6.0(postcss@8.4.40)
@ -253,8 +253,8 @@ importers:
specifier: 5.0.0-next.175
version: 5.0.0-next.175
svelte-check:
specifier: ^3.8.4
version: 3.8.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.175)
specifier: ^3.8.5
version: 3.8.5(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5))(postcss@8.4.40)(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)
@ -263,40 +263,40 @@ importers:
version: 3.1.2(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.40)(tsx@4.16.2))(postcss@8.4.40)(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.40)(tsx@4.16.5))(postcss@8.4.40)(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
sveltekit-flash-message:
specifier: ^2.4.4
version: 2.4.4(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)
version: 2.4.4(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)
sveltekit-rate-limiter:
specifier: ^0.5.2
version: 0.5.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))
version: 0.5.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))
sveltekit-superforms:
specifier: ^2.16.1
version: 2.16.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)
version: 2.16.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)
tailwindcss:
specifier: ^3.4.7
version: 3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
version: 3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
ts-node:
specifier: ^10.9.2
version: 10.9.2(@types/node@20.14.13)(typescript@5.5.4)
version: 10.9.2(@types/node@20.14.14)(typescript@5.5.4)
tslib:
specifier: ^2.6.3
version: 2.6.3
tsx:
specifier: ^4.16.2
version: 4.16.2
specifier: ^4.16.5
version: 4.16.5
typescript:
specifier: ^5.5.4
version: 5.5.4
vite:
specifier: ^5.3.5
version: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
version: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@20.14.13)(sass@1.77.8)
version: 1.6.0(@types/node@20.14.14)(sass@1.77.8)
zod:
specifier: ^3.23.8
version: 3.23.8
@ -565,6 +565,9 @@ packages:
peerDependencies:
postcss: ^8.4
'@drizzle-team/brocli@0.8.2':
resolution: {integrity: sha512-zTrFENsqGvOkBOuHDC1pXCkDXNd2UhP4lI3gYGhQ1R1SPeAAfqzPsV1dcpMy4uNU6kB5VpU5NGhvwxVNETR02A==}
'@emnapi/core@0.45.0':
resolution: {integrity: sha512-DPWjcUDQkCeEM4VnljEOEcXdAD7pp8zSZsgOujk/LGIwCXWbXJngin+MO4zbH429lzeC3WbYLGjE2MaUOwzpyw==}
@ -1964,8 +1967,8 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: '>= 5.0.0'
'@sveltejs/kit@2.5.18':
resolution: {integrity: sha512-+g06hvpVAnH7b4CDjhnTDgFWBKBiQJpuSmQeGYOuzbO3SC3tdYjRNlDCrafvDtKbGiT2uxY5Dn9qdEUGVZdWOQ==}
'@sveltejs/kit@2.5.20':
resolution: {integrity: sha512-47rJ5BoYwURE/Rp7FNMLp3NzdbWC9DQ/PmKd0mebxT2D/PrPxZxcLImcD3zsWdX2iS6oJk8ITJbO/N2lWnnUqA==}
engines: {node: '>=18.13'}
hasBin: true
peerDependencies:
@ -2018,8 +2021,8 @@ packages:
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@20.14.13':
resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==}
'@types/node@20.14.14':
resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==}
'@types/pg@8.11.6':
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
@ -2033,8 +2036,8 @@ packages:
'@types/validator@13.12.0':
resolution: {integrity: sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==}
'@typescript-eslint/eslint-plugin@7.17.0':
resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==}
'@typescript-eslint/eslint-plugin@7.18.0':
resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@ -2044,8 +2047,8 @@ packages:
typescript:
optional: true
'@typescript-eslint/parser@7.17.0':
resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==}
'@typescript-eslint/parser@7.18.0':
resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -2054,12 +2057,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/scope-manager@7.17.0':
resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==}
'@typescript-eslint/scope-manager@7.18.0':
resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/type-utils@7.17.0':
resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==}
'@typescript-eslint/type-utils@7.18.0':
resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -2068,12 +2071,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/types@7.17.0':
resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==}
'@typescript-eslint/types@7.18.0':
resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.17.0':
resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==}
'@typescript-eslint/typescript-estree@7.18.0':
resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
@ -2081,14 +2084,14 @@ packages:
typescript:
optional: true
'@typescript-eslint/utils@7.17.0':
resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==}
'@typescript-eslint/utils@7.18.0':
resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.17.0':
resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==}
'@typescript-eslint/visitor-keys@7.18.0':
resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0':
@ -2259,8 +2262,8 @@ packages:
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
bits-ui@0.21.12:
resolution: {integrity: sha512-Cf0iB+ZKwA0ZjkpixrhrZK9PC6pGPFleW/65Xc/z0lpGvWaFtdOhiYEntCHHxZ0VihP3aJaG0OBhUBIbmAePaA==}
bits-ui@0.21.13:
resolution: {integrity: sha512-7nmOh6Ig7ND4DXZHv1FhNsY9yUGrad0+mf3tc4YN//3MgnJT1LnHtk4HZAKgmxCOe7txSX7/39LtYHbkrXokAQ==}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.118
@ -2306,8 +2309,8 @@ packages:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
bullmq@5.11.0:
resolution: {integrity: sha512-qVzyWGZqie3VHaYEgRXhId/j8ebfmj6MExEJyUByMsUJA5pVciVle3hKLer5fyMwtQ8lTMP7GwhXV/NZ+HzlRA==}
bullmq@5.12.0:
resolution: {integrity: sha512-kOtSQx9ymylslsLNFD0xOMJM9mHqnq3x6KD7+DYkHByWe0HFRdblpYKhZyL4uR3rwaKZwzOrJVl3RwRaDjZxSg==}
bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
@ -2524,6 +2527,15 @@ packages:
supports-color:
optional: true
debug@4.3.6:
resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
decamelize@1.2.0:
resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
engines: {node: '>=0.10.0'}
@ -2606,8 +2618,8 @@ packages:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
drizzle-kit@0.23.0:
resolution: {integrity: sha512-w9jE97z193dd4jzAyj4Uv2SOh8Ydue70Ki6W0awy4bGM1aPXan6zD6Yv+nNTA6oGgNTDl2MJFxutjHG4fden5g==}
drizzle-kit@0.23.1:
resolution: {integrity: sha512-posGQhj8/K4S4CPhk7BO9+IcpNdIh96t0DvcAr/NvMKhPhe5D0MELzmpq9R2MpmSP3fd+Z3upwidtetrw7xnjg==}
hasBin: true
drizzle-orm@0.32.1:
@ -3070,8 +3082,8 @@ packages:
peerDependencies:
hono: ^4.1.1
hono@4.5.2:
resolution: {integrity: sha512-93P8XEALrHAUGRZoqXs8MDL3w9mDgRpbW9Sy5x4LS7srg78bKUw7EGynxze+Ft1e/rLGmDAbxeSTMu6dHUSRDw==}
hono@4.5.3:
resolution: {integrity: sha512-r26WwwbKD3BAYdfB294knNnegNda7VfV1tVn66D9Kvl9WQTdrR+5eKdoeaQNHQcC3Gr0KBikzAtjd6VsRGVSaw==}
engines: {node: '>=16.0.0'}
html-entities@2.5.2:
@ -4340,8 +4352,8 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
svelte-check@3.8.4:
resolution: {integrity: sha512-61aHMkdinWyH8BkkTX9jPLYxYzaAAz/FK/VQqdr2FiCQQ/q04WCwDlpGbHff1GdrMYTmW8chlTFvRWL9k0A8vg==}
svelte-check@3.8.5:
resolution: {integrity: sha512-3OGGgr9+bJ/+1nbPgsvulkLC48xBsqsgtc8Wam281H4G9F5v3mYGa2bHRsPuwHC5brKl4AxJH95QF73kmfihGQ==}
hasBin: true
peerDependencies:
svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
@ -4617,8 +4629,8 @@ packages:
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
tsx@4.16.2:
resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==}
tsx@4.16.5:
resolution: {integrity: sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==}
engines: {node: '>=18.0.0'}
hasBin: true
@ -5153,6 +5165,8 @@ snapshots:
dependencies:
postcss: 8.4.40
'@drizzle-team/brocli@0.8.2': {}
'@emnapi/core@0.45.0':
dependencies:
tslib: 2.6.3
@ -5525,9 +5539,9 @@ snapshots:
'@hapi/hoek': 9.3.0
optional: true
'@hono/zod-validator@0.2.2(hono@4.5.2)(zod@3.23.8)':
'@hono/zod-validator@0.2.2(hono@4.5.3)(zod@3.23.8)':
dependencies:
hono: 4.5.2
hono: 4.5.3
zod: 3.23.8
'@humanwhocodes/config-array@0.11.14':
@ -6116,41 +6130,41 @@ snapshots:
'@sodaru/yup-to-json-schema@2.0.1':
optional: true
'@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))':
'@sveltejs/adapter-auto@3.2.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))':
dependencies:
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
import-meta-resolve: 4.1.0
'@sveltejs/adapter-node@5.2.0(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))':
'@sveltejs/adapter-node@5.2.0(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))':
dependencies:
'@rollup/plugin-commonjs': 26.0.1(rollup@4.18.1)
'@rollup/plugin-json': 6.1.0(rollup@4.18.1)
'@rollup/plugin-node-resolve': 15.2.3(rollup@4.18.1)
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
rollup: 4.18.1
'@sveltejs/adapter-vercel@5.4.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))':
'@sveltejs/adapter-vercel@5.4.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))':
dependencies:
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
'@vercel/nft': 0.27.2
esbuild: 0.21.5
transitivePeerDependencies:
- encoding
- supports-color
'@sveltejs/enhanced-img@0.3.1(rollup@4.18.1)(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))':
'@sveltejs/enhanced-img@0.3.1(rollup@4.18.1)(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))':
dependencies:
magic-string: 0.30.10
svelte: 5.0.0-next.175
svelte-parse-markup: 0.1.5(svelte@5.0.0-next.175)
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
vite-imagetools: 7.0.2(rollup@4.18.1)
transitivePeerDependencies:
- rollup
'@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))':
'@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
'@types/cookie': 0.6.0
cookie: 0.6.0
devalue: 5.0.0
@ -6164,28 +6178,28 @@ snapshots:
sirv: 2.0.4
svelte: 5.0.0-next.175
tiny-glob: 0.2.9
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))':
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
debug: 4.3.4
svelte: 5.0.0-next.175
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
transitivePeerDependencies:
- supports-color
'@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))':
'@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.10
svelte: 5.0.0-next.175
svelte-hmr: 0.16.0(svelte@5.0.0-next.175)
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vitefu: 0.2.5(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
vitefu: 0.2.5(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
transitivePeerDependencies:
- supports-color
@ -6215,13 +6229,13 @@ snapshots:
'@types/json-schema@7.0.15':
optional: true
'@types/node@20.14.13':
'@types/node@20.14.14':
dependencies:
undici-types: 5.26.5
'@types/pg@8.11.6':
dependencies:
'@types/node': 20.14.13
'@types/node': 20.14.14
pg-protocol: 1.6.1
pg-types: 4.0.2
@ -6232,14 +6246,14 @@ snapshots:
'@types/validator@13.12.0':
optional: true
'@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 7.17.0
'@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 7.17.0
'@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 7.18.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
@ -6250,12 +6264,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/scope-manager': 7.17.0
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 7.17.0
'@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/types': 7.18.0
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
'@typescript-eslint/visitor-keys': 7.18.0
debug: 4.3.4
eslint: 8.57.0
optionalDependencies:
@ -6263,16 +6277,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@7.17.0':
'@typescript-eslint/scope-manager@7.18.0':
dependencies:
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/visitor-keys': 7.17.0
'@typescript-eslint/types': 7.18.0
'@typescript-eslint/visitor-keys': 7.18.0
'@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4)
'@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4)
debug: 4.3.5
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
'@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4)
debug: 4.3.6
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.5.4)
optionalDependencies:
@ -6280,12 +6294,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.17.0': {}
'@typescript-eslint/types@7.18.0': {}
'@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4)':
'@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/visitor-keys': 7.17.0
'@typescript-eslint/types': 7.18.0
'@typescript-eslint/visitor-keys': 7.18.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -6297,20 +6311,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4)':
'@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.17.0
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4)
'@typescript-eslint/scope-manager': 7.18.0
'@typescript-eslint/types': 7.18.0
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4)
eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@7.17.0':
'@typescript-eslint/visitor-keys@7.18.0':
dependencies:
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/types': 7.18.0
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
@ -6499,7 +6513,7 @@ snapshots:
dependencies:
file-uri-to-path: 1.0.0
bits-ui@0.21.12(svelte@5.0.0-next.175):
bits-ui@0.21.13(svelte@5.0.0-next.175):
dependencies:
'@internationalized/date': 3.5.5
'@melt-ui/svelte': 0.76.2(svelte@5.0.0-next.175)
@ -6568,7 +6582,7 @@ snapshots:
builtin-modules@3.3.0: {}
bullmq@5.11.0:
bullmq@5.12.0:
dependencies:
cron-parser: 4.9.0
ioredis: 5.4.1
@ -6770,6 +6784,10 @@ snapshots:
dependencies:
ms: 2.1.2
debug@4.3.6:
dependencies:
ms: 2.1.2
decamelize@1.2.0: {}
deep-eql@4.1.3:
@ -6826,8 +6844,9 @@ snapshots:
dotenv@16.4.5: {}
drizzle-kit@0.23.0:
drizzle-kit@0.23.1:
dependencies:
'@drizzle-team/brocli': 0.8.2
'@esbuild-kit/esm-loader': 2.6.5
esbuild: 0.19.12
esbuild-register: 3.5.0(esbuild@0.19.12)
@ -7001,7 +7020,7 @@ snapshots:
dependencies:
eslint: 8.57.0
eslint-plugin-svelte@2.43.0(eslint@8.57.0)(svelte@5.0.0-next.175)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)):
eslint-plugin-svelte@2.43.0(eslint@8.57.0)(svelte@5.0.0-next.175)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)):
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@jridgewell/sourcemap-codec': 1.4.15
@ -7010,7 +7029,7 @@ snapshots:
esutils: 2.0.3
known-css-properties: 0.34.0
postcss: 8.4.40
postcss-load-config: 3.1.4(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
postcss-load-config: 3.1.4(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
postcss-safe-parser: 6.0.0(postcss@8.4.40)
postcss-selector-parser: 6.1.0
semver: 7.6.2
@ -7237,11 +7256,11 @@ snapshots:
cross-spawn: 7.0.3
signal-exit: 4.1.0
formsnap@1.0.1(svelte@5.0.0-next.175)(sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)):
formsnap@1.0.1(svelte@5.0.0-next.175)(sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)):
dependencies:
nanoid: 5.0.7
svelte: 5.0.0-next.175
sveltekit-superforms: 2.16.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)
sveltekit-superforms: 2.16.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)
forwarded@0.2.0: {}
@ -7373,11 +7392,11 @@ snapshots:
hex-rgb@4.3.0: {}
hono-rate-limiter@0.4.0(hono@4.5.2):
hono-rate-limiter@0.4.0(hono@4.5.3):
dependencies:
hono: 4.5.2
hono: 4.5.3
hono@4.5.2: {}
hono@4.5.3: {}
html-entities@2.5.2: {}
@ -8090,30 +8109,30 @@ snapshots:
'@csstools/utilities': 1.0.0(postcss@8.4.40)
postcss: 8.4.40
postcss-load-config@3.1.4(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)):
postcss-load-config@3.1.4(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)):
dependencies:
lilconfig: 2.1.0
yaml: 1.10.2
optionalDependencies:
postcss: 8.4.40
ts-node: 10.9.2(@types/node@20.14.13)(typescript@5.5.4)
ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4)
postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)):
postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.3
optionalDependencies:
postcss: 8.4.40
ts-node: 10.9.2(@types/node@20.14.13)(typescript@5.5.4)
ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4)
postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2):
postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.2
optionalDependencies:
jiti: 1.21.6
postcss: 8.4.40
tsx: 4.16.2
tsx: 4.16.5
postcss-logical@7.0.1(postcss@8.4.40):
dependencies:
@ -8684,14 +8703,14 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
svelte-check@3.8.4(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.175):
svelte-check@3.8.5(postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5))(postcss@8.4.40)(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.40)(tsx@4.16.2))(postcss@8.4.40)(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.40)(tsx@4.16.5))(postcss@8.4.40)(sass@1.77.8)(svelte@5.0.0-next.175)(typescript@5.5.4)
typescript: 5.5.4
transitivePeerDependencies:
- '@babel/core'
@ -8747,7 +8766,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.40)(tsx@4.16.2))(postcss@8.4.40)(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.40)(tsx@4.16.5))(postcss@8.4.40)(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
@ -8757,16 +8776,16 @@ snapshots:
svelte: 5.0.0-next.175
optionalDependencies:
postcss: 8.4.40
postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2)
postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5)
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.40)(tsx@4.16.2))(postcss@8.4.40)(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.40)(tsx@4.16.5))(postcss@8.4.40)(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.40
postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.2)
postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.40)(tsx@4.16.5)
sass: 1.77.8
typescript: 5.5.4
@ -8821,19 +8840,19 @@ snapshots:
magic-string: 0.30.10
zimmerframe: 1.1.2
sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175):
sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175):
dependencies:
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
svelte: 5.0.0-next.175
sveltekit-rate-limiter@0.5.2(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))):
sveltekit-rate-limiter@0.5.2(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))):
dependencies:
'@isaacs/ttlcache': 1.4.1
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175):
sveltekit-superforms@2.16.1(@sveltejs/kit@2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175):
dependencies:
'@sveltejs/kit': 2.5.18(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8))
'@sveltejs/kit': 2.5.20(@sveltejs/vite-plugin-svelte@3.1.1(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)))(svelte@5.0.0-next.175)(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8))
devalue: 5.0.0
just-clone: 6.2.0
memoize-weak: 1.0.2
@ -8858,16 +8877,16 @@ snapshots:
tailwind-merge@2.4.0: {}
tailwind-variants@0.2.1(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))):
tailwind-variants@0.2.1(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))):
dependencies:
tailwind-merge: 2.4.0
tailwindcss: 3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
tailwindcss: 3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
tailwindcss-animate@1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))):
tailwindcss-animate@1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))):
dependencies:
tailwindcss: 3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
tailwindcss: 3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4)):
tailwindcss@3.4.7(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@ -8886,7 +8905,7 @@ snapshots:
postcss: 8.4.40
postcss-import: 15.1.0(postcss@8.4.40)
postcss-js: 4.0.1(postcss@8.4.40)
postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4))
postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4))
postcss-nested: 6.0.1(postcss@8.4.40)
postcss-selector-parser: 6.1.0
resolve: 1.22.8
@ -8953,14 +8972,14 @@ snapshots:
ts-interface-checker@0.1.13: {}
ts-node@10.9.2(@types/node@20.14.13)(typescript@5.5.4):
ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.14.13
'@types/node': 20.14.14
acorn: 8.11.3
acorn-walk: 8.3.2
arg: 4.1.3
@ -8976,7 +8995,7 @@ snapshots:
tslib@2.6.3: {}
tsx@4.16.2:
tsx@4.16.5:
dependencies:
esbuild: 0.21.5
get-tsconfig: 4.7.5
@ -9061,13 +9080,13 @@ snapshots:
transitivePeerDependencies:
- rollup
vite-node@1.6.0(@types/node@20.14.13)(sass@1.77.8):
vite-node@1.6.0(@types/node@20.14.14)(sass@1.77.8):
dependencies:
cac: 6.7.14
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
transitivePeerDependencies:
- '@types/node'
- less
@ -9078,21 +9097,21 @@ snapshots:
- supports-color
- terser
vite@5.3.5(@types/node@20.14.13)(sass@1.77.8):
vite@5.3.5(@types/node@20.14.14)(sass@1.77.8):
dependencies:
esbuild: 0.21.5
postcss: 8.4.40
rollup: 4.17.2
optionalDependencies:
'@types/node': 20.14.13
'@types/node': 20.14.14
fsevents: 2.3.3
sass: 1.77.8
vitefu@0.2.5(vite@5.3.5(@types/node@20.14.13)(sass@1.77.8)):
vitefu@0.2.5(vite@5.3.5(@types/node@20.14.14)(sass@1.77.8)):
optionalDependencies:
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
vitest@1.6.0(@types/node@20.14.13)(sass@1.77.8):
vitest@1.6.0(@types/node@20.14.14)(sass@1.77.8):
dependencies:
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
@ -9111,11 +9130,11 @@ snapshots:
strip-literal: 2.1.0
tinybench: 2.8.0
tinypool: 0.8.4
vite: 5.3.5(@types/node@20.14.13)(sass@1.77.8)
vite-node: 1.6.0(@types/node@20.14.13)(sass@1.77.8)
vite: 5.3.5(@types/node@20.14.14)(sass@1.77.8)
vite-node: 1.6.0(@types/node@20.14.14)(sass@1.77.8)
why-is-node-running: 2.2.2
optionalDependencies:
'@types/node': 20.14.13
'@types/node': 20.14.14
transitivePeerDependencies:
- less
- lightningcss

View file

@ -1,22 +1,11 @@
// import * as Sentry from '@sentry/sveltekit';
import 'reflect-metadata'
import { hc } from 'hono/client';
import { sequence } from '@sveltejs/kit/hooks';
import { redirect, type Handle } from '@sveltejs/kit';
import { dev } from '$app/environment';
import { lucia } from '$lib/server/auth';
import type { ApiRoutes } from '$lib/server/api';
import { parseApiResponse } from '$lib/utils/api';
import { StatusCodes } from '$lib/constants/status-codes';
// TODO: Fix Sentry as it is not working on SvelteKit v2
// Sentry.init({
// dsn: 'https://742e43279df93a3c4a4a78c12eb1f879@o4506057768632320.ingest.sentry.io/4506057770401792',
// tracesSampleRate: 1,
// environment: dev ? 'development' : 'production',
// enabled: !dev
// });
const apiClient: Handle = async ({ event, resolve }) => {
/* ------------------------------ Register api ------------------------------ */
const { api } = hc<ApiRoutes>('/', {
@ -27,14 +16,18 @@ const apiClient: Handle = async ({ event, resolve }) => {
}
});
/* ----------------------------- Logging Request ---------------------------- */
console.log('Request Method:', event.request.method);
console.log('Request URL:', event.request.url);
/* ----------------------------- Auth functions ----------------------------- */
async function getAuthedUser() {
const { data } = await api.iam.user.$get().then(parseApiResponse)
const { data } = await api.user.me.$get().then(parseApiResponse)
return data && data.user;
}
async function getAuthedUserOrThrow() {
const { data } = await api.iam.user.$get().then(parseApiResponse);
const { data } = await api.user.me.$get().then(parseApiResponse);
if (!data || !data.user) throw redirect(StatusCodes.TEMPORARY_REDIRECT, '/');
return data?.user;
}
@ -50,49 +43,4 @@ const apiClient: Handle = async ({ event, resolve }) => {
return response;
};
export const authentication: Handle = async function ({ event, resolve }) {
event.locals.startTimer = Date.now();
const ip = event.request.headers.get('x-forwarded-for') as string;
const country = event.request.headers.get('x-vercel-ip-country') as string;
event.locals.ip = dev ? '127.0.0.1' : ip; // || event.getClientAddress();
event.locals.country = dev ? 'us' : country;
const sessionId = event.cookies.get(lucia.sessionCookieName);
if (!sessionId) {
event.locals.user = null;
event.locals.session = null;
return resolve(event);
}
const { session, user } = await lucia.validateSession(sessionId);
if (session && session.fresh) {
const sessionCookie = lucia.createSessionCookie(session.id);
console.log('sessionCookie', JSON.stringify(sessionCookie, null, 2));
// sveltekit types deviates from the de-facto standard, you can use 'as any' too
event.cookies.set(sessionCookie.name, sessionCookie.value, {
path: '.',
...sessionCookie.attributes,
});
}
console.log('session from hooks', JSON.stringify(session, null, 2));
if (!session) {
const sessionCookie = lucia.createBlankSessionCookie();
console.log('blank sessionCookie', JSON.stringify(sessionCookie, null, 2));
event.cookies.set(sessionCookie.name, sessionCookie.value, {
path: '.',
...sessionCookie.attributes,
});
}
event.locals.user = user;
event.locals.session = session;
return resolve(event);
};
export const handle: Handle = sequence(
// Sentry.sentryHandle(),
authentication,
apiClient
);
// export const handleError = Sentry.handleErrorWithSentry();
export const handle: Handle = sequence(apiClient);

View file

@ -1,11 +1,11 @@
import { Hono } from 'hono';
import { injectable } from 'tsyringe';
// import { injectable } from 'tsyringe';
import type { HonoTypes } from '../types';
import { requireAuth } from "../middleware/auth.middleware";
import type { Controller } from '../interfaces/controller.interface';
@injectable()
export class IamController implements Controller {
// @injectable()
class IamController implements Controller {
controller = new Hono<HonoTypes>();
constructor(
@ -19,3 +19,6 @@ export class IamController implements Controller {
});
}
}
const iamControllerInstance = new IamController();
export default iamControllerInstance;

View file

@ -1,27 +1,31 @@
import 'reflect-metadata';
// import 'reflect-metadata';
import { Hono } from 'hono';
import { zValidator } from '@hono/zod-validator';
import { inject, injectable } from 'tsyringe';
// import { inject, injectable } from 'tsyringe';
import type { HonoTypes } from '../types';
import { limiter } from '../middleware/rate-limiter.middleware';
import type { Controller } from '../interfaces/controller.interface';
import { signInEmailDto } from '$lib/dtos/signin-email.dto';
import { LoginRequestsService } from '../services/loginrequest.service';
import { loginRequestsService } from '../services/loginrequest.service';
// import { LoginRequestsService } from '../services/loginrequest.service';
@injectable()
export class LoginController implements Controller {
// @injectable()
class LoginController implements Controller {
controller = new Hono<HonoTypes>();
constructor(
@inject(LoginRequestsService) private readonly loginRequestsService: LoginRequestsService
) { }
// constructor(
// @inject(LoginRequestsService) private readonly loginRequestsService: LoginRequestsService
// ) { }
routes() {
return this.controller
.post('/', zValidator('json', signInEmailDto), limiter({ limit: 10, minutes: 60 }), async (c) => {
const { username, password } = c.req.valid('json');
await this.loginRequestsService.verify({ username, password }, c.req);
await loginRequestsService.verify({ username, password }, c.req);
return c.json({ message: 'Verification email sent' });
})
}
}
const loginControllerInstance = new LoginController();
export default loginControllerInstance;

View file

@ -1,12 +1,12 @@
import 'reflect-metadata';
// import 'reflect-metadata';
import { Hono } from 'hono';
import { injectable } from 'tsyringe';
// import { injectable } from 'tsyringe';
import { requireAuth } from "../middleware/auth.middleware";
import type { HonoTypes } from '../types';
import type { Controller } from '../interfaces/controller.interface';
@injectable()
export class UserController implements Controller {
// @injectable()
class UserController implements Controller {
controller = new Hono<HonoTypes>();
constructor(
@ -24,3 +24,5 @@ export class UserController implements Controller {
});
}
}
export const userControllerInstance = new UserController();

View file

@ -1,13 +1,13 @@
import 'reflect-metadata'
// import 'reflect-metadata'
import { Hono } from 'hono';
import { hc } from 'hono/client';
import { cors } from 'hono/cors';
import { logger } from 'hono/logger';
import { validateAuthSession, verifyOrigin } from './middleware/auth.middleware';
import { config } from './common/config';
import { container } from 'tsyringe';
import { IamController } from './controllers/iam.controller';
import { LoginController } from './controllers/login.controller';
// import { container } from 'tsyringe';
import iamControllerInstance from './controllers/iam.controller';
import loginControllerInstance from './controllers/login.controller';
/* ----------------------------------- Api ---------------------------------- */
const app = new Hono().basePath('/api');
@ -34,8 +34,10 @@ app.use(
/* --------------------------------- Routes --------------------------------- */
const routes = app
.route('/user', container.resolve(IamController).routes())
.route('/login', container.resolve(LoginController).routes())
// .route('/user', container.resolve(IamController).routes())
// .route('/login', container.resolve(LoginController).routes())
.route('/user', iamControllerInstance.routes())
.route('/login', loginControllerInstance.routes())
.get('/', (c) => c.json({ message: 'Server is healthy' }));
/* -------------------------------------------------------------------------- */

View file

@ -1,11 +1,11 @@
import { container } from 'tsyringe';
import { db } from '../infrastructure/database';
// import { container } from 'tsyringe';
// import { db } from '../infrastructure/database';
// Symbol
export const DatabaseProvider = Symbol('DATABASE_TOKEN');
// // Symbol
// export const DatabaseProvider = Symbol('DATABASE_TOKEN');
// Type
export type DatabaseProvider = typeof db;
// // Type
// export type DatabaseProvider = typeof db;
// Register
container.register<DatabaseProvider>(DatabaseProvider, { useValue: db });
// // Register
// container.register<DatabaseProvider>(DatabaseProvider, { useValue: db });

View file

@ -1,3 +1,3 @@
export * from './database.provider';
export * from './lucia.provider';
export * from './redis.provider';
// export * from './database.provider';
// export * from './lucia.provider';
// export * from './redis.provider';

View file

@ -1,11 +1,11 @@
import { container } from 'tsyringe';
import { lucia } from '../infrastructure/auth/lucia';
// import { container } from 'tsyringe';
// import { lucia } from '../infrastructure/auth/lucia';
// Symbol
export const LuciaProvider = Symbol('LUCIA_PROVIDER');
// // Symbol
// export const LuciaProvider = Symbol('LUCIA_PROVIDER');
// Type
export type LuciaProvider = typeof lucia;
// // Type
// export type LuciaProvider = typeof lucia;
// Register
container.register<LuciaProvider>(LuciaProvider, { useValue: lucia });
// // Register
// container.register<LuciaProvider>(LuciaProvider, { useValue: lucia });

View file

@ -1,14 +1,14 @@
import { container } from 'tsyringe';
import RedisClient from 'ioredis'
import { config } from '../common/config';
// import { container } from 'tsyringe';
// import RedisClient from 'ioredis'
// import { config } from '../common/config';
// Symbol
export const RedisProvider = Symbol('REDIS_TOKEN');
// // Symbol
// export const RedisProvider = Symbol('REDIS_TOKEN');
// Type
export type RedisProvider = RedisClient;
// // Type
// export type RedisProvider = RedisClient;
// Register
container.register<RedisProvider>(RedisProvider, {
useValue: new RedisClient(config.REDIS_URL)
});
// // Register
// container.register<RedisProvider>(RedisProvider, {
// useValue: new RedisClient(config.REDIS_URL)
// });

View file

@ -6,7 +6,7 @@ import { takeFirstOrThrow } from "../infrastructure/database/utils";
export type CreateCredentials = InferInsertModel<typeof credentialsTable>;
export type UpdateCredentials = Partial<CreateCredentials>;
export class CredentialsRepository {
class CredentialsRepository {
async findOneByUserId(userId: string) {
return db.query.credentialsTable.findFirst({
@ -57,3 +57,5 @@ export class CredentialsRepository {
.then(takeFirstOrThrow);
}
}
export const credentialsRepository = new CredentialsRepository();

View file

@ -22,7 +22,7 @@ storing data. They should not contain any business logic, only database queries.
export type CreateUser = InferInsertModel<typeof usersTable>;
export type UpdateUser = Partial<CreateUser>;
export class UsersRepository {
class UsersRepository {
async findOneById(id: string) {
return db.query.usersTable.findFirst({
where: eq(usersTable.id, id)
@ -60,3 +60,5 @@ export class UsersRepository {
.then(takeFirstOrThrow);
}
}
export const usersRepository = new UsersRepository();

View file

@ -1,4 +1,4 @@
import { injectable } from "tsyringe";
// import { injectable } from "tsyringe";
import { Argon2id } from "oslo/password";
/* ---------------------------------- Note ---------------------------------- */
@ -20,8 +20,8 @@ node_modules/.pnpm/@node-rs+argon2@1.7.0/node_modules/@node-rs/argon2/index.js:1
/* -------------------------------------------------------------------------- */
// If you don't use a hasher from oslo, which are preconfigured with recommended parameters from OWASP,
// ensure that you configure them properly.
@injectable()
export class HashingService {
// @injectable()
class HashingService {
private readonly hasher = new Argon2id();
async hash(data: string) {
@ -32,3 +32,5 @@ export class HashingService {
return this.hasher.verify(hash, data)
}
}
export const hashingService = new HashingService()

View file

@ -1,4 +1,5 @@
import { inject, injectable } from 'tsyringe';
// import { inject, injectable } from 'tsyringe';
import { lucia } from '../infrastructure/auth/lucia';
import { LuciaProvider } from '../providers/lucia.provider';
/* -------------------------------------------------------------------------- */
@ -18,13 +19,13 @@ Create private functions to handle complex logic and keep the public methods as
simple as possible. This makes the service easier to read, test and understand.
*/
/* -------------------------------------------------------------------------- */
@injectable()
// @injectable()
export class IamService {
constructor(
@inject(LuciaProvider) private readonly lucia: LuciaProvider,
) { }
// constructor(
// @inject(LuciaProvider) private readonly lucia: LuciaProvider,
// ) { }
async logout(sessionId: string) {
return this.lucia.invalidateSession(sessionId);
return lucia.invalidateSession(sessionId);
}
}

View file

@ -1,24 +1,28 @@
import { inject, injectable } from 'tsyringe';
// import { inject, injectable } from 'tsyringe';
import { BadRequest } from '../common/errors';
import { DatabaseProvider } from '../providers';
import { MailerService } from './mailer.service';
import { TokensService } from './tokens.service';
import { LuciaProvider } from '../providers/lucia.provider';
import { UsersRepository } from '../repositories/users.repository';
// import { DatabaseProvider } from '../providers';
// 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 { CredentialsRepository } from '../repositories/credentials.repository';
import type { HonoRequest } from 'hono';
import { credentialsRepository } from '../repositories/credentials.repository';
import { usersRepository } from '../repositories/users.repository';
import { lucia } from '../infrastructure/auth/lucia';
import { tokensService } from './tokens.service';
import { mailerService } from './mailer.service';
@injectable()
export class LoginRequestsService {
constructor(
@inject(LuciaProvider) private readonly lucia: LuciaProvider,
@inject(DatabaseProvider) private readonly db: DatabaseProvider,
@inject(TokensService) private readonly tokensService: TokensService,
@inject(MailerService) private readonly mailerService: MailerService,
@inject(UsersRepository) private readonly usersRepository: UsersRepository,
@inject(CredentialsRepository) private readonly credentialsRepository: CredentialsRepository,
) { }
// @injectable()
class LoginRequestsService {
// constructor(
// @inject(LuciaProvider) private readonly lucia: LuciaProvider,
// @inject(DatabaseProvider) private readonly db: DatabaseProvider,
// @inject(TokensService) private readonly tokensService: TokensService,
// @inject(MailerService) private readonly mailerService: MailerService,
// @inject(UsersRepository) private readonly usersRepository: UsersRepository,
// @inject(CredentialsRepository) private readonly credentialsRepository: CredentialsRepository,
// ) { }
// async create(data: RegisterEmailDto) {
// // generate a token, expiry date, and hash
@ -35,25 +39,25 @@ export class LoginRequestsService {
async verify(data: SignInEmailDto, req: HonoRequest) {
const requestIpAddress = req.header('x-real-ip');
const requestIpCountry = req.header('x-vercel-ip-country');
const existingUser = await this.usersRepository.findOneByUsername(data.username);
const existingUser = await usersRepository.findOneByUsername(data.username);
if (!existingUser) {
throw BadRequest('User not found');
}
const credential = await this.credentialsRepository.findPasswordCredentialsByUserId(existingUser.id);
const credential = await credentialsRepository.findPasswordCredentialsByUserId(existingUser.id);
if (!credential) {
throw BadRequest('Invalid credentials');
}
if (!await this.tokensService.verifyHashedToken(credential.hashedPassword, data.password)) {
if (!await tokensService.verifyHashedToken(credential.hashedPassword, data.password)) {
throw BadRequest('Invalid credentials');
}
const totpCredentials = await this.credentialsRepository.findTOTPCredentialsByUserId(existingUser.id);
const totpCredentials = await credentialsRepository.findTOTPCredentialsByUserId(existingUser.id);
return this.lucia.createSession(existingUser.id, {
return lucia.createSession(existingUser.id, {
ip_country: requestIpCountry || 'unknown',
ip_address: requestIpAddress || 'unknown',
twoFactorAuthEnabled:
@ -66,8 +70,8 @@ export class LoginRequestsService {
// Create a new user and send a welcome email - or other onboarding process
private async handleNewUserRegistration(email: string) {
const newUser = await this.usersRepository.create({ email, verified: true, avatar: null })
this.mailerService.sendWelcome({ to: email, props: null });
const newUser = await usersRepository.create({ email, verified: true, avatar: null })
mailerService.sendWelcome({ to: email, props: null });
// TODO: add whatever onboarding process or extra data you need here
return newUser
}
@ -89,3 +93,5 @@ export class LoginRequestsService {
// })
// }
}
export const loginRequestsService = new LoginRequestsService();

View file

@ -3,7 +3,7 @@ import path from 'path';
import nodemailer from 'nodemailer';
import handlebars from 'handlebars';
import { fileURLToPath } from 'url';
import { injectable } from 'tsyringe';
// import { injectable } from 'tsyringe';
/* -------------------------------------------------------------------------- */
/* Service */
@ -34,8 +34,8 @@ type SendTemplate<T> = {
props: T;
};
@injectable()
export class MailerService {
// @injectable()
class MailerService {
private nodemailer = nodemailer.createTransport({
host: 'smtp.ethereal.email',
port: 587,
@ -102,3 +102,5 @@ export class MailerService {
);
}
}
export const mailerService = new MailerService();

View file

@ -1,13 +1,13 @@
import { injectable } from "tsyringe";
// import { injectable } from "tsyringe";
import RedisClient from 'ioredis'
import { config } from "../common/config";
import { Queue, Worker, type Processor } from 'bullmq';
@injectable()
// @injectable()
export class QueuesServices {
connection = new RedisClient(config.REDIS_URL);
constructor() { }
// constructor() { }
createQueue(name: string) {
return new Queue(name, { connection: this.connection })

View file

@ -1,11 +1,11 @@
import { inject, injectable } from "tsyringe";
// import { inject, injectable } from "tsyringe";
import { generateRandomString } from "oslo/crypto";
import { TimeSpan, createDate, type TimeSpanUnit } from 'oslo';
import { HashingService } from "./hashing.service";
import { hashingService } from "./hashing.service";
@injectable()
export class TokensService {
constructor(@inject(HashingService) private readonly hashingService: HashingService) { }
// @injectable()
class TokensService {
// constructor(@inject(HashingService) private readonly hashingService: HashingService) { }
generateToken() {
const alphabet = '23456789ACDEFGHJKLMNPQRSTUVWXYZ'; // alphabet with removed look-alike characters (0, 1, O, I)
@ -21,7 +21,7 @@ export class TokensService {
async generateTokenWithExpiryAndHash(number: number, lifespan: TimeSpanUnit) {
const token = this.generateToken()
const hashedToken = await this.hashingService.hash(token)
const hashedToken = await hashingService.hash(token)
return {
token,
hashedToken,
@ -30,6 +30,8 @@ export class TokensService {
}
async verifyHashedToken(hashedToken: string, token: string) {
return this.hashingService.verify(hashedToken, token)
return hashingService.verify(hashedToken, token)
}
}
export const tokensService = new TokensService()

View file

@ -1,17 +1,19 @@
import { inject, injectable } from 'tsyringe';
import type { UsersRepository } from '../repositories/users.repository';
// import { inject, injectable } from 'tsyringe';
// import type { UsersRepository } from '../repositories/users.repository';
@injectable()
import { usersRepository } from "../repositories/users.repository";
// @injectable()
export class UsersService {
constructor(
@inject('UsersRepository') private readonly usersRepository: UsersRepository
) { }
// constructor(
// @inject('UsersRepository') private readonly usersRepository: UsersRepository
// ) { }
async findOneByUsername(username: string) {
return this.usersRepository.findOneByUsername(username);
return usersRepository.findOneByUsername(username);
}
async findOneById(id: string) {
return this.usersRepository.findOneById(id);
return usersRepository.findOneById(id);
}
}

View file

@ -1,9 +1,9 @@
// import { dev } from '$app/environment';
import { dev } from '$app/environment';
// // we don't need any JS on this page, though we'll load
// // it in dev so that we get hot module replacement...
// export const csr = dev;
// we don't need any JS on this page, though we'll load
// it in dev so that we get hot module replacement...
export const csr = dev;
// // since there's no dynamic data here, we can prerender
// // it so that it gets served as a static asset in prod
// export const prerender = true;
// since there's no dynamic data here, we can prerender
// it so that it gets served as a static asset in prod
export const prerender = true;

View file

@ -1 +1 @@
// export const prerender = true;
export const prerender = true;

View file

@ -1 +1 @@
// export const prerender = true;
export const prerender = true;

View file

@ -1,4 +1,4 @@
import 'reflect-metadata'
// import 'reflect-metadata'
import adapter from '@sveltejs/adapter-vercel';
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
import { preprocessMeltUI } from '@melt-ui/pp';

View file

@ -1,41 +0,0 @@
// vite.config.ts
import { sveltekit } from "file:///home/bshellnu/projects/websites/boredgame/node_modules/.pnpm/@sveltejs+kit@2.5.18_@sveltejs+vite-plugin-svelte@3.1.1_svelte@5.0.0-next.175_vite@5.3.5_@typ_ps3ubydtq463bedtodypwfb5fu/node_modules/@sveltejs/kit/src/exports/vite/index.js";
import { defineConfig } from "file:///home/bshellnu/projects/websites/boredgame/node_modules/.pnpm/vite@5.3.5_@types+node@20.14.13_sass@1.77.8/node_modules/vite/dist/node/index.js";
var vite_config_default = defineConfig({
plugins: [
// sentrySvelteKit({
// sourceMapsUploadOptions: {
// org: process.env.SENTRY_ORG,
// project: process.env.SENTRY_PROJECT,
// authToken: process.env.SENTRY_AUTH_TOKEN,
// cleanArtifacts: true,
// }
// }),
sveltekit()
],
test: {
include: ["src/**/*.{test,spec}.{js,ts}"]
},
css: {
devSourcemap: true,
preprocessorOptions: {
postcss: {
additionalData: `
@custom-media --below_small (width < 400px);
@custom-media --below_med (width < 700px);
@custom-media --below_large (width < 900px);
@custom-media --below_xlarge (width < 1200px);
@custom-media --above_small (width > 400px);
@custom-media --above_med (width > 700px);
@custom-media --above_large (width > 900px);
@custom-media --above_xlarge (width > 1200px);
`
}
}
}
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvaG9tZS9ic2hlbGxudS9wcm9qZWN0cy93ZWJzaXRlcy9ib3JlZGdhbWVcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIi9ob21lL2JzaGVsbG51L3Byb2plY3RzL3dlYnNpdGVzL2JvcmVkZ2FtZS92aXRlLmNvbmZpZy50c1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vaG9tZS9ic2hlbGxudS9wcm9qZWN0cy93ZWJzaXRlcy9ib3JlZGdhbWUvdml0ZS5jb25maWcudHNcIjsvLyBpbXBvcnQgeyBzZW50cnlTdmVsdGVLaXQgfSBmcm9tIFwiQHNlbnRyeS9zdmVsdGVraXRcIjtcbmltcG9ydCB7IHN2ZWx0ZWtpdCB9IGZyb20gJ0BzdmVsdGVqcy9raXQvdml0ZSc7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJztcblxuLy8gVE9ETzogRml4IFNlbnRyeVxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcblx0cGx1Z2luczogW1xuXHRcdC8vIHNlbnRyeVN2ZWx0ZUtpdCh7XG5cdFx0Ly8gXHRzb3VyY2VNYXBzVXBsb2FkT3B0aW9uczoge1xuXHRcdC8vIFx0XHRvcmc6IHByb2Nlc3MuZW52LlNFTlRSWV9PUkcsXG5cdFx0Ly8gXHRcdHByb2plY3Q6IHByb2Nlc3MuZW52LlNFTlRSWV9QUk9KRUNULFxuXHRcdC8vIFx0XHRhdXRoVG9rZW46IHByb2Nlc3MuZW52LlNFTlRSWV9BVVRIX1RPS0VOLFxuXHRcdC8vIFx0XHRjbGVhbkFydGlmYWN0czogdHJ1ZSxcblx0XHQvLyBcdH1cblx0XHQvLyB9KSxcblx0XHRzdmVsdGVraXQoKVxuXHRdLFxuXHR0ZXN0OiB7XG5cdFx0aW5jbHVkZTogWydzcmMvKiovKi57dGVzdCxzcGVjfS57anMsdHN9J11cblx0fSxcblx0Y3NzOiB7XG5cdFx0ZGV2U291cmNlbWFwOiB0cnVlLFxuXHRcdHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcblx0XHRcdHBvc3Rjc3M6IHtcblx0XHRcdFx0YWRkaXRpb25hbERhdGE6IGBcblx0XHRcdFx0QGN1c3RvbS1tZWRpYSAtLWJlbG93X3NtYWxsICh3aWR0aCA8IDQwMHB4KTtcblx0XHRcdFx0QGN1c3RvbS1tZWRpYSAtLWJlbG93X21lZCAod2lkdGggPCA3MDBweCk7XG5cdFx0XHRcdEBjdXN0b20tbWVkaWEgLS1iZWxvd19sYXJnZSAod2lkdGggPCA5MDBweCk7XG5cdFx0XHRcdEBjdXN0b20tbWVkaWEgLS1iZWxvd194bGFyZ2UgKHdpZHRoIDwgMTIwMHB4KTtcblxuXHRcdFx0XHRAY3VzdG9tLW1lZGlhIC0tYWJvdmVfc21hbGwgKHdpZHRoID4gNDAwcHgpO1xuXHRcdFx0XHRAY3VzdG9tLW1lZGlhIC0tYWJvdmVfbWVkICh3aWR0aCA+IDcwMHB4KTtcblx0XHRcdFx0QGN1c3RvbS1tZWRpYSAtLWFib3ZlX2xhcmdlICh3aWR0aCA+IDkwMHB4KTtcblx0XHRcdFx0QGN1c3RvbS1tZWRpYSAtLWFib3ZlX3hsYXJnZSAod2lkdGggPiAxMjAwcHgpO1xuXHRcdFx0XHRgXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxufSk7XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxpQkFBaUI7QUFDMUIsU0FBUyxvQkFBb0I7QUFHN0IsSUFBTyxzQkFBUSxhQUFhO0FBQUEsRUFDM0IsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVNSLFVBQVU7QUFBQSxFQUNYO0FBQUEsRUFDQSxNQUFNO0FBQUEsSUFDTCxTQUFTLENBQUMsOEJBQThCO0FBQUEsRUFDekM7QUFBQSxFQUNBLEtBQUs7QUFBQSxJQUNKLGNBQWM7QUFBQSxJQUNkLHFCQUFxQjtBQUFBLE1BQ3BCLFNBQVM7QUFBQSxRQUNSLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFXakI7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNELENBQUM7IiwKICAibmFtZXMiOiBbXQp9Cg==