feat: add passkey configuration and tests for auth plugins

docs: implement comprehensive account center plan for cfw-auth
This commit is contained in:
2026-06-10 02:39:09 -07:00
parent d3105fa94f
commit 29551e1cbc
4 changed files with 1591 additions and 2 deletions

239
pnpm-lock.yaml generated
View File

@@ -8,6 +8,9 @@ importers:
.:
dependencies:
'@better-auth/passkey':
specifier: ^1.6.16
version: 1.6.16(@better-auth/core@1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(better-auth@1.6.16(@cloudflare/workers-types@4.20260610.1)(vitest@3.2.6))(better-call@1.3.6(zod@4.4.3))(nanostores@1.3.0)
better-auth:
specifier: ^1.6.0
version: 1.6.16(@cloudflare/workers-types@4.20260610.1)(vitest@3.2.6)
@@ -83,6 +86,16 @@ packages:
mongodb:
optional: true
'@better-auth/passkey@1.6.16':
resolution: {integrity: sha512-UpDcQmu4fNCHtQ/maFjsdbfeLPu1rzlTSqfpAUhMYGFK/wzHdA1TqWvimmOgAYBbv+mIv5IGOQ6pTC4gzJJj2Q==}
peerDependencies:
'@better-auth/core': ^1.6.16
'@better-auth/utils': 0.4.1
'@better-fetch/fetch': 1.2.2
better-auth: ^1.6.16
better-call: 1.3.6
nanostores: ^1.0.1
'@better-auth/prisma-adapter@1.6.16':
resolution: {integrity: sha512-2bIlA7wjBx+4N2QcM32xL/YojRuJpDvskXqT/dGYKToDIEl/7yr12cLYlqeaFLL0O0s5qNZ8jbDtlCz20eogeQ==}
peerDependencies:
@@ -474,6 +487,9 @@ packages:
cpu: [x64]
os: [win32]
'@hexagon/base64@1.1.28':
resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==}
'@img/colour@1.1.0':
resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==}
engines: {node: '>=18'}
@@ -637,6 +653,9 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@levischuck/tiny-cbor@0.2.11':
resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==}
'@noble/ciphers@2.2.0':
resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==}
engines: {node: '>= 20.19.0'}
@@ -649,6 +668,46 @@ packages:
resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==}
engines: {node: '>=14'}
'@peculiar/asn1-android@2.7.0':
resolution: {integrity: sha512-iD3VskhVQnM4nE3PN9cBdPTR7JrqZy3FYk+uD2CeG6DUqKoANqaEfx0f7izPmW+Qm5JBM35ek+viLCmjy18ByQ==}
'@peculiar/asn1-cms@2.7.0':
resolution: {integrity: sha512-hew63shtzzvBcSHbhm+cyAmKe6AIfinT9hzEqSPjDC6opTTMKmTkQ0gHuN2KsWlvqiKw1S/fS94fhag/FJkioQ==}
'@peculiar/asn1-csr@2.7.0':
resolution: {integrity: sha512-VVsAyGqErT9D1SY4aEqozThXMVI+ssVRiv2DDeYuvpBKLIgZ3hYs3Ay3u/VSoKq6ESFi9cf6rf3IOOzfwh7oMA==}
'@peculiar/asn1-ecc@2.7.0':
resolution: {integrity: sha512-n7KEs/Q/wrB415cxy4fHOBhegp4NdJ15fkJPwcB/3/8iNBQC2L/N7SChJPKDJPZGYH0jD4Tg4/0vnHmwghnbKw==}
'@peculiar/asn1-pfx@2.7.0':
resolution: {integrity: sha512-V/nrlQVmhg7lYAsM7E13UDL5erAwFv6kCIVFqNaMIHSVi7dngcT839JkRTkQBqznMG98l2XjxYk74ZztAohZzA==}
'@peculiar/asn1-pkcs8@2.7.0':
resolution: {integrity: sha512-9GTl1nE8Mx1kTZ+7QyYatDyKsm34QcWRBFkY1iPvWC3X4Dona5s/tlLiQsx5WzVdZqiMBZNYT0buyw4/vbhnjw==}
'@peculiar/asn1-pkcs9@2.7.0':
resolution: {integrity: sha512-Bh7m+OuIaSEllPQcSd9OSp93F4ROWH7sbITWV8MI+8dwsjE5111/87VxiWVvYFKyww3vp39geLv9ENqhwWHcew==}
'@peculiar/asn1-rsa@2.7.0':
resolution: {integrity: sha512-/qvENQrXyTZURjMqSeofHul0JJt2sNSzSwk36pl2olkHbaioMQgrASDZAlHXl0xUlnVbHj0uGgOrBMTb5x2aJQ==}
'@peculiar/asn1-schema@2.7.0':
resolution: {integrity: sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==}
'@peculiar/asn1-x509-attr@2.7.0':
resolution: {integrity: sha512-NS8e7SOgXipkzUPLF/sce7ukpMpWjhxYsH0n6Y+bHYo4TTxOb95Zv7hqwSuL212mj5YxovjdOKQOgH1As3E94w==}
'@peculiar/asn1-x509@2.7.0':
resolution: {integrity: sha512-mUn9RRrkGDnG4ALfunDmzyRW5dg+sWCj/pfnCCqEHYbkGxEpvUt6iVJv8Yw1cyp6SWZ26ZE5oSmI5SqEaen15g==}
'@peculiar/utils@2.0.3':
resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==}
'@peculiar/x509@1.14.3':
resolution: {integrity: sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==}
engines: {node: '>=20.0.0'}
'@poppinss/colors@4.1.6':
resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
@@ -796,6 +855,13 @@ packages:
cpu: [x64]
os: [win32]
'@simplewebauthn/browser@13.3.0':
resolution: {integrity: sha512-BE/UWv6FOToAdVk0EokzkqQQDOWtNydYlY6+OrmiZ5SCNmb41VehttboTetUM3T/fr6EAFYVXjz4My2wg230rQ==}
'@simplewebauthn/server@13.3.1':
resolution: {integrity: sha512-GV/oM/qeycWn8p42JZIMJBsXWQcNFg+nJFzeQTnMA4gN8mXg0+HZFWJerHg8ZN/zlveMS3iV1wzuFpOVWS/46w==}
engines: {node: '>=20.0.0'}
'@sindresorhus/is@7.2.0':
resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
engines: {node: '>=18'}
@@ -844,6 +910,10 @@ packages:
'@vitest/utils@3.2.6':
resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==}
asn1js@3.0.10:
resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==}
engines: {node: '>=12.0.0'}
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
@@ -1056,6 +1126,16 @@ packages:
resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
engines: {node: ^10 || ^12 || >=14}
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
pvutils@1.1.5:
resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
engines: {node: '>=16.0.0'}
reflect-metadata@0.2.2:
resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
rollup@4.61.1:
resolution: {integrity: sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -1118,9 +1198,16 @@ packages:
resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
engines: {node: '>=14.0.0'}
tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
tsyringe@4.10.0:
resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==}
engines: {node: '>= 6.0.0'}
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -1285,6 +1372,18 @@ snapshots:
'@better-auth/core': 1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)
'@better-auth/utils': 0.4.1
'@better-auth/passkey@1.6.16(@better-auth/core@1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(better-auth@1.6.16(@cloudflare/workers-types@4.20260610.1)(vitest@3.2.6))(better-call@1.3.6(zod@4.4.3))(nanostores@1.3.0)':
dependencies:
'@better-auth/core': 1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)
'@better-auth/utils': 0.4.1
'@better-fetch/fetch': 1.2.2
'@simplewebauthn/browser': 13.3.0
'@simplewebauthn/server': 13.3.1
better-auth: 1.6.16(@cloudflare/workers-types@4.20260610.1)(vitest@3.2.6)
better-call: 1.3.6(zod@4.4.3)
nanostores: 1.3.0
zod: 4.4.3
'@better-auth/prisma-adapter@1.6.16(@better-auth/core@1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0))(@better-auth/utils@0.4.1)':
dependencies:
'@better-auth/core': 1.6.16(@better-auth/utils@0.4.1)(@better-fetch/fetch@1.2.2)(@cloudflare/workers-types@4.20260610.1)(better-call@1.3.6(zod@4.4.3))(jose@6.2.3)(kysely@0.29.2)(nanostores@1.3.0)
@@ -1492,6 +1591,8 @@ snapshots:
'@esbuild/win32-x64@0.27.7':
optional: true
'@hexagon/base64@1.1.28': {}
'@img/colour@1.1.0': {}
'@img/sharp-darwin-arm64@0.34.5':
@@ -1597,12 +1698,114 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@levischuck/tiny-cbor@0.2.11': {}
'@noble/ciphers@2.2.0': {}
'@noble/hashes@2.2.0': {}
'@opentelemetry/semantic-conventions@1.41.1': {}
'@peculiar/asn1-android@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-cms@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
'@peculiar/asn1-x509-attr': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-csr@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-ecc@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-pfx@2.7.0':
dependencies:
'@peculiar/asn1-cms': 2.7.0
'@peculiar/asn1-pkcs8': 2.7.0
'@peculiar/asn1-rsa': 2.7.0
'@peculiar/asn1-schema': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-pkcs8@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-pkcs9@2.7.0':
dependencies:
'@peculiar/asn1-cms': 2.7.0
'@peculiar/asn1-pfx': 2.7.0
'@peculiar/asn1-pkcs8': 2.7.0
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
'@peculiar/asn1-x509-attr': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-rsa@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-schema@2.7.0':
dependencies:
'@peculiar/utils': 2.0.3
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-x509-attr@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/asn1-x509@2.7.0':
dependencies:
'@peculiar/asn1-schema': 2.7.0
'@peculiar/utils': 2.0.3
asn1js: 3.0.10
tslib: 2.8.1
'@peculiar/utils@2.0.3':
dependencies:
tslib: 2.8.1
'@peculiar/x509@1.14.3':
dependencies:
'@peculiar/asn1-cms': 2.7.0
'@peculiar/asn1-csr': 2.7.0
'@peculiar/asn1-ecc': 2.7.0
'@peculiar/asn1-pkcs9': 2.7.0
'@peculiar/asn1-rsa': 2.7.0
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
pvtsutils: 1.3.6
reflect-metadata: 0.2.2
tslib: 2.8.1
tsyringe: 4.10.0
'@poppinss/colors@4.1.6':
dependencies:
kleur: 4.1.5
@@ -1690,6 +1893,19 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.61.1':
optional: true
'@simplewebauthn/browser@13.3.0': {}
'@simplewebauthn/server@13.3.1':
dependencies:
'@hexagon/base64': 1.1.28
'@levischuck/tiny-cbor': 0.2.11
'@peculiar/asn1-android': 2.7.0
'@peculiar/asn1-ecc': 2.7.0
'@peculiar/asn1-rsa': 2.7.0
'@peculiar/asn1-schema': 2.7.0
'@peculiar/asn1-x509': 2.7.0
'@peculiar/x509': 1.14.3
'@sindresorhus/is@7.2.0': {}
'@speed-highlight/core@1.2.16': {}
@@ -1747,6 +1963,12 @@ snapshots:
loupe: 3.2.1
tinyrainbow: 2.0.0
asn1js@3.0.10:
dependencies:
pvtsutils: 1.3.6
pvutils: 1.1.5
tslib: 2.8.1
assertion-error@2.0.1: {}
better-auth@1.6.16(@cloudflare/workers-types@4.20260610.1)(vitest@3.2.6):
@@ -1934,6 +2156,14 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
pvtsutils@1.3.6:
dependencies:
tslib: 2.8.1
pvutils@1.1.5: {}
reflect-metadata@0.2.2: {}
rollup@4.61.1:
dependencies:
'@types/estree': 1.0.9
@@ -2031,8 +2261,13 @@ snapshots:
tinyspy@4.0.4: {}
tslib@2.8.1:
optional: true
tslib@1.14.1: {}
tslib@2.8.1: {}
tsyringe@4.10.0:
dependencies:
tslib: 1.14.1
typescript@5.9.3: {}