Adding not null to games columns, fixing TOTP form, and fixing TOTP verifying.

This commit is contained in:
Bradley Shellnut 2024-06-08 17:25:01 -07:00
parent 2609c28619
commit 36aa0636a3
13 changed files with 4814 additions and 223 deletions

View file

@ -32,11 +32,11 @@
"@types/cookie": "^0.6.0",
"@types/node": "^20.14.2",
"@types/pg": "^8.11.6",
"@typescript-eslint/eslint-plugin": "^7.8.0",
"@typescript-eslint/parser": "^7.8.0",
"@typescript-eslint/eslint-plugin": "^7.12.0",
"@typescript-eslint/parser": "^7.12.0",
"autoprefixer": "^10.4.19",
"dotenv": "^16.4.5",
"drizzle-kit": "^0.22.4",
"drizzle-kit": "^0.22.6",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-svelte": "^2.39.0",
@ -63,9 +63,9 @@
"tailwindcss": "^3.4.4",
"ts-node": "^10.9.2",
"tslib": "^2.6.3",
"tsx": "^4.12.0",
"tsx": "^4.14.1",
"typescript": "^5.4.5",
"vite": "^5.2.12",
"vite": "^5.2.13",
"vitest": "^1.6.0",
"zod": "^3.23.8"
},
@ -90,7 +90,7 @@
"class-variance-authority": "^0.7.0",
"clsx": "^2.1.1",
"cookie": "^0.6.0",
"drizzle-orm": "^0.31.1",
"drizzle-orm": "^0.31.2",
"feather-icons": "^4.29.2",
"formsnap": "^1.0.0",
"html-entities": "^2.5.2",

View file

@ -31,7 +31,7 @@ importers:
version: 2.2.2
'@sveltejs/adapter-vercel':
specifier: ^5.3.1
version: 5.3.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))
version: 5.3.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))
'@types/feather-icons':
specifier: ^4.29.4
version: 4.29.4
@ -54,14 +54,14 @@ importers:
specifier: ^0.6.0
version: 0.6.0
drizzle-orm:
specifier: ^0.31.1
version: 0.31.1(@neondatabase/serverless@0.9.3)(@types/pg@8.11.6)(pg@8.12.0)(postgres@3.4.4)
specifier: ^0.31.2
version: 0.31.2(@neondatabase/serverless@0.9.3)(@types/pg@8.11.6)(pg@8.12.0)(postgres@3.4.4)
feather-icons:
specifier: ^4.29.2
version: 4.29.2
formsnap:
specifier: ^1.0.0
version: 1.0.0(svelte@4.2.18)(sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18))
version: 1.0.0(svelte@4.2.18)(sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18))
html-entities:
specifier: ^2.5.2
version: 2.5.2
@ -134,16 +134,16 @@ importers:
version: 2.6.2
'@sveltejs/adapter-auto':
specifier: ^3.2.1
version: 3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))
version: 3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))
'@sveltejs/enhanced-img':
specifier: ^0.2.1
version: 0.2.1(rollup@4.18.0)(svelte@4.2.18)
'@sveltejs/kit':
specifier: ^2.5.10
version: 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
version: 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/vite-plugin-svelte':
specifier: ^3.1.1
version: 3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
version: 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
'@types/cookie':
specifier: ^0.6.0
version: 0.6.0
@ -154,11 +154,11 @@ importers:
specifier: ^8.11.6
version: 8.11.6
'@typescript-eslint/eslint-plugin':
specifier: ^7.8.0
version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.12.0
version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser':
specifier: ^7.8.0
version: 7.8.0(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.12.0
version: 7.12.0(eslint@8.57.0)(typescript@5.4.5)
autoprefixer:
specifier: ^10.4.19
version: 10.4.19(postcss@8.4.38)
@ -166,8 +166,8 @@ importers:
specifier: ^16.4.5
version: 16.4.5
drizzle-kit:
specifier: ^0.22.4
version: 0.22.4
specifier: ^0.22.6
version: 0.22.6
eslint:
specifier: ^8.57.0
version: 8.57.0
@ -191,7 +191,7 @@ importers:
version: 16.1.0(postcss@8.4.38)
postcss-load-config:
specifier: ^5.1.0
version: 5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0)
version: 5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1)
postcss-preset-env:
specifier: ^9.5.14
version: 9.5.14(postcss@8.4.38)
@ -215,7 +215,7 @@ importers:
version: 4.2.18
svelte-check:
specifier: ^3.8.0
version: 3.8.0(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)
version: 3.8.0(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)
svelte-headless-table:
specifier: ^0.18.2
version: 0.18.2(svelte@4.2.18)
@ -224,19 +224,19 @@ importers:
version: 3.1.2(svelte@4.2.18)(typescript@5.4.5)
svelte-preprocess:
specifier: ^5.1.4
version: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5)
version: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5)
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.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)
version: 2.4.4(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)
sveltekit-rate-limiter:
specifier: ^0.5.1
version: 0.5.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))
version: 0.5.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))
sveltekit-superforms:
specifier: ^2.14.0
version: 2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)
version: 2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)
tailwindcss:
specifier: ^3.4.4
version: 3.4.4(ts-node@10.9.2(@types/node@20.14.2)(typescript@5.4.5))
@ -247,14 +247,14 @@ importers:
specifier: ^2.6.3
version: 2.6.3
tsx:
specifier: ^4.12.0
version: 4.12.0
specifier: ^4.14.1
version: 4.14.1
typescript:
specifier: ^5.4.5
version: 5.4.5
vite:
specifier: ^5.2.12
version: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
specifier: ^5.2.13
version: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
vitest:
specifier: ^1.6.0
version: 1.6.0(@types/node@20.14.2)(sass@1.77.4)
@ -1763,14 +1763,11 @@ packages:
'@types/pug@2.0.10':
resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
'@types/semver@7.5.8':
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
'@types/validator@13.11.9':
resolution: {integrity: sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw==}
'@typescript-eslint/eslint-plugin@7.8.0':
resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==}
'@typescript-eslint/eslint-plugin@7.12.0':
resolution: {integrity: sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@ -1780,8 +1777,8 @@ packages:
typescript:
optional: true
'@typescript-eslint/parser@7.8.0':
resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==}
'@typescript-eslint/parser@7.12.0':
resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -1790,12 +1787,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/scope-manager@7.8.0':
resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==}
'@typescript-eslint/scope-manager@7.12.0':
resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/type-utils@7.8.0':
resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==}
'@typescript-eslint/type-utils@7.12.0':
resolution: {integrity: sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -1804,12 +1801,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/types@7.8.0':
resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==}
'@typescript-eslint/types@7.12.0':
resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.8.0':
resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==}
'@typescript-eslint/typescript-estree@7.12.0':
resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
@ -1817,14 +1814,14 @@ packages:
typescript:
optional: true
'@typescript-eslint/utils@7.8.0':
resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==}
'@typescript-eslint/utils@7.12.0':
resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.8.0':
resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==}
'@typescript-eslint/visitor-keys@7.12.0':
resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==}
engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0':
@ -2245,12 +2242,12 @@ packages:
resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==}
engines: {node: '>=12'}
drizzle-kit@0.22.4:
resolution: {integrity: sha512-jsiYGqHsbsP/GtM26y/bGK7je1ja+1H/RniCt1ovg2E7tMNraw6XdqKcjxHhb8FonCfDDjvwFgouRsZS46vrmA==}
drizzle-kit@0.22.6:
resolution: {integrity: sha512-TE4mBMeVJvySjYxwKeUOMrzytFSKnpMyp6kBnm+aascu9P+hCMrGvnJhOAO94C3wmt144CoHZQWQCOoP/EFl8A==}
hasBin: true
drizzle-orm@0.31.1:
resolution: {integrity: sha512-hTbYne2XX3y6sV7WSxcPH6/vNSiQSUG9VZsFI27jBMCN0OT3Ok7ao3pIT5OMAqWkzJCRFgGjAaUeTAZWPgOKag==}
drizzle-orm@0.31.2:
resolution: {integrity: sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=3'
@ -2260,6 +2257,7 @@ packages:
'@op-engineering/op-sqlite': '>=2'
'@opentelemetry/api': ^1.4.1
'@planetscale/database': '>=1'
'@tidbcloud/serverless': '*'
'@types/better-sqlite3': '*'
'@types/pg': '*'
'@types/react': '>=18'
@ -2294,6 +2292,8 @@ packages:
optional: true
'@planetscale/database':
optional: true
'@tidbcloud/serverless':
optional: true
'@types/better-sqlite3':
optional: true
'@types/pg':
@ -3939,8 +3939,8 @@ packages:
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
tsx@4.12.0:
resolution: {integrity: sha512-642NAWAbDqPZINjmL32Lh/B+pd8vbVj6LHPsWm09IIHqQuWhCrNfcPTjRlHFWvv3FfM4vt9NLReBIjUNj5ZhDg==}
tsx@4.14.1:
resolution: {integrity: sha512-GU8pPJq8DdxcJDSK6Bc64c2jW8zBK2hb0jzwHZDfjapbwu6AqvFnAElnzZ17Xb9TH5a/j6/sicTCVYF+eO/cmA==}
engines: {node: '>=18.0.0'}
hasBin: true
@ -4011,8 +4011,8 @@ packages:
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
vite@5.2.12:
resolution: {integrity: sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==}
vite@5.2.13:
resolution: {integrity: sha512-SSq1noJfY9pR3I1TUENL3rQYDQCFqgD+lM6fTRAM8Nv6Lsg5hDLaXkjETVeBt+7vZBCMoibD+6IWnT2mJ+Zb/A==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@ -5256,14 +5256,14 @@ snapshots:
'@sodaru/yup-to-json-schema@2.0.1':
optional: true
'@sveltejs/adapter-auto@3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))':
'@sveltejs/adapter-auto@3.2.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))':
dependencies:
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
import-meta-resolve: 4.1.0
'@sveltejs/adapter-vercel@5.3.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))':
'@sveltejs/adapter-vercel@5.3.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))':
dependencies:
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
'@vercel/nft': 0.27.1
esbuild: 0.20.2
transitivePeerDependencies:
@ -5279,9 +5279,9 @@ snapshots:
- rollup
- svelte
'@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))':
'@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
'@types/cookie': 0.6.0
cookie: 0.6.0
devalue: 5.0.0
@ -5295,28 +5295,28 @@ snapshots:
sirv: 2.0.4
svelte: 4.2.18
tiny-glob: 0.2.9
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))':
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/vite-plugin-svelte': 3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
debug: 4.3.4
svelte: 4.2.18
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
transitivePeerDependencies:
- supports-color
'@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))':
'@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.10
svelte: 4.2.18
svelte-hmr: 0.16.0(svelte@4.2.18)
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vitefu: 0.2.5(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
vitefu: 0.2.5(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
transitivePeerDependencies:
- supports-color
@ -5343,7 +5343,8 @@ snapshots:
'@types/feather-icons@4.29.4': {}
'@types/json-schema@7.0.15': {}
'@types/json-schema@7.0.15':
optional: true
'@types/node@20.14.2':
dependencies:
@ -5357,37 +5358,33 @@ snapshots:
'@types/pug@2.0.10': {}
'@types/semver@7.5.8': {}
'@types/validator@13.11.9':
optional: true
'@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.8.0
debug: 4.3.4
'@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/type-utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.12.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
semver: 7.6.1
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.8.0
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.12.0
debug: 4.3.4
eslint: 8.57.0
optionalDependencies:
@ -5395,16 +5392,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@7.8.0':
'@typescript-eslint/scope-manager@7.12.0':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/visitor-keys': 7.12.0
'@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/type-utils@7.12.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.5
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
@ -5412,40 +5409,37 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.8.0': {}
'@typescript-eslint/types@7.12.0': {}
'@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)':
'@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/visitor-keys': 7.12.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
semver: 7.6.1
semver: 7.6.2
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)':
'@typescript-eslint/utils@7.12.0(eslint@8.57.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
eslint: 8.57.0
semver: 7.6.1
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@7.8.0':
'@typescript-eslint/visitor-keys@7.12.0':
dependencies:
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/types': 7.12.0
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
@ -5858,7 +5852,7 @@ snapshots:
dotenv@16.4.5: {}
drizzle-kit@0.22.4:
drizzle-kit@0.22.6:
dependencies:
'@esbuild-kit/esm-loader': 2.6.5
esbuild: 0.19.12
@ -5866,7 +5860,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
drizzle-orm@0.31.1(@neondatabase/serverless@0.9.3)(@types/pg@8.11.6)(pg@8.12.0)(postgres@3.4.4):
drizzle-orm@0.31.2(@neondatabase/serverless@0.9.3)(@types/pg@8.11.6)(pg@8.12.0)(postgres@3.4.4):
optionalDependencies:
'@neondatabase/serverless': 0.9.3
'@types/pg': 8.11.6
@ -6172,11 +6166,11 @@ snapshots:
cross-spawn: 7.0.3
signal-exit: 4.1.0
formsnap@1.0.0(svelte@4.2.18)(sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)):
formsnap@1.0.0(svelte@4.2.18)(sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)):
dependencies:
nanoid: 5.0.7
svelte: 4.2.18
sveltekit-superforms: 2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)
sveltekit-superforms: 2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18)
fraction.js@4.3.7: {}
@ -6889,14 +6883,14 @@ snapshots:
postcss: 8.4.38
ts-node: 10.9.2(@types/node@20.14.2)(typescript@5.4.5)
postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0):
postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.2
optionalDependencies:
jiti: 1.21.3
postcss: 8.4.38
tsx: 4.12.0
tsx: 4.14.1
postcss-logical@7.0.1(postcss@8.4.38):
dependencies:
@ -7385,7 +7379,7 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
svelte-check@3.8.0(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18):
svelte-check@3.8.0(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
chokidar: 3.6.0
@ -7394,7 +7388,7 @@ snapshots:
picocolors: 1.0.0
sade: 1.8.1
svelte: 4.2.18
svelte-preprocess: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5)
svelte-preprocess: 5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5)
typescript: 5.4.5
transitivePeerDependencies:
- '@babel/core'
@ -7450,7 +7444,7 @@ snapshots:
dependencies:
svelte: 4.2.18
svelte-preprocess@5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5):
svelte-preprocess@5.1.4(postcss-load-config@5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1))(postcss@8.4.38)(sass@1.77.4)(svelte@4.2.18)(typescript@5.4.5):
dependencies:
'@types/pug': 2.0.10
detect-indent: 6.1.0
@ -7460,7 +7454,7 @@ snapshots:
svelte: 4.2.18
optionalDependencies:
postcss: 8.4.38
postcss-load-config: 5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.12.0)
postcss-load-config: 5.1.0(jiti@1.21.3)(postcss@8.4.38)(tsx@4.14.1)
sass: 1.77.4
typescript: 5.4.5
@ -7499,19 +7493,19 @@ snapshots:
magic-string: 0.30.10
periscopic: 3.1.0
sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18):
sveltekit-flash-message@2.4.4(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18):
dependencies:
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
svelte: 4.2.18
sveltekit-rate-limiter@0.5.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))):
sveltekit-rate-limiter@0.5.1(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))):
dependencies:
'@isaacs/ttlcache': 1.4.1
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18):
sveltekit-superforms@2.14.0(@sveltejs/kit@2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(@types/json-schema@7.0.15)(esbuild-runner@2.2.2(esbuild@0.19.12))(esbuild@0.19.12)(svelte@4.2.18):
dependencies:
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4))
'@sveltejs/kit': 2.5.10(@sveltejs/vite-plugin-svelte@3.1.1(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)))(svelte@4.2.18)(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4))
devalue: 5.0.0
just-clone: 6.2.0
memoize-weak: 1.0.2
@ -7658,7 +7652,7 @@ snapshots:
tslib@2.6.3: {}
tsx@4.12.0:
tsx@4.14.1:
dependencies:
esbuild: 0.20.2
get-tsconfig: 4.7.5
@ -7724,7 +7718,7 @@ snapshots:
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
transitivePeerDependencies:
- '@types/node'
- less
@ -7735,7 +7729,7 @@ snapshots:
- supports-color
- terser
vite@5.2.12(@types/node@20.14.2)(sass@1.77.4):
vite@5.2.13(@types/node@20.14.2)(sass@1.77.4):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
@ -7745,9 +7739,9 @@ snapshots:
fsevents: 2.3.3
sass: 1.77.4
vitefu@0.2.5(vite@5.2.12(@types/node@20.14.2)(sass@1.77.4)):
vitefu@0.2.5(vite@5.2.13(@types/node@20.14.2)(sass@1.77.4)):
optionalDependencies:
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
vitest@1.6.0(@types/node@20.14.2)(sass@1.77.4):
dependencies:
@ -7768,7 +7762,7 @@ snapshots:
strip-literal: 2.1.0
tinybench: 2.8.0
tinypool: 0.8.4
vite: 5.2.12(@types/node@20.14.2)(sass@1.77.4)
vite: 5.2.13(@types/node@20.14.2)(sass@1.77.4)
vite-node: 1.6.0(@types/node@20.14.2)(sass@1.77.4)
why-is-node-running: 2.2.2
optionalDependencies:

View file

@ -0,0 +1 @@
ALTER TABLE "sessions" ADD COLUMN "is_two_factor_authenticated" boolean DEFAULT false;

View file

@ -0,0 +1,7 @@
DROP INDEX IF EXISTS "search_index";--> statement-breakpoint
ALTER TABLE "games" ALTER COLUMN "name" SET NOT NULL;--> statement-breakpoint
ALTER TABLE "games" ALTER COLUMN "slug" SET NOT NULL;--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "search_index" ON "games" USING gin ((
setweight(to_tsvector('english', "name"), 'A') ||
setweight(to_tsvector('english', "slug"), 'B')
));

View file

@ -0,0 +1,5 @@
DROP INDEX IF EXISTS "search_index";--> statement-breakpoint
CREATE INDEX IF NOT EXISTS "search_index" ON "games" USING gin ((
setweight(to_tsvector('english', "name"), 'A') ||
setweight(to_tsvector('english', "slug"), 'B')
));

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -8,6 +8,27 @@
"when": 1717548517806,
"tag": "0000_spotty_changeling",
"breakpoints": true
},
{
"idx": 1,
"version": "7",
"when": 1717891533784,
"tag": "0001_acoustic_thunderbolt",
"breakpoints": true
},
{
"idx": 2,
"version": "7",
"when": 1717891822622,
"tag": "0002_striped_darkhawk",
"breakpoints": true
},
{
"idx": 3,
"version": "7",
"when": 1717891852881,
"tag": "0003_flippant_avengers",
"breakpoints": true
}
]
}

View file

@ -13,8 +13,8 @@ const games = pgTable(
cuid: text('cuid')
.unique()
.$defaultFn(() => cuid2()),
name: text('name'),
slug: text('slug'),
name: text('name').notNull(),
slug: text('slug').notNull(),
description: text('description'),
year_published: integer('year_published'),
min_players: integer('min_players'),
@ -31,14 +31,14 @@ const games = pgTable(
updated_at: timestamp('updated_at', { mode: 'string' }).notNull().defaultNow(),
},
(table) => ({
searchIndex: index('search_index').using(
'gin',
sql`(
setweight(to_tsvector('english', ${table.name}), 'A') ||
setweight(to_tsvector('english', ${table.slug}), 'B')
)`,
),
}),
searchIndex: index('search_index').using(
'gin',
sql`(
setweight(to_tsvector('english', ${table.name}), 'A') ||
setweight(to_tsvector('english', ${table.slug}), 'B')
)`
),
})
);
export const gameRelations = relations(games, ({ many }) => ({

View file

@ -49,13 +49,13 @@ export const actions: Actions = {
let session;
let sessionCookie;
const user = await db.query.users.findFirst({
where: eq(users.username, form.data.username),
});
try {
const password = form.data.password;
const user = await db.query.users.findFirst({
where: eq(users.username, form.data.username),
});
console.log('user', JSON.stringify(user, null, 2));
if (!user?.hashed_password) {
@ -71,47 +71,6 @@ export const actions: Actions = {
return setError(form, 'password', 'Your username or password is incorrect.');
}
// await db
// .insert(collections)
// .values({
// user_id: user.id,
// })
// .onConflictDoNothing();
// await db
// .insert(wishlists)
// .values({
// user_id: user.id,
// })
// .onConflictDoNothing();
if (user?.two_factor_enabled && user?.two_factor_secret && !form?.data?.totpToken) {
return fail(400, {
form,
twoFactorRequired: true,
});
} else if (user?.two_factor_enabled && user?.two_factor_secret && form?.data?.totpToken) {
console.log('totpToken', form.data.totpToken);
const validOTP = await new TOTPController().verify(
form.data.totpToken,
decodeHex(user.two_factor_secret),
);
console.log('validOTP', validOTP);
if (!validOTP) {
console.log('invalid TOTP code check for recovery codes');
const usedRecoveryCode = await checkRecoveryCode(form?.data?.totpToken, user.id);
if (!usedRecoveryCode) {
console.log('invalid TOTP code');
form.data.password = '';
// form.errors.totpToken = ['Invalid code'];
return setError(form, 'totpToken', 'Invalid code.');
// return fail(400, {
// form,
// twoFactorRequired: true,
// });
}
}
}
console.log('ip', locals.ip);
console.log('country', locals.country);
session = await lucia.createSession(user.id, {
@ -137,8 +96,15 @@ export const actions: Actions = {
form.data.username = '';
form.data.password = '';
const message = { type: 'success', message: 'Signed In!' } as const;
redirect(302, '/', message, event);
if (user?.two_factor_enabled && user?.two_factor_secret) {
console.log('redirecting to TOTP page');
const message = { type: 'success', message: 'Please enter your TOTP code.' } as const;
redirect(302, '/totp', message, event);
} else {
const message = { type: 'success', message: 'Signed In!' } as const;
redirect(302, '/', message, event);
}
},
};

View file

@ -23,6 +23,9 @@ export const load: PageServerLoad = async (event) => {
const session = event.locals.session;
const isTwoFactorAuthenticated = session?.isTwoFactorAuthenticated;
console.log('session', session);
console.log('isTwoFactorAuthenticated', isTwoFactorAuthenticated);
if (isTwoFactorAuthenticated && dbUser?.two_factor_enabled && dbUser?.two_factor_secret) {
const message = { type: 'success', message: 'You are already signed in' } as const;
throw redirect('/', message, event);
@ -90,7 +93,7 @@ export const actions: Actions = {
} else if (dbUser?.two_factor_enabled && dbUser?.two_factor_secret && totpToken) {
console.log('totpToken',totpToken);
const validOTP = await new TOTPController().verify(
form.data.totpToken,
totpToken,
decodeHex(dbUser.two_factor_secret),
);
console.log('validOTP', validOTP);
@ -134,7 +137,7 @@ export const actions: Actions = {
};
async function checkRecoveryCode(recoveryCode: string, userId: string) {
const userRecoveryCodes = await db.query.recovery_codes.findMany({
const userRecoveryCodes = await db.query.recoveryCodes.findMany({
where: and(eq(recovery_codes.used, false), eq(recovery_codes.userId, userId)),
});
for (const code of userRecoveryCodes) {

View file

@ -3,7 +3,7 @@
import { superForm } from 'sveltekit-superforms/client';
import * as flashModule from 'sveltekit-flash-message/client';
import { AlertCircle } from "lucide-svelte";
import { signInSchema } from '$lib/validations/auth';
import { signInSchema, totpSchema } from '$lib/validations/auth';
import * as Form from '$lib/components/ui/form';
import { Label } from '$components/ui/label';
import { Input } from '$components/ui/input';
@ -14,7 +14,7 @@
export let data;
export let form;
const superLoginForm = superForm(data.form, {
const superTotpForm = superForm(data.form, {
onSubmit: () => boredState.update((n) => ({ ...n, loading: true })),
onResult: () => boredState.update((n) => ({ ...n, loading: false })),
flashMessage: {
@ -29,12 +29,12 @@
},
syncFlashMessage: false,
taintedMessage: null,
validators: zodClient(signInSchema),
validators: zodClient(totpSchema),
validationMethod: 'oninput',
delayMs: 0,
});
const { form: loginForm, errors, enhance } = superLoginForm;
const { form: totpForm, errors, enhance } = superTotpForm;
</script>
<svelte:head>
@ -48,40 +48,14 @@
>
Please enter your two factor code
</h2>
<Form.Field form={superLoginForm} name="username">
<Form.Field form={superTotpForm} name="totpToken">
<Form.Control let:attrs>
<Form.Label for="username">Username</Form.Label>
<Input {...attrs} autocomplete="username" bind:value={$loginForm.username} />
<Form.Label for="totpToken">TOTP Code</Form.Label>
<Input {...attrs} autocomplete="totpToken" bind:value={$totpForm.totpToken} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
<Form.Field form={superLoginForm} name="password">
<Form.Control let:attrs>
<Form.Label for="password">Password</Form.Label>
<Input {...attrs} autocomplete="current-password" type="password" bind:value={$loginForm.password} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
{#if form?.twoFactorRequired}
<Form.Field form={superLoginForm} name="totpToken">
<Form.Control let:attrs>
<Form.Label for="totpToken">Two Factor Code or Recovery Code</Form.Label>
<Input {...attrs} autocomplete="one-time-code" bind:value={$loginForm.totpToken} />
</Form.Control>
<Form.FieldErrors />
</Form.Field>
{/if}
<Form.Button>Login</Form.Button>
<p class="px-8 text-center text-sm text-muted-foreground">
By clicking continue, you agree to our
<a href="/terms" class="underline underline-offset-4 hover:text-primary">
Terms of Use
</a>
and
<a href="/privacy" class="underline underline-offset-4 hover:text-primary">
Privacy Policy
</a>.
</p>
<Form.Button>Submit</Form.Button>
</form>
</div>