refactor: align routes with next 16 and local fonts

This commit is contained in:
Esdras Renan 2025-10-22 02:08:18 -03:00
parent 2e3b46a7b5
commit dad84d7d0e
16 changed files with 2448 additions and 198 deletions

View file

@ -1,16 +1,8 @@
import { dirname } from "path"; import nextConfig from "eslint-config-next"
import { fileURLToPath } from "url"; import tseslint from "typescript-eslint"
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [ const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"), ...nextConfig,
{ {
ignores: [ ignores: [
"node_modules/**", "node_modules/**",
@ -24,12 +16,21 @@ const eslintConfig = [
], ],
}, },
{ {
files: ["**/*.ts", "**/*.tsx"],
plugins: {
"@typescript-eslint": tseslint.plugin,
},
rules: { rules: {
"@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/ban-ts-comment": "warn",
"react/no-unescaped-entities": "off", "react/no-unescaped-entities": "off",
"react-hooks/set-state-in-effect": "off",
"react-hooks/purity": "off",
"react-hooks/refs": "off",
"react-hooks/immutability": "off",
"react-hooks/incompatible-library": "off",
}, },
}, },
]; ]
export default eslintConfig; export default eslintConfig

322
pnpm-lock.yaml generated
View file

@ -100,7 +100,7 @@ importers:
version: 3.6.5 version: 3.6.5
better-auth: better-auth:
specifier: ^1.3.26 specifier: ^1.3.26
version: 1.3.26(next@15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 1.3.26(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
class-variance-authority: class-variance-authority:
specifier: ^0.7.1 specifier: ^0.7.1
version: 0.7.1 version: 0.7.1
@ -120,8 +120,8 @@ importers:
specifier: ^0.544.0 specifier: ^0.544.0
version: 0.544.0(react@19.2.0) version: 0.544.0(react@19.2.0)
next: next:
specifier: 15.5.6 specifier: ^16.0.0
version: 15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
next-themes: next-themes:
specifier: ^0.4.6 specifier: ^0.4.6
version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@ -157,7 +157,7 @@ importers:
version: 0.180.0 version: 0.180.0
unicornstudio-react: unicornstudio-react:
specifier: ^1.4.31 specifier: ^1.4.31
version: 1.4.31(next@15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 1.4.31(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
vaul: vaul:
specifier: ^1.1.2 specifier: ^1.1.2
version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 1.1.2(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
@ -202,8 +202,8 @@ importers:
specifier: ^9 specifier: ^9
version: 9.37.0(jiti@2.6.1) version: 9.37.0(jiti@2.6.1)
eslint-config-next: eslint-config-next:
specifier: 15.5.6 specifier: ^16.0.0
version: 15.5.6(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) version: 16.0.0(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
eslint-plugin-react-hooks: eslint-plugin-react-hooks:
specifier: ^5.0.0 specifier: ^5.0.0
version: 5.2.0(eslint@9.37.0(jiti@2.6.1)) version: 5.2.0(eslint@9.37.0(jiti@2.6.1))
@ -928,56 +928,56 @@ packages:
'@napi-rs/wasm-runtime@0.2.12': '@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
'@next/env@15.5.6': '@next/env@16.0.0':
resolution: {integrity: sha512-3qBGRW+sCGzgbpc5TS1a0p7eNxnOarGVQhZxfvTdnV0gFI61lX7QNtQ4V1TSREctXzYn5NetbUsLvyqwLFJM6Q==} resolution: {integrity: sha512-s5j2iFGp38QsG1LWRQaE2iUY3h1jc014/melHFfLdrsMJPqxqDQwWNwyQTcNoUSGZlCVZuM7t7JDMmSyRilsnA==}
'@next/eslint-plugin-next@15.5.6': '@next/eslint-plugin-next@16.0.0':
resolution: {integrity: sha512-YxDvsT2fwy1j5gMqk3ppXlsgDopHnkM4BoxSVASbvvgh5zgsK8lvWerDzPip8k3WVzsTZ1O7A7si1KNfN4OZfQ==} resolution: {integrity: sha512-IB7RzmmtrPOrpAgEBR1PIQPD0yea5lggh5cq54m51jHjjljU80Ia+czfxJYMlSDl1DPvpzb8S9TalCc0VMo9Hw==}
'@next/swc-darwin-arm64@15.5.6': '@next/swc-darwin-arm64@16.0.0':
resolution: {integrity: sha512-ES3nRz7N+L5Umz4KoGfZ4XX6gwHplwPhioVRc25+QNsDa7RtUF/z8wJcbuQ2Tffm5RZwuN2A063eapoJ1u4nPg==} resolution: {integrity: sha512-/CntqDCnk5w2qIwMiF0a9r6+9qunZzFmU0cBX4T82LOflE72zzH6gnOjCwUXYKOBlQi8OpP/rMj8cBIr18x4TA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@next/swc-darwin-x64@15.5.6': '@next/swc-darwin-x64@16.0.0':
resolution: {integrity: sha512-JIGcytAyk9LQp2/nuVZPAtj8uaJ/zZhsKOASTjxDug0SPU9LAM3wy6nPU735M1OqacR4U20LHVF5v5Wnl9ptTA==} resolution: {integrity: sha512-hB4GZnJGKa8m4efvTGNyii6qs76vTNl+3dKHTCAUaksN6KjYy4iEO3Q5ira405NW2PKb3EcqWiRaL9DrYJfMHg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@next/swc-linux-arm64-gnu@15.5.6': '@next/swc-linux-arm64-gnu@16.0.0':
resolution: {integrity: sha512-qvz4SVKQ0P3/Im9zcS2RmfFL/UCQnsJKJwQSkissbngnB/12c6bZTCB0gHTexz1s6d/mD0+egPKXAIRFVS7hQg==} resolution: {integrity: sha512-E2IHMdE+C1k+nUgndM13/BY/iJY9KGCphCftMh7SXWcaQqExq/pJU/1Hgn8n/tFwSoLoYC/yUghOv97tAsIxqg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-arm64-musl@15.5.6': '@next/swc-linux-arm64-musl@16.0.0':
resolution: {integrity: sha512-FsbGVw3SJz1hZlvnWD+T6GFgV9/NYDeLTNQB2MXoPN5u9VA9OEDy6fJEfePfsUKAhJufFbZLgp0cPxMuV6SV0w==} resolution: {integrity: sha512-xzgl7c7BVk4+7PDWldU+On2nlwnGgFqJ1siWp3/8S0KBBLCjonB6zwJYPtl4MUY7YZJrzzumdUpUoquu5zk8vg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@next/swc-linux-x64-gnu@15.5.6': '@next/swc-linux-x64-gnu@16.0.0':
resolution: {integrity: sha512-3QnHGFWlnvAgyxFxt2Ny8PTpXtQD7kVEeaFat5oPAHHI192WKYB+VIKZijtHLGdBBvc16tiAkPTDmQNOQ0dyrA==} resolution: {integrity: sha512-sdyOg4cbiCw7YUr0F/7ya42oiVBXLD21EYkSwN+PhE4csJH4MSXUsYyslliiiBwkM+KsuQH/y9wuxVz6s7Nstg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-linux-x64-musl@15.5.6': '@next/swc-linux-x64-musl@16.0.0':
resolution: {integrity: sha512-OsGX148sL+TqMK9YFaPFPoIaJKbFJJxFzkXZljIgA9hjMjdruKht6xDCEv1HLtlLNfkx3c5w2GLKhj7veBQizQ==} resolution: {integrity: sha512-IAXv3OBYqVaNOgyd3kxR4L3msuhmSy1bcchPHxDOjypG33i2yDWvGBwFD94OuuTjjTt/7cuIKtAmoOOml6kfbg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@next/swc-win32-arm64-msvc@15.5.6': '@next/swc-win32-arm64-msvc@16.0.0':
resolution: {integrity: sha512-ONOMrqWxdzXDJNh2n60H6gGyKed42Ieu6UTVPZteXpuKbLZTH4G4eBMsr5qWgOBA+s7F+uB4OJbZnrkEDnZ5Fg==} resolution: {integrity: sha512-bmo3ncIJKUS9PWK1JD9pEVv0yuvp1KPuOsyJTHXTv8KDrEmgV/K+U0C75rl9rhIaODcS7JEb6/7eJhdwXI0XmA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@next/swc-win32-x64-msvc@15.5.6': '@next/swc-win32-x64-msvc@16.0.0':
resolution: {integrity: sha512-pxK4VIjFRx1MY92UycLOOw7dTdvccWsNETQ0kDHkBlcFH1GrTLUjSiHU1ohrznnux6TqRHgv5oflhfIWZwVROQ==} resolution: {integrity: sha512-O1cJbT+lZp+cTjYyZGiDwsOjO3UHHzSqobkPNipdlnnuPb1swfcuY6r3p8dsKU4hAIEO4cO67ZCfVVH/M1ETXA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1744,9 +1744,6 @@ packages:
'@rtsao/scc@1.1.0': '@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
'@rushstack/eslint-patch@1.13.0':
resolution: {integrity: sha512-2ih5qGw5SZJ+2fLZxP6Lr6Na2NTIgPRL/7Kmyuw0uIyBQnuhQ8fi8fzUTd38eIQmqp+GYLC00cI6WgtqHxBwmw==}
'@simplewebauthn/browser@13.2.2': '@simplewebauthn/browser@13.2.2':
resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==} resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==}
@ -2223,63 +2220,63 @@ packages:
'@types/webxr@0.5.24': '@types/webxr@0.5.24':
resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==} resolution: {integrity: sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==}
'@typescript-eslint/eslint-plugin@8.45.0': '@typescript-eslint/eslint-plugin@8.46.2':
resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==} resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^8.45.0 '@typescript-eslint/parser': ^8.46.2
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.45.0': '@typescript-eslint/parser@8.46.2':
resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==} resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.45.0': '@typescript-eslint/project-service@8.46.2':
resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==} resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.45.0': '@typescript-eslint/scope-manager@8.46.2':
resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==} resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.45.0': '@typescript-eslint/tsconfig-utils@8.46.2':
resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==} resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.45.0': '@typescript-eslint/type-utils@8.46.2':
resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==} resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.45.0': '@typescript-eslint/types@8.46.2':
resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==} resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.45.0': '@typescript-eslint/typescript-estree@8.46.2':
resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==} resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.45.0': '@typescript-eslint/utils@8.46.2':
resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==} resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.45.0': '@typescript-eslint/visitor-keys@8.46.2':
resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==} resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1': '@unrs/resolver-binding-android-arm-eabi@1.11.1':
@ -2951,10 +2948,10 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
eslint-config-next@15.5.6: eslint-config-next@16.0.0:
resolution: {integrity: sha512-cGr3VQlPsZBEv8rtYp4BpG1KNXDqGvPo9VC1iaCgIA11OfziC/vczng+TnAS3WpRIR3Q5ye/6yl+CRUuZ1fPGg==} resolution: {integrity: sha512-DWKT1YAO9ex2rK0/EeiPpKU++ghTiG59z6m08/ReLRECOYIaEv17maSCYT8zmFQLwIrY5lhJ+iaJPQdT4sJd4g==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 eslint: '>=9.0.0'
typescript: '>=3.3.1' typescript: '>=3.3.1'
peerDependenciesMeta: peerDependenciesMeta:
typescript: typescript:
@ -3019,6 +3016,12 @@ packages:
peerDependencies: peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react-hooks@7.0.0:
resolution: {integrity: sha512-fNXaOwvKwq2+pXiRpXc825Vd63+KM4DLL40Rtlycb8m7fYpp6efrTp1sa6ZbP/Ap58K2bEKFXRmhURE+CJAQWw==}
engines: {node: '>=18'}
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react@7.37.5: eslint-plugin-react@7.37.5:
resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==}
engines: {node: '>=4'} engines: {node: '>=4'}
@ -3221,6 +3224,10 @@ packages:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
globals@16.4.0:
resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
engines: {node: '>=18'}
globalthis@1.0.4: globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -3262,6 +3269,12 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
hermes-estree@0.25.1:
resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==}
hermes-parser@0.25.1:
resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==}
hsl-to-hex@1.0.0: hsl-to-hex@1.0.0:
resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==} resolution: {integrity: sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==}
@ -3680,9 +3693,9 @@ packages:
react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc
next@15.5.6: next@16.0.0:
resolution: {integrity: sha512-zTxsnI3LQo3c9HSdSf91O1jMNsEzIXDShXd4wVdg9y5shwLqBXi4ZtUUJyB86KGVSJLZx0PFONvO54aheGX8QQ==} resolution: {integrity: sha512-nYohiNdxGu4OmBzggxy9rczmjIGI+TpR5vbKTsE1HqYwNm1B+YSiugSrFguX6omMOKnDHAmBPY4+8TNJk0Idyg==}
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} engines: {node: '>=20.9.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
'@opentelemetry/api': ^1.1.0 '@opentelemetry/api': ^1.1.0
@ -4416,6 +4429,13 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
typescript-eslint@8.46.2:
resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
typescript@5.6.3: typescript@5.6.3:
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
@ -4660,6 +4680,12 @@ packages:
yoga-layout@3.2.1: yoga-layout@3.2.1:
resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==}
zod-validation-error@4.0.2:
resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
zod: ^3.25.0 || ^4.0.0
zod@4.1.11: zod@4.1.11:
resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==}
@ -5203,34 +5229,34 @@ snapshots:
'@tybys/wasm-util': 0.10.1 '@tybys/wasm-util': 0.10.1
optional: true optional: true
'@next/env@15.5.6': {} '@next/env@16.0.0': {}
'@next/eslint-plugin-next@15.5.6': '@next/eslint-plugin-next@16.0.0':
dependencies: dependencies:
fast-glob: 3.3.1 fast-glob: 3.3.1
'@next/swc-darwin-arm64@15.5.6': '@next/swc-darwin-arm64@16.0.0':
optional: true optional: true
'@next/swc-darwin-x64@15.5.6': '@next/swc-darwin-x64@16.0.0':
optional: true optional: true
'@next/swc-linux-arm64-gnu@15.5.6': '@next/swc-linux-arm64-gnu@16.0.0':
optional: true optional: true
'@next/swc-linux-arm64-musl@15.5.6': '@next/swc-linux-arm64-musl@16.0.0':
optional: true optional: true
'@next/swc-linux-x64-gnu@15.5.6': '@next/swc-linux-x64-gnu@16.0.0':
optional: true optional: true
'@next/swc-linux-x64-musl@15.5.6': '@next/swc-linux-x64-musl@16.0.0':
optional: true optional: true
'@next/swc-win32-arm64-msvc@15.5.6': '@next/swc-win32-arm64-msvc@16.0.0':
optional: true optional: true
'@next/swc-win32-x64-msvc@15.5.6': '@next/swc-win32-x64-msvc@16.0.0':
optional: true optional: true
'@noble/ciphers@2.0.1': {} '@noble/ciphers@2.0.1': {}
@ -6191,8 +6217,6 @@ snapshots:
'@rtsao/scc@1.1.0': {} '@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.13.0': {}
'@simplewebauthn/browser@13.2.2': {} '@simplewebauthn/browser@13.2.2': {}
'@simplewebauthn/server@13.2.2': '@simplewebauthn/server@13.2.2':
@ -6673,14 +6697,14 @@ snapshots:
'@types/webxr@0.5.24': {} '@types/webxr@0.5.24': {}
'@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/scope-manager': 8.46.2
'@typescript-eslint/type-utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/type-utils': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/utils': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.45.0 '@typescript-eslint/visitor-keys': 8.46.2
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 7.0.5 ignore: 7.0.5
@ -6690,41 +6714,41 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': '@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/scope-manager': 8.46.2
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.45.0 '@typescript-eslint/visitor-keys': 8.46.2
debug: 4.4.3 debug: 4.4.3
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/project-service@8.45.0(typescript@5.9.3)': '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3)
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
debug: 4.4.3 debug: 4.4.3
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@8.45.0': '@typescript-eslint/scope-manager@8.46.2':
dependencies: dependencies:
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
'@typescript-eslint/visitor-keys': 8.45.0 '@typescript-eslint/visitor-keys': 8.46.2
'@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.3)': '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)':
dependencies: dependencies:
typescript: 5.9.3 typescript: 5.9.3
'@typescript-eslint/type-utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': '@typescript-eslint/type-utils@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
'@typescript-eslint/utils': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/utils': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3 debug: 4.4.3
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3)
@ -6732,14 +6756,14 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@8.45.0': {} '@typescript-eslint/types@8.46.2': {}
'@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.3)': '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/project-service': 8.45.0(typescript@5.9.3) '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3)
'@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3)
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
'@typescript-eslint/visitor-keys': 8.45.0 '@typescript-eslint/visitor-keys': 8.46.2
debug: 4.4.3 debug: 4.4.3
fast-glob: 3.3.3 fast-glob: 3.3.3
is-glob: 4.0.3 is-glob: 4.0.3
@ -6750,20 +6774,20 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)': '@typescript-eslint/utils@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1)) '@eslint-community/eslint-utils': 4.9.0(eslint@9.37.0(jiti@2.6.1))
'@typescript-eslint/scope-manager': 8.45.0 '@typescript-eslint/scope-manager': 8.46.2
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/visitor-keys@8.45.0': '@typescript-eslint/visitor-keys@8.46.2':
dependencies: dependencies:
'@typescript-eslint/types': 8.45.0 '@typescript-eslint/types': 8.46.2
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
'@unrs/resolver-binding-android-arm-eabi@1.11.1': '@unrs/resolver-binding-android-arm-eabi@1.11.1':
@ -7001,7 +7025,7 @@ snapshots:
baseline-browser-mapping@2.8.16: {} baseline-browser-mapping@2.8.16: {}
better-auth@1.3.26(next@15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): better-auth@1.3.26(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies: dependencies:
'@better-auth/core': 1.3.26 '@better-auth/core': 1.3.26
'@better-auth/utils': 0.3.0 '@better-auth/utils': 0.3.0
@ -7017,7 +7041,7 @@ snapshots:
nanostores: 1.0.1 nanostores: 1.0.1
zod: 4.1.11 zod: 4.1.11
optionalDependencies: optionalDependencies:
next: 15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react: 19.2.0 react: 19.2.0
react-dom: 19.2.0(react@19.2.0) react-dom: 19.2.0(react@19.2.0)
@ -7526,22 +7550,22 @@ snapshots:
escape-string-regexp@4.0.0: {} escape-string-regexp@4.0.0: {}
eslint-config-next@15.5.6(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3): eslint-config-next@16.0.0(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3):
dependencies: dependencies:
'@next/eslint-plugin-next': 15.5.6 '@next/eslint-plugin-next': 16.0.0
'@rushstack/eslint-patch': 1.13.0
'@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1))
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1))
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-jsx-a11y: 6.10.2(eslint@9.37.0(jiti@2.6.1))
eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-react: 7.37.5(eslint@9.37.0(jiti@2.6.1))
eslint-plugin-react-hooks: 5.2.0(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-react-hooks: 7.0.0(eslint@9.37.0(jiti@2.6.1))
globals: 16.4.0
typescript-eslint: 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
optionalDependencies: optionalDependencies:
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- '@typescript-eslint/parser'
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
- eslint-plugin-import-x - eslint-plugin-import-x
- supports-color - supports-color
@ -7565,22 +7589,22 @@ snapshots:
tinyglobby: 0.2.15 tinyglobby: 0.2.15
unrs-resolver: 1.11.1 unrs-resolver: 1.11.1
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1)) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.37.0(jiti@2.6.1))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)): eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
@ -7591,7 +7615,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1)) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.37.0(jiti@2.6.1))
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -7603,7 +7627,7 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.45.0(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@ -7632,6 +7656,17 @@ snapshots:
dependencies: dependencies:
eslint: 9.37.0(jiti@2.6.1) eslint: 9.37.0(jiti@2.6.1)
eslint-plugin-react-hooks@7.0.0(eslint@9.37.0(jiti@2.6.1)):
dependencies:
'@babel/core': 7.28.4
'@babel/parser': 7.28.4
eslint: 9.37.0(jiti@2.6.1)
hermes-parser: 0.25.1
zod: 4.1.11
zod-validation-error: 4.0.2(zod@4.1.11)
transitivePeerDependencies:
- supports-color
eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)): eslint-plugin-react@7.37.5(eslint@9.37.0(jiti@2.6.1)):
dependencies: dependencies:
array-includes: 3.1.9 array-includes: 3.1.9
@ -7886,6 +7921,8 @@ snapshots:
globals@14.0.0: {} globals@14.0.0: {}
globals@16.4.0: {}
globalthis@1.0.4: globalthis@1.0.4:
dependencies: dependencies:
define-properties: 1.2.1 define-properties: 1.2.1
@ -7919,6 +7956,12 @@ snapshots:
dependencies: dependencies:
function-bind: 1.1.2 function-bind: 1.1.2
hermes-estree@0.25.1: {}
hermes-parser@0.25.1:
dependencies:
hermes-estree: 0.25.1
hsl-to-hex@1.0.0: hsl-to-hex@1.0.0:
dependencies: dependencies:
hsl-to-rgb-for-reals: 1.1.1 hsl-to-rgb-for-reals: 1.1.1
@ -8294,24 +8337,24 @@ snapshots:
react: 19.2.0 react: 19.2.0
react-dom: 19.2.0(react@19.2.0) react-dom: 19.2.0(react@19.2.0)
next@15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies: dependencies:
'@next/env': 15.5.6 '@next/env': 16.0.0
'@swc/helpers': 0.5.15 '@swc/helpers': 0.5.15
caniuse-lite: 1.0.30001747 caniuse-lite: 1.0.30001747
postcss: 8.4.31 postcss: 8.4.31
react: 19.2.0 react: 19.2.0
react-dom: 19.2.0(react@19.2.0) react-dom: 19.2.0(react@19.2.0)
styled-jsx: 5.1.6(react@19.2.0) styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.5.6 '@next/swc-darwin-arm64': 16.0.0
'@next/swc-darwin-x64': 15.5.6 '@next/swc-darwin-x64': 16.0.0
'@next/swc-linux-arm64-gnu': 15.5.6 '@next/swc-linux-arm64-gnu': 16.0.0
'@next/swc-linux-arm64-musl': 15.5.6 '@next/swc-linux-arm64-musl': 16.0.0
'@next/swc-linux-x64-gnu': 15.5.6 '@next/swc-linux-x64-gnu': 16.0.0
'@next/swc-linux-x64-musl': 15.5.6 '@next/swc-linux-x64-musl': 16.0.0
'@next/swc-win32-arm64-msvc': 15.5.6 '@next/swc-win32-arm64-msvc': 16.0.0
'@next/swc-win32-x64-msvc': 15.5.6 '@next/swc-win32-x64-msvc': 16.0.0
sharp: 0.34.4 sharp: 0.34.4
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
@ -9051,10 +9094,12 @@ snapshots:
strip-json-comments@3.1.1: {} strip-json-comments@3.1.1: {}
styled-jsx@5.1.6(react@19.2.0): styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0):
dependencies: dependencies:
client-only: 0.0.1 client-only: 0.0.1
react: 19.2.0 react: 19.2.0
optionalDependencies:
'@babel/core': 7.28.4
supports-color@7.2.0: supports-color@7.2.0:
dependencies: dependencies:
@ -9186,6 +9231,17 @@ snapshots:
possible-typed-array-names: 1.1.0 possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10 reflect.getprototypeof: 1.0.10
typescript-eslint@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
'@typescript-eslint/utils': 8.46.2(eslint@9.37.0(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.37.0(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
typescript@5.6.3: {} typescript@5.6.3: {}
typescript@5.9.3: {} typescript@5.9.3: {}
@ -9213,12 +9269,12 @@ snapshots:
pako: 0.2.9 pako: 0.2.9
tiny-inflate: 1.0.3 tiny-inflate: 1.0.3
unicornstudio-react@1.4.31(next@15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): unicornstudio-react@1.4.31(next@16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies: dependencies:
react: 19.2.0 react: 19.2.0
react-dom: 19.2.0(react@19.2.0) react-dom: 19.2.0(react@19.2.0)
optionalDependencies: optionalDependencies:
next: 15.5.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) next: 16.0.0(@babel/core@7.28.4)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
unrs-resolver@1.11.1: unrs-resolver@1.11.1:
dependencies: dependencies:
@ -9448,6 +9504,10 @@ snapshots:
yoga-layout@3.2.1: {} yoga-layout@3.2.1: {}
zod-validation-error@4.0.2(zod@4.1.11):
dependencies:
zod: 4.1.11
zod@4.1.11: {} zod@4.1.11: {}
zustand@5.0.8(@types/react@18.3.26)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)): zustand@5.0.8(@types/react@18.3.26)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)):

View file

@ -10,7 +10,7 @@ const PUBLIC_PATHS = [/^\/login$/, /^\/machines\/handshake$/]
const ADMIN_ONLY_PATHS = [/^\/admin(?:$|\/)/] const ADMIN_ONLY_PATHS = [/^\/admin(?:$|\/)/]
const APP_HOME = "/dashboard" const APP_HOME = "/dashboard"
export async function middleware(request: NextRequest) { export async function proxy(request: NextRequest) {
if (process.env.NODE_ENV === "production" && !isAllowedHost(request.headers.get("host"))) { if (process.env.NODE_ENV === "production" && !isAllowedHost(request.headers.get("host"))) {
return new NextResponse("Invalid Host header", { status: 403 }) return new NextResponse("Invalid Host header", { status: 403 })
} }

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View file

@ -38,9 +38,16 @@ async function loadUsers() {
}, },
}) })
const domainByEmail = new Map(domainUsers.map((user) => [user.email.toLowerCase(), user])) const domainByEmail = new Map<string, (typeof domainUsers)[number]>(
domainUsers.map(
(user: (typeof domainUsers)[number]): [string, (typeof domainUsers)[number]] => [
user.email.toLowerCase(),
user,
]
)
)
return users.map((user) => { return users.map((user: (typeof users)[number]) => {
const domain = domainByEmail.get(user.email.toLowerCase()) const domain = domainByEmail.get(user.email.toLowerCase())
const normalizedRole = (normalizeRole(user.role) ?? "agent") as RoleOption const normalizedRole = (normalizeRole(user.role) ?? "agent") as RoleOption
return { return {
@ -71,8 +78,8 @@ async function loadInvites(): Promise<NormalizedInvite[]> {
const now = new Date() const now = new Date()
const cutoff = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000) const cutoff = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)
return invites return invites
.map((invite) => normalizeInvite(invite, now)) .map((invite: (typeof invites)[number]) => normalizeInvite(invite, now))
.filter((invite) => { .filter((invite: NormalizedInvite) => {
if (invite.status !== "revoked") return true if (invite.status !== "revoked") return true
if (!invite.revokedAt) return true if (!invite.revokedAt) return true
return new Date(invite.revokedAt) > cutoff return new Date(invite.revokedAt) > cutoff

View file

@ -29,14 +29,18 @@ export default async function AdminUsersPage() {
orderBy: { createdAt: "desc" }, orderBy: { createdAt: "desc" },
}) })
const emails = users.map((user) => user.email) const emails = users.map((user: (typeof users)[number]) => user.email)
const authUsers = await prisma.authUser.findMany({ const authUsers = await prisma.authUser.findMany({
where: { email: { in: emails } }, where: { email: { in: emails } },
select: { id: true, email: true, updatedAt: true, createdAt: true }, select: { id: true, email: true, updatedAt: true, createdAt: true },
}) })
const sessions = await prisma.authSession.findMany({ const sessions = await prisma.authSession.findMany({
where: { userId: { in: authUsers.map((auth) => auth.id) } }, where: {
userId: {
in: authUsers.map((auth: (typeof authUsers)[number]) => auth.id),
},
},
orderBy: { updatedAt: "desc" }, orderBy: { updatedAt: "desc" },
select: { userId: true, updatedAt: true }, select: { userId: true, updatedAt: true },
}) })
@ -57,7 +61,7 @@ export default async function AdminUsersPage() {
}) })
} }
const accounts: AdminAccount[] = users.map((user) => { const accounts: AdminAccount[] = users.map((user: (typeof users)[number]) => {
const auth = authByEmail.get(user.email.toLowerCase()) const auth = authByEmail.get(user.email.toLowerCase())
const lastSeenAt = auth ? sessionByUserId.get(auth.id) ?? auth.updatedAt : null const lastSeenAt = auth ? sessionByUserId.get(auth.id) ?? auth.updatedAt : null
return { return {

View file

@ -1,2 +1,2 @@
export { runtime } from "../users/route" export const runtime = "nodejs"
export { GET, DELETE } from "../users/route" export { GET, DELETE } from "../users/route"

View file

@ -1,5 +1,6 @@
import { NextResponse } from "next/server" import { NextResponse } from "next/server"
import { ZodError } from "zod" import { ZodError } from "zod"
import { Prisma } from "@prisma/client"
import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library" import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library"
import { prisma } from "@/lib/prisma" import { prisma } from "@/lib/prisma"
@ -142,7 +143,7 @@ export async function DELETE(
} }
try { try {
const result = await prisma.$transaction(async (tx) => { const result = await prisma.$transaction(async (tx: Prisma.TransactionClient) => {
const users = await tx.user.updateMany({ const users = await tx.user.updateMany({
where: { companyId: company.id, tenantId: company.tenantId }, where: { companyId: company.id, tenantId: company.tenantId },
data: { companyId: null }, data: { companyId: null },

View file

@ -1,5 +1,4 @@
import { NextResponse } from "next/server" import { NextResponse } from "next/server"
import { Prisma } from "@prisma/client" import { Prisma } from "@prisma/client"
import { ConvexHttpClient } from "convex/browser" import { ConvexHttpClient } from "convex/browser"
@ -124,14 +123,14 @@ export async function PATCH(request: Request, context: { params: Promise<{ id: s
}, },
}) })
const event = await prisma.authInviteEvent.create({ const event = await prisma.authInviteEvent.create({
data: { data: {
inviteId: invite.id, inviteId: invite.id,
type: "revoked", type: "revoked",
payload: reason ? { reason } : Prisma.JsonNull, payload: reason ? { reason } : Prisma.JsonNull,
actorId: session.user.id ?? null, actorId: session.user.id ?? null,
}, },
}) })
const normalized = normalizeInvite({ ...updated, events: [...invite.events, event] }, now) const normalized = normalizeInvite({ ...updated, events: [...invite.events, event] }, now)
await syncInvite(normalized) await syncInvite(normalized)

View file

@ -1,13 +1,37 @@
@import "tailwindcss"; @import "tailwindcss";
@import "tw-animate-css"; @import "tw-animate-css";
@custom-variant dark (&:is(.dark *)); @custom-variant dark (&:is(.dark *));
@theme inline { @font-face {
--color-background: var(--background); font-family: "InterVariable";
--color-foreground: var(--foreground); src: url("/fonts/Inter-VariableFont_opsz,wght.ttf") format("truetype");
--font-sans: var(--font-geist-sans); font-weight: 100 900;
--font-mono: var(--font-geist-mono); font-style: normal;
font-display: swap;
}
@font-face {
font-family: "InterVariable";
src: url("/fonts/Inter-Italic-VariableFont_opsz,wght.ttf") format("truetype");
font-weight: 100 900;
font-style: italic;
font-display: swap;
}
@font-face {
font-family: "JetBrainsMonoVariable";
src: url("/fonts/JetBrainsMono-VariableFont_wght.ttf") format("truetype");
font-weight: 100 800;
font-style: normal;
font-display: swap;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
--color-sidebar-ring: var(--sidebar-ring); --color-sidebar-ring: var(--sidebar-ring);
--color-sidebar-border: var(--sidebar-border); --color-sidebar-border: var(--sidebar-border);
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
@ -81,8 +105,8 @@
--sidebar-border: #cbd5e1; --sidebar-border: #cbd5e1;
--sidebar-ring: #00d6eb; --sidebar-ring: #00d6eb;
--destructive-foreground: oklch(1 0 0); --destructive-foreground: oklch(1 0 0);
--font-geist-sans: "Geist Sans", sans-serif; --font-geist-sans: "InterVariable", "Inter", sans-serif;
--font-geist-mono: "Geist Mono", monospace; --font-geist-mono: "JetBrainsMonoVariable", "JetBrains Mono", monospace;
} }
.dark { .dark {

View file

@ -1,22 +1,9 @@
import type { Metadata } from "next" import type { Metadata } from "next"
import { Inter, JetBrains_Mono } from "next/font/google"
import "./globals.css" import "./globals.css"
import { ConvexClientProvider } from "./ConvexClientProvider" import { ConvexClientProvider } from "./ConvexClientProvider"
import { AuthProvider } from "@/lib/auth-client" import { AuthProvider } from "@/lib/auth-client"
import { Toaster } from "@/components/ui/sonner" import { Toaster } from "@/components/ui/sonner"
const inter = Inter({
subsets: ["latin"],
variable: "--font-geist-sans",
display: "swap",
})
const jetBrainsMono = JetBrains_Mono({
subsets: ["latin"],
variable: "--font-geist-mono",
display: "swap",
})
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Raven - Sistema de chamados", title: "Raven - Sistema de chamados",
description: "Plataforma Raven da Rever", description: "Plataforma Raven da Rever",
@ -41,9 +28,7 @@ export default async function RootLayout({
}>) { }>) {
return ( return (
<html lang="pt-BR" className="h-full"> <html lang="pt-BR" className="h-full">
<body <body className="min-h-screen bg-background text-foreground antialiased">
className={`${inter.variable} ${jetBrainsMono.variable} min-h-screen bg-background text-foreground antialiased`}
>
<ConvexClientProvider> <ConvexClientProvider>
<AuthProvider> <AuthProvider>
{children} {children}

View file

@ -296,12 +296,23 @@ export function AdminCompaniesManager({ initialCompanies, tenantId }: Props) {
const machines = useQuery(api.machines.listByTenant, { const machines = useQuery(api.machines.listByTenant, {
tenantId: effectiveTenantId, tenantId: effectiveTenantId,
includeMetadata: false, includeMetadata: false,
}) as Array<Record<string, unknown>> | undefined }) as unknown[] | undefined
function extractCompanySlug(entry: unknown): string | undefined {
if (!entry || typeof entry !== "object") {
return undefined
}
if ("companySlug" in entry) {
const value = (entry as { companySlug?: unknown }).companySlug
return typeof value === "string" && value.length > 0 ? value : undefined
}
return undefined
}
const machineCountsBySlug = useMemo(() => { const machineCountsBySlug = useMemo(() => {
const map: Record<string, number> = {} const map: Record<string, number> = {}
;(machines ?? []).forEach((m) => { ;(machines ?? []).forEach((entry) => {
const slug = (m as any)?.companySlug as string | undefined const slug = extractCompanySlug(entry)
if (!slug) return if (!slug) return
map[slug] = (map[slug] ?? 0) + 1 map[slug] = (map[slug] ?? 0) + 1
}) })
@ -934,7 +945,15 @@ function TableView({ companies, machineCountsBySlug, onEdit, onDelete }: TableVi
<PaginationPrevious disabled={pageIndex === 0} onClick={() => setPageIndex((p) => Math.max(0, p - 1))} /> <PaginationPrevious disabled={pageIndex === 0} onClick={() => setPageIndex((p) => Math.max(0, p - 1))} />
</PaginationItem> </PaginationItem>
<PaginationItem> <PaginationItem>
<PaginationLink isActive>{pageIndex + 1}</PaginationLink> <PaginationLink
href="#"
isActive
onClick={(event) => {
event.preventDefault()
}}
>
{pageIndex + 1}
</PaginationLink>
</PaginationItem> </PaginationItem>
<PaginationItem> <PaginationItem>
<PaginationNext disabled={pageIndex >= pageCount - 1} onClick={() => setPageIndex((p) => Math.min(pageCount - 1, p + 1))} /> <PaginationNext disabled={pageIndex >= pageCount - 1} onClick={() => setPageIndex((p) => Math.min(pageCount - 1, p + 1))} />

View file

@ -8,7 +8,6 @@ import { useAuth } from "@/lib/auth-client"
export function AuthGuard() { export function AuthGuard() {
// Podemos, se quisermos, ler isLoading para futuramente exibir um skeleton. // Podemos, se quisermos, ler isLoading para futuramente exibir um skeleton.
// No momento, não fazemos nada aqui. // No momento, não fazemos nada aqui.
// eslint-disable-next-line @typescript-eslint/no-unused-vars useAuth()
const { isLoading } = useAuth()
return null return null
} }

View file

@ -15,7 +15,7 @@
"moduleResolution": "bundler", "moduleResolution": "bundler",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"jsx": "preserve", "jsx": "react-jsx",
"incremental": true, "incremental": true,
"plugins": [ "plugins": [
{ {