remove input-otp component, upstream issues

This commit is contained in:
Amruth Pillai
2026-03-19 18:43:05 +01:00
parent f4e2d05f25
commit e34f648455
17 changed files with 188 additions and 563 deletions
+1
View File
@@ -25,6 +25,7 @@
"i18n-ally.sourceLanguage": "en-US",
"oxc.enable.oxfmt": true,
"oxc.enable.oxlint": true,
"oxc.configPath": "./vite.config.ts",
"oxc.fmt.configPath": "./vite.config.ts",
"search.exclude": {
"**/routeTree.gen.ts": true,
+9 -12
View File
@@ -52,17 +52,17 @@
"@lingui/react": "^5.9.3",
"@modelcontextprotocol/sdk": "^1.27.1",
"@monaco-editor/react": "4.8.0-rc.3",
"@orpc/client": "^1.13.8",
"@orpc/json-schema": "^1.13.8",
"@orpc/openapi": "^1.13.8",
"@orpc/server": "^1.13.8",
"@orpc/tanstack-query": "^1.13.8",
"@orpc/zod": "^1.13.8",
"@orpc/client": "^1.13.9",
"@orpc/json-schema": "^1.13.9",
"@orpc/openapi": "^1.13.9",
"@orpc/server": "^1.13.9",
"@orpc/tanstack-query": "^1.13.9",
"@orpc/zod": "^1.13.9",
"@phosphor-icons/react": "^2.1.10",
"@phosphor-icons/web": "^2.1.2",
"@sindresorhus/slugify": "^3.0.0",
"@t3-oss/env-core": "^0.13.10",
"@tanstack/react-query": "^5.91.0",
"@tanstack/react-query": "^5.91.2",
"@tanstack/react-router": "^1.167.5",
"@tanstack/react-router-ssr-query": "^1.166.9",
"@tanstack/react-start": "^1.166.17",
@@ -91,15 +91,13 @@
"fast-json-patch": "^3.1.1",
"fuse.js": "^7.1.0",
"immer": "^11.1.4",
"input-otp": "^1.4.2",
"js-cookie": "^3.0.5",
"jsonrepair": "^3.13.3",
"monaco-editor": "^0.55.1",
"motion": "^12.38.0",
"nodemailer": "^8.0.3",
"pg": "^8.20.0",
"pino": "^10.3.1",
"puppeteer-core": "^24.39.1",
"puppeteer-core": "^24.40.0",
"qrcode.react": "^4.2.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
@@ -143,12 +141,11 @@
"babel-plugin-macros": "^3.1.0",
"drizzle-kit": "1.0.0-beta.18-7eb39f0",
"jsdom": "^29.0.0",
"knip": "^5.88.0",
"knip": "^5.88.1",
"nitro": "3.0.260311-beta",
"node-addon-api": "^8.6.0",
"node-gyp": "^12.2.0",
"npm-check-updates": "^19.6.5",
"pino-pretty": "^13.1.3",
"tsx": "^4.21.0",
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
"vite-plugin-pwa": "^1.2.0",
+3 -6
View File
@@ -2,12 +2,9 @@ import { drizzle } from "drizzle-orm/node-postgres";
import { migrate } from "drizzle-orm/node-postgres/migrator";
import { definePlugin } from "nitro";
import { Pool } from "pg";
import pino from "pino";
const log = pino({ name: "migrate" });
async function migrateDatabase() {
log.info("Running database migrations...");
console.info("Running database migrations...");
const connectionString = process.env.DATABASE_URL;
@@ -20,9 +17,9 @@ async function migrateDatabase() {
try {
await migrate(db, { migrationsFolder: "./migrations" });
log.info("Database migrations completed");
console.info("Database migrations completed");
} catch (error) {
log.error({ err: error }, "Database migrations failed");
console.error({ err: error }, "Database migrations failed");
throw error;
} finally {
await pool.end();
+144 -304
View File
@@ -77,23 +77,23 @@ importers:
specifier: 4.8.0-rc.3
version: 4.8.0-rc.3(monaco-editor@0.55.1)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@orpc/client':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/json-schema':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/openapi':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/server':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/tanstack-query':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)(@orpc/client@1.13.8(@opentelemetry/api@1.9.0))(@tanstack/query-core@5.91.0)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)(@orpc/client@1.13.9(@opentelemetry/api@1.9.0))(@tanstack/query-core@5.91.2)
'@orpc/zod':
specifier: ^1.13.8
version: 1.13.8(@opentelemetry/api@1.9.0)(@orpc/contract@1.13.8(@opentelemetry/api@1.9.0))(@orpc/server@1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0))(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)(zod@4.3.6)
specifier: ^1.13.9
version: 1.13.9(@opentelemetry/api@1.9.0)(@orpc/contract@1.13.9(@opentelemetry/api@1.9.0))(@orpc/server@1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0))(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)(zod@4.3.6)
'@phosphor-icons/react':
specifier: ^2.1.10
version: 2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -107,14 +107,14 @@ importers:
specifier: ^0.13.10
version: 0.13.10(typescript@5.9.3)(valibot@1.2.0(typescript@5.9.3))(zod@4.3.6)
'@tanstack/react-query':
specifier: ^5.91.0
version: 5.91.0(react@19.2.4)
specifier: ^5.91.2
version: 5.91.2(react@19.2.4)
'@tanstack/react-router':
specifier: ^1.167.5
version: 1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/react-router-ssr-query':
specifier: ^1.166.9
version: 1.166.9(@tanstack/query-core@5.91.0)(@tanstack/react-query@5.91.0(react@19.2.4))(@tanstack/react-router@1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
version: 1.166.9(@tanstack/query-core@5.91.2)(@tanstack/react-query@5.91.2(react@19.2.4))(@tanstack/react-router@1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/react-start':
specifier: ^1.166.17
version: 1.166.17(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(crossws@0.4.4(srvx@0.11.12))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
@@ -193,9 +193,6 @@ importers:
immer:
specifier: ^11.1.4
version: 11.1.4
input-otp:
specifier: ^1.4.2
version: 1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
js-cookie:
specifier: ^3.0.5
version: 3.0.5
@@ -214,12 +211,9 @@ importers:
pg:
specifier: ^8.20.0
version: 8.20.0
pino:
specifier: ^10.3.1
version: 10.3.1
puppeteer-core:
specifier: ^24.39.1
version: 24.39.1
specifier: ^24.40.0
version: 24.40.0
qrcode.react:
specifier: ^4.2.0
version: 4.2.0(react@19.2.4)
@@ -345,8 +339,8 @@ importers:
specifier: ^29.0.0
version: 29.0.0(@noble/hashes@2.0.1)
knip:
specifier: ^5.88.0
version: 5.88.0(@types/node@25.5.0)(typescript@5.9.3)
specifier: ^5.88.1
version: 5.88.1(@types/node@25.5.0)(typescript@5.9.3)
nitro:
specifier: 3.0.260311-beta
version: 3.0.260311-beta(@azure/identity@4.13.0)(@electric-sql/pglite@0.3.15)(@voidzero-dev/vite-plus-core@0.1.12(@types/node@25.5.0)(esbuild@0.27.3)(jiti@2.6.1)(terser@5.46.0)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2))(chokidar@4.0.3)(dotenv@17.3.1)(drizzle-orm@1.0.0-beta.18-7eb39f0(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@types/mssql@9.1.9(@azure/core-client@1.10.1))(@types/pg@8.18.0)(mssql@11.0.1(@azure/core-client@1.10.1))(mysql2@3.15.3)(pg@8.20.0)(postgres@3.4.7)(valibot@1.2.0(typescript@5.9.3))(zod@4.3.6))(giget@2.0.0)(jiti@2.6.1)(lru-cache@11.2.7)(mongodb@7.1.0(socks@2.8.7))(mysql2@3.15.3)(rollup@2.80.0)
@@ -359,9 +353,6 @@ importers:
npm-check-updates:
specifier: ^19.6.5
version: 19.6.5
pino-pretty:
specifier: ^13.1.3
version: 13.1.3
tsx:
specifier: ^4.21.0
version: 4.21.0
@@ -2173,26 +2164,26 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
'@orpc/client@1.13.8':
resolution: {integrity: sha512-7B8NDjBjP17Mrrgc/YeZl9b0YBu2Sk9/lKyVeG3755tyrAPLiezWuwQEaP9T45S2/+g8LTzFmV2R504Wn5R5MQ==}
'@orpc/client@1.13.9':
resolution: {integrity: sha512-RmD2HDgmGgF6zgHHdybE4zH6QJoHjC+/C3n56yLf+fmWbiZtwnOUETgGCroY6S8aK2fpy6hJ3wZaJUjfWVuGHg==}
'@orpc/contract@1.13.8':
resolution: {integrity: sha512-W8hjVYDnsHI63TgQUGB4bb+ldCqR5hdxL1o2b7ytkFEkXTft6HOrHHvv+ncmgK1c1XapD1ScsCj11zzxf5NUGQ==}
'@orpc/contract@1.13.9':
resolution: {integrity: sha512-0zxMyF82pxE8DwHzarCsCtOHQK96PE23qubMMBkxkP0XTtLJ7f8aYhrG8F16pNApypmTHiRlQlqNX8VXNViMqQ==}
'@orpc/interop@1.13.8':
resolution: {integrity: sha512-WFw227dJguO58uZfkk1bs/m6z4t5lgo5hc7m8+rQIRpt5CTKGEhdQW3/WkjGTYlBnCcaD0Eh48DrrcjtyBcOWA==}
'@orpc/interop@1.13.9':
resolution: {integrity: sha512-9ulQSO/aUq1yP5CIqBxhqnPKQE7cDMPo+PFUTfYgIwjuV0mFgyMjopSw4YsNxLnbXBaDbn3WNx7rPQKhCTAV1Q==}
'@orpc/json-schema@1.13.8':
resolution: {integrity: sha512-XupAmUZdK1YrADuEvUv2zlrpuYIkP4T60iPWQO1kEWOXfCjQ5TqFAWVeWIB7nPnYiMGlBdVHFiud8L1Opy2FTw==}
'@orpc/json-schema@1.13.9':
resolution: {integrity: sha512-aoJErSkL5Xq8KgQBZc7Q2YCsBZ0SBbtse+yIgieA/q7TlYYUtpU528o4Coh1HDr4REuiZ3UWFoWL5Xq3FP9wUQ==}
'@orpc/openapi-client@1.13.8':
resolution: {integrity: sha512-Cg7oDhbiO9bPpseRaFeWIhZFoA1bCF2pPxAJZj6/YtHkh+VSDI8W1xzbzoKNp2YHnhhJfgpIuVsHD42tX73+Mw==}
'@orpc/openapi-client@1.13.9':
resolution: {integrity: sha512-zvNrc7wgF/INKeewH2ih48U/q9tG7rLZCnmMrb5/1jdZgYYOBAEuILlDAejeQwGdRce6W18GTBjLKIEdP3WwqA==}
'@orpc/openapi@1.13.8':
resolution: {integrity: sha512-fbbyJs9epMGeVIwkrxEuEJeGgqF7id4vCwCuXK2PlbDO7gaefG7FdlWdeUByyyavcbqezz0L8RLj4lAUNzWw1g==}
'@orpc/openapi@1.13.9':
resolution: {integrity: sha512-RNwJtApzKEEePtgcTdn+Y335gS/QlKbdvDsnm0nPRmw+Geqt3ASZxVzVwe0xC77fPixGnaog9HG/koud9N1T4Q==}
'@orpc/server@1.13.8':
resolution: {integrity: sha512-hkZqlajENS1eMs5txxu2h3YxwPZqX7PNydYM3WusIhg5RKYhizRY1eMc1IHmE+ZB814+nnkN1dmtcu0XFGC09w==}
'@orpc/server@1.13.9':
resolution: {integrity: sha512-twTEtkmPzt7mIfO1CRbHjA5S9LBTrQa3mzmBKfYDZyfECk79a5iwhIIeZJUPPMiMVtT+lFflE/W1PSauqyttUg==}
peerDependencies:
crossws: '>=0.3.4'
ws: '>=8.18.1'
@@ -2202,48 +2193,48 @@ packages:
ws:
optional: true
'@orpc/shared@1.13.8':
resolution: {integrity: sha512-d7bZW2F8/ov6JFuGEMeh7XYZtW4+zgjxW5DKBv5tNkWmZEC5JJQz8l6Ym9ZRe2VyRzQgo5JarJGsVQlmqVVvhw==}
'@orpc/shared@1.13.9':
resolution: {integrity: sha512-gpMY2e9jDsSyikh4DjBCO2Cs0wGj2I6xo2juIcmogYK5ecsTGO/U5huIftQn+2NUMk1cItwmykJBwc4pqHWVHw==}
peerDependencies:
'@opentelemetry/api': '>=1.9.0'
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@orpc/standard-server-aws-lambda@1.13.8':
resolution: {integrity: sha512-w5C3fpjUli71LbgngGsqHWCR+1bWMudqZVwGrSaHWz7GxnjR2/HIxjt2VmeOsxzdjC/S5xyVuTd5pfH59UqpAw==}
'@orpc/standard-server-aws-lambda@1.13.9':
resolution: {integrity: sha512-dVy3LNc8qe13F2LTblMoZ/waJBBW9XTF08S7Hl3VZ3K/1yiaJDW6Ukadh0floZEPXuEivRMTcNIzWqBY1rWLPA==}
'@orpc/standard-server-fastify@1.13.8':
resolution: {integrity: sha512-r5/rD0xodRZ79tXt89C6e5vCJWEolBw/NwjegptSPBdemeNY+eCZ3fiPCqVGMCGXSMTf50pakCkJ9vXOZppXQw==}
'@orpc/standard-server-fastify@1.13.9':
resolution: {integrity: sha512-GM9/B4Zu52P6Shh/1dMqTQwRncjjzIu70/f0Lk1/peL1J0sJFa8ScUy/P7nYlKy9WS6agjH6yPzwBUS6XEmuPA==}
peerDependencies:
fastify: '>=5.6.1'
peerDependenciesMeta:
fastify:
optional: true
'@orpc/standard-server-fetch@1.13.8':
resolution: {integrity: sha512-g26Loo7GFTCF/S5QsM3Z6Xd9ZYs90K7jtRtEqbJh03YNrjecvZdpUKd/lTf/9kpJTBTQbhFxC9WCAJH4+8leFA==}
'@orpc/standard-server-fetch@1.13.9':
resolution: {integrity: sha512-/dJmHO+EVONyvmX3CFZkRjlRHeBfq0+6nnpFIVueGo4fNUbtQc+qurKEtpQqPxL/b7GSehskNH21XKLE0IE0gQ==}
'@orpc/standard-server-node@1.13.8':
resolution: {integrity: sha512-gQAg2FUg6NIEJiP3UhtnmYV11yvMQO0K/VLY+PKyfOEm1HcbufdHWpHecGXleT8PjbpSSsVVQIRnk6lnmnJOxQ==}
'@orpc/standard-server-node@1.13.9':
resolution: {integrity: sha512-Ea8YT05kh47FzGBsaaUihYvTDxSSQoa1F2QKgCFz6mbSfX04bJZyWxdBAyLZ4BLousdItDdvzWon6066HuUaRw==}
'@orpc/standard-server-peer@1.13.8':
resolution: {integrity: sha512-ZyzWT6zZnLJkX15r04ecSDAJmkQ46PXTovORmK7RzOV47qIB7IryiRGR60U4WygBX0VDzZU8cgcXidZTx4v7oA==}
'@orpc/standard-server-peer@1.13.9':
resolution: {integrity: sha512-r8hSykxNIKwXSMuLYWBxQx1c3DU8b6nU8V76DZhtwC5g1SLYIzw+dzT/EgHplOfmsFeyodiEDXXX1k/twRLuzw==}
'@orpc/standard-server@1.13.8':
resolution: {integrity: sha512-/v72eRSPFzWt6SoHDC04cjZfwdW94z3aib7dMBat32aK3eXwfRZmwPPmfVBQO/ZlJYlq+5rSdPoMKkSoirG/5Q==}
'@orpc/standard-server@1.13.9':
resolution: {integrity: sha512-dwsky7CScgOaDBa7CBF85aPGk/3UoB4fJjitVghb/sZD0Nt+CGIeiPHMsjEgxw5rJwgawMWLI5KxFH9euAJlWw==}
'@orpc/tanstack-query@1.13.8':
resolution: {integrity: sha512-ZUwwkAqoGPOCs8gBG7w6vVNxUOAJyTBVUuclmZoyTdbb5xgMVtUGCvyjiwaWOSoL4+N2urZBbvNdTbEMsuoqLQ==}
'@orpc/tanstack-query@1.13.9':
resolution: {integrity: sha512-gOVJkCT9JGfu0e0TlTY3YUueXP2+Kzp6TcgfL2U3yXcYdTLv+jTrNOVJdtAAbeweUIU6dBEtatlhAQ7OgHWbsw==}
peerDependencies:
'@orpc/client': 1.13.8
'@orpc/client': 1.13.9
'@tanstack/query-core': '>=5.80.2'
'@orpc/zod@1.13.8':
resolution: {integrity: sha512-ClX08h4qyHHQf5vTdbmzano6b26ydluiNVQYVf+KW4cdJnZyOssv8agAyjooqIxxic4qynTA5oIIxnH9VHLNJg==}
'@orpc/zod@1.13.9':
resolution: {integrity: sha512-U0v5+pUGNOYT6JJ9CFdLIWG/5xeOre8pwg9Xr+ML2EfeGr+D2NvuOzQJoNW/tJAEznN1WU9y9FJ8ZJjc2kJuKQ==}
peerDependencies:
'@orpc/contract': 1.13.8
'@orpc/server': 1.13.8
'@orpc/contract': 1.13.9
'@orpc/server': 1.13.9
zod: '>=3.25.0'
'@oxc-project/runtime@0.115.0':
@@ -2645,9 +2636,6 @@ packages:
'@phosphor-icons/web@2.1.2':
resolution: {integrity: sha512-rPAR9o/bEcp4Cw4DEeZHXf+nlGCMNGkNDRizYHM47NLxz9vvEHp/Tt6FMK1NcWadzw/pFDPnRBGi/ofRya958A==}
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
@@ -3432,11 +3420,11 @@ packages:
resolution: {integrity: sha512-NaOGLRrddszbQj9upGat6HG/4TKvXLvu+osAIgfxPYA+eIvYKv8GKDJOrY2D3/U9MRnKfMWD7bU4jeD4xmqyIg==}
engines: {node: '>=20.19'}
'@tanstack/query-core@5.91.0':
resolution: {integrity: sha512-FYXN8Kk9Q5VKuV6AIVaNwMThSi0nvAtR4X7HQoigf6ePOtFcavJYVIzgFhOVdtbBQtCJE3KimDIMMJM2DR1hjw==}
'@tanstack/query-core@5.91.2':
resolution: {integrity: sha512-Uz2pTgPC1mhqrrSGg18RKCWT/pkduAYtxbcyIyKBhw7dTWjXZIzqmpzO2lBkyWr4hlImQgpu1m1pei3UnkFRWw==}
'@tanstack/react-query@5.91.0':
resolution: {integrity: sha512-S8FODsDTNv0Ym+o/JVBvA6EWiWVhg6K2Q4qFehZyFKk6uW4H9OPbXl4kyiN9hAly0uHJ/1GEbR6kAI4MZWfjEA==}
'@tanstack/react-query@5.91.2':
resolution: {integrity: sha512-GClLPzbM57iFXv+FlvOUL56XVe00PxuTaVEyj1zAObhRiKF008J5vedmaq7O6ehs+VmPHe8+PUQhMuEyv8d9wQ==}
peerDependencies:
react: ^18 || ^19
@@ -4188,10 +4176,6 @@ packages:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
atomic-sleep@1.0.0:
resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
engines: {node: '>=8.0.0'}
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -4568,9 +4552,6 @@ packages:
color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
colors@1.0.3:
resolution: {integrity: sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==}
engines: {node: '>=0.1.90'}
@@ -4724,9 +4705,6 @@ packages:
date-fns@3.6.0:
resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
dateformat@4.6.3:
resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==}
db0@0.3.4:
resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
peerDependencies:
@@ -5209,9 +5187,6 @@ packages:
resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==}
engines: {node: '>=8.0.0'}
fast-copy@4.0.2:
resolution: {integrity: sha512-ybA6PDXIXOXivLJK/z9e+Otk7ve13I4ckBvGO5I2RRmBU1gMHLVDJYEuJYhGwez7YNlYji2M2DvVU+a9mSFDlw==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -5232,9 +5207,6 @@ packages:
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
fast-safe-stringify@2.1.1:
resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==}
fast-uri@3.1.0:
resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
@@ -5501,9 +5473,6 @@ packages:
headers-polyfill@4.0.3:
resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==}
help-me@5.0.0:
resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==}
hono@4.12.5:
resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==}
engines: {node: '>=16.9.0'}
@@ -5582,12 +5551,6 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
input-otp@1.4.2:
resolution: {integrity: sha512-l3jWwYNvrEa6NTCt7BECfCm48GvwuZzkoeG3gBL2w4CHeOXW3eKFmf9UNYkNfYc3mxMrthMnxjIE07MT0zLBQA==}
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc
internal-slot@1.1.0:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
@@ -5845,10 +5808,6 @@ packages:
jose@6.1.3:
resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==}
joycon@3.1.1:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
js-cookie@3.0.5:
resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
engines: {node: '>=14'}
@@ -5932,8 +5891,8 @@ packages:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
knip@5.88.0:
resolution: {integrity: sha512-FZjQYLYwUbVrtC3C1cKyEMMqR4K2ZlkQLZszJgF5cfDo4GUSBZAdAV0P3eyzZrkssRoghLJQA9HTQUW7G+Tc8Q==}
knip@5.88.1:
resolution: {integrity: sha512-tpy5o7zu1MjawVkLPuahymVJekYY3kYjvzcoInhIchgePxTlo+api90tBv2KfhAIe5uXh+mez1tAfmbv8/TiZg==}
engines: {node: '>=18.18.0'}
hasBin: true
peerDependencies:
@@ -6463,10 +6422,6 @@ packages:
ollama@0.6.3:
resolution: {integrity: sha512-KEWEhIqE5wtfzEIZbDCLH51VFZ6Z3ZSa6sIOg/E/tBV8S51flyqBOXi+bRxlOYKDf8i327zG9eSTb8IJxvm3Zg==}
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -6664,20 +6619,6 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
pino-abstract-transport@3.0.0:
resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
pino-pretty@13.1.3:
resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==}
hasBin: true
pino-std-serializers@7.1.0:
resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
pino@10.3.1:
resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
hasBin: true
pixelmatch@7.1.0:
resolution: {integrity: sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==}
hasBin: true
@@ -6773,9 +6714,6 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
process-warning@5.0.0:
resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
@@ -6876,8 +6814,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
puppeteer-core@24.39.1:
resolution: {integrity: sha512-AMqQIKoEhPS6CilDzw0Gd1brLri3emkC+1N2J6ZCCuY1Cglo56M63S0jOeBZDQlemOiRd686MYVMl9ELJBzN3A==}
puppeteer-core@24.40.0:
resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==}
engines: {node: '>=18'}
pure-rand@6.1.0:
@@ -6895,9 +6833,6 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
quick-format-unescaped@4.0.4:
resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
radash@12.1.1:
resolution: {integrity: sha512-h36JMxKRqrAxVD8201FrCpyeNuUY9Y5zZwujr20fFO77tpUtGa6EZzfKw/3WaiBX95fq7+MpsuMLNdSnORAwSA==}
engines: {node: '>=14.18.0'}
@@ -7009,10 +6944,6 @@ packages:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
real-require@0.2.0:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
recast@0.23.11:
resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
engines: {node: '>= 4'}
@@ -7146,10 +7077,6 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
safe-stable-stringify@2.5.0:
resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
engines: {node: '>=10'}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -7167,9 +7094,6 @@ packages:
scheduler@0.27.0:
resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -7291,9 +7215,6 @@ packages:
resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
sonic-boom@4.2.1:
resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
sonner@2.0.7:
resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
peerDependencies:
@@ -7517,10 +7438,6 @@ packages:
text-decoder@1.2.7:
resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
thread-stream@4.0.0:
resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
engines: {node: '>=20'}
threads@1.7.0:
resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==}
@@ -10404,33 +10321,33 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
'@orpc/client@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/client@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-peer': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-peer': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/contract@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/contract@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@standard-schema/spec': 1.1.0
openapi-types: 12.1.3
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/interop@1.13.8': {}
'@orpc/interop@1.13.9': {}
'@orpc/json-schema@1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
'@orpc/json-schema@1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
dependencies:
'@orpc/contract': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.8
'@orpc/openapi': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/server': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.9
'@orpc/openapi': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/server': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
json-schema-typed: 8.0.2
transitivePeerDependencies:
- '@opentelemetry/api'
@@ -10438,24 +10355,24 @@ snapshots:
- fastify
- ws
'@orpc/openapi-client@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/openapi-client@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/openapi@1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
'@orpc/openapi@1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
dependencies:
'@orpc/client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.8
'@orpc/openapi-client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/server': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.9
'@orpc/openapi-client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/server': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
json-schema-typed: 8.0.2
rou3: 0.7.12
transitivePeerDependencies:
@@ -10464,18 +10381,18 @@ snapshots:
- fastify
- ws
'@orpc/server@1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
'@orpc/server@1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)':
dependencies:
'@orpc/client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.8
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-aws-lambda': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fastify': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-peer': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/interop': 1.13.9
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-aws-lambda': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fastify': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-peer': 1.13.9(@opentelemetry/api@1.9.0)
cookie: 1.1.1
optionalDependencies:
crossws: 0.4.4(srvx@0.11.12)
@@ -10484,73 +10401,73 @@ snapshots:
- '@opentelemetry/api'
- fastify
'@orpc/shared@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/shared@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
radash: 12.1.1
type-fest: 5.4.4
optionalDependencies:
'@opentelemetry/api': 1.9.0
'@orpc/standard-server-aws-lambda@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server-aws-lambda@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/standard-server-fastify@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server-fastify@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-node': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/standard-server-fetch@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server-fetch@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/standard-server-node@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server-node@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server-fetch': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/standard-server-peer@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server-peer@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/standard-server': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/standard-server@1.13.8(@opentelemetry/api@1.9.0)':
'@orpc/standard-server@1.13.9(@opentelemetry/api@1.9.0)':
dependencies:
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/tanstack-query@1.13.8(@opentelemetry/api@1.9.0)(@orpc/client@1.13.8(@opentelemetry/api@1.9.0))(@tanstack/query-core@5.91.0)':
'@orpc/tanstack-query@1.13.9(@opentelemetry/api@1.9.0)(@orpc/client@1.13.9(@opentelemetry/api@1.9.0))(@tanstack/query-core@5.91.2)':
dependencies:
'@orpc/client': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@tanstack/query-core': 5.91.0
'@orpc/client': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
'@tanstack/query-core': 5.91.2
transitivePeerDependencies:
- '@opentelemetry/api'
'@orpc/zod@1.13.8(@opentelemetry/api@1.9.0)(@orpc/contract@1.13.8(@opentelemetry/api@1.9.0))(@orpc/server@1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0))(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)(zod@4.3.6)':
'@orpc/zod@1.13.9(@opentelemetry/api@1.9.0)(@orpc/contract@1.13.9(@opentelemetry/api@1.9.0))(@orpc/server@1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0))(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)(zod@4.3.6)':
dependencies:
'@orpc/contract': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/json-schema': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/openapi': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/server': 1.13.8(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.8(@opentelemetry/api@1.9.0)
'@orpc/contract': 1.13.9(@opentelemetry/api@1.9.0)
'@orpc/json-schema': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/openapi': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/server': 1.13.9(@opentelemetry/api@1.9.0)(crossws@0.4.4(srvx@0.11.12))(ws@8.19.0)
'@orpc/shared': 1.13.9(@opentelemetry/api@1.9.0)
escape-string-regexp: 5.0.0
wildcard-match: 5.1.4
zod: 4.3.6
@@ -10765,8 +10682,6 @@ snapshots:
'@phosphor-icons/web@2.1.2': {}
'@pinojs/redact@0.4.0': {}
'@polka/url@1.0.0-next.29': {}
'@prisma/client-runtime-utils@7.4.2':
@@ -11584,19 +11499,19 @@ snapshots:
'@tanstack/history@1.161.6': {}
'@tanstack/query-core@5.91.0': {}
'@tanstack/query-core@5.91.2': {}
'@tanstack/react-query@5.91.0(react@19.2.4)':
'@tanstack/react-query@5.91.2(react@19.2.4)':
dependencies:
'@tanstack/query-core': 5.91.0
'@tanstack/query-core': 5.91.2
react: 19.2.4
'@tanstack/react-router-ssr-query@1.166.9(@tanstack/query-core@5.91.0)(@tanstack/react-query@5.91.0(react@19.2.4))(@tanstack/react-router@1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
'@tanstack/react-router-ssr-query@1.166.9(@tanstack/query-core@5.91.2)(@tanstack/react-query@5.91.2(react@19.2.4))(@tanstack/react-router@1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.167.5)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)':
dependencies:
'@tanstack/query-core': 5.91.0
'@tanstack/react-query': 5.91.0(react@19.2.4)
'@tanstack/query-core': 5.91.2
'@tanstack/react-query': 5.91.2(react@19.2.4)
'@tanstack/react-router': 1.167.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
'@tanstack/router-ssr-query-core': 1.166.9(@tanstack/query-core@5.91.0)(@tanstack/router-core@1.167.5)
'@tanstack/router-ssr-query-core': 1.166.9(@tanstack/query-core@5.91.2)(@tanstack/router-core@1.167.5)
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
transitivePeerDependencies:
@@ -11706,9 +11621,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@tanstack/router-ssr-query-core@1.166.9(@tanstack/query-core@5.91.0)(@tanstack/router-core@1.167.5)':
'@tanstack/router-ssr-query-core@1.166.9(@tanstack/query-core@5.91.2)(@tanstack/router-core@1.167.5)':
dependencies:
'@tanstack/query-core': 5.91.0
'@tanstack/query-core': 5.91.2
'@tanstack/router-core': 1.167.5
'@tanstack/router-utils@1.161.6':
@@ -12396,8 +12311,6 @@ snapshots:
at-least-node@1.0.0: {}
atomic-sleep@1.0.0: {}
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.1.0
@@ -12813,8 +12726,6 @@ snapshots:
color-name@1.1.4: {}
colorette@2.0.20: {}
colors@1.0.3: {}
commander@10.0.1: {}
@@ -12947,8 +12858,6 @@ snapshots:
date-fns@3.6.0: {}
dateformat@4.6.3: {}
db0@0.3.4(@electric-sql/pglite@0.3.15)(drizzle-orm@1.0.0-beta.18-7eb39f0(@electric-sql/pglite@0.3.15)(@opentelemetry/api@1.9.0)(@types/mssql@9.1.9(@azure/core-client@1.10.1))(@types/pg@8.18.0)(mssql@11.0.1(@azure/core-client@1.10.1))(mysql2@3.15.3)(pg@8.20.0)(postgres@3.4.7)(valibot@1.2.0(typescript@5.9.3))(zod@4.3.6))(mysql2@3.15.3):
optionalDependencies:
'@electric-sql/pglite': 0.3.15
@@ -13431,8 +13340,6 @@ snapshots:
pure-rand: 6.1.0
optional: true
fast-copy@4.0.2: {}
fast-deep-equal@3.1.3: {}
fast-equals@5.4.0: {}
@@ -13451,8 +13358,6 @@ snapshots:
fast-json-stable-stringify@2.1.0: {}
fast-safe-stringify@2.1.1: {}
fast-uri@3.1.0: {}
fast-xml-builder@1.0.0: {}
@@ -13724,8 +13629,6 @@ snapshots:
headers-polyfill@4.0.3: {}
help-me@5.0.0: {}
hono@4.12.5: {}
hookable@6.1.0: {}
@@ -13803,11 +13706,6 @@ snapshots:
inherits@2.0.4: {}
input-otp@1.4.2(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
react-dom: 19.2.4(react@19.2.4)
internal-slot@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -14022,8 +13920,6 @@ snapshots:
jose@6.1.3: {}
joycon@3.1.1: {}
js-cookie@3.0.5: {}
js-md4@0.3.2: {}
@@ -14121,7 +14017,7 @@ snapshots:
kleur@4.1.5: {}
knip@5.88.0(@types/node@25.5.0)(typescript@5.9.3):
knip@5.88.1(@types/node@25.5.0)(typescript@5.9.3):
dependencies:
'@nodelib/fs.walk': 1.2.8
'@types/node': 25.5.0
@@ -14625,8 +14521,6 @@ snapshots:
dependencies:
whatwg-fetch: 3.6.20
on-exit-leak-free@2.1.2: {}
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
@@ -14899,42 +14793,6 @@ snapshots:
picomatch@4.0.3: {}
pino-abstract-transport@3.0.0:
dependencies:
split2: 4.2.0
pino-pretty@13.1.3:
dependencies:
colorette: 2.0.20
dateformat: 4.6.3
fast-copy: 4.0.2
fast-safe-stringify: 2.1.1
help-me: 5.0.0
joycon: 3.1.1
minimist: 1.2.8
on-exit-leak-free: 2.1.2
pino-abstract-transport: 3.0.0
pump: 3.0.4
secure-json-parse: 4.1.0
sonic-boom: 4.2.1
strip-json-comments: 5.0.3
pino-std-serializers@7.1.0: {}
pino@10.3.1:
dependencies:
'@pinojs/redact': 0.4.0
atomic-sleep: 1.0.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 3.0.0
pino-std-serializers: 7.1.0
process-warning: 5.0.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
safe-stable-stringify: 2.5.0
sonic-boom: 4.2.1
thread-stream: 4.0.0
pixelmatch@7.1.0:
dependencies:
pngjs: 7.0.0
@@ -15017,8 +14875,6 @@ snapshots:
process-nextick-args@2.0.1: {}
process-warning@5.0.0: {}
process@0.11.10: {}
progress@2.0.3: {}
@@ -15171,7 +15027,7 @@ snapshots:
punycode@2.3.1: {}
puppeteer-core@24.39.1:
puppeteer-core@24.40.0:
dependencies:
'@puppeteer/browsers': 2.13.0
chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282)
@@ -15201,8 +15057,6 @@ snapshots:
queue-microtask@1.2.3: {}
quick-format-unescaped@4.0.4: {}
radash@12.1.1: {}
range-parser@1.2.1: {}
@@ -15315,8 +15169,6 @@ snapshots:
readdirp@4.1.2:
optional: true
real-require@0.2.0: {}
recast@0.23.11:
dependencies:
ast-types: 0.16.1
@@ -15479,8 +15331,6 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
safe-stable-stringify@2.5.0: {}
safer-buffer@2.1.2: {}
samlify@2.11.0:
@@ -15502,8 +15352,6 @@ snapshots:
scheduler@0.27.0: {}
secure-json-parse@4.1.0: {}
semver@6.3.1: {}
semver@7.7.4: {}
@@ -15711,10 +15559,6 @@ snapshots:
ip-address: 10.1.0
smart-buffer: 4.2.0
sonic-boom@4.2.1:
dependencies:
atomic-sleep: 1.0.0
sonner@2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
dependencies:
react: 19.2.4
@@ -15990,10 +15834,6 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
thread-stream@4.0.0:
dependencies:
real-require: 0.2.0
threads@1.7.0:
dependencies:
callsites: 3.1.0
-81
View File
@@ -1,81 +0,0 @@
import { MinusIcon } from "@phosphor-icons/react";
import { OTPInput, OTPInputContext } from "input-otp";
import * as React from "react";
import { cn } from "@/utils/style";
function InputOTP({
className,
containerClassName,
...props
}: React.ComponentProps<typeof OTPInput> & {
containerClassName?: string;
}) {
return (
<OTPInput
data-slot="input-otp"
containerClassName={cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName)}
spellCheck={false}
className={cn("disabled:cursor-not-allowed", className)}
{...props}
/>
);
}
function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="input-otp-group"
className={cn(
"flex items-center rounded-md has-aria-invalid:border-destructive has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
className,
)}
{...props}
/>
);
}
function InputOTPSlot({
index,
className,
...props
}: React.ComponentProps<"div"> & {
index: number;
}) {
const inputOTPContext = React.useContext(OTPInputContext);
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
return (
<div
data-slot="input-otp-slot"
data-active={isActive}
className={cn(
"relative flex size-9 items-center justify-center border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40",
className,
)}
{...props}
>
{char}
{hasFakeCaret && (
<div className="pointer-events-none absolute inset-0 flex items-center justify-center">
<div className="size-4 animate-caret-blink bg-foreground duration-1000" />
</div>
)}
</div>
);
}
function InputOTPSeparator({ ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="input-otp-separator"
className="mx-3 flex items-center [&_svg:not([class*='size-'])]:size-4"
role="separator"
{...props}
>
<MinusIcon />
</div>
);
}
export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
+5 -17
View File
@@ -3,7 +3,6 @@ import { t } from "@lingui/core/macro";
import { Trans } from "@lingui/react/macro";
import { ArrowDownIcon, CopyIcon, EyeIcon, EyeSlashIcon } from "@phosphor-icons/react";
import { useRouter } from "@tanstack/react-router";
import { REGEXP_ONLY_DIGITS } from "input-otp";
import { QRCodeSVG } from "qrcode.react";
import { useState } from "react";
import { useForm } from "react-hook-form";
@@ -16,7 +15,6 @@ import { Button } from "@/components/ui/button";
import { DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { InputOTP, InputOTPGroup, InputOTPSlot } from "@/components/ui/input-otp";
import { useFormBlocker } from "@/hooks/use-form-blocker";
import { authClient } from "@/integrations/auth/client";
@@ -242,7 +240,7 @@ export function EnableTwoFactorDialog(_: DialogProps<"auth.two-factor.enable">)
</p>
<Form {...verifyForm}>
<form onSubmit={verifyForm.handleSubmit(onVerifySubmit)}>
<form className="space-y-4" onSubmit={verifyForm.handleSubmit(onVerifySubmit)}>
<FormField
control={verifyForm.control}
name="code"
@@ -250,23 +248,13 @@ export function EnableTwoFactorDialog(_: DialogProps<"auth.two-factor.enable">)
<FormItem>
<FormControl
render={
<InputOTP
<Input
type="number"
maxLength={6}
value={field.value}
onChange={field.onChange}
pattern={REGEXP_ONLY_DIGITS}
onComplete={verifyForm.handleSubmit(onVerifySubmit)}
pasteTransformer={(pasted) => pasted.replaceAll("-", "")}
>
<InputOTPGroup>
<InputOTPSlot index={0} className="size-12" />
<InputOTPSlot index={1} className="size-12" />
<InputOTPSlot index={2} className="size-12" />
<InputOTPSlot index={3} className="size-12" />
<InputOTPSlot index={4} className="size-12" />
<InputOTPSlot index={5} className="size-12" />
</InputOTPGroup>
</InputOTP>
className="max-w-xs"
/>
}
/>
<FormMessage />
+7 -6
View File
@@ -1,7 +1,6 @@
import nodemailer, { type Transporter } from "nodemailer";
import { env } from "@/utils/env";
import { logger } from "@/utils/logger";
type SendEmailOptions = {
to: string | string[];
@@ -45,16 +44,18 @@ export const sendEmail = async (options: SendEmailOptions) => {
};
if (!transport) {
logger.info({ to: payload.to, subject: payload.subject }, "SMTP not configured; skipping email send");
console.info("SMTP not configured; skipping email send.", {
to: payload.to,
subject: payload.subject,
text: payload.text,
});
return;
}
try {
await transport.sendMail({ ...options, from });
} catch (error) {
logger.error(
{ err: error, smtpHost: env.SMTP_HOST, smtpPort: env.SMTP_PORT, to: payload.to, subject: payload.subject },
"SMTP send failed",
);
console.error("There was an error sending mail.", error);
}
};
+2 -3
View File
@@ -8,14 +8,13 @@ import { getRequestHeaders } from "@tanstack/react-start/server";
import router from "@/integrations/orpc/router";
import { getLocale } from "@/utils/locale";
import { logServerError } from "@/utils/logger";
export const getORPCClient = createIsomorphicFn()
.server((): RouterClient<typeof router> => {
return createRouterClient(router, {
interceptors: [
onError((error) => {
logServerError("oRPC server client error", error, { scope: "server" });
console.error("[oRPC server]", error);
}),
],
context: async () => {
@@ -42,7 +41,7 @@ export const getORPCClient = createIsomorphicFn()
interceptors: [
onError((error) => {
if (error instanceof DOMException && error.name === "AbortError") return;
console.warn("[oRPC client]", error instanceof Error ? error.message : error);
console.warn("[oRPC client]", error);
}),
],
});
+5 -5
View File
@@ -33,7 +33,6 @@ import {
} from "@/integrations/ai/tools/patch-resume";
import { defaultResumeData, resumeDataSchema } from "@/schema/resume/data";
import { type TailorOutput, tailorOutputSchema } from "@/schema/tailor";
import { logger } from "@/utils/logger";
import { isObject } from "@/utils/sanitize";
const aiExtractionTemplate = {
@@ -184,10 +183,11 @@ function mergeDefaults<T extends Record<string, unknown>, S extends Record<strin
function logAndRethrow(context: string, error: unknown): never {
if (error instanceof Error) {
logger.error({ err: error }, context);
console.error(`${context}:`, error);
throw error;
}
logger.error({ err: error }, `Unknown error in ${context}`);
console.error(`${context}:`, error);
throw new Error(`An unknown error occurred during ${context}.`);
}
@@ -224,11 +224,11 @@ function parseAndValidateResumeJson(resultText: string): ResumeData {
});
} catch (error: unknown) {
if (error instanceof ZodError) {
logger.error({ err: flattenError(error) }, "Zod validation failed during resume parsing");
console.error("Zod validation failed during resume parsing:", flattenError(error));
throw error;
}
logger.error({ err: error }, "Unknown error during resume data validation");
console.error("Unknown error during resume data validation:", error);
throw new Error("An unknown error occurred while validating the merged resume data.");
}
}
+1 -2
View File
@@ -6,7 +6,6 @@ import type { AuthProvider } from "@/integrations/auth/types";
import { schema } from "@/integrations/drizzle";
import { db } from "@/integrations/drizzle/client";
import { env } from "@/utils/env";
import { logger } from "@/utils/logger";
import { getStorageService } from "./storage";
@@ -43,7 +42,7 @@ export const authService = {
try {
await db.delete(schema.user).where(eq(schema.user.id, input.userId));
} catch (err) {
logger.error({ err, userId: input.userId }, "Failed to delete user record");
console.error("Failed to delete user record:", err);
throw new ORPCError("INTERNAL_SERVER_ERROR");
}
+1 -2
View File
@@ -4,7 +4,6 @@ import { sql } from "drizzle-orm";
import { db } from "@/integrations/drizzle/client";
import { printerService } from "@/integrations/orpc/services/printer";
import { getStorageService } from "@/integrations/orpc/services/storage";
import { logger } from "@/utils/logger";
const HEALTHCHECK_TIMEOUT_MS = 1_500;
@@ -72,7 +71,7 @@ async function healthHandler() {
};
if (status === "unhealthy") {
logger.warn({ route: "/api/health", database, printer, storage }, "Healthcheck failed");
console.warn("[Healthcheck]", { route: "/api/health", database, printer, storage });
}
const headers = new Headers();
+1 -2
View File
@@ -10,7 +10,6 @@ import router from "@/integrations/orpc/router";
import { resumeDataSchema } from "@/schema/resume/data";
import { env } from "@/utils/env";
import { getLocale } from "@/utils/locale";
import { logServerError } from "@/utils/logger";
const openAPIHandler = new OpenAPIHandler(router, {
plugins: [
@@ -23,7 +22,7 @@ const openAPIHandler = new OpenAPIHandler(router, {
],
interceptors: [
onError((error) => {
logServerError("OpenAPI handler error", error, { route: "/api/openapi" });
console.error("[OpenAPI]", error);
}),
],
});
+1 -2
View File
@@ -5,13 +5,12 @@ import { createFileRoute } from "@tanstack/react-router";
import router from "@/integrations/orpc/router";
import { getLocale } from "@/utils/locale";
import { logServerError } from "@/utils/logger";
const rpcHandler = new RPCHandler(router, {
plugins: [new BatchHandlerPlugin(), new RequestHeadersPlugin(), new StrictGetMethodPlugin()],
interceptors: [
onError((error) => {
logServerError("oRPC server error", error, { route: "/api/rpc" });
console.error("[oRPC Server]", error);
}),
],
});
+2 -28
View File
@@ -3,14 +3,13 @@ import { t } from "@lingui/core/macro";
import { Trans } from "@lingui/react/macro";
import { ArrowLeftIcon, CheckIcon } from "@phosphor-icons/react";
import { createFileRoute, Link, redirect, useNavigate, useRouter } from "@tanstack/react-router";
import { REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormMessage } from "@/components/ui/form";
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "@/components/ui/input-otp";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
export const Route = createFileRoute("/auth/verify-2fa-backup")({
@@ -72,32 +71,7 @@ function RouteComponent() {
render={({ field }) => (
<FormItem className="justify-self-center">
<FormControl
render={
<InputOTP
maxLength={10}
value={field.value}
pattern={REGEXP_ONLY_DIGITS_AND_CHARS}
onChange={field.onChange}
onComplete={form.handleSubmit(onSubmit)}
pasteTransformer={(pasted) => pasted.replaceAll("-", "")}
>
<InputOTPGroup>
<InputOTPSlot index={0} className="size-12" />
<InputOTPSlot index={1} className="size-12" />
<InputOTPSlot index={2} className="size-12" />
<InputOTPSlot index={3} className="size-12" />
<InputOTPSlot index={4} className="size-12" />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot index={5} className="size-12" />
<InputOTPSlot index={6} className="size-12" />
<InputOTPSlot index={7} className="size-12" />
<InputOTPSlot index={8} className="size-12" />
<InputOTPSlot index={9} className="size-12" />
</InputOTPGroup>
</InputOTP>
}
render={<Input maxLength={10} value={field.value} onChange={field.onChange} className="max-w-xs" />}
/>
<FormMessage />
</FormItem>
+5 -19
View File
@@ -3,14 +3,13 @@ import { t } from "@lingui/core/macro";
import { Trans } from "@lingui/react/macro";
import { ArrowLeftIcon, CheckIcon } from "@phosphor-icons/react";
import { createFileRoute, Link, redirect, useNavigate, useRouter } from "@tanstack/react-router";
import { REGEXP_ONLY_DIGITS } from "input-otp";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import z from "zod";
import { Button } from "@/components/ui/button";
import { Form, FormControl, FormField, FormItem, FormMessage } from "@/components/ui/form";
import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "@/components/ui/input-otp";
import { Input } from "@/components/ui/input";
import { authClient } from "@/integrations/auth/client";
export const Route = createFileRoute("/auth/verify-2fa")({
@@ -74,26 +73,13 @@ function RouteComponent() {
<FormItem className="justify-self-center">
<FormControl
render={
<InputOTP
<Input
type="number"
maxLength={6}
value={field.value}
pattern={REGEXP_ONLY_DIGITS}
onChange={field.onChange}
onComplete={form.handleSubmit(onSubmit)}
pasteTransformer={(pasted) => pasted.replaceAll("-", "")}
>
<InputOTPGroup>
<InputOTPSlot index={0} className="size-12" />
<InputOTPSlot index={1} className="size-12" />
<InputOTPSlot index={2} className="size-12" />
</InputOTPGroup>
<InputOTPSeparator />
<InputOTPGroup>
<InputOTPSlot index={3} className="size-12" />
<InputOTPSlot index={4} className="size-12" />
<InputOTPSlot index={5} className="size-12" />
</InputOTPGroup>
</InputOTP>
className="max-w-xs"
/>
}
/>
<FormMessage />
+1 -3
View File
@@ -2,8 +2,6 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
import { createFileRoute } from "@tanstack/react-router";
import { logger } from "@/utils/logger";
import { registerPrompts } from "./-helpers/prompts";
import { registerResources } from "./-helpers/resources";
import { registerTools } from "./-helpers/tools";
@@ -54,7 +52,7 @@ export const Route = createFileRoute("/mcp/")({
return await transport.handleRequest(request);
} catch (error) {
logger.error({ err: error, route: "/mcp" }, "MCP request failed");
console.error("[MCP]", error);
return Response.json({
id: null,
-71
View File
@@ -1,71 +0,0 @@
import pino from "pino";
const isDev = process.env.NODE_ENV !== "production";
const level = process.env.LOG_LEVEL ?? (isDev ? "debug" : "info");
export const logger = pino({
level,
timestamp: pino.stdTimeFunctions.isoTime,
formatters: {
level: (label) => ({ level: label }),
},
redact: {
paths: [
"apiKey",
"password",
"secret",
"token",
"authorization",
"*.apiKey",
"*.password",
"*.secret",
"*.token",
"error.stack",
],
censor: "[REDACTED]",
},
...(isDev && {
transport: {
target: "pino-pretty",
options: {
colorize: true,
translateTime: "HH:MM:ss.l",
ignore: "pid,hostname",
},
},
}),
});
const EXPECTED_ERROR_PATTERNS = [
"Unauthorized",
"Not Found",
"UNAUTHORIZED",
"NOT_FOUND",
"State mismatch",
"User not found",
"Credential account not found",
"Invalid API key",
] as const;
export function isExpectedError(error: unknown): boolean {
const message = error instanceof Error ? error.message : String(error);
return EXPECTED_ERROR_PATTERNS.some((pattern) => message.includes(pattern));
}
export function getErrorSummary(error: unknown): { name: string; message: string } {
if (error instanceof Error) return { name: error.name, message: error.message };
if (typeof error === "string") return { name: "Error", message: error };
if (typeof error === "object" && error !== null) return { name: "Error", message: JSON.stringify(error) };
return { name: "Error", message: String(error) };
}
export function logServerError(context: string, error: unknown, extra: Record<string, unknown> = {}): void {
const summary = getErrorSummary(error);
if (isExpectedError(error)) {
logger.warn({ err: summary, ...extra }, context);
return;
}
logger.error({ err: error instanceof Error ? error : summary, ...extra }, context);
}