From 36584014ae56119bf7b41cde1ce71ae1147096dd Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Fri, 13 Feb 2026 07:43:05 -0700 Subject: [PATCH] fix: ArrayBuffer type casts for WebAuthn ceremony in TS 5.x Uint8Array.buffer returns ArrayBufferLike which is incompatible with PublicKeyCredentialCreationOptions/RequestOptions in strict mode. Co-Authored-By: Claude Opus 4.6 --- src/app/auth/signin/page.tsx | 4 ++-- src/app/auth/signup/page.tsx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/auth/signin/page.tsx b/src/app/auth/signin/page.tsx index 9ee9e62..eaf2659 100644 --- a/src/app/auth/signin/page.tsx +++ b/src/app/auth/signin/page.tsx @@ -64,13 +64,13 @@ function SignInForm() { const challenge = Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)); const publicKeyOptions: PublicKeyCredentialRequestOptions = { - challenge, + challenge: challenge.buffer as ArrayBuffer, rpId: options.rpId, userVerification: options.userVerification as UserVerificationRequirement, timeout: options.timeout, allowCredentials: options.allowCredentials?.map((c: { type: string; id: string; transports?: string[] }) => ({ type: c.type as PublicKeyCredentialType, - id: Uint8Array.from(atob(c.id.replace(/-/g, "+").replace(/_/g, "/")), ch => ch.charCodeAt(0)), + id: Uint8Array.from(atob(c.id.replace(/-/g, "+").replace(/_/g, "/")), ch => ch.charCodeAt(0)).buffer as ArrayBuffer, transports: c.transports as AuthenticatorTransport[], })), }; diff --git a/src/app/auth/signup/page.tsx b/src/app/auth/signup/page.tsx index 3e2eb27..855ea80 100644 --- a/src/app/auth/signup/page.tsx +++ b/src/app/auth/signup/page.tsx @@ -94,10 +94,10 @@ export default function SignUpPage() { } const publicKeyOptions: PublicKeyCredentialCreationOptions = { - challenge: fromBase64url(options.challenge), + challenge: fromBase64url(options.challenge).buffer as ArrayBuffer, rp: options.rp, user: { - id: fromBase64url(options.user.id), + id: fromBase64url(options.user.id).buffer as ArrayBuffer, name: options.user.name, displayName: options.user.displayName, },