diff --git a/playground-authjs/app.vue b/playground-authjs/app.vue
index 6ea39f5c..174c7a70 100644
--- a/playground-authjs/app.vue
+++ b/playground-authjs/app.vue
@@ -1,13 +1,23 @@
diff --git a/playground-local/package.json b/playground-local/package.json
index c25c44e0..b3209bab 100644
--- a/playground-local/package.json
+++ b/playground-local/package.json
@@ -16,10 +16,10 @@
"zod": "^3.23.8"
},
"devDependencies": {
- "@nuxt/test-utils": "^3.14.0",
- "@playwright/test": "^1.45.3",
+ "@nuxt/test-utils": "^3.14.1",
+ "@playwright/test": "^1.46.0",
"@types/jsonwebtoken": "^9.0.6",
- "@types/node": "^18.19.42",
+ "@types/node": "^18.19.44",
"@vue/test-utils": "^2.4.6",
"eslint": "^8.57.0",
"nuxt": "^3.12.4",
diff --git a/playground-refresh/package.json b/playground-refresh/package.json
index f7beb7fd..043868b7 100644
--- a/playground-refresh/package.json
+++ b/playground-refresh/package.json
@@ -16,8 +16,8 @@
"zod": "^3.23.8"
},
"devDependencies": {
- "@nuxt/test-utils": "^3.14.0",
- "@playwright/test": "^1.45.3",
+ "@nuxt/test-utils": "^3.14.1",
+ "@playwright/test": "^1.46.0",
"@types/jsonwebtoken": "^9.0.6",
"@vue/test-utils": "^2.4.6",
"eslint": "^8.57.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 607b421a..2e0ffeee 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -95,17 +95,17 @@ importers:
version: 3.23.8
devDependencies:
'@nuxt/test-utils':
- specifier: ^3.14.0
- version: 3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ specifier: ^3.14.1
+ version: 3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
'@playwright/test':
- specifier: ^1.45.3
- version: 1.45.3
+ specifier: ^1.46.0
+ version: 1.46.0
'@types/jsonwebtoken':
specifier: ^9.0.6
version: 9.0.6
'@types/node':
- specifier: ^18.19.42
- version: 18.19.42
+ specifier: ^18.19.44
+ version: 18.19.44
'@vue/test-utils':
specifier: ^2.4.6
version: 2.4.6
@@ -114,13 +114,13 @@ importers:
version: 8.57.0
nuxt:
specifier: ^3.12.4
- version: 3.12.4(@parcel/watcher@2.4.1)(@types/node@18.19.42)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4))
+ version: 3.12.4(@parcel/watcher@2.4.1)(@types/node@18.19.44)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4))
typescript:
specifier: ^5.5.4
version: 5.5.4
vitest:
specifier: ^1.6.0
- version: 1.6.0(@types/node@18.19.42)(terser@5.30.3)
+ version: 1.6.0(@types/node@18.19.44)(terser@5.30.3)
vue-tsc:
specifier: ^2.0.29
version: 2.0.29(typescript@5.5.4)
@@ -135,11 +135,11 @@ importers:
version: 3.23.8
devDependencies:
'@nuxt/test-utils':
- specifier: ^3.14.0
- version: 3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ specifier: ^3.14.1
+ version: 3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
'@playwright/test':
- specifier: ^1.45.3
- version: 1.45.3
+ specifier: ^1.46.0
+ version: 1.46.0
'@types/jsonwebtoken':
specifier: ^9.0.6
version: 9.0.6
@@ -1279,8 +1279,8 @@ packages:
resolution: {integrity: sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==}
hasBin: true
- '@nuxt/test-utils@3.14.0':
- resolution: {integrity: sha512-8HJOvGChQ70s6RKduKlrNABJXizNCLodBRbgepa4RYA3QFv2KrTxLvlHlhEUwd9r2E55LcQacv9P7Er47Z2GaA==}
+ '@nuxt/test-utils@3.14.1':
+ resolution: {integrity: sha512-D8F18hnOHQSarKnzsLORRXzFPlI9Y5fcQFRKwJgGhnejlIRX6sFvVnyl2SDgCvoV+F2x2czQsdGkwg51iWAshA==}
engines: {node: '>=18.20.4'}
peerDependencies:
'@cucumber/cucumber': ^10.3.1
@@ -1428,8 +1428,8 @@ packages:
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
- '@playwright/test@1.45.3':
- resolution: {integrity: sha512-UKF4XsBfy+u3MFWEH44hva1Q8Da28G6RFtR2+5saw+jgAFQV5yYnB1fu68Mz7fO+5GJF3wgwAIs0UelU8TxFrA==}
+ '@playwright/test@1.46.0':
+ resolution: {integrity: sha512-/QYft5VArOrGRP5pgkrfKksqsKA6CEFyGQ/gjNe6q0y4tZ1aaPfq4gIjudr1s3D+pXyrPRdsy4opKDrjBabE5w==}
engines: {node: '>=18'}
hasBin: true
@@ -1740,6 +1740,9 @@ packages:
'@types/node@18.19.42':
resolution: {integrity: sha512-d2ZFc/3lnK2YCYhos8iaNIYu9Vfhr92nHiyJHRltXWjXUBjEE+A4I58Tdbnw4VhggSW+2j5y5gTrLs4biNnubg==}
+ '@types/node@18.19.44':
+ resolution: {integrity: sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA==}
+
'@types/node@20.12.7':
resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==}
@@ -2332,6 +2335,9 @@ packages:
caniuse-lite@1.0.30001646:
resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==}
+ caniuse-lite@1.0.30001651:
+ resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==}
+
chai@4.4.1:
resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
engines: {node: '>=4'}
@@ -4233,13 +4239,13 @@ packages:
pkg-types@1.1.3:
resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==}
- playwright-core@1.45.3:
- resolution: {integrity: sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==}
+ playwright-core@1.46.0:
+ resolution: {integrity: sha512-9Y/d5UIwuJk8t3+lhmMSAJyNP1BUC/DqP3cQJDQQL/oWqAiuPTLgy7Q5dzglmTLwcBRdetzgNM/gni7ckfTr6A==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.45.3:
- resolution: {integrity: sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==}
+ playwright@1.46.0:
+ resolution: {integrity: sha512-XYJ5WvfefWONh1uPAUAi0H2xXV5S3vrtcnXe6uAOgdGi3aSpqOSXX08IAjXW34xitfuOJsvXU5anXZxPSEQiJw==}
engines: {node: '>=18'}
hasBin: true
@@ -5302,6 +5308,10 @@ packages:
resolution: {integrity: sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==}
engines: {node: '>=14.0.0'}
+ unplugin@1.12.1:
+ resolution: {integrity: sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==}
+ engines: {node: '>=14.0.0'}
+
unstorage@1.10.2:
resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==}
peerDependencies:
@@ -6702,12 +6712,12 @@ snapshots:
- rollup
- supports-color
- '@nuxt/devtools-kit@1.3.9(magicast@0.3.4)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))':
+ '@nuxt/devtools-kit@1.3.9(magicast@0.3.4)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))':
dependencies:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
'@nuxt/schema': 3.12.4(rollup@4.19.2)
execa: 7.2.0
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
transitivePeerDependencies:
- magicast
- rollup
@@ -6783,13 +6793,13 @@ snapshots:
- supports-color
- utf-8-validate
- '@nuxt/devtools@1.3.9(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))':
+ '@nuxt/devtools@1.3.9(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))':
dependencies:
'@antfu/utils': 0.7.10
- '@nuxt/devtools-kit': 1.3.9(magicast@0.3.4)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
+ '@nuxt/devtools-kit': 1.3.9(magicast@0.3.4)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
'@nuxt/devtools-wizard': 1.3.9
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
- '@vue/devtools-core': 7.3.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
+ '@vue/devtools-core': 7.3.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
'@vue/devtools-kit': 7.3.3
birpc: 0.2.17
consola: 3.2.3
@@ -6818,9 +6828,9 @@ snapshots:
simple-git: 3.25.0
sirv: 2.0.4
unimport: 3.9.1(rollup@4.19.2)
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
- vite-plugin-inspect: 0.8.5(@nuxt/kit@3.12.4(magicast@0.3.4)(rollup@4.19.2))(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
- vite-plugin-vue-inspector: 5.1.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vite-plugin-inspect: 0.8.5(@nuxt/kit@3.12.4(magicast@0.3.4)(rollup@4.19.2))(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
+ vite-plugin-vue-inspector: 5.1.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
which: 3.0.1
ws: 8.18.0
transitivePeerDependencies:
@@ -6958,7 +6968,7 @@ snapshots:
- rollup
- supports-color
- '@nuxt/test-utils@3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))':
+ '@nuxt/test-utils@3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))':
dependencies:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
'@nuxt/schema': 3.12.4(rollup@4.19.2)
@@ -6972,7 +6982,7 @@ snapshots:
get-port-please: 3.1.2
h3: 1.12.0
local-pkg: 0.5.0
- magic-string: 0.30.10
+ magic-string: 0.30.11
nitropack: 2.9.7(encoding@0.1.13)(magicast@0.3.4)
node-fetch-native: 1.6.4
ofetch: 1.3.4
@@ -6983,22 +6993,22 @@ snapshots:
std-env: 3.7.0
ufo: 1.5.4
unenv: 1.10.0
- unplugin: 1.12.0
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
- vitest-environment-nuxt: 1.0.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ unplugin: 1.12.1
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vitest-environment-nuxt: 1.0.0(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
vue: 3.4.35(typescript@5.5.4)
vue-router: 4.4.2(vue@3.4.35(typescript@5.5.4))
optionalDependencies:
- '@playwright/test': 1.45.3
+ '@playwright/test': 1.46.0
'@vue/test-utils': 2.4.6
- playwright-core: 1.45.3
- vitest: 1.6.0(@types/node@18.19.42)(terser@5.30.3)
+ playwright-core: 1.46.0
+ vitest: 1.6.0(@types/node@18.19.44)(terser@5.30.3)
transitivePeerDependencies:
- magicast
- rollup
- supports-color
- '@nuxt/test-utils@3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))':
+ '@nuxt/test-utils@3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))':
dependencies:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
'@nuxt/schema': 3.12.4(rollup@4.19.2)
@@ -7012,7 +7022,7 @@ snapshots:
get-port-please: 3.1.2
h3: 1.12.0
local-pkg: 0.5.0
- magic-string: 0.30.10
+ magic-string: 0.30.11
nitropack: 2.9.7(encoding@0.1.13)(magicast@0.3.4)
node-fetch-native: 1.6.4
ofetch: 1.3.4
@@ -7023,15 +7033,15 @@ snapshots:
std-env: 3.7.0
ufo: 1.5.4
unenv: 1.10.0
- unplugin: 1.12.0
+ unplugin: 1.12.1
vite: 5.3.5(@types/node@20.12.7)(terser@5.30.3)
- vitest-environment-nuxt: 1.0.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ vitest-environment-nuxt: 1.0.0(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
vue: 3.4.35(typescript@5.5.4)
vue-router: 4.4.2(vue@3.4.35(typescript@5.5.4))
optionalDependencies:
- '@playwright/test': 1.45.3
+ '@playwright/test': 1.46.0
'@vue/test-utils': 2.4.6
- playwright-core: 1.45.3
+ playwright-core: 1.46.0
vitest: 1.6.0(@types/node@20.12.7)(terser@5.30.3)
transitivePeerDependencies:
- magicast
@@ -7096,6 +7106,64 @@ snapshots:
- vti
- vue-tsc
+ '@nuxt/vite-builder@3.12.4(@types/node@18.19.44)(eslint@8.57.0)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vue-tsc@2.0.29(typescript@5.5.4))(vue@3.4.35(typescript@5.5.4))':
+ dependencies:
+ '@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
+ '@rollup/plugin-replace': 5.0.7(rollup@4.19.2)
+ '@vitejs/plugin-vue': 5.1.1(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))
+ '@vitejs/plugin-vue-jsx': 4.0.0(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))
+ autoprefixer: 10.4.19(postcss@8.4.40)
+ clear: 0.1.0
+ consola: 3.2.3
+ cssnano: 7.0.4(postcss@8.4.40)
+ defu: 6.1.4
+ esbuild: 0.23.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ externality: 1.0.2
+ get-port-please: 3.1.2
+ h3: 1.12.0
+ knitwork: 1.1.0
+ magic-string: 0.30.10
+ mlly: 1.7.1
+ ohash: 1.1.3
+ pathe: 1.1.2
+ perfect-debounce: 1.0.0
+ pkg-types: 1.1.3
+ postcss: 8.4.40
+ rollup-plugin-visualizer: 5.12.0(rollup@4.19.2)
+ std-env: 3.7.0
+ strip-literal: 2.1.0
+ ufo: 1.5.4
+ unenv: 1.10.0
+ unplugin: 1.12.0
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vite-node: 2.0.5(@types/node@18.19.44)(terser@5.30.3)
+ vite-plugin-checker: 0.7.2(eslint@8.57.0)(optionator@0.9.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4))
+ vue: 3.4.35(typescript@5.5.4)
+ vue-bundle-renderer: 2.1.0
+ transitivePeerDependencies:
+ - '@biomejs/biome'
+ - '@types/node'
+ - eslint
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - optionator
+ - rollup
+ - sass
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - typescript
+ - uWebSockets.js
+ - vls
+ - vti
+ - vue-tsc
+
'@nuxt/vite-builder@3.12.4(@types/node@20.12.7)(eslint@8.57.0)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vue-tsc@2.0.29(typescript@5.5.4))(vue@3.4.35(typescript@5.5.4))':
dependencies:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
@@ -7254,9 +7322,9 @@ snapshots:
'@pkgjs/parseargs@0.11.0':
optional: true
- '@playwright/test@1.45.3':
+ '@playwright/test@1.46.0':
dependencies:
- playwright: 1.45.3
+ playwright: 1.46.0
'@polka/url@1.0.0-next.25': {}
@@ -7279,7 +7347,7 @@ snapshots:
estree-walker: 2.0.2
glob: 8.1.0
is-reference: 1.2.1
- magic-string: 0.30.10
+ magic-string: 0.30.7
optionalDependencies:
rollup: 3.29.4
@@ -7339,7 +7407,7 @@ snapshots:
'@rollup/plugin-replace@5.0.5(rollup@3.29.4)':
dependencies:
'@rollup/pluginutils': 5.1.0(rollup@3.29.4)
- magic-string: 0.30.10
+ magic-string: 0.30.7
optionalDependencies:
rollup: 3.29.4
@@ -7509,7 +7577,7 @@ snapshots:
'@types/jsonwebtoken@9.0.6':
dependencies:
- '@types/node': 18.19.42
+ '@types/node': 18.19.44
'@types/linkify-it@5.0.0': {}
@@ -7524,6 +7592,10 @@ snapshots:
dependencies:
undici-types: 5.26.5
+ '@types/node@18.19.44':
+ dependencies:
+ undici-types: 5.26.5
+
'@types/node@20.12.7':
dependencies:
undici-types: 5.26.5
@@ -7682,6 +7754,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
+ '@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2)
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vue: 3.4.35(typescript@5.5.4)
+ transitivePeerDependencies:
+ - supports-color
+
'@vitejs/plugin-vue-jsx@4.0.0(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))':
dependencies:
'@babel/core': 7.25.2
@@ -7702,6 +7784,11 @@ snapshots:
vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
vue: 3.4.35(typescript@5.5.4)
+ '@vitejs/plugin-vue@5.1.1(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))':
+ dependencies:
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vue: 3.4.35(typescript@5.5.4)
+
'@vitejs/plugin-vue@5.1.1(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vue@3.4.35(typescript@5.5.4))':
dependencies:
vite: 5.3.5(@types/node@20.12.7)(terser@5.30.3)
@@ -7872,14 +7959,14 @@ snapshots:
transitivePeerDependencies:
- vite
- '@vue/devtools-core@7.3.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))':
+ '@vue/devtools-core@7.3.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))':
dependencies:
'@vue/devtools-kit': 7.3.5
'@vue/devtools-shared': 7.3.7
mitt: 3.0.1
nanoid: 3.3.7
pathe: 1.1.2
- vite-hot-client: 0.2.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
+ vite-hot-client: 0.2.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
transitivePeerDependencies:
- vite
@@ -8350,6 +8437,8 @@ snapshots:
caniuse-lite@1.0.30001646: {}
+ caniuse-lite@1.0.30001651: {}
+
chai@4.4.1:
dependencies:
assertion-error: 1.1.0
@@ -10092,7 +10181,7 @@ snapshots:
mlly@1.6.1:
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.1
pathe: 1.1.2
pkg-types: 1.0.3
ufo: 1.5.4
@@ -10142,7 +10231,7 @@ snapshots:
'@next/env': 13.5.6
'@swc/helpers': 0.5.2
busboy: 1.6.0
- caniuse-lite: 1.0.30001646
+ caniuse-lite: 1.0.30001651
postcss: 8.4.31
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -10417,14 +10506,14 @@ snapshots:
- vue-tsc
- xml2js
- nuxt@3.12.4(@parcel/watcher@2.4.1)(@types/node@18.19.42)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4)):
+ nuxt@3.12.4(@parcel/watcher@2.4.1)(@types/node@18.19.44)(encoding@0.1.13)(eslint@8.57.0)(ioredis@5.4.1)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4)):
dependencies:
'@nuxt/devalue': 2.0.2
- '@nuxt/devtools': 1.3.9(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))
+ '@nuxt/devtools': 1.3.9(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
'@nuxt/schema': 3.12.4(rollup@4.19.2)
'@nuxt/telemetry': 2.5.4(magicast@0.3.4)(rollup@4.19.2)
- '@nuxt/vite-builder': 3.12.4(@types/node@18.19.42)(eslint@8.57.0)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vue-tsc@2.0.29(typescript@5.5.4))(vue@3.4.35(typescript@5.5.4))
+ '@nuxt/vite-builder': 3.12.4(@types/node@18.19.44)(eslint@8.57.0)(magicast@0.3.4)(optionator@0.9.3)(rollup@4.19.2)(terser@5.30.3)(typescript@5.5.4)(vue-tsc@2.0.29(typescript@5.5.4))(vue@3.4.35(typescript@5.5.4))
'@unhead/dom': 1.9.16
'@unhead/ssr': 1.9.16
'@unhead/vue': 1.9.16(vue@3.4.35(typescript@5.5.4))
@@ -10480,7 +10569,7 @@ snapshots:
vue-router: 4.4.2(vue@3.4.35(typescript@5.5.4))
optionalDependencies:
'@parcel/watcher': 2.4.1
- '@types/node': 18.19.42
+ '@types/node': 18.19.44
transitivePeerDependencies:
- '@azure/app-configuration'
- '@azure/cosmos'
@@ -10947,11 +11036,11 @@ snapshots:
mlly: 1.7.1
pathe: 1.1.2
- playwright-core@1.45.3: {}
+ playwright-core@1.46.0: {}
- playwright@1.45.3:
+ playwright@1.46.0:
dependencies:
- playwright-core: 1.45.3
+ playwright-core: 1.46.0
optionalDependencies:
fsevents: 2.3.2
@@ -12093,6 +12182,13 @@ snapshots:
webpack-sources: 3.2.3
webpack-virtual-modules: 0.6.2
+ unplugin@1.12.1:
+ dependencies:
+ acorn: 8.12.1
+ chokidar: 3.6.0
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.6.2
+
unstorage@1.10.2(ioredis@5.4.1):
dependencies:
anymatch: 3.1.3
@@ -12135,7 +12231,7 @@ snapshots:
mlly: 1.7.1
pathe: 1.1.2
pkg-types: 1.1.3
- unplugin: 1.12.0
+ unplugin: 1.12.1
update-browserslist-db@1.0.13(browserslist@4.23.0):
dependencies:
@@ -12170,21 +12266,21 @@ snapshots:
dependencies:
vite: 5.3.3(@types/node@18.19.42)(terser@5.30.3)
- vite-hot-client@0.2.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3)):
+ vite-hot-client@0.2.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3)):
dependencies:
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
vite-hot-client@0.2.3(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3)):
dependencies:
vite: 5.3.5(@types/node@20.12.7)(terser@5.30.3)
- vite-node@1.6.0(@types/node@18.19.42)(terser@5.30.3):
+ vite-node@1.6.0(@types/node@18.19.44)(terser@5.30.3):
dependencies:
cac: 6.7.14
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
- vite: 5.2.9(@types/node@18.19.42)(terser@5.30.3)
+ vite: 5.2.9(@types/node@18.19.44)(terser@5.30.3)
transitivePeerDependencies:
- '@types/node'
- less
@@ -12229,6 +12325,23 @@ snapshots:
- supports-color
- terser
+ vite-node@2.0.5(@types/node@18.19.44)(terser@5.30.3):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.6
+ pathe: 1.1.2
+ tinyrainbow: 1.2.0
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vite-node@2.0.5(@types/node@20.12.7)(terser@5.30.3):
dependencies:
cac: 6.7.14
@@ -12269,6 +12382,29 @@ snapshots:
typescript: 5.5.4
vue-tsc: 2.0.29(typescript@5.5.4)
+ vite-plugin-checker@0.7.2(eslint@8.57.0)(optionator@0.9.3)(typescript@5.5.4)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4)):
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ commander: 8.3.0
+ fast-glob: 3.3.2
+ fs-extra: 11.2.0
+ npm-run-path: 4.0.1
+ strip-ansi: 6.0.1
+ tiny-invariant: 1.3.3
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
+ vscode-languageclient: 7.0.0
+ vscode-languageserver: 7.0.0
+ vscode-languageserver-textdocument: 1.0.12
+ vscode-uri: 3.0.8
+ optionalDependencies:
+ eslint: 8.57.0
+ optionator: 0.9.3
+ typescript: 5.5.4
+ vue-tsc: 2.0.29(typescript@5.5.4)
+
vite-plugin-checker@0.7.2(eslint@8.57.0)(optionator@0.9.3)(typescript@5.5.4)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vue-tsc@2.0.29(typescript@5.5.4)):
dependencies:
'@babel/code-frame': 7.24.7
@@ -12310,7 +12446,7 @@ snapshots:
- rollup
- supports-color
- vite-plugin-inspect@0.8.5(@nuxt/kit@3.12.4(magicast@0.3.4)(rollup@4.19.2))(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3)):
+ vite-plugin-inspect@0.8.5(@nuxt/kit@3.12.4(magicast@0.3.4)(rollup@4.19.2))(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.19.2)
@@ -12321,7 +12457,7 @@ snapshots:
perfect-debounce: 1.0.0
picocolors: 1.0.1
sirv: 2.0.4
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
optionalDependencies:
'@nuxt/kit': 3.12.4(magicast@0.3.4)(rollup@4.19.2)
transitivePeerDependencies:
@@ -12356,12 +12492,12 @@ snapshots:
'@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2)
'@vue/compiler-dom': 3.4.35
kolorist: 1.8.0
- magic-string: 0.30.11
+ magic-string: 0.30.10
vite: 5.3.3(@types/node@18.19.42)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-inspector@5.1.3(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3)):
+ vite-plugin-vue-inspector@5.1.3(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3)):
dependencies:
'@babel/core': 7.25.2
'@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.2)
@@ -12371,8 +12507,8 @@ snapshots:
'@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2)
'@vue/compiler-dom': 3.4.35
kolorist: 1.8.0
- magic-string: 0.30.11
- vite: 5.3.5(@types/node@18.19.42)(terser@5.30.3)
+ magic-string: 0.30.10
+ vite: 5.3.5(@types/node@18.19.44)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
@@ -12386,18 +12522,18 @@ snapshots:
'@vue/babel-plugin-jsx': 1.2.2(@babel/core@7.25.2)
'@vue/compiler-dom': 3.4.35
kolorist: 1.8.0
- magic-string: 0.30.11
+ magic-string: 0.30.10
vite: 5.3.5(@types/node@20.12.7)(terser@5.30.3)
transitivePeerDependencies:
- supports-color
- vite@5.2.9(@types/node@18.19.42)(terser@5.30.3):
+ vite@5.2.9(@types/node@18.19.44)(terser@5.30.3):
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.14.3
optionalDependencies:
- '@types/node': 18.19.42
+ '@types/node': 18.19.44
fsevents: 2.3.3
terser: 5.30.3
@@ -12431,6 +12567,16 @@ snapshots:
fsevents: 2.3.3
terser: 5.30.3
+ vite@5.3.5(@types/node@18.19.44)(terser@5.30.3):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.4.40
+ rollup: 4.19.2
+ optionalDependencies:
+ '@types/node': 18.19.44
+ fsevents: 2.3.3
+ terser: 5.30.3
+
vite@5.3.5(@types/node@20.12.7)(terser@5.30.3):
dependencies:
esbuild: 0.21.5
@@ -12488,9 +12634,9 @@ snapshots:
- typescript
- universal-cookie
- vitest-environment-nuxt@1.0.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4)):
+ vitest-environment-nuxt@1.0.0(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4)):
dependencies:
- '@nuxt/test-utils': 3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.42)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ '@nuxt/test-utils': 3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@18.19.44)(terser@5.30.3))(vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
transitivePeerDependencies:
- '@cucumber/cucumber'
- '@jest/globals'
@@ -12511,9 +12657,9 @@ snapshots:
- vue
- vue-router
- vitest-environment-nuxt@1.0.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4)):
+ vitest-environment-nuxt@1.0.0(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4)):
dependencies:
- '@nuxt/test-utils': 3.14.0(@playwright/test@1.45.3)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.45.3)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
+ '@nuxt/test-utils': 3.14.1(@playwright/test@1.46.0)(@vue/test-utils@2.4.6)(h3@1.12.0)(magicast@0.3.4)(nitropack@2.9.7(encoding@0.1.13)(magicast@0.3.4))(playwright-core@1.46.0)(rollup@4.19.2)(vite@5.3.5(@types/node@20.12.7)(terser@5.30.3))(vitest@1.6.0(@types/node@20.12.7)(terser@5.30.3))(vue-router@4.4.2(vue@3.4.35(typescript@5.5.4)))(vue@3.4.35(typescript@5.5.4))
transitivePeerDependencies:
- '@cucumber/cucumber'
- '@jest/globals'
@@ -12534,7 +12680,7 @@ snapshots:
- vue
- vue-router
- vitest@1.6.0(@types/node@18.19.42)(terser@5.30.3):
+ vitest@1.6.0(@types/node@18.19.44)(terser@5.30.3):
dependencies:
'@vitest/expect': 1.6.0
'@vitest/runner': 1.6.0
@@ -12553,11 +12699,11 @@ snapshots:
strip-literal: 2.0.0
tinybench: 2.6.0
tinypool: 0.8.4
- vite: 5.2.9(@types/node@18.19.42)(terser@5.30.3)
- vite-node: 1.6.0(@types/node@18.19.42)(terser@5.30.3)
+ vite: 5.2.9(@types/node@18.19.44)(terser@5.30.3)
+ vite-node: 1.6.0(@types/node@18.19.44)(terser@5.30.3)
why-is-node-running: 2.2.2
optionalDependencies:
- '@types/node': 18.19.42
+ '@types/node': 18.19.44
transitivePeerDependencies:
- less
- lightningcss
diff --git a/src/runtime/server/services/authjs/nuxtAuthHandler.ts b/src/runtime/server/services/authjs/nuxtAuthHandler.ts
index 55690cf0..8da8c206 100644
--- a/src/runtime/server/services/authjs/nuxtAuthHandler.ts
+++ b/src/runtime/server/services/authjs/nuxtAuthHandler.ts
@@ -1,11 +1,11 @@
import type { IncomingHttpHeaders } from 'http'
-import { getQuery, setCookie, readBody, sendRedirect, eventHandler, parseCookies, createError, isMethod, getHeaders, getResponseHeader, setResponseHeader } from 'h3'
+import { getQuery, setCookie, readBody, sendRedirect, eventHandler, parseCookies, createError, isMethod, getHeaders, getResponseHeader, setResponseHeader, getRequestHost, getRequestProtocol } from 'h3'
import type { H3Event } from 'h3'
import type { CookieSerializeOptions } from 'cookie-es'
import { AuthHandler } from 'next-auth/core'
-import { getToken as nextGetToken } from 'next-auth/jwt'
-import type { RequestInternal } from 'next-auth/core'
+import { getToken as authjsGetToken } from 'next-auth/jwt'
+import type { RequestInternal, ResponseInternal } from 'next-auth/core'
import type { AuthAction, AuthOptions, Session } from 'next-auth'
import type { GetTokenParams } from 'next-auth/jwt'
@@ -13,57 +13,18 @@ import { defu } from 'defu'
import { joinURL } from 'ufo'
import { ERROR_MESSAGES } from '../errors'
import { isNonEmptyObject } from '../../../utils/checkSessionResult'
-import { getServerOrigin, getRequestURLFromRequest } from '../utils'
+import { getServerOrigin } from '../utils'
import { useTypedBackendConfig } from '../../../helpers'
import { useRuntimeConfig } from '#imports'
-let preparedAuthHandler: ReturnType | undefined
+let preparedAuthjsHandler: ((req: RequestInternal) => Promise) | undefined
let usedSecret: string | undefined
-const SUPPORTED_ACTIONS: AuthAction[] = ['providers', 'session', 'csrf', 'signin', 'signout', 'callback', 'verify-request', 'error', '_log']
-
-const useConfig = () => useTypedBackendConfig(useRuntimeConfig(), 'authjs')
-
-/**
- * Parse a body if the request method is supported, return `undefined` otherwise.
-
-* @param event H3Event event to read body of
- */
-const readBodyForNext = async (event: H3Event) => {
- let body: any
-
- if (isMethod(event, ['PATCH', 'POST', 'PUT', 'DELETE'])) {
- body = await readBody(event)
- }
- return body
-}
-
-/**
- * Get action and optional provider from a request.
- *
- * E.g., with a request like `/api/signin/github` get the action `signin` with the provider `github`
- */
-const parseActionAndProvider = ({ context }: H3Event): { action: AuthAction, providerId: string | undefined } => {
- const params: string[] | undefined = context.params?._?.split('/')
-
- if (!params || ![1, 2].includes(params.length)) {
- throw createError({ statusCode: 400, statusMessage: `Invalid path used for auth-endpoint. Supply either one path parameter (e.g., \`/api/auth/session\`) or two (e.g., \`/api/auth/signin/github\` after the base path (in previous examples base path was: \`/api/auth/\`. Received \`${params}\`` })
- }
-
- const [unvalidatedAction, providerId] = params
-
- // Get TS to correctly infer the type of `unvalidatedAction`
- const action = SUPPORTED_ACTIONS.find(action => action === unvalidatedAction)
- if (!action) {
- throw createError({ statusCode: 400, statusMessage: `Called endpoint with unsupported action ${unvalidatedAction}. Only the following actions are supported: ${SUPPORTED_ACTIONS.join(', ')}` })
- }
-
- return { action, providerId }
-}
/** Setup the nuxt (next) auth event handler, based on the passed in options */
-export const NuxtAuthHandler = (nuxtAuthOptions?: AuthOptions) => {
+export function NuxtAuthHandler (nuxtAuthOptions?: AuthOptions) {
const isProduction = process.env.NODE_ENV === 'production'
+ const trustHostUserPreference = useTypedBackendConfig(useRuntimeConfig(), 'authjs').trustHost
usedSecret = nuxtAuthOptions?.secret
if (!usedSecret) {
@@ -79,73 +40,33 @@ export const NuxtAuthHandler = (nuxtAuthOptions?: AuthOptions) => {
secret: usedSecret,
logger: undefined,
providers: [],
- trustHost: useConfig().trustHost
- })
- /**
- * Generate a NextAuth.js internal request object that we can pass into the NextAuth.js
- * handler. This method will either try to fill all fields for a request that targets
- * the auth-REST API or return a minimal internal request to support server-side
- * session fetching for requests with arbitrary, non auth-REST API
- * targets (set via: `event.context.checkSessionOnNonAuthRequest = true`)
- *
- * @param event H3Event event to transform into `RequestInternal`
- */
- const getInternalNextAuthRequestData = async (event: H3Event): Promise => {
- const nextRequest: Omit = {
- host: getRequestURLFromRequest(event, { trustHost: useConfig().trustHost }),
- body: undefined,
- cookies: parseCookies(event),
- query: undefined,
- headers: getHeaders(event),
- method: event.method,
- providerId: undefined,
- error: undefined
- }
-
- // Setting `event.context.checkSessionOnNonAuthRequest = true` allows callers of `authHandler`.
- // We can use this to check session status on the server-side.
- //
- // When doing this, most other data is not required, e.g., we do not need to parse the body. For this reason,
- // we return the minimum required data for session checking.
- if (event.context.checkSessionOnNonAuthRequest === true) {
- return {
- ...nextRequest,
- method: 'GET',
- action: 'session'
- }
- }
+ // SAFETY: We trust host here because `getRequestURLFromH3Event` is responsible for producing a trusted URL
+ trustHost: true,
- // Figure out what action, providerId (optional) and error (optional) of the NextAuth.js lib is targeted
- const query = getQuery(event)
- const { action, providerId } = parseActionAndProvider(event)
- const error = query.error
- if (Array.isArray(error)) {
- throw createError({ statusCode: 400, statusMessage: 'Error query parameter can only appear once' })
- }
+ // AuthJS uses `/auth` as default, but we rely on `/api/auth` (same as in previous `next-auth`)
+ basePath: '/api/auth'
- const body = await readBodyForNext(event)
+ // Uncomment to enable framework-author specific functionality
+ // raw: raw as typeof raw
+ })
- return {
- ...nextRequest,
- body,
- query,
- action,
- providerId,
- error: error ? String(error) : undefined
- }
+ // Save handler so that it can be used in other places
+ if (preparedAuthjsHandler) {
+ console.error('You setup the auth handler for a second time - this is likely undesired. Make sure that you only call `NuxtAuthHandler( ... )` once')
}
- const handler = eventHandler(async (event: H3Event) => {
+ preparedAuthjsHandler = (req: RequestInternal) => AuthHandler({ req, options })
+
+ return eventHandler(async (event: H3Event) => {
const { res } = event.node
- // 1. Assemble and perform request to the NextAuth.js auth handler
- const nextRequest = await getInternalNextAuthRequestData(event)
+ // 1.1. Assemble and perform request to the NextAuth.js auth handler
+ const nextRequest = await createRequestForAuthjs(event, trustHostUserPreference)
- const nextResult = await AuthHandler({
- req: nextRequest,
- options
- })
+ // 1.2. Call Authjs
+ // Safety: `preparedAuthjsHandler` was assigned earlier and never re-assigned
+ const nextResult = await preparedAuthjsHandler!(nextRequest)
// 2. Set response status, headers, cookies
if (nextResult.status) {
@@ -155,7 +76,7 @@ export const NuxtAuthHandler = (nuxtAuthOptions?: AuthOptions) => {
nextResult.headers?.forEach(header => appendHeaderDeduped(event, header.key, header.value))
// 3. Return either:
- // 3.1 the body directly if no redirect is set:
+ // 3.1. the body directly if no redirect is set:
if (!nextResult.redirect) {
return nextResult.body
}
@@ -175,37 +96,52 @@ export const NuxtAuthHandler = (nuxtAuthOptions?: AuthOptions) => {
// 3.3 via a redirect:
return await sendRedirect(event, nextResult.redirect)
})
-
- // Save handler so that it can be used in other places
- if (preparedAuthHandler) {
- console.warn('You setup the auth handler for a second time - this is likely undesired. Make sure that you only call `NuxtAuthHandler( ... )` once')
- }
- preparedAuthHandler = handler
- return handler
}
-export const getServerSession = async (event: H3Event) => {
- const authBasePath = useRuntimeConfig().public.auth.computed.pathname
+/** Gets session on server-side */
+export async function getServerSession (event: H3Event) {
+ const runtimeConfig = useRuntimeConfig()
+ const authBasePath = runtimeConfig.public.auth.computed.pathname
+ const trustHostUserPreference = useTypedBackendConfig(runtimeConfig, 'authjs').trustHost
// avoid running auth middleware on auth middleware (see #186)
if (event.path && event.path.startsWith(authBasePath)) {
return null
}
- if (!preparedAuthHandler) {
- const headers = getHeaders(event) as HeadersInit
- // Edge-case: If no auth-endpoint was called yet, `preparedAuthHandler`-initialization was also not attempted as Nuxt lazily loads endpoints in production-mode. This call gives it a chance to load + initialize the variable. If it fails we still throw. This edge-case has happened to user matijao#7025 on discord.
- await $fetch(joinURL(authBasePath, '/session'), { headers }).catch(error => error.data)
- if (!preparedAuthHandler) {
+ const sessionUrlPath = joinURL(authBasePath, '/session')
+ const headers = getHeaders(event) as HeadersInit
+ if (!preparedAuthjsHandler) {
+ // Edge-case: If no auth-endpoint was called yet, `preparedAuthHandler`-initialization was also not attempted as Nuxt lazily loads endpoints in production-mode.
+ // This call gives it a chance to load + initialize the variable. If it fails we still throw. This edge-case has happened to user matijao#7025 on discord.
+ await $fetch(sessionUrlPath, { headers }).catch(error => error.data)
+ if (!preparedAuthjsHandler) {
throw createError({ statusCode: 500, statusMessage: 'Tried to get server session without setting up an endpoint to handle authentication (see https://github.com/sidebase/nuxt-auth#quick-start)' })
}
}
- // Run a session check on the event with an arbitrary target endpoint
- event.context.checkSessionOnNonAuthRequest = true
- const session = await preparedAuthHandler(event)
- delete event.context.checkSessionOnNonAuthRequest
+ // Build a correct endpoint
+ const sessionUrlBase = getRequestBaseFromH3Event(event, trustHostUserPreference)
+ const sessionUrl = new URL(sessionUrlPath, sessionUrlBase)
+ // Create a virtual Request to check the session
+ const authjsRequest: RequestInternal = {
+ action: 'session',
+ method: 'GET',
+ headers,
+ body: undefined,
+ cookies: parseCookies(event),
+ providerId: undefined,
+ error: undefined,
+ host: sessionUrl.origin,
+ query: Object.fromEntries(sessionUrl.searchParams)
+ }
+
+ // Invoke Auth.js
+ const authjsResponse = await preparedAuthjsHandler(authjsRequest)
+
+ // Get the body of response
+ const session = authjsResponse.body
if (isNonEmptyObject(session)) {
return session as Session
}
@@ -216,21 +152,133 @@ export const getServerSession = async (event: H3Event) => {
/**
* Get the decoded JWT token either from cookies or header (both are attempted).
*
- * The only change from the original `getToken` implementation is that the `req` is not passed in, in favor of `event` being passed in. See https://next-auth.js.org/tutorials/securing-pages-and-api-routes#using-gettoken for further documentation.
+ * The only change from the original `getToken` implementation is that the `req` is not passed in, in favor of `event` being passed in.
+ * See https://next-auth.js.org/tutorials/securing-pages-and-api-routes#using-gettoken for further documentation.
+ *
+ * @param eventAndOptions The event to get the cookie or authorization header from that contains the JWT Token and options you want to alter token getting behavior.
+ */
+export function getToken ({ event, secureCookie, secret, ...rest }: Omit, 'req'> & { event: H3Event }) {
+ return authjsGetToken({
+ // @ts-expect-error As our request is not a real next-auth request, we pass down only what's required for the method, as per code from https://github.com/nextauthjs/next-auth/blob/8387c78e3fef13350d8a8c6102caeeb05c70a650/packages/next-auth/src/jwt/index.ts#L68
+ req: {
+ cookies: parseCookies(event),
+ headers: getHeaders(event) as IncomingHttpHeaders
+ },
+ // see https://github.com/nextauthjs/next-auth/blob/8387c78e3fef13350d8a8c6102caeeb05c70a650/packages/next-auth/src/jwt/index.ts#L73
+ secureCookie: secureCookie ?? getServerOrigin(event).startsWith('https://'),
+ secret: secret || usedSecret,
+ ...rest
+ })
+}
+
+/**
+ * Generate an Auth.js request object that can be passed into the handler.
+ * This method should only be used for authentication endpoints.
*
- * @param eventAndOptions Omit & { event: H3Event } The event to get the cookie or authorization header from that contains the JWT Token and options you want to alter token getting behavior.
+ * @param event H3Event to transform into `RequestInternal`
*/
-export const getToken = ({ event, secureCookie, secret, ...rest }: Omit, 'req'> & { event: H3Event }) => nextGetToken({
- // @ts-expect-error As our request is not a real next-auth request, we pass down only what's required for the method, as per code from https://github.com/nextauthjs/next-auth/blob/8387c78e3fef13350d8a8c6102caeeb05c70a650/packages/next-auth/src/jwt/index.ts#L68
- req: {
+async function createRequestForAuthjs (event: H3Event, trustHostUserPreference: boolean): Promise {
+ const nextRequest: Omit = {
+ host: getRequestURLFromH3Event(event, trustHostUserPreference).origin,
+ body: undefined,
cookies: parseCookies(event),
- headers: getHeaders(event) as IncomingHttpHeaders
- },
- // see https://github.com/nextauthjs/next-auth/blob/8387c78e3fef13350d8a8c6102caeeb05c70a650/packages/next-auth/src/jwt/index.ts#L73
- secureCookie: secureCookie ?? getServerOrigin(event).startsWith('https://'),
- secret: secret || usedSecret,
- ...rest
-})
+ query: undefined,
+ headers: getHeaders(event),
+ method: event.method,
+ providerId: undefined,
+ error: undefined
+ }
+
+ // Figure out what action, providerId (optional) and error (optional) of the NextAuth.js lib is targeted
+ const query = getQuery(event)
+ const { action, providerId } = parseActionAndProvider(event)
+ const error = query.error
+ if (Array.isArray(error)) {
+ throw createError({ statusCode: 400, statusMessage: 'Error query parameter can only appear once' })
+ }
+
+ // Parse a body if the request method is supported, use `undefined` otherwise
+ const body = isMethod(event, ['PATCH', 'POST', 'PUT', 'DELETE'])
+ ? await readBody(event)
+ : undefined
+
+ return {
+ ...nextRequest,
+ body,
+ query,
+ action,
+ providerId,
+ error: error ? String(error) : undefined
+ }
+}
+
+/**
+ * Get the request url or construct it.
+ * Adapted from `h3` to also account for server origin.
+ *
+ * ## WARNING
+ * Please ensure that any URL produced by this function has a trusted host!
+ *
+ * @param trustHost Whether the host can be trusted. If `true`, base will be inferred from the request, otherwise the configured origin will be used.
+ * @throws {Error} When server origin was incorrectly configured or when URL building failed
+ */
+function getRequestURLFromH3Event (event: H3Event, trustHost: boolean): URL {
+ const path = (event.node.req.originalUrl || event.path).replace(
+ /^[/\\]+/g,
+ '/'
+ )
+ const base = getRequestBaseFromH3Event(event, trustHost)
+ return new URL(path, base)
+}
+
+/**
+ * Gets the request base in the form of origin.
+ *
+ * ## WARNING
+ * Please ensure that any URL produced by this function has a trusted host!
+ *
+ * @param trustHost Whether the host can be trusted. If `true`, base will be inferred from the request, otherwise the configured origin will be used.
+ * @throws {Error} When server origin was incorrectly configured
+ */
+function getRequestBaseFromH3Event (event: H3Event, trustHost: boolean): string {
+ if (trustHost) {
+ const host = getRequestHost(event, { xForwardedHost: trustHost })
+ const protocol = getRequestProtocol(event)
+
+ return `${protocol}://${host}`
+ } else {
+ // This may throw, we don't catch it
+ const origin = getServerOrigin(event)
+
+ return origin
+ }
+}
+
+/** Actions supported by auth handler */
+const SUPPORTED_ACTIONS: AuthAction[] = ['providers', 'session', 'csrf', 'signin', 'signout', 'callback', 'verify-request', 'error', '_log']
+
+/**
+ * Get action and optional provider from a request.
+ *
+ * E.g. with a request like `/api/signin/github` get the action `signin` with the provider `github`
+ */
+function parseActionAndProvider ({ context }: H3Event): { action: AuthAction; providerId: string | undefined} {
+ const params: string[] | undefined = context.params?._?.split('/')
+
+ if (!params || ![1, 2].includes(params.length)) {
+ throw createError({ statusCode: 400, statusMessage: `Invalid path used for auth-endpoint. Supply either one path parameter (e.g., \`/api/auth/session\`) or two (e.g., \`/api/auth/signin/github\` after the base path (in previous examples base path was: \`/api/auth/\`. Received \`${params}\`` })
+ }
+
+ const [unvalidatedAction, providerId] = params
+
+ // Get TS to correctly infer the type of `unvalidatedAction`
+ const action = SUPPORTED_ACTIONS.find(action => action === unvalidatedAction)
+ if (!action) {
+ throw createError({ statusCode: 400, statusMessage: `Called endpoint with unsupported action ${unvalidatedAction}. Only the following actions are supported: ${SUPPORTED_ACTIONS.join(', ')}` })
+ }
+
+ return { action, providerId }
+}
/** Adapted from `h3` to fix https://github.com/sidebase/nuxt-auth/issues/523 */
function appendHeaderDeduped (event: H3Event, name: string, value: string) {
diff --git a/src/runtime/server/services/utils.ts b/src/runtime/server/services/utils.ts
index 17a34bfe..ce9ca768 100644
--- a/src/runtime/server/services/utils.ts
+++ b/src/runtime/server/services/utils.ts
@@ -1,6 +1,5 @@
import { H3Event } from 'h3'
import getURL from 'requrl'
-import { joinURL } from 'ufo'
import { camelCase } from 'scule'
import { isProduction } from '../../helpers'
import { ERROR_MESSAGES } from './errors'
@@ -9,13 +8,13 @@ import { useRuntimeConfig } from '#imports'
/**
* Get `origin` and fallback to `x-forwarded-host` or `host` headers if not in production.
*/
-export const getServerOrigin = (event?: H3Event): string => {
+export function getServerOrigin (event?: H3Event): string {
const config = useRuntimeConfig()
// Prio 1: Environment variable
- const envOriginKey = config.public.auth.originEnvKey!
- const envOriginKeyCamelcase = camelCase(envOriginKey, { normalize: true })
- const envOrigin = (config[envOriginKeyCamelcase] ?? process.env[envOriginKey]) as string | undefined
+ const envOriginKey = config.public.auth.originEnvKey
+ const envFromRuntimeConfig = extractFromRuntimeConfig(config, envOriginKey)
+ const envOrigin = envFromRuntimeConfig ?? process.env[envOriginKey]
if (envOrigin) {
return envOrigin
}
@@ -34,20 +33,16 @@ export const getServerOrigin = (event?: H3Event): string => {
throw new Error(ERROR_MESSAGES.NO_ORIGIN)
}
-/** Get the request url or construct it */
-export const getRequestURLFromRequest = (event: H3Event, { trustHost }: { trustHost: boolean }): string | undefined => {
- if (trustHost) {
- const forwardedValue = getURL(event.node.req)
- if (forwardedValue) {
- return Array.isArray(forwardedValue) ? forwardedValue[0] : forwardedValue
- }
- }
+type RuntimeConfig = ReturnType
- let origin
- try {
- origin = getServerOrigin(event)
- } catch (error) {
- return undefined
- }
- return joinURL(origin, useRuntimeConfig().public.auth.computed.pathname)
+function extractFromRuntimeConfig (config: RuntimeConfig, envVariableName: string): string | undefined {
+ let normalized = envVariableName.startsWith('NUXT_')
+ ? envVariableName.slice(5)
+ : envVariableName
+ normalized = camelCase(normalized, { normalize: true })
+
+ const extracted = config[normalized]
+ return typeof extracted === 'string'
+ ? extracted
+ : undefined
}
diff --git a/src/runtime/types.ts b/src/runtime/types.ts
index c84ed37d..aa3b4c2b 100644
--- a/src/runtime/types.ts
+++ b/src/runtime/types.ts
@@ -587,6 +587,7 @@ export interface ModuleOptionsNormalized extends ModuleOptions {
provider: Required>
sessionRefresh: NonNullable
globalAppMiddleware: NonNullable
+ originEnvKey: string
computed: {
origin: string | undefined
diff --git a/src/runtime/utils/checkSessionResult.ts b/src/runtime/utils/checkSessionResult.ts
index 74d654cb..6677b41f 100644
--- a/src/runtime/utils/checkSessionResult.ts
+++ b/src/runtime/utils/checkSessionResult.ts
@@ -1 +1 @@
-export const isNonEmptyObject = (obj: any) => typeof obj === 'object' && Object.keys(obj).length > 0
+export const isNonEmptyObject = (obj: any) => typeof obj === 'object' && obj !== null && Object.keys(obj).length > 0