export type PasskeyWall = "google" | "microsoft";
const GOOGLE_CHALLENGE = /^\/(?:v\d+\/)?signin\/(?:v\d+\/)?challenge\/(?:pk|sk)(?:\/|$)/u;
export function passkeyWallAt(address: string): PasskeyWall | null {
let url: URL;
try { url = new URL(address); } catch { return null; }
return url.hostname === "accounts.google.com" && GOOGLE_CHALLENGE.test(url.pathname) ? "google" : null;
}
const GOOGLE_ADDRESS = /https:\/\/accounts\.google\.com(\/[^\s"'?#)]*)/gu;
const GOOGLE_WORDS = /\buse your passkey\b|\busing your passkey\b|verifying it(?:'|’)s you[\s\S]{0,400}\bpasskey\b|\buse sua chave de acesso\b|\busando sua chave de acesso\b|\busa tu llave de acceso\b|\busando tu llave de acceso\b/iu;
const GOOGLE_PAGE = /\bGoogle\b|accounts\.google\.com/u;
const MICROSOFT_WORDS = /\bsign in with your passkey\b|\buse your passkey\b|\bsign in with your face, fingerprint, PIN,? or security key\b/iu;
const MICROSOFT_PAGE = /login\.(?:microsoftonline|live)\.com|\bMicrosoft\b/u;
export function passkeyWallIn(text: string): PasskeyWall | null {
for (const match of text.matchAll(GOOGLE_ADDRESS)) if (GOOGLE_CHALLENGE.test(match[1] ?? "")) return "google";
if (GOOGLE_WORDS.test(text) && GOOGLE_PAGE.test(text)) return "google";
if (MICROSOFT_WORDS.test(text) && MICROSOFT_PAGE.test(text)) return "microsoft";
return null;
}